[{"id":17694,"web_url":"https://patchwork.libcamera.org/comment/17694/","msgid":"<20210622105533.elzzlbtiyjwefbw5@uno.localdomain>","date":"2021-06-22T10:55:33","subject":"Re: [libcamera-devel] [RFC PATCH v2 5/5] android: camera_device:\n\tPropagate the requested test pattern mode","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Hiro,\n\nOn Tue, Jun 22, 2021 at 11:36:54AM +0900, Hirokazu Honda wrote:\n> Propagate the requested test pattern mode to libcamera::Camera\n> through libcamera::Request and also set the android metadata to\n> the test pattern mode contained by the complete Request.\n>\n> Signed-off-by: Hirokazu Honda <hiroh@chromium.org>\n\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n  j\n\n> ---\n>  src/android/camera_device.cpp | 50 ++++++++++++++++++++++++++++++++++-\n>  1 file changed, 49 insertions(+), 1 deletion(-)\n>\n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index 8c71fd06..5c2100ad 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -1933,16 +1933,57 @@ int CameraDevice::processControls(Camera3RequestDescriptor *descriptor)\n>  \t\treturn 0;\n>\n>  \t/* Translate the Android request settings to libcamera controls. */\n> +\tControlList &controls = descriptor->request_->controls();\n>  \tcamera_metadata_ro_entry_t entry;\n>  \tif (settings.getEntry(ANDROID_SCALER_CROP_REGION, &entry)) {\n>  \t\tconst int32_t *data = entry.data.i32;\n>  \t\tRectangle cropRegion{ data[0], data[1],\n>  \t\t\t\t      static_cast<unsigned int>(data[2]),\n>  \t\t\t\t      static_cast<unsigned int>(data[3]) };\n> -\t\tControlList &controls = descriptor->request_->controls();\n>  \t\tcontrols.set(controls::ScalerCrop, cropRegion);\n>  \t}\n>\n> +\tif (settings.getEntry(ANDROID_SENSOR_TEST_PATTERN_MODE, &entry)) {\n> +\t\tconst int32_t data = *entry.data.i32;\n> +\t\tswitch (data) {\n> +\t\tcase ANDROID_SENSOR_TEST_PATTERN_MODE_OFF:\n> +\t\t\tcontrols.set(controls::draft::TestPatternMode,\n> +\t\t\t\t     controls::draft::TestPatternModeOff);\n> +\t\t\tbreak;\n> +\n> +\t\tcase ANDROID_SENSOR_TEST_PATTERN_MODE_SOLID_COLOR:\n> +\t\t\tcontrols.set(controls::draft::TestPatternMode,\n> +\t\t\t\t     controls::draft::TestPatternModeSolidColor);\n> +\t\t\tbreak;\n> +\n> +\t\tcase ANDROID_SENSOR_TEST_PATTERN_MODE_COLOR_BARS:\n> +\t\t\tcontrols.set(controls::draft::TestPatternMode,\n> +\t\t\t\t     controls::draft::TestPatternModeColorBars);\n> +\t\t\tbreak;\n> +\n> +\t\tcase ANDROID_SENSOR_TEST_PATTERN_MODE_COLOR_BARS_FADE_TO_GRAY:\n> +\t\t\tcontrols.set(controls::draft::TestPatternMode,\n> +\t\t\t\t     controls::draft::TestPatternModeColorBarsFadeToGray);\n> +\t\t\tbreak;\n> +\n> +\t\tcase ANDROID_SENSOR_TEST_PATTERN_MODE_PN9:\n> +\t\t\tcontrols.set(controls::draft::TestPatternMode,\n> +\t\t\t\t     controls::draft::TestPatternModePn9);\n> +\t\t\tbreak;\n> +\n> +\t\tcase ANDROID_SENSOR_TEST_PATTERN_MODE_CUSTOM1:\n> +\t\t\tcontrols.set(controls::draft::TestPatternMode,\n> +\t\t\t\t     controls::draft::TestPatternModeCustom1);\n> +\t\t\tbreak;\n> +\n> +\t\tdefault:\n> +\t\t\tLOG(HAL, Error)\n> +\t\t\t\t<< \"Unknown test pattern mode: \" << data;\n> +\n> +\t\t\treturn -EINVAL;\n> +\t\t}\n> +\t}\n> +\n>  \treturn 0;\n>  }\n>\n> @@ -2429,6 +2470,13 @@ CameraDevice::getResultMetadata(const Camera3RequestDescriptor &descriptor) cons\n>  \t\tresultMetadata->addEntry(ANDROID_SCALER_CROP_REGION, cropRect);\n>  \t}\n>\n> +\tif (metadata.contains(controls::draft::TestPatternMode)) {\n> +\t\tconst int32_t testPatternMode =\n> +\t\t\tmetadata.get(controls::draft::TestPatternMode);\n> +\t\tresultMetadata->addEntry(ANDROID_SENSOR_TEST_PATTERN_MODE,\n> +\t\t\t\t\t testPatternMode);\n> +\t}\n> +\n>  \t/*\n>  \t * Return the result metadata pack even is not valid: get() will return\n>  \t * nullptr.\n> --\n> 2.32.0.288.g62a8d224e6-goog\n>","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 46A6CC321B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 22 Jun 2021 10:54:47 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 71B8C68932;\n\tTue, 22 Jun 2021 12:54:46 +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 C5A9660292\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 22 Jun 2021 12:54:44 +0200 (CEST)","(Authenticated sender: jacopo@jmondi.org)\n\tby relay7-d.mail.gandi.net (Postfix) with ESMTPSA id 03FDF20006;\n\tTue, 22 Jun 2021 10:54:43 +0000 (UTC)"],"Date":"Tue, 22 Jun 2021 12:55:33 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Hirokazu Honda <hiroh@chromium.org>","Message-ID":"<20210622105533.elzzlbtiyjwefbw5@uno.localdomain>","References":"<20210622023654.969162-1-hiroh@chromium.org>\n\t<20210622023654.969162-5-hiroh@chromium.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20210622023654.969162-5-hiroh@chromium.org>","Subject":"Re: [libcamera-devel] [RFC PATCH v2 5/5] android: camera_device:\n\tPropagate the requested test pattern mode","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>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":17846,"web_url":"https://patchwork.libcamera.org/comment/17846/","msgid":"<YNlFIX7mLwhxXdcs@pendragon.ideasonboard.com>","date":"2021-06-28T03:42:25","subject":"Re: [libcamera-devel] [RFC PATCH v2 5/5] android: camera_device:\n\tPropagate the requested test pattern mode","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Hiro,\n\nThank you for the patch.\n\nOn Tue, Jun 22, 2021 at 11:36:54AM +0900, Hirokazu Honda wrote:\n> Propagate the requested test pattern mode to libcamera::Camera\n> through libcamera::Request and also set the android metadata to\n> the test pattern mode contained by the complete Request.\n> \n> Signed-off-by: Hirokazu Honda <hiroh@chromium.org>\n> ---\n>  src/android/camera_device.cpp | 50 ++++++++++++++++++++++++++++++++++-\n>  1 file changed, 49 insertions(+), 1 deletion(-)\n> \n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index 8c71fd06..5c2100ad 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -1933,16 +1933,57 @@ int CameraDevice::processControls(Camera3RequestDescriptor *descriptor)\n>  \t\treturn 0;\n>  \n>  \t/* Translate the Android request settings to libcamera controls. */\n> +\tControlList &controls = descriptor->request_->controls();\n>  \tcamera_metadata_ro_entry_t entry;\n>  \tif (settings.getEntry(ANDROID_SCALER_CROP_REGION, &entry)) {\n>  \t\tconst int32_t *data = entry.data.i32;\n>  \t\tRectangle cropRegion{ data[0], data[1],\n>  \t\t\t\t      static_cast<unsigned int>(data[2]),\n>  \t\t\t\t      static_cast<unsigned int>(data[3]) };\n> -\t\tControlList &controls = descriptor->request_->controls();\n>  \t\tcontrols.set(controls::ScalerCrop, cropRegion);\n>  \t}\n>  \n> +\tif (settings.getEntry(ANDROID_SENSOR_TEST_PATTERN_MODE, &entry)) {\n> +\t\tconst int32_t data = *entry.data.i32;\n> +\t\tswitch (data) {\n> +\t\tcase ANDROID_SENSOR_TEST_PATTERN_MODE_OFF:\n> +\t\t\tcontrols.set(controls::draft::TestPatternMode,\n> +\t\t\t\t     controls::draft::TestPatternModeOff);\n> +\t\t\tbreak;\n> +\n> +\t\tcase ANDROID_SENSOR_TEST_PATTERN_MODE_SOLID_COLOR:\n> +\t\t\tcontrols.set(controls::draft::TestPatternMode,\n> +\t\t\t\t     controls::draft::TestPatternModeSolidColor);\n> +\t\t\tbreak;\n> +\n> +\t\tcase ANDROID_SENSOR_TEST_PATTERN_MODE_COLOR_BARS:\n> +\t\t\tcontrols.set(controls::draft::TestPatternMode,\n> +\t\t\t\t     controls::draft::TestPatternModeColorBars);\n> +\t\t\tbreak;\n> +\n> +\t\tcase ANDROID_SENSOR_TEST_PATTERN_MODE_COLOR_BARS_FADE_TO_GRAY:\n> +\t\t\tcontrols.set(controls::draft::TestPatternMode,\n> +\t\t\t\t     controls::draft::TestPatternModeColorBarsFadeToGray);\n> +\t\t\tbreak;\n> +\n> +\t\tcase ANDROID_SENSOR_TEST_PATTERN_MODE_PN9:\n> +\t\t\tcontrols.set(controls::draft::TestPatternMode,\n> +\t\t\t\t     controls::draft::TestPatternModePn9);\n> +\t\t\tbreak;\n> +\n> +\t\tcase ANDROID_SENSOR_TEST_PATTERN_MODE_CUSTOM1:\n> +\t\t\tcontrols.set(controls::draft::TestPatternMode,\n> +\t\t\t\t     controls::draft::TestPatternModeCustom1);\n\nAs ControlList::set() is an inline function, it would be move efficient\nto declare a local variable to set the mode, and have a single\ncontrols.set() call after the switch.\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> +\t\t\tbreak;\n> +\n> +\t\tdefault:\n> +\t\t\tLOG(HAL, Error)\n> +\t\t\t\t<< \"Unknown test pattern mode: \" << data;\n> +\n> +\t\t\treturn -EINVAL;\n> +\t\t}\n> +\t}\n> +\n>  \treturn 0;\n>  }\n>  \n> @@ -2429,6 +2470,13 @@ CameraDevice::getResultMetadata(const Camera3RequestDescriptor &descriptor) cons\n>  \t\tresultMetadata->addEntry(ANDROID_SCALER_CROP_REGION, cropRect);\n>  \t}\n>  \n> +\tif (metadata.contains(controls::draft::TestPatternMode)) {\n> +\t\tconst int32_t testPatternMode =\n> +\t\t\tmetadata.get(controls::draft::TestPatternMode);\n> +\t\tresultMetadata->addEntry(ANDROID_SENSOR_TEST_PATTERN_MODE,\n> +\t\t\t\t\t testPatternMode);\n> +\t}\n> +\n>  \t/*\n>  \t * Return the result metadata pack even is not valid: get() will return\n>  \t * nullptr.","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 59DCCC321D\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 28 Jun 2021 03:42:29 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 99B07684D5;\n\tMon, 28 Jun 2021 05:42:28 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 5FADE6028C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 28 Jun 2021 05:42:27 +0200 (CEST)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id C7E9957E;\n\tMon, 28 Jun 2021 05:42:26 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"L/7pKUxB\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1624851747;\n\tbh=evnCK+MeqX0Xnvm5iMiaDe3L3T4N7OKO0UKd2UGWzxk=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=L/7pKUxBkFCouDnMlOhR7YanVDGNloKkiwU8pB1RG5Ea4TYOB3PFM9fkY1jf7gQr5\n\t2Wd8NXG90iqX/ZCrUq0n4v1SgBSqhOoT6j2H5OgYCY1dqM9D0FPERwkp8mw/xrLdVi\n\tu34IluPc3Vi20m1f4Y7ut0cRelBpVCpU4jkiA+Nk=","Date":"Mon, 28 Jun 2021 06:42:25 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Hirokazu Honda <hiroh@chromium.org>","Message-ID":"<YNlFIX7mLwhxXdcs@pendragon.ideasonboard.com>","References":"<20210622023654.969162-1-hiroh@chromium.org>\n\t<20210622023654.969162-5-hiroh@chromium.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20210622023654.969162-5-hiroh@chromium.org>","Subject":"Re: [libcamera-devel] [RFC PATCH v2 5/5] android: camera_device:\n\tPropagate the requested test pattern mode","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>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]