[{"id":21462,"web_url":"https://patchwork.libcamera.org/comment/21462/","msgid":"<20211130204639.qzbiwqr2yl626dnx@uno.localdomain>","date":"2021-11-30T20:46:39","subject":"Re: [libcamera-devel] [PATCH v7 7/7] libcamera: pipeline:\n\traspberrypi: Support color spaces","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"On Fri, Nov 26, 2021 at 10:40:45AM +0000, David Plowman wrote:\n> The Raspberry Pi pipeline handler now sets color spaces correctly.\n>\n> In generateConfiguration() it sets them to reasonable default values\n> based on the stream role.\n>\n> validate() now calls validateColorSpaces() to ensure that the\n> requested color spaces are sensible, before proceeding to check what\n> the hardware can deliver.\n>\n> Signed-off-by: David Plowman <david.plowman@raspberrypi.com>\n> ---\n>  .../pipeline/raspberrypi/raspberrypi.cpp      | 42 +++++++++++++++++++\n>  1 file changed, 42 insertions(+)\n>\n> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> index ad526a8b..f0ec23cb 100644\n> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> @@ -93,6 +93,7 @@ V4L2DeviceFormat toV4L2DeviceFormat(const V4L2SubdeviceFormat &format,\n>\n>  \tdeviceFormat.fourcc = V4L2PixelFormat::fromPixelFormat(pix);\n>  \tdeviceFormat.size = format.size;\n> +\tdeviceFormat.colorSpace = format.colorSpace;\n>  \treturn deviceFormat;\n>  }\n>\n> @@ -129,6 +130,7 @@ V4L2SubdeviceFormat findBestFormat(const SensorFormats &formatsMap, const Size &\n>  {\n>  \tdouble bestScore = std::numeric_limits<double>::max(), score;\n>  \tV4L2SubdeviceFormat bestFormat;\n> +\tbestFormat.colorSpace = ColorSpace::Raw;\n>\n>  #define PENALTY_AR\t\t1500.0\n>  #define PENALTY_8BIT\t\t2000.0\n> @@ -335,6 +337,8 @@ CameraConfiguration::Status RPiCameraConfiguration::validate()\n>  \tif (config_.empty())\n>  \t\treturn Invalid;\n>\n> +\tstatus = validateColorSpaces(true);\n> +\n>  \t/*\n>  \t * What if the platform has a non-90 degree rotation? We can't even\n>  \t * \"adjust\" the configuration and carry on. Alternatively, raising an\n> @@ -497,10 +501,21 @@ CameraConfiguration::Status RPiCameraConfiguration::validate()\n>  \t\tV4L2DeviceFormat format;\n>  \t\tformat.fourcc = V4L2PixelFormat::fromPixelFormat(cfg.pixelFormat);\n>  \t\tformat.size = cfg.size;\n> +\t\tformat.colorSpace = cfg.colorSpace;\n> +\t\tLOG(RPI, Debug)\n> +\t\t\t<< \"Try color space \" << ColorSpace::toString(cfg.colorSpace);\n\nIs this required ? There are no prinouts for the other\nV4L2DeviceFormat fields..\n\n>\n>  \t\tint ret = dev->tryFormat(&format);\n>  \t\tif (ret)\n>  \t\t\treturn Invalid;\n\nBlank line ?\n\n> +\t\tif (!format.colorSpace || cfg.colorSpace != format.colorSpace) {\n> +\t\t\tstatus = Adjusted;\n> +\t\t\tLOG(RPI, Warning)\n> +\t\t\t\t<< \"Color space changed from \"\n> +\t\t\t\t<< ColorSpace::toString(cfg.colorSpace) << \" to \"\n> +\t\t\t\t<< ColorSpace::toString(format.colorSpace);\n> +\t\t}\n> +\t\tcfg.colorSpace = format.colorSpace;\n\nDo you need to validateColorSpaces() again at the end ?\n>\n>  \t\tcfg.stride = format.planes[0].bpl;\n>  \t\tcfg.frameSize = format.planes[0].size;\n> @@ -525,6 +540,7 @@ CameraConfiguration *PipelineHandlerRPi::generateConfiguration(Camera *camera,\n>  \tPixelFormat pixelFormat;\n>  \tV4L2VideoDevice::Formats fmts;\n>  \tSize size;\n> +\tstd::optional<ColorSpace> colorSpace;\n>\n>  \tif (roles.empty())\n>  \t\treturn config;\n> @@ -539,6 +555,7 @@ CameraConfiguration *PipelineHandlerRPi::generateConfiguration(Camera *camera,\n>  \t\t\tpixelFormat = mbusCodeToPixelFormat(sensorFormat.mbus_code,\n>  \t\t\t\t\t\t\t    BayerFormat::Packing::CSI2);\n>  \t\t\tASSERT(pixelFormat.isValid());\n> +\t\t\tcolorSpace = ColorSpace::Raw;\n>  \t\t\tbufferCount = 2;\n>  \t\t\trawCount++;\n>  \t\t\tbreak;\n> @@ -546,6 +563,7 @@ CameraConfiguration *PipelineHandlerRPi::generateConfiguration(Camera *camera,\n>  \t\tcase StreamRole::StillCapture:\n>  \t\t\tfmts = data->isp_[Isp::Output0].dev()->formats();\n>  \t\t\tpixelFormat = formats::NV12;\n> +\t\t\tcolorSpace = ColorSpace::Jpeg;\n>  \t\t\t/* Return the largest sensor resolution. */\n>  \t\t\tsize = data->sensor_->resolution();\n>  \t\t\tbufferCount = 1;\n> @@ -563,6 +581,8 @@ CameraConfiguration *PipelineHandlerRPi::generateConfiguration(Camera *camera,\n>  \t\t\t */\n>  \t\t\tfmts = data->isp_[Isp::Output0].dev()->formats();\n>  \t\t\tpixelFormat = formats::YUV420;\n> +\t\t\t/* This will be reasonable for many applications. */\n> +\t\t\tcolorSpace = ColorSpace::Rec709;\n>  \t\t\tsize = { 1920, 1080 };\n>  \t\t\tbufferCount = 4;\n>  \t\t\toutCount++;\n> @@ -571,6 +591,7 @@ CameraConfiguration *PipelineHandlerRPi::generateConfiguration(Camera *camera,\n>  \t\tcase StreamRole::Viewfinder:\n>  \t\t\tfmts = data->isp_[Isp::Output0].dev()->formats();\n>  \t\t\tpixelFormat = formats::ARGB8888;\n> +\t\t\tcolorSpace = ColorSpace::Jpeg;\n>  \t\t\tsize = { 800, 600 };\n>  \t\t\tbufferCount = 4;\n>  \t\t\toutCount++;\n> @@ -602,6 +623,7 @@ CameraConfiguration *PipelineHandlerRPi::generateConfiguration(Camera *camera,\n>  \t\tStreamConfiguration cfg(formats);\n>  \t\tcfg.size = size;\n>  \t\tcfg.pixelFormat = pixelFormat;\n> +\t\tcfg.colorSpace = colorSpace;\n>  \t\tcfg.bufferCount = bufferCount;\n>  \t\tconfig->addConfiguration(cfg);\n>  \t}\n> @@ -706,6 +728,7 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)\n>  \t\tV4L2PixelFormat fourcc = V4L2PixelFormat::fromPixelFormat(cfg.pixelFormat);\n>  \t\tformat.size = cfg.size;\n>  \t\tformat.fourcc = fourcc;\n> +\t\tformat.colorSpace = cfg.colorSpace;\n>\n>  \t\tLOG(RPI, Debug) << \"Setting \" << stream->name() << \" to \"\n>  \t\t\t\t<< format.toString();\n> @@ -721,6 +744,23 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)\n>  \t\t\treturn -EINVAL;\n>  \t\t}\n>\n> +\t\tif (!format.colorSpace || cfg.colorSpace != format.colorSpace) {\n> +\t\t\t/*\n> +\t\t\t * We should have been through validate() before so this\n> +\t\t\t * shouldn't be possible, but we mustn't sweep color space\n> +\t\t\t * problems under the carpet.\n> +\t\t\t */\n\nHow can this happen then ?\n\n> +\t\t\tLOG(RPI, Warning)\n> +\t\t\t\t<< \"Unexpected color space (\"\n> +\t\t\t\t<< ColorSpace::toString(cfg.colorSpace) << \" to \"\n> +\t\t\t\t<< ColorSpace::toString(format.colorSpace) << \") in stream \"\n> +\t\t\t\t<< stream->name();\n> +\t\t\tcfg.colorSpace = format.colorSpace;\n> +\t\t}\n> +\t\tLOG(RPI, Debug)\n> +\t\t\t<< \"Stream \" << stream->name() << \" has color space \"\n> +\t\t\t<< ColorSpace::toString(cfg.colorSpace);\n> +\n\nReally a lot of debug around color spaces :)\n\n>  \t\tcfg.setStream(stream);\n>  \t\tstream->setExternal(true);\n>\n> @@ -745,6 +785,8 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)\n>  \t\tformat = {};\n>  \t\tformat.size = maxSize;\n>  \t\tformat.fourcc = V4L2PixelFormat::fromPixelFormat(formats::YUV420);\n> +\t\t/* No one asked for output, so the color space doesn't matter. */\n> +\t\tformat.colorSpace = ColorSpace::Jpeg;\n>  \t\tret = data->isp_[Isp::Output0].dev()->setFormat(&format);\n>  \t\tif (ret) {\n>  \t\t\tLOG(RPI, Error)\n> --\n> 2.30.2\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 79AC2BF415\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 30 Nov 2021 20:45:51 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C100160720;\n\tTue, 30 Nov 2021 21:45:50 +0100 (CET)","from relay1-d.mail.gandi.net (relay1-d.mail.gandi.net\n\t[217.70.183.193])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D33E4605C4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 30 Nov 2021 21:45:49 +0100 (CET)","(Authenticated sender: jacopo@jmondi.org)\n\tby relay1-d.mail.gandi.net (Postfix) with ESMTPSA id 92361240003;\n\tTue, 30 Nov 2021 20:45:47 +0000 (UTC)"],"Date":"Tue, 30 Nov 2021 21:46:39 +0100","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"David Plowman <david.plowman@raspberrypi.com>","Message-ID":"<20211130204639.qzbiwqr2yl626dnx@uno.localdomain>","References":"<20211126104045.4756-1-david.plowman@raspberrypi.com>\n\t<20211126104045.4756-8-david.plowman@raspberrypi.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20211126104045.4756-8-david.plowman@raspberrypi.com>","Subject":"Re: [libcamera-devel] [PATCH v7 7/7] libcamera: pipeline:\n\traspberrypi: Support color spaces","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":"Tomasz Figa <tfiga@google.com>, libcamera-devel@lists.libcamera.org,\n\tHans Verkuil <hverkuil-cisco@xs4all.nl>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":21532,"web_url":"https://patchwork.libcamera.org/comment/21532/","msgid":"<CAHW6GYKy00agQYvQ2LMcXbORApXLUTiJEqRA=Ab377zf8fotog@mail.gmail.com>","date":"2021-12-01T15:05:36","subject":"Re: [libcamera-devel] [PATCH v7 7/7] libcamera: pipeline:\n\traspberrypi: Support color spaces","submitter":{"id":42,"url":"https://patchwork.libcamera.org/api/people/42/","name":"David Plowman","email":"david.plowman@raspberrypi.com"},"content":"Hi Jacopo\n\nThanks for the review!\n\nOn Tue, 30 Nov 2021 at 20:45, Jacopo Mondi <jacopo@jmondi.org> wrote:\n>\n> On Fri, Nov 26, 2021 at 10:40:45AM +0000, David Plowman wrote:\n> > The Raspberry Pi pipeline handler now sets color spaces correctly.\n> >\n> > In generateConfiguration() it sets them to reasonable default values\n> > based on the stream role.\n> >\n> > validate() now calls validateColorSpaces() to ensure that the\n> > requested color spaces are sensible, before proceeding to check what\n> > the hardware can deliver.\n> >\n> > Signed-off-by: David Plowman <david.plowman@raspberrypi.com>\n> > ---\n> >  .../pipeline/raspberrypi/raspberrypi.cpp      | 42 +++++++++++++++++++\n> >  1 file changed, 42 insertions(+)\n> >\n> > diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > index ad526a8b..f0ec23cb 100644\n> > --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > @@ -93,6 +93,7 @@ V4L2DeviceFormat toV4L2DeviceFormat(const V4L2SubdeviceFormat &format,\n> >\n> >       deviceFormat.fourcc = V4L2PixelFormat::fromPixelFormat(pix);\n> >       deviceFormat.size = format.size;\n> > +     deviceFormat.colorSpace = format.colorSpace;\n> >       return deviceFormat;\n> >  }\n> >\n> > @@ -129,6 +130,7 @@ V4L2SubdeviceFormat findBestFormat(const SensorFormats &formatsMap, const Size &\n> >  {\n> >       double bestScore = std::numeric_limits<double>::max(), score;\n> >       V4L2SubdeviceFormat bestFormat;\n> > +     bestFormat.colorSpace = ColorSpace::Raw;\n> >\n> >  #define PENALTY_AR           1500.0\n> >  #define PENALTY_8BIT         2000.0\n> > @@ -335,6 +337,8 @@ CameraConfiguration::Status RPiCameraConfiguration::validate()\n> >       if (config_.empty())\n> >               return Invalid;\n> >\n> > +     status = validateColorSpaces(true);\n> > +\n> >       /*\n> >        * What if the platform has a non-90 degree rotation? We can't even\n> >        * \"adjust\" the configuration and carry on. Alternatively, raising an\n> > @@ -497,10 +501,21 @@ CameraConfiguration::Status RPiCameraConfiguration::validate()\n> >               V4L2DeviceFormat format;\n> >               format.fourcc = V4L2PixelFormat::fromPixelFormat(cfg.pixelFormat);\n> >               format.size = cfg.size;\n> > +             format.colorSpace = cfg.colorSpace;\n> > +             LOG(RPI, Debug)\n> > +                     << \"Try color space \" << ColorSpace::toString(cfg.colorSpace);\n>\n> Is this required ? There are no prinouts for the other\n> V4L2DeviceFormat fields..\n>\n> >\n> >               int ret = dev->tryFormat(&format);\n> >               if (ret)\n> >                       return Invalid;\n>\n> Blank line ?\n>\n> > +             if (!format.colorSpace || cfg.colorSpace != format.colorSpace) {\n> > +                     status = Adjusted;\n> > +                     LOG(RPI, Warning)\n> > +                             << \"Color space changed from \"\n> > +                             << ColorSpace::toString(cfg.colorSpace) << \" to \"\n> > +                             << ColorSpace::toString(format.colorSpace);\n> > +             }\n> > +             cfg.colorSpace = format.colorSpace;\n>\n> Do you need to validateColorSpaces() again at the end ?\n> >\n> >               cfg.stride = format.planes[0].bpl;\n> >               cfg.frameSize = format.planes[0].size;\n> > @@ -525,6 +540,7 @@ CameraConfiguration *PipelineHandlerRPi::generateConfiguration(Camera *camera,\n> >       PixelFormat pixelFormat;\n> >       V4L2VideoDevice::Formats fmts;\n> >       Size size;\n> > +     std::optional<ColorSpace> colorSpace;\n> >\n> >       if (roles.empty())\n> >               return config;\n> > @@ -539,6 +555,7 @@ CameraConfiguration *PipelineHandlerRPi::generateConfiguration(Camera *camera,\n> >                       pixelFormat = mbusCodeToPixelFormat(sensorFormat.mbus_code,\n> >                                                           BayerFormat::Packing::CSI2);\n> >                       ASSERT(pixelFormat.isValid());\n> > +                     colorSpace = ColorSpace::Raw;\n> >                       bufferCount = 2;\n> >                       rawCount++;\n> >                       break;\n> > @@ -546,6 +563,7 @@ CameraConfiguration *PipelineHandlerRPi::generateConfiguration(Camera *camera,\n> >               case StreamRole::StillCapture:\n> >                       fmts = data->isp_[Isp::Output0].dev()->formats();\n> >                       pixelFormat = formats::NV12;\n> > +                     colorSpace = ColorSpace::Jpeg;\n> >                       /* Return the largest sensor resolution. */\n> >                       size = data->sensor_->resolution();\n> >                       bufferCount = 1;\n> > @@ -563,6 +581,8 @@ CameraConfiguration *PipelineHandlerRPi::generateConfiguration(Camera *camera,\n> >                        */\n> >                       fmts = data->isp_[Isp::Output0].dev()->formats();\n> >                       pixelFormat = formats::YUV420;\n> > +                     /* This will be reasonable for many applications. */\n> > +                     colorSpace = ColorSpace::Rec709;\n> >                       size = { 1920, 1080 };\n> >                       bufferCount = 4;\n> >                       outCount++;\n> > @@ -571,6 +591,7 @@ CameraConfiguration *PipelineHandlerRPi::generateConfiguration(Camera *camera,\n> >               case StreamRole::Viewfinder:\n> >                       fmts = data->isp_[Isp::Output0].dev()->formats();\n> >                       pixelFormat = formats::ARGB8888;\n> > +                     colorSpace = ColorSpace::Jpeg;\n> >                       size = { 800, 600 };\n> >                       bufferCount = 4;\n> >                       outCount++;\n> > @@ -602,6 +623,7 @@ CameraConfiguration *PipelineHandlerRPi::generateConfiguration(Camera *camera,\n> >               StreamConfiguration cfg(formats);\n> >               cfg.size = size;\n> >               cfg.pixelFormat = pixelFormat;\n> > +             cfg.colorSpace = colorSpace;\n> >               cfg.bufferCount = bufferCount;\n> >               config->addConfiguration(cfg);\n> >       }\n> > @@ -706,6 +728,7 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)\n> >               V4L2PixelFormat fourcc = V4L2PixelFormat::fromPixelFormat(cfg.pixelFormat);\n> >               format.size = cfg.size;\n> >               format.fourcc = fourcc;\n> > +             format.colorSpace = cfg.colorSpace;\n> >\n> >               LOG(RPI, Debug) << \"Setting \" << stream->name() << \" to \"\n> >                               << format.toString();\n> > @@ -721,6 +744,23 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)\n> >                       return -EINVAL;\n> >               }\n> >\n> > +             if (!format.colorSpace || cfg.colorSpace != format.colorSpace) {\n> > +                     /*\n> > +                      * We should have been through validate() before so this\n> > +                      * shouldn't be possible, but we mustn't sweep color space\n> > +                      * problems under the carpet.\n> > +                      */\n>\n> How can this happen then ?\n>\n> > +                     LOG(RPI, Warning)\n> > +                             << \"Unexpected color space (\"\n> > +                             << ColorSpace::toString(cfg.colorSpace) << \" to \"\n> > +                             << ColorSpace::toString(format.colorSpace) << \") in stream \"\n> > +                             << stream->name();\n> > +                     cfg.colorSpace = format.colorSpace;\n> > +             }\n> > +             LOG(RPI, Debug)\n> > +                     << \"Stream \" << stream->name() << \" has color space \"\n> > +                     << ColorSpace::toString(cfg.colorSpace);\n> > +\n>\n> Really a lot of debug around color spaces :)\n\nYes, I agree that I'm really quite paranoid about it. Perhaps a bit\ntoo much! But I do have at least some reasons. Firstly, when pixel\nformats and buffer sizes go wrong you tend to notice straight away\n(when everything crashes) - with colour spaces you don't, so that's\nwhy I put in lots of debug and noisy warnings.\n\nSecondly, our drivers have never really been tested with colour spaces\nyet - so I don't particularly trust them. I definitely want to\ndouble-check that they are behaving as I expect.\n\nI'm not sure if they're terribly good reasons, but maybe it helps to\nexplain a bit!\n\nThanks\nDavid\n\n\nDavid\n\n\n>\n> >               cfg.setStream(stream);\n> >               stream->setExternal(true);\n> >\n> > @@ -745,6 +785,8 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)\n> >               format = {};\n> >               format.size = maxSize;\n> >               format.fourcc = V4L2PixelFormat::fromPixelFormat(formats::YUV420);\n> > +             /* No one asked for output, so the color space doesn't matter. */\n> > +             format.colorSpace = ColorSpace::Jpeg;\n> >               ret = data->isp_[Isp::Output0].dev()->setFormat(&format);\n> >               if (ret) {\n> >                       LOG(RPI, Error)\n> > --\n> > 2.30.2\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 93CD8BDB13\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  1 Dec 2021 15:05:50 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 3ECA76073C;\n\tWed,  1 Dec 2021 16:05:50 +0100 (CET)","from mail-wr1-x42d.google.com (mail-wr1-x42d.google.com\n\t[IPv6:2a00:1450:4864:20::42d])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 58A62604FC\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  1 Dec 2021 16:05:48 +0100 (CET)","by mail-wr1-x42d.google.com with SMTP id a18so53047191wrn.6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 01 Dec 2021 07:05:48 -0800 (PST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=raspberrypi.com header.i=@raspberrypi.com\n\theader.b=\"TTWsp2f6\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google;\n\th=mime-version:references:in-reply-to:from:date:message-id:subject:to\n\t:cc; bh=Y100G2PgKh2RQzuKRfhZmpc92I9iNrS/WqTWpBC0NzA=;\n\tb=TTWsp2f6yPH5r8eKUUxWC1zDUQQqWkLQUcBv4nxvhbXT/we75fmR1IxbUB20iNweci\n\tBXUCKPccSQpC882V7Wfv7pWI9wNbDuo+5MzdwIxAN4O9TMzc+/iCWPhnKSHGMxe5Agsp\n\tTW8YWbGbZ6YaR0nXZXyp+CZ6gPeO/tEdzJWsew95PzjVZG0leia1rQmBcj81a4Tw7jFP\n\tk8ON42yMv9ZpOZk55N1XxPwvUWzymGD4GQ1XkWgqfU7Wz37jQP4IPtkgzxOiD+g9+YL8\n\txrHjkIsj2Mg1IcjghqlyiqxFexTAPn836RpOCR6824CuwQZULmb+u9PXUoMpScOEqLTu\n\tOpIA==","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=Y100G2PgKh2RQzuKRfhZmpc92I9iNrS/WqTWpBC0NzA=;\n\tb=o7OkPyh5+UWoTfQPjZJ0W64Cyu6zWCqkvDBIU+NsexVm8XGICOAk0ijNNBCrCgaOIJ\n\tH2xcy3pgKdiNdcx2n6/pcfJUfujIFe1yLIjAGIzxM0mDOifC6c2CYtxMmUesPvNznJPQ\n\tvMPUPVok/mTNzCVlxASVrQWlKjgiSuCR6qzWkoMWjkJj8mHMe4CnWhQCTql8I0U+hum0\n\tUS5mAZxDnW7npytXksp5GZ58Kvfh0TIq8hekI1vqYXRh0ZaJS0k8gluvdGoxwcnIAlLg\n\tDif4dFRl3jCYVL6IVv0DJWjM1yQSkS8PXfuPJ7HjqRpne79f2/eh9oXSMjN0yYfwqdiP\n\tRDdw==","X-Gm-Message-State":"AOAM530pV8CViUN8FZL0eOCOu0zsC5VGd0glEf4U46QAoRT237OxKQJH\n\tnap+G90QqhL0qPiUKPNZ9G6SrdiJPkRIk+xPpJW5pg==","X-Google-Smtp-Source":"ABdhPJyNljl+s9nAiieqFTaPWLXAabXuTBu8elmdeuest94QzD/S9LVH5AbBJCRf93GcyyTLxq3tSb2KR6lA2H+yLR8=","X-Received":"by 2002:adf:f2ca:: with SMTP id d10mr7210580wrp.79.1638371147974;\n\tWed, 01 Dec 2021 07:05:47 -0800 (PST)","MIME-Version":"1.0","References":"<20211126104045.4756-1-david.plowman@raspberrypi.com>\n\t<20211126104045.4756-8-david.plowman@raspberrypi.com>\n\t<20211130204639.qzbiwqr2yl626dnx@uno.localdomain>","In-Reply-To":"<20211130204639.qzbiwqr2yl626dnx@uno.localdomain>","From":"David Plowman <david.plowman@raspberrypi.com>","Date":"Wed, 1 Dec 2021 15:05:36 +0000","Message-ID":"<CAHW6GYKy00agQYvQ2LMcXbORApXLUTiJEqRA=Ab377zf8fotog@mail.gmail.com>","To":"Jacopo Mondi <jacopo@jmondi.org>","Content-Type":"text/plain; charset=\"UTF-8\"","Subject":"Re: [libcamera-devel] [PATCH v7 7/7] libcamera: pipeline:\n\traspberrypi: Support color spaces","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":"Tomasz Figa <tfiga@google.com>,\n\tlibcamera devel <libcamera-devel@lists.libcamera.org>,\n\tHans Verkuil <hverkuil-cisco@xs4all.nl>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]