Patch Detail
Show a patch.
GET /api/1.1/patches/18425/?format=api
{ "id": 18425, "url": "https://patchwork.libcamera.org/api/1.1/patches/18425/?format=api", "web_url": "https://patchwork.libcamera.org/patch/18425/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/1.1/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": "<20230321172004.176852-4-jacopo.mondi@ideasonboard.com>", "date": "2023-03-21T17:20:03", "name": "[libcamera-devel,v4,3/4] libcamera: rkisp1: Assign sizes to roles", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "71a65ed8c72ddac32ec1079da27c4b00aff9d3de", "submitter": { "id": 143, "url": "https://patchwork.libcamera.org/api/1.1/people/143/?format=api", "name": "Jacopo Mondi", "email": "jacopo.mondi@ideasonboard.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/18425/mbox/", "series": [ { "id": 3809, "url": "https://patchwork.libcamera.org/api/1.1/series/3809/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=3809", "date": "2023-03-21T17:20:00", "name": "libcamera: rkisp1: Fix generateConfiguration", "version": 4, "mbox": "https://patchwork.libcamera.org/series/3809/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/18425/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/18425/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 2E6F5C329C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 21 Mar 2023 17:20:18 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C62066271E;\n\tTue, 21 Mar 2023 18:20:17 +0100 (CET)", "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 6F18261ED1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 21 Mar 2023 18:20:14 +0100 (CET)", "from uno.homenet.telecomitalia.it\n\t(host-87-18-61-243.retail.telecomitalia.it [87.18.61.243])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 46FD0DA8;\n\tTue, 21 Mar 2023 18:20:13 +0100 (CET)" ], "DKIM-Signature": [ "v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1679419217;\n\tbh=+NIqEIfsq6j/ZMOL7KzBIuZmUaw/ieFiCyln2kkNznI=;\n\th=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=prn/N/go+HLEQ1XeLOP1f36qMKExgJSEcq83wIYdBXC1UxmR+RGnr8zTyf6ADMQZX\n\tnvS1Zj9BKd5mnlXP12ET+Upx48Igg0Pu8iXNyBtW3s321qO2ZQ5EYjKqb9tTtLaP4T\n\tsMxy+8OuXJXQpB4CDqjwDCRWKp665ccXK8J8D5ciJ08TH/F+fQ56GlhBCmYc9TLyMt\n\tiaxArJyDsHgHwqK7lHmQr6hEL/dJqwkaYRGvruvsWvbg9ZE/ceurHiP9kePYTtpIBd\n\tOkB5HO7BULabXFQcQYXjClURLIOBPDNPhysTYjthL+EjicFfhCTMYNECdbCHXUV1tP\n\tsqkdxSXy6Abcw==", "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1679419213;\n\tbh=+NIqEIfsq6j/ZMOL7KzBIuZmUaw/ieFiCyln2kkNznI=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=dLJdQTarH+bNOpNKkFMOc3AZsxIxK4yi3oIsBBu++Et3pxeXL4VllrWN3JuUe5MZs\n\tdO2Wc2ZWeJ6Dmfx3/AUq4w/UUq1qXu+xcw3yn0QiTe5SLWkALrW7Xm4gn29WTFusx3\n\tbgSpCIREilbC83E+/wheDjo9MBp7HqaPwDx3iUew=" ], "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"dLJdQTar\"; dkim-atps=neutral", "To": "libcamera-devel@lists.libcamera.org", "Date": "Tue, 21 Mar 2023 18:20:03 +0100", "Message-Id": "<20230321172004.176852-4-jacopo.mondi@ideasonboard.com>", "X-Mailer": "git-send-email 2.40.0", "In-Reply-To": "<20230321172004.176852-1-jacopo.mondi@ideasonboard.com>", "References": "<20230321172004.176852-1-jacopo.mondi@ideasonboard.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Subject": "[libcamera-devel] [PATCH v4 3/4] libcamera: rkisp1: Assign sizes to\n\troles", "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>", "From": "Jacopo Mondi via libcamera-devel <libcamera-devel@lists.libcamera.org>", "Reply-To": "Jacopo Mondi <jacopo.mondi@ideasonboard.com>", "Cc": "Jacopo Mondi <jacopo.mondi@ideasonboard.com>, libcamera@luigi311.com", "Errors-To": "libcamera-devel-bounces@lists.libcamera.org", "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>" }, "content": "Currently each RkISP1 path (main and self) generate a configuration\nby bounding the sensor's resolution to their respective maximum output\naspect ratio and size.\n\n\tSize maxResolution = maxResolution_.boundedToAspectRatio(resolution)\n\t\t\t\t\t .boundedTo(resolution);\n\nIn the case of self path, whose maximum size is 1920x1920, the generated\nconfiguration could get assigned unusual sizes, as the result of the\nabove operation\n\nAs an example, with the imx258 sensor whose resolution is 4208x3118, the\nresulting size for the Viewfinder use case is an unusual 1920x1423.\n\nFix this by assigning to each role a desired output size:\n- Use the sensor's resolution for StillCapture and Raw\n- Use 1080p for Viewfinder and VideoRecording\n\nSigned-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\nReviewed-by: Paul Elder <paul.elder@ideasonboard.com>\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n---\n src/libcamera/pipeline/rkisp1/rkisp1.cpp | 12 +++++++++++-\n src/libcamera/pipeline/rkisp1/rkisp1_path.cpp | 10 ++++++++--\n src/libcamera/pipeline/rkisp1/rkisp1_path.h | 1 +\n 3 files changed, 20 insertions(+), 3 deletions(-)", "diff": "diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\nindex fd331168af80..5ae25a244408 100644\n--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n@@ -162,6 +162,8 @@ public:\n \tbool match(DeviceEnumerator *enumerator) override;\n \n private:\n+\tstatic constexpr Size kRkISP1PreviewSize = { 1920, 1080 };\n+\n \tRkISP1CameraData *cameraData(Camera *camera)\n \t{\n \t\treturn static_cast<RkISP1CameraData *>(camera->_d());\n@@ -633,12 +635,15 @@ PipelineHandlerRkISP1::generateConfiguration(Camera *camera,\n \tbool mainPathAvailable = true;\n \n \tfor (const StreamRole role : roles) {\n+\t\tSize size;\n \n \t\tswitch (role) {\n \t\tcase StreamRole::StillCapture:\n \t\t\t/* JPEG encoders typically expect sYCC. */\n \t\t\tif (!colorSpace)\n \t\t\t\tcolorSpace = ColorSpace::Sycc;\n+\n+\t\t\tsize = data->sensor_->resolution();\n \t\t\tbreak;\n \n \t\tcase StreamRole::Viewfinder:\n@@ -648,12 +653,16 @@ PipelineHandlerRkISP1::generateConfiguration(Camera *camera,\n \t\t\t */\n \t\t\tif (!colorSpace)\n \t\t\t\tcolorSpace = ColorSpace::Sycc;\n+\n+\t\t\tsize = kRkISP1PreviewSize;\n \t\t\tbreak;\n \n \t\tcase StreamRole::VideoRecording:\n \t\t\t/* Rec. 709 is a good default for HD video recording. */\n \t\t\tif (!colorSpace)\n \t\t\t\tcolorSpace = ColorSpace::Rec709;\n+\n+\t\t\tsize = kRkISP1PreviewSize;\n \t\t\tbreak;\n \n \t\tcase StreamRole::Raw:\n@@ -664,6 +673,7 @@ PipelineHandlerRkISP1::generateConfiguration(Camera *camera,\n \t\t\t}\n \n \t\t\tcolorSpace = ColorSpace::Raw;\n+\t\t\tsize = data->sensor_->resolution();\n \t\t\tbreak;\n \n \t\tdefault:\n@@ -682,7 +692,7 @@ PipelineHandlerRkISP1::generateConfiguration(Camera *camera,\n \t\t}\n \n \t\tStreamConfiguration cfg =\n-\t\t\tpath->generateConfiguration(data->sensor_.get(), role);\n+\t\t\tpath->generateConfiguration(data->sensor_.get(), size, role);\n \t\tif (!cfg.pixelFormat.isValid())\n \t\t\treturn nullptr;\n \ndiff --git a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp\nindex 5547cc32b6ca..cca593b84260 100644\n--- a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp\n+++ b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp\n@@ -127,15 +127,21 @@ void RkISP1Path::populateFormats()\n }\n \n StreamConfiguration\n-RkISP1Path::generateConfiguration(const CameraSensor *sensor, StreamRole role)\n+RkISP1Path::generateConfiguration(const CameraSensor *sensor,\n+\t\t\t\t const Size &size,\n+\t\t\t\t StreamRole role)\n {\n \tconst std::vector<unsigned int> &mbusCodes = sensor->mbusCodes();\n \tconst Size &resolution = sensor->resolution();\n \n+\t/* Min and max resolutions to populate the available stream formats. */\n \tSize maxResolution = maxResolution_.boundedToAspectRatio(resolution)\n \t\t\t\t\t .boundedTo(resolution);\n \tSize minResolution = minResolution_.expandedToAspectRatio(resolution);\n \n+\t/* The desired stream size, bound to the max resolution. */\n+\tSize streamSize = size.boundedTo(maxResolution);\n+\n \t/* Create the list of supported stream formats. */\n \tstd::map<PixelFormat, std::vector<SizeRange>> streamFormats;\n \tunsigned int rawBitsPerPixel = 0;\n@@ -189,7 +195,7 @@ RkISP1Path::generateConfiguration(const CameraSensor *sensor, StreamRole role)\n \tStreamFormats formats(streamFormats);\n \tStreamConfiguration cfg(formats);\n \tcfg.pixelFormat = format;\n-\tcfg.size = maxResolution;\n+\tcfg.size = streamSize;\n \tcfg.bufferCount = RKISP1_BUFFER_COUNT;\n \n \treturn cfg;\ndiff --git a/src/libcamera/pipeline/rkisp1/rkisp1_path.h b/src/libcamera/pipeline/rkisp1/rkisp1_path.h\nindex bdf3f95b95e1..cd77957ee4a6 100644\n--- a/src/libcamera/pipeline/rkisp1/rkisp1_path.h\n+++ b/src/libcamera/pipeline/rkisp1/rkisp1_path.h\n@@ -41,6 +41,7 @@ public:\n \tbool isEnabled() const { return link_->flags() & MEDIA_LNK_FL_ENABLED; }\n \n \tStreamConfiguration generateConfiguration(const CameraSensor *sensor,\n+\t\t\t\t\t\t const Size &resolution,\n \t\t\t\t\t\t StreamRole role);\n \tCameraConfiguration::Status validate(const CameraSensor *sensor,\n \t\t\t\t\t StreamConfiguration *cfg);\n", "prefixes": [ "libcamera-devel", "v4", "3/4" ] }