Patch Detail
Show a patch.
GET /api/patches/13545/?format=api
{ "id": 13545, "url": "https://patchwork.libcamera.org/api/patches/13545/?format=api", "web_url": "https://patchwork.libcamera.org/patch/13545/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/projects/1/?format=api", "name": "libcamera", "link_name": "libcamera", "list_id": "libcamera_core", "list_email": "libcamera-devel@lists.libcamera.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20210827120757.110615-2-jacopo@jmondi.org>", "date": "2021-08-27T12:07:42", "name": "[libcamera-devel,01/16] libcamera: ipu3: Use the optimal sensor size", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "262e66bcf7a2e63b29584c76a48a2abe0c6f71b2", "submitter": { "id": 3, "url": "https://patchwork.libcamera.org/api/people/3/?format=api", "name": "Jacopo Mondi", "email": "jacopo@jmondi.org" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/13545/mbox/", "series": [ { "id": 2410, "url": "https://patchwork.libcamera.org/api/series/2410/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=2410", "date": "2021-08-27T12:07:41", "name": "IPU3 control info update and HAL frame durations", "version": 1, "mbox": "https://patchwork.libcamera.org/series/2410/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/13545/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/13545/checks/", "tags": {}, "headers": { "Return-Path": "<libcamera-devel-bounces@lists.libcamera.org>", "X-Original-To": "parsemail@patchwork.libcamera.org", "Delivered-To": "parsemail@patchwork.libcamera.org", "Received": [ "from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 65803BD87D\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 27 Aug 2021 12:07:16 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 21EC66893C;\n\tFri, 27 Aug 2021 14:07:16 +0200 (CEST)", "from relay7-d.mail.gandi.net (relay7-d.mail.gandi.net\n\t[217.70.183.200])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D30A16890C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 27 Aug 2021 14:07:13 +0200 (CEST)", "(Authenticated sender: jacopo@jmondi.org)\n\tby relay7-d.mail.gandi.net (Postfix) with ESMTPSA id 1C12E2000A;\n\tFri, 27 Aug 2021 12:07:12 +0000 (UTC)" ], "From": "Jacopo Mondi <jacopo@jmondi.org>", "To": "libcamera-devel@lists.libcamera.org", "Date": "Fri, 27 Aug 2021 14:07:42 +0200", "Message-Id": "<20210827120757.110615-2-jacopo@jmondi.org>", "X-Mailer": "git-send-email 2.32.0", "In-Reply-To": "<20210827120757.110615-1-jacopo@jmondi.org>", "References": "<20210827120757.110615-1-jacopo@jmondi.org>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Subject": "[libcamera-devel] [PATCH 01/16] libcamera: ipu3: Use the optimal\n\tsensor size", "X-BeenThere": "libcamera-devel@lists.libcamera.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "<libcamera-devel.lists.libcamera.org>", "List-Unsubscribe": "<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>", "List-Archive": "<https://lists.libcamera.org/pipermail/libcamera-devel/>", "List-Post": "<mailto:libcamera-devel@lists.libcamera.org>", "List-Help": "<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>", "List-Subscribe": "<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>", "Errors-To": "libcamera-devel-bounces@lists.libcamera.org", "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>" }, "content": "As reported by commit 7208e70211a6 (\"libcamera: ipu3: Always use sensor\nfull frame size\") the current implementation of the IPU3 pipeline\nhandler always use the sensor resolution as the ImgU input frame size in\norder to work around an issue with the ImgU configuration procedure.\n\nNow that the frame selection policy has been modified in the CIO2Device\nclass implementation to comply with the requirements of the ImgU\nconfiguration script we can remove the workaround and select the most\nopportune sensor size to feed the ImgU with.\n\nSigned-off-by: Jacopo Mondi <jacopo@jmondi.org>\n---\n src/libcamera/pipeline/ipu3/ipu3.cpp | 38 ++++++++++++++--------------\n 1 file changed, 19 insertions(+), 19 deletions(-)", "diff": "diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\nindex c287bf86e79a..b321c94e9cb0 100644\n--- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n@@ -229,7 +229,16 @@ CameraConfiguration::Status IPU3CameraConfiguration::validate()\n \t\tstatus = Adjusted;\n \t}\n \n-\t/* Validate the requested stream configuration */\n+\t/*\n+\t * Validate the requested stream configuration and select the sensor\n+\t * format by collecting the maximum RAW stream width and height and\n+\t * picking the closest larger match.\n+\t *\n+\t * If no RAW stream is requested use the one of the largest YUV stream,\n+\t * plus margin pixels for the IF and BDS rectangle to downscale.\n+\t *\n+\t * \\todo Clarify the IF and BDS margins requirements.\n+\t */\n \tunsigned int rawCount = 0;\n \tunsigned int yuvCount = 0;\n \tSize maxYuvSize;\n@@ -240,7 +249,7 @@ CameraConfiguration::Status IPU3CameraConfiguration::validate()\n \n \t\tif (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW) {\n \t\t\trawCount++;\n-\t\t\trawSize = cfg.size;\n+\t\t\trawSize.expandTo(cfg.size);\n \t\t} else {\n \t\t\tyuvCount++;\n \t\t\tmaxYuvSize.expandTo(cfg.size);\n@@ -269,24 +278,15 @@ CameraConfiguration::Status IPU3CameraConfiguration::validate()\n \t/*\n \t * Generate raw configuration from CIO2.\n \t *\n-\t * \\todo The image sensor frame size should be selected to optimize\n-\t * operations based on the sizes of the requested streams. However such\n-\t * a selection makes the pipeline configuration procedure fail for small\n-\t * resolutions (for example: 640x480 with OV5670) and causes the capture\n-\t * operations to stall for some stream size combinations (see the\n-\t * commit message of the patch that introduced this comment for more\n-\t * failure examples).\n-\t *\n-\t * Until the sensor frame size calculation criteria are clarified, when\n-\t * capturing from ImgU always use the largest possible size which\n-\t * guarantees better results at the expense of the frame rate and CSI-2\n-\t * bus bandwidth. When only a raw stream is requested use the requested\n-\t * size instead, as the ImgU is not involved.\n+\t * The output YUV streams will be limited in size to the\n+\t * maximum frame size requested for the RAW stream.\n \t */\n-\tif (!yuvCount)\n-\t\tcio2Configuration_ = data_->cio2_.generateConfiguration(rawSize);\n-\telse\n-\t\tcio2Configuration_ = data_->cio2_.generateConfiguration({});\n+\tif (rawSize.isNull())\n+\t\trawSize = maxYuvSize.alignedUpTo(40, 540)\n+\t\t\t\t .alignedUpTo(IMGU_OUTPUT_WIDTH_MARGIN,\n+\t\t\t\t\t\t IMGU_OUTPUT_HEIGHT_MARGIN)\n+\t\t\t\t .boundedTo(data_->cio2_.sensor()->resolution());\n+\tcio2Configuration_ = data_->cio2_.generateConfiguration(rawSize);\n \tif (!cio2Configuration_.pixelFormat.isValid())\n \t\treturn Invalid;\n \n", "prefixes": [ "libcamera-devel", "01/16" ] }