[{"id":19567,"web_url":"https://patchwork.libcamera.org/comment/19567/","msgid":"<d3369bb8-d284-9085-e4f1-1084be131748@ideasonboard.com>","date":"2021-09-09T08:31:34","subject":"Re: [libcamera-devel] [PATCH v3 2/7] libcamera: v4l2_pixelformat:\n\tAdd V4L2 description strings","submitter":{"id":75,"url":"https://patchwork.libcamera.org/api/people/75/","name":"Jean-Michel Hautbois","email":"jeanmichel.hautbois@ideasonboard.com"},"content":"Hi Paul,\n\nOn 09/09/2021 10:08, Paul Elder wrote:\n> Add V4L2 description strings to the map of V4L2 formats. To achieve\n> this, create an Info struct to wrap them. Update the one current user of\n> the old map.\n> \n> This will be used later in the V4L2 compatibility layer to report the\n> V4L2 format description.\n> \n> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nReviewed-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>\n> ---\n>  include/libcamera/internal/v4l2_pixelformat.h |   5 +\n>  src/libcamera/v4l2_pixelformat.cpp            | 182 ++++++++++++------\n>  2 files changed, 130 insertions(+), 57 deletions(-)\n> \n> diff --git a/include/libcamera/internal/v4l2_pixelformat.h b/include/libcamera/internal/v4l2_pixelformat.h\n> index 560c5c53..87872542 100644\n> --- a/include/libcamera/internal/v4l2_pixelformat.h\n> +++ b/include/libcamera/internal/v4l2_pixelformat.h\n> @@ -20,6 +20,11 @@ namespace libcamera {\n>  class V4L2PixelFormat\n>  {\n>  public:\n> +\tstruct Info {\n> +\t\tPixelFormat format;\n> +\t\tconst char *description;\n> +\t};\n> +\n>  \tV4L2PixelFormat()\n>  \t\t: fourcc_(0)\n>  \t{\n> diff --git a/src/libcamera/v4l2_pixelformat.cpp b/src/libcamera/v4l2_pixelformat.cpp\n> index d1f3a42f..795da771 100644\n> --- a/src/libcamera/v4l2_pixelformat.cpp\n> +++ b/src/libcamera/v4l2_pixelformat.cpp\n> @@ -45,77 +45,145 @@ LOG_DECLARE_CATEGORY(V4L2)\n>  \n>  namespace {\n>  \n> -const std::map<V4L2PixelFormat, PixelFormat> vpf2pf{\n> +const std::map<V4L2PixelFormat, V4L2PixelFormat::Info> vpf2pf{\n>  \t/* RGB formats. */\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_RGB565), formats::RGB565 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_RGB565X), formats::RGB565_BE },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_RGB24), formats::BGR888 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_BGR24), formats::RGB888 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_XBGR32), formats::XRGB8888 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_XRGB32), formats::BGRX8888 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_RGBX32), formats::XBGR8888 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_RGBA32), formats::ABGR8888 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_ABGR32), formats::ARGB8888 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_ARGB32), formats::BGRA8888 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_BGRA32), formats::RGBA8888 },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_RGB565),\n> +\t\t{ formats::RGB565, \"16-bit RGB 5-6-5\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_RGB565X),\n> +\t\t{ formats::RGB565_BE, \"16-bit RGB 5-6-5 BE\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_RGB24),\n> +\t\t{ formats::BGR888, \"24-bit RGB 8-8-8\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_BGR24),\n> +\t\t{ formats::RGB888, \"24-bit BGR 8-8-8\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_XBGR32),\n> +\t\t{ formats::XRGB8888, \"32-bit BGRX 8-8-8-8\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_XRGB32),\n> +\t\t{ formats::BGRX8888, \"32-bit XRGB 8-8-8-8\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_RGBX32),\n> +\t\t{ formats::XBGR8888, \"32-bit RGBX 8-8-8-8\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_RGBA32),\n> +\t\t{ formats::ABGR8888, \"32-bit RGBA 8-8-8-8\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_ABGR32),\n> +\t\t{ formats::ARGB8888, \"32-bit BGRA 8-8-8-8\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_ARGB32),\n> +\t\t{ formats::BGRA8888, \"32-bit ARGB 8-8-8-8\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_BGRA32),\n> +\t\t{ formats::RGBA8888, \"32-bit ABGR 8-8-8-8\" } },\n>  \n>  \t/* YUV packed formats. */\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_YUYV), formats::YUYV },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_YVYU), formats::YVYU },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_UYVY), formats::UYVY },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_VYUY), formats::VYUY },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_YUYV),\n> +\t\t{ formats::YUYV, \"YUYV 4:2:2\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_YVYU),\n> +\t\t{ formats::YVYU, \"YVYU 4:2:2\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_UYVY),\n> +\t\t{ formats::UYVY, \"UYVY 4:2:2\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_VYUY),\n> +\t\t{ formats::VYUY, \"VYUY 4:2:2\" } },\n>  \n>  \t/* YUV planar formats. */\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_NV16), formats::NV16 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_NV16M), formats::NV16 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_NV61), formats::NV61 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_NV61M), formats::NV61 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_NV12), formats::NV12 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_NV12M), formats::NV12 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_NV21), formats::NV21 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_NV21M), formats::NV21 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_YUV420), formats::YUV420 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_YUV420M), formats::YUV420 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_YVU420), formats::YVU420 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_YVU420M), formats::YVU420 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_YUV422P), formats::YUV422 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_YUV422M), formats::YUV422 },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_NV16),\n> +\t\t{ formats::NV16, \"Y/CbCr 4:2:2\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_NV16M),\n> +\t\t{ formats::NV16, \"Y/CbCr 4:2:2 (N-C)\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_NV61),\n> +\t\t{ formats::NV61, \"Y/CrCb 4:2:2\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_NV61M),\n> +\t\t{ formats::NV61, \"Y/CrCb 4:2:2 (N-C)\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_NV12),\n> +\t\t{ formats::NV12, \"Y/CbCr 4:2:0\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_NV12M),\n> +\t\t{ formats::NV12, \"Y/CbCr 4:2:0 (N-C)\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_NV21),\n> +\t\t{ formats::NV21, \"Y/CrCb 4:2:0\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_NV21M),\n> +\t\t{ formats::NV21, \"Y/CrCb 4:2:0 (N-C)\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_YUV420),\n> +\t\t{ formats::YUV420, \"Planar YUV 4:2:0\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_YUV420M),\n> +\t\t{ formats::YUV420, \"Planar YUV 4:2:0 (N-C)\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_YVU420),\n> +\t\t{ formats::YVU420, \"Planar YVU 4:2:0\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_YVU420M),\n> +\t\t{ formats::YVU420, \"Planar YVU 4:2:0 (N-C)\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_YUV422P),\n> +\t\t{ formats::YUV422, \"Planar YUV 4:2:2\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_YUV422M),\n> +\t\t{ formats::YUV422, \"Planar YUV 4:2:2 (N-C)\" } },\n>  \n>  \t/* Greyscale formats. */\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_GREY), formats::R8 },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_GREY),\n> +\t\t{ formats::R8, \"8-bit Greyscale\" } },\n>  \n>  \t/* Bayer formats. */\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_SBGGR8), formats::SBGGR8 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_SGBRG8), formats::SGBRG8 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_SGRBG8), formats::SGRBG8 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_SRGGB8), formats::SRGGB8 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_SBGGR10), formats::SBGGR10 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_SGBRG10), formats::SGBRG10 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_SGRBG10), formats::SGRBG10 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_SRGGB10), formats::SRGGB10 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_SBGGR10P), formats::SBGGR10_CSI2P },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_SGBRG10P), formats::SGBRG10_CSI2P },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_SGRBG10P), formats::SGRBG10_CSI2P },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_SRGGB10P), formats::SRGGB10_CSI2P },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_SBGGR12), formats::SBGGR12 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_SGBRG12), formats::SGBRG12 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_SGRBG12), formats::SGRBG12 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_SRGGB12), formats::SRGGB12 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_SBGGR12P), formats::SBGGR12_CSI2P },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_SGBRG12P), formats::SGBRG12_CSI2P },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_SGRBG12P), formats::SGRBG12_CSI2P },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_SRGGB12P), formats::SRGGB12_CSI2P },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_SBGGR16), formats::SBGGR16 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_SGBRG16), formats::SGBRG16 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_SGRBG16), formats::SGRBG16 },\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_SRGGB16), formats::SRGGB16 },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_SBGGR8),\n> +\t\t{ formats::SBGGR8, \"8-bit Bayer BGBG/GRGR\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_SGBRG8),\n> +\t\t{ formats::SGBRG8, \"8-bit Bayer GBGB/RGRG\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_SGRBG8),\n> +\t\t{ formats::SGRBG8, \"8-bit Bayer GRGR/BGBG\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_SRGGB8),\n> +\t\t{ formats::SRGGB8, \"8-bit Bayer RGRG/GBGB\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_SBGGR10),\n> +\t\t{ formats::SBGGR10, \"10-bit Bayer BGBG/GRGR\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_SGBRG10),\n> +\t\t{ formats::SGBRG10, \"10-bit Bayer GBGB/RGRG\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_SGRBG10),\n> +\t\t{ formats::SGRBG10, \"10-bit Bayer GRGR/BGBG\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_SRGGB10),\n> +\t\t{ formats::SRGGB10, \"10-bit Bayer RGRG/GBGB\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_SBGGR10P),\n> +\t\t{ formats::SBGGR10_CSI2P, \"10-bit Bayer BGBG/GRGR Packed\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_SGBRG10P),\n> +\t\t{ formats::SGBRG10_CSI2P, \"10-bit Bayer GBGB/RGRG Packed\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_SGRBG10P),\n> +\t\t{ formats::SGRBG10_CSI2P, \"10-bit Bayer GRGR/BGBG Packed\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_SRGGB10P),\n> +\t\t{ formats::SRGGB10_CSI2P, \"10-bit Bayer RGRG/GBGB Packed\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_SBGGR12),\n> +\t\t{ formats::SBGGR12, \"12-bit Bayer BGBG/GRGR\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_SGBRG12),\n> +\t\t{ formats::SGBRG12, \"12-bit Bayer GBGB/RGRG\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_SGRBG12),\n> +\t\t{ formats::SGRBG12, \"12-bit Bayer GRGR/BGBG\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_SRGGB12),\n> +\t\t{ formats::SRGGB12, \"12-bit Bayer RGRG/GBGB\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_SBGGR12P),\n> +\t\t{ formats::SBGGR12_CSI2P, \"12-bit Bayer BGBG/GRGR Packed\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_SGBRG12P),\n> +\t\t{ formats::SGBRG12_CSI2P, \"12-bit Bayer GBGB/RGRG Packed\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_SGRBG12P),\n> +\t\t{ formats::SGRBG12_CSI2P, \"12-bit Bayer GRGR/BGBG Packed\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_SRGGB12P),\n> +\t\t{ formats::SRGGB12_CSI2P, \"12-bit Bayer RGRG/GBGB Packed\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_SBGGR16),\n> +\t\t{ formats::SBGGR16, \"16-bit Bayer BGBG/GRGR\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_SGBRG16),\n> +\t\t{ formats::SGBRG16, \"16-bit Bayer GBGB/RGRG\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_SGRBG16),\n> +\t\t{ formats::SGRBG16, \"16-bit Bayer GRGR/BGBG\" } },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_SRGGB16),\n> +\t\t{ formats::SRGGB16, \"16-bit Bayer RGRG/GBGB\" } },\n>  \n>  \t/* Compressed formats. */\n> -\t{ V4L2PixelFormat(V4L2_PIX_FMT_MJPEG), formats::MJPEG },\n> +\t{ V4L2PixelFormat(V4L2_PIX_FMT_MJPEG),\n> +\t\t{ formats::MJPEG, \"Motion-JPEG\" } },\n>  };\n>  \n>  } /* namespace */\n>  \n> +/**\n> + * \\struct V4L2PixelFormat::Info\n> + * \\brief Information about a V4L2 pixel format\n> + *\n> + * \\var V4L2PixelFormat::Info::format\n> + * \\brief The corresponding libcamera PixelFormat\n> + *\n> + * \\sa PixelFormat\n> + *\n> + * \\var V4L2PixelFormat::Info::description\n> + * \\brief The human-readable description of the V4L2 pixel format\n> + */\n> +\n>  /**\n>   * \\fn V4L2PixelFormat::V4L2PixelFormat()\n>   * \\brief Construct a V4L2PixelFormat with an invalid format\n> @@ -192,7 +260,7 @@ PixelFormat V4L2PixelFormat::toPixelFormat() const\n>  \t\treturn PixelFormat();\n>  \t}\n>  \n> -\treturn iter->second;\n> +\treturn iter->second.format;\n>  }\n>  \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 E2588BDC71\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  9 Sep 2021 08:31:39 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 6FBF56916A;\n\tThu,  9 Sep 2021 10:31:39 +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 955F86024E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  9 Sep 2021 10:31:37 +0200 (CEST)","from tatooine.ideasonboard.com (unknown\n\t[IPv6:2a01:e0a:169:7140:ab35:be36:579e:39cf])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 2B16E466;\n\tThu,  9 Sep 2021 10:31:37 +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=\"theImKhq\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1631176297;\n\tbh=etL9gYXOWNWPFWPq74P+uiHUW/MAwGMuFyALvOnNVp4=;\n\th=Subject:To:References:From:Date:In-Reply-To:From;\n\tb=theImKhqSOlDs7Y6APCwm8VTyYSaX6dWWIOyIs1IB6wTsQn8rz0xNrPM4gdnLutKP\n\tB/foTu/JZyBDOtCXjQt0iMbHLx1lVG5zAufDkGvw81CnaCOao8l3HZFlocgVECGAYx\n\tz7lKiRnlEpKYAscVzCod8Ma0aMPxXIJbxvzOBn/I=","To":"Paul Elder <paul.elder@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20210909080902.239533-1-paul.elder@ideasonboard.com>\n\t<20210909080902.239533-3-paul.elder@ideasonboard.com>","From":"Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>","Message-ID":"<d3369bb8-d284-9085-e4f1-1084be131748@ideasonboard.com>","Date":"Thu, 9 Sep 2021 10:31:34 +0200","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101\n\tThunderbird/78.13.0","MIME-Version":"1.0","In-Reply-To":"<20210909080902.239533-3-paul.elder@ideasonboard.com>","Content-Type":"text/plain; charset=utf-8","Content-Language":"en-US","Content-Transfer-Encoding":"7bit","Subject":"Re: [libcamera-devel] [PATCH v3 2/7] libcamera: v4l2_pixelformat:\n\tAdd V4L2 description strings","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]