[{"id":17295,"web_url":"https://patchwork.libcamera.org/comment/17295/","msgid":"<20210526212528.4jitdctbwvmqigqm@uno.localdomain>","date":"2021-05-26T21:25:28","subject":"Re: [libcamera-devel] [PATCH v5 6/6] android: CameraDevice: Report\n\tqueried test pattern modes","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Hiro,\n\nOn Wed, May 19, 2021 at 04:59:41PM +0900, Hirokazu Honda wrote:\n> Report to the Android camera stack the list of supported test\n> pattern modes constructed by inspecting the values reported\n> by libcamera through the controls::draft::TestPatternMode control.\n>\n> Signed-off-by: Hirokazu Honda <hiroh@chromium.org>\n> ---\n>  src/android/camera_device.cpp | 47 ++++++++++++++++++++++++++++++++---\n>  1 file changed, 44 insertions(+), 3 deletions(-)\n>\n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index b32e8be5..a07679a3 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -1035,11 +1035,52 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n>\n>  \tstaticMetadata_->addEntry(ANDROID_SENSOR_ORIENTATION, orientation_);\n>\n> -\tstd::vector<int32_t> testPatterModes = {\n> -\t\tANDROID_SENSOR_TEST_PATTERN_MODE_OFF,\n> +\tstd::vector<int32_t> testPatternModes = {\n> +\t\tANDROID_SENSOR_TEST_PATTERN_MODE_OFF\n>  \t};\n> +\tif (const auto &testPatternsInfo =\n> +\t\t    controlsInfo.find(&controls::draft::TestPatternMode);\n> +\t    testPatternsInfo != controlsInfo.end()) {\n\nIs this intentional ? It compiles as it is legal, I'm surprised\ntestPatternsInfo is visibile in the if() { } block scope.\n\nHonestly, it's kind of unusual, but maybe it's just me. If it compiles\nand it works...\n\n> +\t\tconst auto &values = testPatternsInfo->second.values();\n> +\t\tASSERT(!values.empty());\n> +\t\tfor (const auto &value : values) {\n> +\t\t\tswitch (value.get<int32_t>()) {\n> +\t\t\tcase controls::draft::TestPatternModeOff:\n> +\t\t\t\t/*\n> +\t\t\t\t * ANDROID_SENSOR_TEST_PATTERN_MODE_OFF is\n> +\t\t\t\t * already in testPatternModes.\n> +\t\t\t\t */\n> +\t\t\t\tbreak;\n> +\t\t\tcase controls::draft::TestPatternModeSolidColor:\n> +\t\t\t\ttestPatternModes.push_back(\n> +\t\t\t\t\tANDROID_SENSOR_TEST_PATTERN_MODE_SOLID_COLOR);\n> +\t\t\t\tbreak;\n> +\t\t\tcase controls::draft::TestPatternModeColorBars:\n> +\t\t\t\ttestPatternModes.push_back(\n> +\t\t\t\t\tANDROID_SENSOR_TEST_PATTERN_MODE_COLOR_BARS);\n> +\t\t\t\tbreak;\n> +\t\t\tcase controls::draft::TestPatternModeColorBarsFadeToGray:\n> +\t\t\t\ttestPatternModes.push_back(\n> +\t\t\t\t\tANDROID_SENSOR_TEST_PATTERN_MODE_COLOR_BARS_FADE_TO_GRAY);\n> +\t\t\t\tbreak;\n> +\t\t\tcase controls::draft::TestPatternModePn9:\n> +\t\t\t\ttestPatternModes.push_back(\n> +\t\t\t\t\tANDROID_SENSOR_TEST_PATTERN_MODE_PN9);\n> +\t\t\t\tbreak;\n> +\t\t\tcase controls::draft::TestPatternModeCustom1:\n> +\t\t\t\ttestPatternModes.push_back(\n> +\t\t\t\t\tANDROID_SENSOR_TEST_PATTERN_MODE_CUSTOM1);\n> +\t\t\t\tbreak;\n> +\t\t\tdefault:\n> +\t\t\t\tLOG(HAL, Error)\n> +\t\t\t\t\t<< \"Unknown test pattern mode: \"\n\nDoesn't it fit on the previous line ?\n\nThe patch looks good\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n  j\n\n\n> +\t\t\t\t\t<< value.get<int32_t>();\n> +\t\t\t\tcontinue;\n> +\t\t\t}\n> +\t\t}\n> +\t}\n>  \tstaticMetadata_->addEntry(ANDROID_SENSOR_AVAILABLE_TEST_PATTERN_MODES,\n> -\t\t\t\t  testPatterModes);\n> +\t\t\t\t  testPatternModes);\n>\n>  \tuint8_t timestampSource = ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE_UNKNOWN;\n>  \tstaticMetadata_->addEntry(ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE,\n> --\n> 2.31.1.751.gd2f1c929bd-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 4865BBDB80\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 26 May 2021 21:24:45 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9C3AD68923;\n\tWed, 26 May 2021 23:24:44 +0200 (CEST)","from relay4-d.mail.gandi.net (relay4-d.mail.gandi.net\n\t[217.70.183.196])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 81ACE602B1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 26 May 2021 23:24:43 +0200 (CEST)","(Authenticated sender: jacopo@jmondi.org)\n\tby relay4-d.mail.gandi.net (Postfix) with ESMTPSA id BC41BE0003;\n\tWed, 26 May 2021 21:24:42 +0000 (UTC)"],"Date":"Wed, 26 May 2021 23:25:28 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Hirokazu Honda <hiroh@chromium.org>","Message-ID":"<20210526212528.4jitdctbwvmqigqm@uno.localdomain>","References":"<20210519075941.1337388-1-hiroh@chromium.org>\n\t<20210519075941.1337388-6-hiroh@chromium.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20210519075941.1337388-6-hiroh@chromium.org>","Subject":"Re: [libcamera-devel] [PATCH v5 6/6] android: CameraDevice: Report\n\tqueried test pattern modes","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":17309,"web_url":"https://patchwork.libcamera.org/comment/17309/","msgid":"<CAO5uPHMgD2rpcywL_TNxoJ9p6=UYDtotZcn07LtcN1wVme4c1g@mail.gmail.com>","date":"2021-05-27T06:42:20","subject":"Re: [libcamera-devel] [PATCH v5 6/6] android: CameraDevice: Report\n\tqueried test pattern modes","submitter":{"id":63,"url":"https://patchwork.libcamera.org/api/people/63/","name":"Hirokazu Honda","email":"hiroh@chromium.org"},"content":"Hi Jacopo, thank you for reviewing.\n\nOn Thu, May 27, 2021 at 6:24 AM Jacopo Mondi <jacopo@jmondi.org> wrote:\n\n> Hi Hiro,\n>\n> On Wed, May 19, 2021 at 04:59:41PM +0900, Hirokazu Honda wrote:\n> > Report to the Android camera stack the list of supported test\n> > pattern modes constructed by inspecting the values reported\n> > by libcamera through the controls::draft::TestPatternMode control.\n> >\n> > Signed-off-by: Hirokazu Honda <hiroh@chromium.org>\n> > ---\n> >  src/android/camera_device.cpp | 47 ++++++++++++++++++++++++++++++++---\n> >  1 file changed, 44 insertions(+), 3 deletions(-)\n> >\n> > diff --git a/src/android/camera_device.cpp\n> b/src/android/camera_device.cpp\n> > index b32e8be5..a07679a3 100644\n> > --- a/src/android/camera_device.cpp\n> > +++ b/src/android/camera_device.cpp\n> > @@ -1035,11 +1035,52 @@ const camera_metadata_t\n> *CameraDevice::getStaticMetadata()\n> >\n> >       staticMetadata_->addEntry(ANDROID_SENSOR_ORIENTATION,\n> orientation_);\n> >\n> > -     std::vector<int32_t> testPatterModes = {\n> > -             ANDROID_SENSOR_TEST_PATTERN_MODE_OFF,\n> > +     std::vector<int32_t> testPatternModes = {\n> > +             ANDROID_SENSOR_TEST_PATTERN_MODE_OFF\n> >       };\n> > +     if (const auto &testPatternsInfo =\n> > +                 controlsInfo.find(&controls::draft::TestPatternMode);\n> > +         testPatternsInfo != controlsInfo.end()) {\n>\n> Is this intentional ? It compiles as it is legal, I'm surprised\n> testPatternsInfo is visibile in the if() { } block scope.\n>\n> Honestly, it's kind of unusual, but maybe it's just me. If it compiles\n> and it works...\n>\n>\n\nYes, it is. It is C++ grammer introduced since C++17.\nhttps://skebanga.github.io/if-with-initializer/\nI think it is useful if a variable is used only in if-condition and its\nclause.\n\n\n> > +             const auto &values = testPatternsInfo->second.values();\n> > +             ASSERT(!values.empty());\n> > +             for (const auto &value : values) {\n> > +                     switch (value.get<int32_t>()) {\n> > +                     case controls::draft::TestPatternModeOff:\n> > +                             /*\n> > +                              * ANDROID_SENSOR_TEST_PATTERN_MODE_OFF is\n> > +                              * already in testPatternModes.\n> > +                              */\n> > +                             break;\n> > +                     case controls::draft::TestPatternModeSolidColor:\n> > +                             testPatternModes.push_back(\n> > +\n>  ANDROID_SENSOR_TEST_PATTERN_MODE_SOLID_COLOR);\n> > +                             break;\n> > +                     case controls::draft::TestPatternModeColorBars:\n> > +                             testPatternModes.push_back(\n> > +\n>  ANDROID_SENSOR_TEST_PATTERN_MODE_COLOR_BARS);\n> > +                             break;\n> > +                     case\n> controls::draft::TestPatternModeColorBarsFadeToGray:\n> > +                             testPatternModes.push_back(\n> > +\n>  ANDROID_SENSOR_TEST_PATTERN_MODE_COLOR_BARS_FADE_TO_GRAY);\n> > +                             break;\n> > +                     case controls::draft::TestPatternModePn9:\n> > +                             testPatternModes.push_back(\n> > +\n>  ANDROID_SENSOR_TEST_PATTERN_MODE_PN9);\n> > +                             break;\n> > +                     case controls::draft::TestPatternModeCustom1:\n> > +                             testPatternModes.push_back(\n> > +\n>  ANDROID_SENSOR_TEST_PATTERN_MODE_CUSTOM1);\n> > +                             break;\n> > +                     default:\n> > +                             LOG(HAL, Error)\n> > +                                     << \"Unknown test pattern mode: \"\n>\n> Doesn't it fit on the previous line ?\n>\n> The patch looks good\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n>\n> Thanks\n>   j\n>\n>\n> > +                                     << value.get<int32_t>();\n> > +                             continue;\n> > +                     }\n> > +             }\n> > +     }\n> >\n>  staticMetadata_->addEntry(ANDROID_SENSOR_AVAILABLE_TEST_PATTERN_MODES,\n> > -                               testPatterModes);\n> > +                               testPatternModes);\n> >\n> >       uint8_t timestampSource =\n> ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE_UNKNOWN;\n> >       staticMetadata_->addEntry(ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE,\n> > --\n> > 2.31.1.751.gd2f1c929bd-goog\n> >\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 82A2ABDB80\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 27 May 2021 06:42:34 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A96BF68924;\n\tThu, 27 May 2021 08:42:33 +0200 (CEST)","from mail-ej1-x62a.google.com (mail-ej1-x62a.google.com\n\t[IPv6:2a00:1450:4864:20::62a])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 657D96891F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 27 May 2021 08:42:32 +0200 (CEST)","by mail-ej1-x62a.google.com with SMTP id z12so6327466ejw.0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 26 May 2021 23:42:32 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=chromium.org header.i=@chromium.org\n\theader.b=\"RRFtH+R6\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org;\n\ts=google; \n\th=mime-version:references:in-reply-to:from:date:message-id:subject:to\n\t:cc; bh=cH1JrFKf4k89m1DyBXLYFCN1ckDb4SYXrEI3IIp+lLw=;\n\tb=RRFtH+R6jlmQQp1wDsKL0XsYvSUoeqt1I65Gz4Lq4XZinUCDs8XSPEdKZTnaWaxYYz\n\t7+n+jm5ydJnFjiGw+1+7kbUXgqX8pYWMMvL8hDjNvJSz5/Rysb6XSCxUnt7xaceeSV2z\n\tS1f5xIKBVSZ1lu1UHZ/UQL8UxPp55dfeKZH80=","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:mime-version:references:in-reply-to:from:date\n\t:message-id:subject:to:cc;\n\tbh=cH1JrFKf4k89m1DyBXLYFCN1ckDb4SYXrEI3IIp+lLw=;\n\tb=dKNRGAeYxyflzMF1NbJ4Ru5cXOL7ZdG/woRsG5aJVWG5ah+c+JxE2xBkEqWWILqFY8\n\tszF1wiv3sSF5qTSbSYrsbs3ODH0zC3mNpTU+shXfaLel+ck+kavsIJWafedHYdKOiVs+\n\tPRc4TjbYHepl+Y0o09hcFEIZjOCv9N81XK3vheowm6iMYXVzZklENarDFuqtM/bTL/nT\n\tr9dSFQ9o08WxdKfQoJVe8YfCuLiRnWQZt1bnp9OwaXx2yZfyQ/qbR72fX0JOnFKQmZZ1\n\tiQxVcF2fdMG8ocWnwTDG7YEXE2tXH8yWWmmLPU9lDm+seCFII1G0vbWb2DnEZvfFXziW\n\tV4gw==","X-Gm-Message-State":"AOAM532HQWJ8c5OgkV3FMkfRUl1tsJLy9yavJCffDEQh2tvTsn2mhOq0\n\tTp0Rs+vsjSdtqOq4O1DAQbRHfmBoZsCWin4ecDMztHq5vOFQQg==","X-Google-Smtp-Source":"ABdhPJwZY8dtwhUefuvJAyYipj1GyCuC0EOemn62cbkHKWTpIT1QIvuuv4kwuNwUdIXy4oTtZuMlXgftf3pH+S9L1e0=","X-Received":"by 2002:a17:906:3a04:: with SMTP id\n\tz4mr2186193eje.221.1622097751934; \n\tWed, 26 May 2021 23:42:31 -0700 (PDT)","MIME-Version":"1.0","References":"<20210519075941.1337388-1-hiroh@chromium.org>\n\t<20210519075941.1337388-6-hiroh@chromium.org>\n\t<20210526212528.4jitdctbwvmqigqm@uno.localdomain>","In-Reply-To":"<20210526212528.4jitdctbwvmqigqm@uno.localdomain>","From":"Hirokazu Honda <hiroh@chromium.org>","Date":"Thu, 27 May 2021 15:42:20 +0900","Message-ID":"<CAO5uPHMgD2rpcywL_TNxoJ9p6=UYDtotZcn07LtcN1wVme4c1g@mail.gmail.com>","To":"Jacopo Mondi <jacopo@jmondi.org>","Content-Type":"multipart/alternative; boundary=\"0000000000004b9d8a05c34a10f3\"","Subject":"Re: [libcamera-devel] [PATCH v5 6/6] android: CameraDevice: Report\n\tqueried test pattern modes","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 <libcamera-devel@lists.libcamera.org>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]