[{"id":16708,"web_url":"https://patchwork.libcamera.org/comment/16708/","msgid":"<YIzzRRs67xrRDXLP@oden.dyn.berto.se>","date":"2021-05-01T06:20:53","subject":"Re: [libcamera-devel] [PATCH v6 1/3] libcamera: Introduce camera\n\tsensor properties","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/people/5/","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"content":"Hi Jacopo,\n\nThanks for your work.\n\nOn 2021-04-30 19:38:01 +0200, Jacopo Mondi wrote:\n> Introduce a database of camera sensor properties, which contains\n> information on the camera sensor which are not possible, or desirable,\n> to retrieve from the device at run time.\n> \n> The camera sensor database is accessed through a static function and\n> is indexed using the camera sensor model as reported by\n> properties::Model.\n> \n> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n> ---\n>  .../internal/camera_sensor_properties.h       | 24 +++++++\n>  include/libcamera/internal/meson.build        |  1 +\n>  src/libcamera/camera_sensor_properties.cpp    | 71 +++++++++++++++++++\n>  src/libcamera/meson.build                     |  1 +\n>  4 files changed, 97 insertions(+)\n>  create mode 100644 include/libcamera/internal/camera_sensor_properties.h\n>  create mode 100644 src/libcamera/camera_sensor_properties.cpp\n> \n> diff --git a/include/libcamera/internal/camera_sensor_properties.h b/include/libcamera/internal/camera_sensor_properties.h\n> new file mode 100644\n> index 000000000000..f5e242cb34a2\n> --- /dev/null\n> +++ b/include/libcamera/internal/camera_sensor_properties.h\n> @@ -0,0 +1,24 @@\n> +/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> +/*\n> + * Copyright (C) 2021, Google Inc.\n> + *\n> + * camera_sensor_properties.h - Database of camera sensor properties\n> + */\n> +#ifndef __LIBCAMERA_SENSOR_CAMERA_SENSOR_PROPERTIES_H__\n> +#define __LIBCAMERA_SENSOR_CAMERA_SENSOR_PROPERTIES_H__\n> +\n> +#include <string>\n> +\n> +#include <libcamera/geometry.h>\n> +\n> +namespace libcamera {\n> +\n> +struct CameraSensorProperties {\n> +\tstatic const CameraSensorProperties *get(const std::string &sensor);\n> +\n> +\tSize unitCellSize;\n> +};\n> +\n> +} /* namespace libcamera */\n> +\n> +#endif /* __LIBCAMERA_SENSOR_CAMERA_SENSOR_PROPERTIES_H__ */\n> diff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build\n> index 1fe3918cfe93..6cff1b9032c6 100644\n> --- a/include/libcamera/internal/meson.build\n> +++ b/include/libcamera/internal/meson.build\n> @@ -15,6 +15,7 @@ libcamera_internal_headers = files([\n>      'byte_stream_buffer.h',\n>      'camera_controls.h',\n>      'camera_sensor.h',\n> +    'camera_sensor_properties.h',\n>      'control_serializer.h',\n>      'control_validator.h',\n>      'delayed_controls.h',\n> diff --git a/src/libcamera/camera_sensor_properties.cpp b/src/libcamera/camera_sensor_properties.cpp\n> new file mode 100644\n> index 000000000000..6ded31dcae4f\n> --- /dev/null\n> +++ b/src/libcamera/camera_sensor_properties.cpp\n> @@ -0,0 +1,71 @@\n> +/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> +/*\n> + * Copyright (C) 2021, Google Inc.\n> + *\n> + * camera_sensor_properties.cpp - Database of camera sensor properties\n> + */\n> +\n> +#include \"libcamera/internal/camera_sensor_properties.h\"\n> +\n> +#include <map>\n> +\n> +#include \"libcamera/internal/log.h\"\n> +\n> +/**\n> + * \\file camera_sensor_properties.h\n> + * \\brief Database of camera sensor properties\n> + *\n> + * The database of camera sensor properties collects static information about\n> + * camera sensors that is not possible or desirable to retrieve from the device\n> + * at run time.\n> + *\n> + * The database is indexed using the camera sensor model, as reported by the\n> + * properties::Model property, and for each supported sensor it contains a\n> + * list of properties.\n> + */\n> +\n> +namespace libcamera {\n> +\n> +LOG_DEFINE_CATEGORY(CameraSensorProperties)\n> +\n> +/**\n> + * \\struct CameraSensorProperties\n> + * \\brief Database of camera sensor properties\n> + *\n> + * \\var CameraSensorProperties::unitCellSize\n> + * \\brief The physical size of a pixel, including pixel edges, in nanometers.\n> + */\n> +\n> +/**\n> + * \\brief Retrieve the properties associated with a sensor\n> + * \\param sensor The sensor model name as reported by properties::Model\n> + * \\return A pointer to the CameraSensorProperties instance associated with a sensor\n> + * or nullptr if the sensor is not supported\n> + */\n> +const CameraSensorProperties *CameraSensorProperties::get(const std::string &sensor)\n> +{\n> +\tstatic const std::map<std::string, const CameraSensorProperties> sensorProps = {\n> +\t\t{ \"imx219\", {\n> +\t\t\t.unitCellSize = { 1120, 1120 },\n> +\t\t} },\n> +\t\t{ \"ov5670\", {\n> +\t\t\t.unitCellSize = { 1120, 1120 },\n> +\t\t} },\n> +\t\t{ \"ov13858\", {\n> +\t\t\t.unitCellSize = { 1120, 1120 },\n> +\t\t} },\n> +\t};\n> +\n> +\tconst auto it = sensorProps.find(sensor);\n> +\tif (it == sensorProps.end()) {\n> +\t\tLOG(CameraSensorProperties, Warning)\n> +\t\t\t<< \"No static properties available for '\" << sensor << \"'\";\n> +\t\tLOG(CameraSensorProperties, Warning)\n> +\t\t\t<< \"Please consider updating the camera sensor properties database\";\n\nnit: I still cringe when I read log messages split in two statements :-)\n\nReviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n\n> +\t\treturn nullptr;\n> +\t}\n> +\n> +\treturn &it->second;\n> +}\n> +\n> +} /* namespace libcamera */\n> diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build\n> index e0a48aa23ea5..675053d41513 100644\n> --- a/src/libcamera/meson.build\n> +++ b/src/libcamera/meson.build\n> @@ -9,6 +9,7 @@ libcamera_sources = files([\n>      'camera_controls.cpp',\n>      'camera_manager.cpp',\n>      'camera_sensor.cpp',\n> +    'camera_sensor_properties.cpp',\n>      'class.cpp',\n>      'controls.cpp',\n>      'control_serializer.cpp',\n> -- \n> 2.31.1\n> \n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","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 D6999BDE6B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSat,  1 May 2021 06:21:01 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2B843688E4;\n\tSat,  1 May 2021 08:21:01 +0200 (CEST)","from mail-lf1-x12c.google.com (mail-lf1-x12c.google.com\n\t[IPv6:2a00:1450:4864:20::12c])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 5943B602BF\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat,  1 May 2021 08:20:59 +0200 (CEST)","by mail-lf1-x12c.google.com with SMTP id 2so391207lft.4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 30 Apr 2021 23:20:59 -0700 (PDT)","from localhost (h-209-203.A463.priv.bahnhof.se. [155.4.209.203])\n\tby smtp.gmail.com with ESMTPSA id\n\tf11sm488170lfr.119.2021.04.30.23.20.54\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tFri, 30 Apr 2021 23:20:54 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=ragnatech-se.20150623.gappssmtp.com\n\theader.i=@ragnatech-se.20150623.gappssmtp.com\n\theader.b=\"c0XkN7/H\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=ragnatech-se.20150623.gappssmtp.com; s=20150623;\n\th=date:from:to:cc:subject:message-id:references:mime-version\n\t:content-disposition:content-transfer-encoding:in-reply-to;\n\tbh=CpkGod+CW8kxBMybQ1Hjr2tg1dKtI44XSVl8N4mBzIk=;\n\tb=c0XkN7/HYSmkFQ171nlzYQ6JMbubqtJWG64XIx07L3Ytoim6dsUPyWpGEQm31W4AHg\n\tnmjvn42oe2Bk+m9HGLFcTajS9M11v6DFIm0cWpyWoBP9qqG+Zop+S9vCZaUHCjmelvA2\n\tMpeosRbQ2tYqiT2PuA046z8lOXuQOPnFQv1dPV5qwb/LoTxRozN1c8ieqCRLWKpXHYKX\n\tGDbWwKe8hpUYR4e+XgyemQHNcVbXVevmgFw1vRLUpJ42VOJhBwl6SFPOFkvTQ2d7kI/K\n\t/AVqEtnZUZ2FzAq7ug53YHTL+weiydba6SoIx1AMtXHBPD94zAA48Y6Bz9abLHLeMZnJ\n\tYEjg==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:content-transfer-encoding\n\t:in-reply-to;\n\tbh=CpkGod+CW8kxBMybQ1Hjr2tg1dKtI44XSVl8N4mBzIk=;\n\tb=Z+3+Emeip6OXPyZDMBDLGlQGvSXrkx5LerSpcUZ9SD6kqPKvxHejJlyzJAMWBYn11T\n\tztRZ41HKUJoW/Phgom7zGZnFgaVg49G/1sYHYdGKHp7If39hi0bFN8tMXP17xn7c6vzm\n\t9INOIYcMS6Mnw4gjuxgogPHorLRf933NnbMh96Zm2HVmZyS8Kzcp0wiO9pFH7U7edPOv\n\tcjaFIUb1cvJFFe87gVNogMIoB54bjfAIsQKtsXdgjMj+9g+NhbgsWJPE//eJ/q6Fi/vI\n\trBVvDk0boLVwgDz2x8pFThPHtPGk4bSZXpybKbbaZuy1mI1EzERFqzJySA68esjQRhDh\n\txlww==","X-Gm-Message-State":"AOAM533wGv4kwy+Mjf4Qb4IAxnMrmm5MlYwm6gFlG3R2T8ZhdUWyIlPT\n\tgUn/Ow07oW2mPIK37bIG8nheCBd2nicgvQ==","X-Google-Smtp-Source":"ABdhPJyXV2B9vWFQtMQtAMk7aDqhDciC2xheezjSVyRGNmEJA6cQUHr5f5QiemFTnwCisiclrSGRAQ==","X-Received":"by 2002:ac2:5e73:: with SMTP id\n\ta19mr5855267lfr.353.1619850058595; \n\tFri, 30 Apr 2021 23:20:58 -0700 (PDT)","Date":"Sat, 1 May 2021 08:20:53 +0200","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Jacopo Mondi <jacopo@jmondi.org>","Message-ID":"<YIzzRRs67xrRDXLP@oden.dyn.berto.se>","References":"<20210430173803.198220-1-jacopo@jmondi.org>\n\t<20210430173803.198220-2-jacopo@jmondi.org>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20210430173803.198220-2-jacopo@jmondi.org>","Subject":"Re: [libcamera-devel] [PATCH v6 1/3] libcamera: Introduce camera\n\tsensor properties","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","Content-Type":"text/plain; charset=\"iso-8859-1\"","Content-Transfer-Encoding":"quoted-printable","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":16856,"web_url":"https://patchwork.libcamera.org/comment/16856/","msgid":"<YJkqgQ4H3wSKMncr@pendragon.ideasonboard.com>","date":"2021-05-10T12:43:45","subject":"Re: [libcamera-devel] [PATCH v6 1/3] libcamera: Introduce camera\n\tsensor properties","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Jacopo,\n\nThank you for the patch.\n\nOn Fri, Apr 30, 2021 at 07:38:01PM +0200, Jacopo Mondi wrote:\n> Introduce a database of camera sensor properties, which contains\n> information on the camera sensor which are not possible, or desirable,\n> to retrieve from the device at run time.\n> \n> The camera sensor database is accessed through a static function and\n> is indexed using the camera sensor model as reported by\n> properties::Model.\n> \n> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> ---\n>  .../internal/camera_sensor_properties.h       | 24 +++++++\n>  include/libcamera/internal/meson.build        |  1 +\n>  src/libcamera/camera_sensor_properties.cpp    | 71 +++++++++++++++++++\n>  src/libcamera/meson.build                     |  1 +\n>  4 files changed, 97 insertions(+)\n>  create mode 100644 include/libcamera/internal/camera_sensor_properties.h\n>  create mode 100644 src/libcamera/camera_sensor_properties.cpp\n> \n> diff --git a/include/libcamera/internal/camera_sensor_properties.h b/include/libcamera/internal/camera_sensor_properties.h\n> new file mode 100644\n> index 000000000000..f5e242cb34a2\n> --- /dev/null\n> +++ b/include/libcamera/internal/camera_sensor_properties.h\n> @@ -0,0 +1,24 @@\n> +/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> +/*\n> + * Copyright (C) 2021, Google Inc.\n> + *\n> + * camera_sensor_properties.h - Database of camera sensor properties\n> + */\n> +#ifndef __LIBCAMERA_SENSOR_CAMERA_SENSOR_PROPERTIES_H__\n> +#define __LIBCAMERA_SENSOR_CAMERA_SENSOR_PROPERTIES_H__\n> +\n> +#include <string>\n> +\n> +#include <libcamera/geometry.h>\n> +\n> +namespace libcamera {\n> +\n> +struct CameraSensorProperties {\n> +\tstatic const CameraSensorProperties *get(const std::string &sensor);\n> +\n> +\tSize unitCellSize;\n> +};\n> +\n> +} /* namespace libcamera */\n> +\n> +#endif /* __LIBCAMERA_SENSOR_CAMERA_SENSOR_PROPERTIES_H__ */\n> diff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build\n> index 1fe3918cfe93..6cff1b9032c6 100644\n> --- a/include/libcamera/internal/meson.build\n> +++ b/include/libcamera/internal/meson.build\n> @@ -15,6 +15,7 @@ libcamera_internal_headers = files([\n>      'byte_stream_buffer.h',\n>      'camera_controls.h',\n>      'camera_sensor.h',\n> +    'camera_sensor_properties.h',\n>      'control_serializer.h',\n>      'control_validator.h',\n>      'delayed_controls.h',\n> diff --git a/src/libcamera/camera_sensor_properties.cpp b/src/libcamera/camera_sensor_properties.cpp\n> new file mode 100644\n> index 000000000000..6ded31dcae4f\n> --- /dev/null\n> +++ b/src/libcamera/camera_sensor_properties.cpp\n> @@ -0,0 +1,71 @@\n> +/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> +/*\n> + * Copyright (C) 2021, Google Inc.\n> + *\n> + * camera_sensor_properties.cpp - Database of camera sensor properties\n> + */\n> +\n> +#include \"libcamera/internal/camera_sensor_properties.h\"\n> +\n> +#include <map>\n> +\n> +#include \"libcamera/internal/log.h\"\n> +\n> +/**\n> + * \\file camera_sensor_properties.h\n> + * \\brief Database of camera sensor properties\n> + *\n> + * The database of camera sensor properties collects static information about\n> + * camera sensors that is not possible or desirable to retrieve from the device\n> + * at run time.\n> + *\n> + * The database is indexed using the camera sensor model, as reported by the\n> + * properties::Model property, and for each supported sensor it contains a\n> + * list of properties.\n> + */\n> +\n> +namespace libcamera {\n> +\n> +LOG_DEFINE_CATEGORY(CameraSensorProperties)\n> +\n> +/**\n> + * \\struct CameraSensorProperties\n> + * \\brief Database of camera sensor properties\n> + *\n> + * \\var CameraSensorProperties::unitCellSize\n> + * \\brief The physical size of a pixel, including pixel edges, in nanometers.\n> + */\n> +\n> +/**\n> + * \\brief Retrieve the properties associated with a sensor\n> + * \\param sensor The sensor model name as reported by properties::Model\n> + * \\return A pointer to the CameraSensorProperties instance associated with a sensor\n> + * or nullptr if the sensor is not supported\n> + */\n> +const CameraSensorProperties *CameraSensorProperties::get(const std::string &sensor)\n> +{\n> +\tstatic const std::map<std::string, const CameraSensorProperties> sensorProps = {\n> +\t\t{ \"imx219\", {\n> +\t\t\t.unitCellSize = { 1120, 1120 },\n> +\t\t} },\n> +\t\t{ \"ov5670\", {\n> +\t\t\t.unitCellSize = { 1120, 1120 },\n> +\t\t} },\n> +\t\t{ \"ov13858\", {\n> +\t\t\t.unitCellSize = { 1120, 1120 },\n> +\t\t} },\n> +\t};\n> +\n> +\tconst auto it = sensorProps.find(sensor);\n> +\tif (it == sensorProps.end()) {\n> +\t\tLOG(CameraSensorProperties, Warning)\n> +\t\t\t<< \"No static properties available for '\" << sensor << \"'\";\n> +\t\tLOG(CameraSensorProperties, Warning)\n> +\t\t\t<< \"Please consider updating the camera sensor properties database\";\n> +\t\treturn nullptr;\n> +\t}\n> +\n> +\treturn &it->second;\n> +}\n> +\n> +} /* namespace libcamera */\n> diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build\n> index e0a48aa23ea5..675053d41513 100644\n> --- a/src/libcamera/meson.build\n> +++ b/src/libcamera/meson.build\n> @@ -9,6 +9,7 @@ libcamera_sources = files([\n>      'camera_controls.cpp',\n>      'camera_manager.cpp',\n>      'camera_sensor.cpp',\n> +    'camera_sensor_properties.cpp',\n>      'class.cpp',\n>      'controls.cpp',\n>      'control_serializer.cpp',","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 0154EBF831\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 10 May 2021 12:43:54 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2F56C68911;\n\tMon, 10 May 2021 14:43:54 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 95632602BE\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 10 May 2021 14:43:52 +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 0B3C4908;\n\tMon, 10 May 2021 14:43:51 +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=\"qkRwlUX3\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1620650632;\n\tbh=txvZ2tdss5JSh2L7d0yuVBTByDky7Aunb50sz+UkiaE=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=qkRwlUX3pEVwv7MPliKFVNXcm0VvVHXHVzRD8FHJnYitCqlDKykkTFvHiyp/XpFgh\n\tqExNZ3NexfzrPKO1U33vZ/vyExUjDZpYIjUSBwOu7ai6wtW6008dqAlEqsADU8QLjU\n\tdcKNHh2OZ+D4hB/29Kz5XfrWzCdlV+Fz1WrEjL4Q=","Date":"Mon, 10 May 2021 15:43:45 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Jacopo Mondi <jacopo@jmondi.org>","Message-ID":"<YJkqgQ4H3wSKMncr@pendragon.ideasonboard.com>","References":"<20210430173803.198220-1-jacopo@jmondi.org>\n\t<20210430173803.198220-2-jacopo@jmondi.org>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20210430173803.198220-2-jacopo@jmondi.org>","Subject":"Re: [libcamera-devel] [PATCH v6 1/3] libcamera: Introduce camera\n\tsensor properties","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","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]