[{"id":20037,"web_url":"https://patchwork.libcamera.org/comment/20037/","msgid":"<YVt2m5BzjZx7Cm6/@pendragon.ideasonboard.com>","date":"2021-10-04T21:48:11","subject":"Re: [libcamera-devel] [PATCH] libcamera: camera_sensor: Reverse the\n\tkey and value of test pattern mode map","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 Mon, Oct 04, 2021 at 03:58:56PM +0900, Hirokazu Honda wrote:\n> The key and value of the test pattern mode are originally the index of\n> v4l2 control and the corresponding test pattern mode control value.\n> This key and value are useful in the initialization for reporting\n> available test pattern modes. However, the map of the reversed key and\n> value is much more useful in applying a requested test pattern mode.\n> Reverses the key and value of the map as the initialization is one\n> time but the test pattern mode request will be multiple times.\n> \n> Signed-off-by: Hirokazu Honda <hiroh@chromium.org>\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>  src/libcamera/camera_sensor.cpp            | 15 ++++++-\n>  src/libcamera/camera_sensor_properties.cpp | 52 +++++++++++-----------\n>  2 files changed, 39 insertions(+), 28 deletions(-)\n> \n> diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp\n> index 87668509..e5844c04 100644\n> --- a/src/libcamera/camera_sensor.cpp\n> +++ b/src/libcamera/camera_sensor.cpp\n> @@ -320,11 +320,22 @@ void CameraSensor::initTestPatternModes(\n>  \t\treturn;\n>  \t}\n>  \n> +        /*\n> +         * Create a map that associates the V4L2 control index to the test\n\nTabs instead of space for indentation.\n\n> +\t * pattern mode by reversing the testPatternModes map provided by the\n> +\t * camera sensor properties. This makes it easier to verify if the\n> +\t * control index is supported in the below for loop that creates the\n> +\t * list of supported test patterns.\n> +         */\n> +\tstd::map<int32_t, int32_t> indexToTestPatternMode;\n> +\tfor (const auto& it : testPatternModes)\n\ns/& it/ &it/\n\nI'll fix those two small issues and push the patch.\n\n> +\t\tindexToTestPatternMode[it.second] = it.first;\n\nOn a side note, I wonder if we should add a function to utils.h for\nthis.\n\n> +\n>  \tfor (const ControlValue &value : v4l2TestPattern->second.values()) {\n>  \t\tconst int32_t index = value.get<int32_t>();\n>  \n> -\t\tconst auto it = testPatternModes.find(index);\n> -\t\tif (it == testPatternModes.end()) {\n> +\t\tconst auto it = indexToTestPatternMode.find(index);\n> +\t\tif (it == indexToTestPatternMode.end()) {\n>  \t\t\tLOG(CameraSensor, Debug)\n>  \t\t\t\t<< \"Test pattern mode \" << index << \" ignored\";\n>  \t\t\tcontinue;\n> diff --git a/src/libcamera/camera_sensor_properties.cpp b/src/libcamera/camera_sensor_properties.cpp\n> index 39bb282d..48305ac4 100644\n> --- a/src/libcamera/camera_sensor_properties.cpp\n> +++ b/src/libcamera/camera_sensor_properties.cpp\n> @@ -38,9 +38,9 @@ LOG_DEFINE_CATEGORY(CameraSensorProperties)\n>   * \\brief The physical size of a pixel, including pixel edges, in nanometers.\n>   *\n>   * \\var CameraSensorProperties::testPatternModes\n> - * \\brief Map that associates the indexes of the sensor test pattern modes as\n> - * returned by V4L2_CID_TEST_PATTERN with the corresponding TestPattern\n> - * control value\n> + * \\brief Map that associates the TestPattern control value with the indexes of\n> + * the corresponding sensor test pattern modes as returned by\n> + * V4L2_CID_TEST_PATTERN.\n>   */\n>  \n>  /**\n> @@ -55,11 +55,11 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n>  \t\t{ \"hi846\", {\n>  \t\t\t.unitCellSize = { 1120, 1120 },\n>  \t\t\t.testPatternModes = {\n> -\t\t\t\t{ 0, controls::draft::TestPatternModeOff },\n> -\t\t\t\t{ 1, controls::draft::TestPatternModeSolidColor },\n> -\t\t\t\t{ 2, controls::draft::TestPatternModeColorBars },\n> -\t\t\t\t{ 3, controls::draft::TestPatternModeColorBarsFadeToGray },\n> -\t\t\t\t{ 4, controls::draft::TestPatternModePn9 },\n> +\t\t\t\t{ controls::draft::TestPatternModeOff, 0 },\n> +\t\t\t\t{ controls::draft::TestPatternModeSolidColor, 1 },\n> +\t\t\t\t{ controls::draft::TestPatternModeColorBars, 2 },\n> +\t\t\t\t{ controls::draft::TestPatternModeColorBarsFadeToGray, 3 },\n> +\t\t\t\t{ controls::draft::TestPatternModePn9, 4 },\n>  \t\t\t\t/*\n>  \t\t\t\t * No corresponding test pattern mode for:\n>  \t\t\t\t * 5: \"Gradient Horizontal\"\n> @@ -73,21 +73,21 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n>  \t\t{ \"imx219\", {\n>  \t\t\t.unitCellSize = { 1120, 1120 },\n>  \t\t\t.testPatternModes = {\n> -\t\t\t\t{ 0, controls::draft::TestPatternModeOff },\n> -\t\t\t\t{ 1, controls::draft::TestPatternModeColorBars },\n> -\t\t\t\t{ 2, controls::draft::TestPatternModeSolidColor },\n> -\t\t\t\t{ 3, controls::draft::TestPatternModeColorBarsFadeToGray },\n> -\t\t\t\t{ 4, controls::draft::TestPatternModePn9 },\n> +\t\t\t\t{ controls::draft::TestPatternModeOff, 0 },\n> +\t\t\t\t{ controls::draft::TestPatternModeColorBars, 1 },\n> +\t\t\t\t{ controls::draft::TestPatternModeSolidColor, 2 },\n> +\t\t\t\t{ controls::draft::TestPatternModeColorBarsFadeToGray, 3 },\n> +\t\t\t\t{ controls::draft::TestPatternModePn9, 4 },\n>  \t\t\t},\n>  \t\t} },\n>  \t\t{ \"imx258\", {\n>  \t\t\t.unitCellSize = { 1120, 1120 },\n>  \t\t\t.testPatternModes = {\n> -\t\t\t\t{ 0, controls::draft::TestPatternModeOff },\n> -\t\t\t\t{ 1, controls::draft::TestPatternModeSolidColor },\n> -\t\t\t\t{ 2, controls::draft::TestPatternModeColorBars },\n> -\t\t\t\t{ 3, controls::draft::TestPatternModeColorBarsFadeToGray },\n> -\t\t\t\t{ 4, controls::draft::TestPatternModePn9 },\n> +\t\t\t\t{ controls::draft::TestPatternModeOff, 0 },\n> +\t\t\t\t{ controls::draft::TestPatternModeSolidColor, 1 },\n> +\t\t\t\t{ controls::draft::TestPatternModeColorBars, 2 },\n> +\t\t\t\t{ controls::draft::TestPatternModeColorBarsFadeToGray, 3 },\n> +\t\t\t\t{ controls::draft::TestPatternModePn9, 4 },\n>  \t\t\t},\n>  \t\t} },\n>  \t\t{ \"ov5647\", {\n> @@ -97,15 +97,15 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n>  \t\t{ \"ov5670\", {\n>  \t\t\t.unitCellSize = { 1120, 1120 },\n>  \t\t\t.testPatternModes = {\n> -\t\t\t\t{ 0, controls::draft::TestPatternModeOff },\n> -\t\t\t\t{ 1, controls::draft::TestPatternModeColorBars },\n> +\t\t\t\t{ controls::draft::TestPatternModeOff, 0 },\n> +\t\t\t\t{ controls::draft::TestPatternModeColorBars, 1 },\n>  \t\t\t},\n>  \t\t} },\n>  \t\t{ \"ov5693\", {\n>  \t\t\t.unitCellSize = { 1400, 1400 },\n>  \t\t\t.testPatternModes = {\n> -\t\t\t\t{ 0, controls::draft::TestPatternModeOff },\n> -\t\t\t\t{ 2, controls::draft::TestPatternModeColorBars },\n> +\t\t\t\t{ controls::draft::TestPatternModeOff, 0 },\n> +\t\t\t\t{ controls::draft::TestPatternModeColorBars, 2 },\n>  \t\t\t\t/*\n>  \t\t\t\t * No corresponding test pattern mode for\n>  \t\t\t\t * 1: \"Random data\" and 3: \"Colour Bars with\n> @@ -116,8 +116,8 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n>  \t\t{ \"ov8865\", {\n>  \t\t\t.unitCellSize = { 1400, 1400 },\n>  \t\t\t.testPatternModes = {\n> -\t\t\t\t{ 0, controls::draft::TestPatternModeOff },\n> -\t\t\t\t{ 2, controls::draft::TestPatternModeColorBars },\n> +\t\t\t\t{ controls::draft::TestPatternModeOff, 0 },\n> +\t\t\t\t{ controls::draft::TestPatternModeColorBars, 2 },\n>  \t\t\t\t/*\n>  \t\t\t\t * No corresponding test pattern mode for:\n>  \t\t\t\t * 1: \"Random data\"\n> @@ -130,8 +130,8 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n>  \t\t{ \"ov13858\", {\n>  \t\t\t.unitCellSize = { 1120, 1120 },\n>  \t\t\t.testPatternModes =  {\n> -\t\t\t\t{ 0, controls::draft::TestPatternModeOff },\n> -\t\t\t\t{ 1, controls::draft::TestPatternModeColorBars },\n> +\t\t\t\t{ controls::draft::TestPatternModeOff, 0 },\n> +\t\t\t\t{ controls::draft::TestPatternModeColorBars, 1 },\n>  \t\t\t},\n>  \t\t} },\n>  \t};","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 C84D2C3243\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  4 Oct 2021 21:48:20 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4317F69189;\n\tMon,  4 Oct 2021 23:48:20 +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 B77266023F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  4 Oct 2021 23:48:18 +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 279E05A1;\n\tMon,  4 Oct 2021 23:48:18 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"rpZhVV1v\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1633384098;\n\tbh=EP5uJYteFBsHfH0sSxwJ0wBygM4hfx13HunZK2oadOM=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=rpZhVV1vR9RiorPTTsp9QqfWNhDpN9eQ+WX2mlXe29qHKA+XGzqfH/hKK1TNAnsD4\n\tnutsUyLW30GiD+uuix4W2nkgxtLKTFhpV3EWI3rFIyrCICmFpNKJrObqv6VYMkY8z0\n\tWsyOxVzWd5PLlv+bxsuaLnRyw7fijQE43ckY3Mik=","Date":"Tue, 5 Oct 2021 00:48:11 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Hirokazu Honda <hiroh@chromium.org>","Message-ID":"<YVt2m5BzjZx7Cm6/@pendragon.ideasonboard.com>","References":"<20211004065856.3512141-1-hiroh@chromium.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20211004065856.3512141-1-hiroh@chromium.org>","Subject":"Re: [libcamera-devel] [PATCH] libcamera: camera_sensor: Reverse the\n\tkey and value of test pattern mode map","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":20045,"web_url":"https://patchwork.libcamera.org/comment/20045/","msgid":"<CAO5uPHPCcELw1ZhiYoY74u9bmF_S4xg-C+nt6Yf73V-Va3kAcw@mail.gmail.com>","date":"2021-10-05T04:34:13","subject":"Re: [libcamera-devel] [PATCH] libcamera: camera_sensor: Reverse the\n\tkey and value of test pattern mode map","submitter":{"id":63,"url":"https://patchwork.libcamera.org/api/people/63/","name":"Hirokazu Honda","email":"hiroh@chromium.org"},"content":"Hi Laurent,\n\nOn Tue, Oct 5, 2021 at 6:48 AM Laurent Pinchart\n<laurent.pinchart@ideasonboard.com> wrote:\n>\n> Hi Hiro,\n>\n> Thank you for the patch.\n>\n> On Mon, Oct 04, 2021 at 03:58:56PM +0900, Hirokazu Honda wrote:\n> > The key and value of the test pattern mode are originally the index of\n> > v4l2 control and the corresponding test pattern mode control value.\n> > This key and value are useful in the initialization for reporting\n> > available test pattern modes. However, the map of the reversed key and\n> > value is much more useful in applying a requested test pattern mode.\n> > Reverses the key and value of the map as the initialization is one\n> > time but the test pattern mode request will be multiple times.\n> >\n> > Signed-off-by: Hirokazu Honda <hiroh@chromium.org>\n> > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > ---\n> >  src/libcamera/camera_sensor.cpp            | 15 ++++++-\n> >  src/libcamera/camera_sensor_properties.cpp | 52 +++++++++++-----------\n> >  2 files changed, 39 insertions(+), 28 deletions(-)\n> >\n> > diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp\n> > index 87668509..e5844c04 100644\n> > --- a/src/libcamera/camera_sensor.cpp\n> > +++ b/src/libcamera/camera_sensor.cpp\n> > @@ -320,11 +320,22 @@ void CameraSensor::initTestPatternModes(\n> >               return;\n> >       }\n> >\n> > +        /*\n> > +         * Create a map that associates the V4L2 control index to the test\n>\n> Tabs instead of space for indentation.\n>\n> > +      * pattern mode by reversing the testPatternModes map provided by the\n> > +      * camera sensor properties. This makes it easier to verify if the\n> > +      * control index is supported in the below for loop that creates the\n> > +      * list of supported test patterns.\n> > +         */\n> > +     std::map<int32_t, int32_t> indexToTestPatternMode;\n> > +     for (const auto& it : testPatternModes)\n>\n> s/& it/ &it/\n>\n> I'll fix those two small issues and push the patch.\n>\n\nThanks for pushing.\n\n> > +             indexToTestPatternMode[it.second] = it.first;\n>\n> On a side note, I wonder if we should add a function to utils.h for\n> this.\n>\n\nI am not sure this is such a common pattern that it is worth adding to utils.h.\nLet's add once we have much code like this in the codebase.\n\n-Hiro\n> > +\n> >       for (const ControlValue &value : v4l2TestPattern->second.values()) {\n> >               const int32_t index = value.get<int32_t>();\n> >\n> > -             const auto it = testPatternModes.find(index);\n> > -             if (it == testPatternModes.end()) {\n> > +             const auto it = indexToTestPatternMode.find(index);\n> > +             if (it == indexToTestPatternMode.end()) {\n> >                       LOG(CameraSensor, Debug)\n> >                               << \"Test pattern mode \" << index << \" ignored\";\n> >                       continue;\n> > diff --git a/src/libcamera/camera_sensor_properties.cpp b/src/libcamera/camera_sensor_properties.cpp\n> > index 39bb282d..48305ac4 100644\n> > --- a/src/libcamera/camera_sensor_properties.cpp\n> > +++ b/src/libcamera/camera_sensor_properties.cpp\n> > @@ -38,9 +38,9 @@ LOG_DEFINE_CATEGORY(CameraSensorProperties)\n> >   * \\brief The physical size of a pixel, including pixel edges, in nanometers.\n> >   *\n> >   * \\var CameraSensorProperties::testPatternModes\n> > - * \\brief Map that associates the indexes of the sensor test pattern modes as\n> > - * returned by V4L2_CID_TEST_PATTERN with the corresponding TestPattern\n> > - * control value\n> > + * \\brief Map that associates the TestPattern control value with the indexes of\n> > + * the corresponding sensor test pattern modes as returned by\n> > + * V4L2_CID_TEST_PATTERN.\n> >   */\n> >\n> >  /**\n> > @@ -55,11 +55,11 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n> >               { \"hi846\", {\n> >                       .unitCellSize = { 1120, 1120 },\n> >                       .testPatternModes = {\n> > -                             { 0, controls::draft::TestPatternModeOff },\n> > -                             { 1, controls::draft::TestPatternModeSolidColor },\n> > -                             { 2, controls::draft::TestPatternModeColorBars },\n> > -                             { 3, controls::draft::TestPatternModeColorBarsFadeToGray },\n> > -                             { 4, controls::draft::TestPatternModePn9 },\n> > +                             { controls::draft::TestPatternModeOff, 0 },\n> > +                             { controls::draft::TestPatternModeSolidColor, 1 },\n> > +                             { controls::draft::TestPatternModeColorBars, 2 },\n> > +                             { controls::draft::TestPatternModeColorBarsFadeToGray, 3 },\n> > +                             { controls::draft::TestPatternModePn9, 4 },\n> >                               /*\n> >                                * No corresponding test pattern mode for:\n> >                                * 5: \"Gradient Horizontal\"\n> > @@ -73,21 +73,21 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n> >               { \"imx219\", {\n> >                       .unitCellSize = { 1120, 1120 },\n> >                       .testPatternModes = {\n> > -                             { 0, controls::draft::TestPatternModeOff },\n> > -                             { 1, controls::draft::TestPatternModeColorBars },\n> > -                             { 2, controls::draft::TestPatternModeSolidColor },\n> > -                             { 3, controls::draft::TestPatternModeColorBarsFadeToGray },\n> > -                             { 4, controls::draft::TestPatternModePn9 },\n> > +                             { controls::draft::TestPatternModeOff, 0 },\n> > +                             { controls::draft::TestPatternModeColorBars, 1 },\n> > +                             { controls::draft::TestPatternModeSolidColor, 2 },\n> > +                             { controls::draft::TestPatternModeColorBarsFadeToGray, 3 },\n> > +                             { controls::draft::TestPatternModePn9, 4 },\n> >                       },\n> >               } },\n> >               { \"imx258\", {\n> >                       .unitCellSize = { 1120, 1120 },\n> >                       .testPatternModes = {\n> > -                             { 0, controls::draft::TestPatternModeOff },\n> > -                             { 1, controls::draft::TestPatternModeSolidColor },\n> > -                             { 2, controls::draft::TestPatternModeColorBars },\n> > -                             { 3, controls::draft::TestPatternModeColorBarsFadeToGray },\n> > -                             { 4, controls::draft::TestPatternModePn9 },\n> > +                             { controls::draft::TestPatternModeOff, 0 },\n> > +                             { controls::draft::TestPatternModeSolidColor, 1 },\n> > +                             { controls::draft::TestPatternModeColorBars, 2 },\n> > +                             { controls::draft::TestPatternModeColorBarsFadeToGray, 3 },\n> > +                             { controls::draft::TestPatternModePn9, 4 },\n> >                       },\n> >               } },\n> >               { \"ov5647\", {\n> > @@ -97,15 +97,15 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n> >               { \"ov5670\", {\n> >                       .unitCellSize = { 1120, 1120 },\n> >                       .testPatternModes = {\n> > -                             { 0, controls::draft::TestPatternModeOff },\n> > -                             { 1, controls::draft::TestPatternModeColorBars },\n> > +                             { controls::draft::TestPatternModeOff, 0 },\n> > +                             { controls::draft::TestPatternModeColorBars, 1 },\n> >                       },\n> >               } },\n> >               { \"ov5693\", {\n> >                       .unitCellSize = { 1400, 1400 },\n> >                       .testPatternModes = {\n> > -                             { 0, controls::draft::TestPatternModeOff },\n> > -                             { 2, controls::draft::TestPatternModeColorBars },\n> > +                             { controls::draft::TestPatternModeOff, 0 },\n> > +                             { controls::draft::TestPatternModeColorBars, 2 },\n> >                               /*\n> >                                * No corresponding test pattern mode for\n> >                                * 1: \"Random data\" and 3: \"Colour Bars with\n> > @@ -116,8 +116,8 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n> >               { \"ov8865\", {\n> >                       .unitCellSize = { 1400, 1400 },\n> >                       .testPatternModes = {\n> > -                             { 0, controls::draft::TestPatternModeOff },\n> > -                             { 2, controls::draft::TestPatternModeColorBars },\n> > +                             { controls::draft::TestPatternModeOff, 0 },\n> > +                             { controls::draft::TestPatternModeColorBars, 2 },\n> >                               /*\n> >                                * No corresponding test pattern mode for:\n> >                                * 1: \"Random data\"\n> > @@ -130,8 +130,8 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n> >               { \"ov13858\", {\n> >                       .unitCellSize = { 1120, 1120 },\n> >                       .testPatternModes =  {\n> > -                             { 0, controls::draft::TestPatternModeOff },\n> > -                             { 1, controls::draft::TestPatternModeColorBars },\n> > +                             { controls::draft::TestPatternModeOff, 0 },\n> > +                             { controls::draft::TestPatternModeColorBars, 1 },\n> >                       },\n> >               } },\n> >       };\n>\n> --\n> Regards,\n>\n> Laurent Pinchart","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 4D5E8C3243\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  5 Oct 2021 04:34:27 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 618DD691B9;\n\tTue,  5 Oct 2021 06:34:26 +0200 (CEST)","from mail-ed1-x531.google.com (mail-ed1-x531.google.com\n\t[IPv6:2a00:1450:4864:20::531])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id A120C6023D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  5 Oct 2021 06:34:24 +0200 (CEST)","by mail-ed1-x531.google.com with SMTP id f9so10746222edx.4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 04 Oct 2021 21:34:24 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=chromium.org header.i=@chromium.org\n\theader.b=\"QFZtmJIr\"; 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=apD2nlztpNvd4XQXfkSm8zt8LqGj+RFq7NuWx3TDU8c=;\n\tb=QFZtmJIrMoE1nq/IHUriXNojIaQr9P+P0aDk3W5GChvU6nQibDefMfjEZ8i3AKTojm\n\tVWpxrCQ57o2rf4gQTIagdzIcsTQa8tpnt02W+Uv/NtqnssuL6bt+USdyFMcTj86j45rh\n\tn6Pqd3X22TVm2XqvPBkp+5GE28as3u1gyvbEk=","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\n\th=x-gm-message-state:mime-version:references:in-reply-to:from:date\n\t:message-id:subject:to:cc;\n\tbh=apD2nlztpNvd4XQXfkSm8zt8LqGj+RFq7NuWx3TDU8c=;\n\tb=Pr69kEb8LTYKND/z6r2IFMjwA0XQ2b2wqR1DaWHdXRjDdQR5ZGdIwqlG1aiEi4rGPY\n\tPLA2gErWsZA/Thy8mSyKlVxeZwzZ3Srmh96GF441QrGOIDA6qYNeY7A05nFXicHJEKJj\n\tNXGQh8SEUMaQUnVhzD1MHRnyB5hZ/wrrGCI1wPLYmQZpMUwTmbB8WtdN9kk9w+cSjFxy\n\t4x9LXbFU8SlkFG7QzuVkg3ABE/s/DO98Kw4XSpyGGVFjdvrVqwoCePTOSqJJjqBjjM3M\n\tXpV7JlgP3rQpuuue7070vBNYMGhq2SrSWK00PTZQfWCSyBSPFVx9kSUszygPJ6k3bauO\n\tX6fw==","X-Gm-Message-State":"AOAM533OGY4LoR1cz2m44bxJS+uE+JBk2zk9EbdwiEPP17ygVZKfCVPD\n\tzaqh6+yjbeQE0kgMe9FSL8XmqDH5foQGtGIiRKrqOg==","X-Google-Smtp-Source":"ABdhPJzlXGQOD9Lo01bNUT6ySrF33HK9LCtjxG0rbHf24UiWc3Y4dRHhXaSOaQ+9lLIgrdwQNOTckgiuo0YKr9HQdqw=","X-Received":"by 2002:a05:6402:1d2b:: with SMTP id\n\tdh11mr23178772edb.276.1633408464186; \n\tMon, 04 Oct 2021 21:34:24 -0700 (PDT)","MIME-Version":"1.0","References":"<20211004065856.3512141-1-hiroh@chromium.org>\n\t<YVt2m5BzjZx7Cm6/@pendragon.ideasonboard.com>","In-Reply-To":"<YVt2m5BzjZx7Cm6/@pendragon.ideasonboard.com>","From":"Hirokazu Honda <hiroh@chromium.org>","Date":"Tue, 5 Oct 2021 13:34:13 +0900","Message-ID":"<CAO5uPHPCcELw1ZhiYoY74u9bmF_S4xg-C+nt6Yf73V-Va3kAcw@mail.gmail.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Content-Type":"text/plain; charset=\"UTF-8\"","Subject":"Re: [libcamera-devel] [PATCH] libcamera: camera_sensor: Reverse the\n\tkey and value of test pattern mode map","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>"}}]