[{"id":25248,"web_url":"https://patchwork.libcamera.org/comment/25248/","msgid":"<Yztp+gjcpcVOem6v@pendragon.ideasonboard.com>","date":"2022-10-03T23:02:18","subject":"Re: [libcamera-devel] [PATCH 09/14] libcamera: converter: Introduce\n\tdw100 converter","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Xavier,\n\nThank you for the patch.\n\nOn Thu, Sep 08, 2022 at 08:48:45PM +0200, Xavier Roumegue via libcamera-devel wrote:\n> Add converter support for the Vivante DW100 Dewarp Processor IP core\n> found on i.MX8MP SoC.\n> \n> The processor core applies a programmable geometrical transformation on\n> input images to correct distorsion introduced by lenses.\n> The transformation function is exposed as a grid map with 16x16 pixel\n> macroblocks indexed using X, Y vertex coordinates.\n> \n> A set of input/output vertices mapping can be loaded at runtime through\n> a configuration file. If no mapping is loaded, the vertices mapping\n> fallbacks to an identity transformation. Scaling and pixel format\n> conversion can be used independently of the vertices remapping.\n> \n> Signed-off-by: Xavier Roumegue <xavier.roumegue@oss.nxp.com>\n> ---\n>  include/libcamera/internal/converter_dw100.h | 25 +++++++++++++++\n>  include/libcamera/internal/meson.build       |  1 +\n>  src/libcamera/converter_dw100.cpp            | 32 ++++++++++++++++++++\n>  src/libcamera/meson.build                    |  1 +\n>  4 files changed, 59 insertions(+)\n>  create mode 100644 include/libcamera/internal/converter_dw100.h\n>  create mode 100644 src/libcamera/converter_dw100.cpp\n> \n> diff --git a/include/libcamera/internal/converter_dw100.h b/include/libcamera/internal/converter_dw100.h\n> new file mode 100644\n> index 00000000..1972d6a2\n> --- /dev/null\n> +++ b/include/libcamera/internal/converter_dw100.h\n> @@ -0,0 +1,25 @@\n> +/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> +/*\n> + * Copyright 2022 NXP\n> + *\n> + * converter_dw100.h - V4l2 M2M dw100 format converter interface\n> + */\n> +\n> +#pragma once\n> +\n> +#include <linux/dw100.h>\n> +\n> +#include \"libcamera/internal/converter_v4l2_m2m.h\"\n> +#include \"libcamera/internal/media_device.h\"\n\nYou can drop this header, it's guaranteed to be included by\nlibcamera/internal/converter_v4l2_m2m.h as the MediaDevice is passed to\nthe V4L2M2MConverter constructor.\n\n> +\n> +namespace libcamera {\n> +\n> +class DW100Converter : public V4L2M2MConverter\n> +{\n> +public:\n> +\tDW100Converter(MediaDevice *media)\n> +\t\t: V4L2M2MConverter(media){};\n\n\tDW100Converter(MediaDevice *media)\n\t\t: V4L2M2MConverter(media)\n\t{\n\t};\n\n> +\tvirtual int applyMapping(Stream *stream, Mapping &mapping) override;\n\ns/virtual //\n\n> +};\n> +\n> +} /* namespace libcamera */\n> diff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build\n> index 132de5ef..c2dd094f 100644\n> --- a/include/libcamera/internal/meson.build\n> +++ b/include/libcamera/internal/meson.build\n> @@ -20,6 +20,7 @@ libcamera_internal_headers = files([\n>      'control_serializer.h',\n>      'control_validator.h',\n>      'converter.h',\n> +    'converter_dw100.h',\n>      'converter_v4l2_m2m.h',\n>      'delayed_controls.h',\n>      'device_enumerator.h',\n> diff --git a/src/libcamera/converter_dw100.cpp b/src/libcamera/converter_dw100.cpp\n> new file mode 100644\n> index 00000000..b079fb37\n> --- /dev/null\n> +++ b/src/libcamera/converter_dw100.cpp\n> @@ -0,0 +1,32 @@\n> +/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> +/*\n> + * Copyright 2022 NXP\n> + *\n> + * converter_dw100.cpp - V4L2 M2M dw100 format converter\n> + */\n> +\n> +#include \"libcamera/internal/converter_dw100.h\"\n> +\n> +#include <libcamera/base/log.h>\n> +\n> +#include <libcamera/controls.h>\n> +\n> +#include \"libcamera/internal/v4l2_videodevice.h\"\n> +\n> +namespace libcamera {\n> +\n> +LOG_DECLARE_CATEGORY(Converter)\n\nNot used.\n\n> +\n> +int DW100Converter::applyMapping(Stream *stream, Mapping &mapping)\n> +{\n> +\tControlList ctrls;\n> +\tauto value = Span<const int32_t>(reinterpret_cast<const int32_t *>(mapping.getMapping()), mapping.getLength());\n> +\tControlValue c(value);\n> +\tctrls.set(V4L2_CID_DW100_DEWARPING_16x16_VERTEX_MAP, c);\n> +\tstream->m2m_->capture()->setControls(&ctrls);\n> +\treturn 0;\n> +}\n\nAs we have a single converter that can perform dewarping, I'd prefer\nmoving the Mapping support from V4L2M2MConverter to this class. It's\nhard to predict what other dewarpers will need, and designing an API\nbased on a single example usually doesn't produce the best design. We\ncan always refactor the code later when we'll get a second device.\n\n> +\n> +REGISTER_CONVERTER(\"dw100\", DW100Converter)\n> +\n> +} /* namespace libcamera */\n> diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build\n> index b12c8401..83da3e5f 100644\n> --- a/src/libcamera/meson.build\n> +++ b/src/libcamera/meson.build\n> @@ -14,6 +14,7 @@ libcamera_sources = files([\n>      'control_serializer.cpp',\n>      'control_validator.cpp',\n>      'converter.cpp',\n> +    'converter_dw100.cpp',\n>      'converter_v4l2_m2m.cpp',\n>      'delayed_controls.cpp',\n>      'device_enumerator.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 9F555BD16B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  3 Oct 2022 23:02:23 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id DF86F603DA;\n\tTue,  4 Oct 2022 01:02:22 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 3879B601C7\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  4 Oct 2022 01:02:21 +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 909179DE;\n\tTue,  4 Oct 2022 01:02:20 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1664838142;\n\tbh=N08NC1cTYyvM8cd/otP6ciWBviwDZp3htPWC80a+W6k=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=lK6y9FEHY/st1J3pT9D7w47mySM5yu72Z0CR8C8V3GvlFetmUNCs3J41DUZ3yfVCM\n\tKg1TdYEs6sjjbT2+MxBXEZ3RBcspeBstnOUfz/DAO97rDIui4C8NdN9pCEUWaVDo7z\n\tiqgwlCu/prdjZDKA55f6IlM7c3bxZXmYDvzeMJZowFZTaMzGDTDUy7TOOb/9K1lWQA\n\t+tJG0C6OpOSWXrPeesfhWrRpe8z/JhPFVS+aV8MTgkZwdkIXEbs5aIMozX803JriBg\n\tHQGs63fLXe6D/MHjweW1uN941k9u2Lr6VI1chm5AlTEWVJZAhGLGkMl11FKa6LGzMM\n\tI9MGkbFVpZZkw==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1664838140;\n\tbh=N08NC1cTYyvM8cd/otP6ciWBviwDZp3htPWC80a+W6k=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=hFcC1iTj5vla6CoCr1kznZERCt2BXEl9Fk+6nFXf8RJL27qd/Z2zNJtXoDnU/T332\n\tabYUFJGss5JvQMx1BXIA9c9oHsUKjKBxeRXkmFL4/UygJY0nho8nTulMjQ1u3tygoG\n\t/N4gfPkIhtqHqM0WDvveExbucKjedNXTsnYdI/mY="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"hFcC1iTj\"; dkim-atps=neutral","Date":"Tue, 4 Oct 2022 02:02:18 +0300","To":"Xavier Roumegue <xavier.roumegue@oss.nxp.com>","Message-ID":"<Yztp+gjcpcVOem6v@pendragon.ideasonboard.com>","References":"<20220908184850.1874303-1-xavier.roumegue@oss.nxp.com>\n\t<20220908184850.1874303-10-xavier.roumegue@oss.nxp.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20220908184850.1874303-10-xavier.roumegue@oss.nxp.com>","Subject":"Re: [libcamera-devel] [PATCH 09/14] libcamera: converter: Introduce\n\tdw100 converter","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>","From":"Laurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":25326,"web_url":"https://patchwork.libcamera.org/comment/25326/","msgid":"<f6c4d47e-aabd-6c6c-0fdc-6aa4553f71b4@oss.nxp.com>","date":"2022-10-07T12:52:19","subject":"Re: [libcamera-devel] [PATCH 09/14] libcamera: converter: Introduce\n\tdw100 converter","submitter":{"id":107,"url":"https://patchwork.libcamera.org/api/people/107/","name":"Xavier Roumegue","email":"xavier.roumegue@oss.nxp.com"},"content":"Hi Laurent,\n\nOn 10/4/22 01:02, Laurent Pinchart wrote:\n> Hi Xavier,\n> \n> Thank you for the patch.\n> \n> On Thu, Sep 08, 2022 at 08:48:45PM +0200, Xavier Roumegue via libcamera-devel wrote:\n>> Add converter support for the Vivante DW100 Dewarp Processor IP core\n>> found on i.MX8MP SoC.\n>>\n>> The processor core applies a programmable geometrical transformation on\n>> input images to correct distorsion introduced by lenses.\n>> The transformation function is exposed as a grid map with 16x16 pixel\n>> macroblocks indexed using X, Y vertex coordinates.\n>>\n>> A set of input/output vertices mapping can be loaded at runtime through\n>> a configuration file. If no mapping is loaded, the vertices mapping\n>> fallbacks to an identity transformation. Scaling and pixel format\n>> conversion can be used independently of the vertices remapping.\n>>\n>> Signed-off-by: Xavier Roumegue <xavier.roumegue@oss.nxp.com>\n>> ---\n>>   include/libcamera/internal/converter_dw100.h | 25 +++++++++++++++\n>>   include/libcamera/internal/meson.build       |  1 +\n>>   src/libcamera/converter_dw100.cpp            | 32 ++++++++++++++++++++\n>>   src/libcamera/meson.build                    |  1 +\n>>   4 files changed, 59 insertions(+)\n>>   create mode 100644 include/libcamera/internal/converter_dw100.h\n>>   create mode 100644 src/libcamera/converter_dw100.cpp\n>>\n>> diff --git a/include/libcamera/internal/converter_dw100.h b/include/libcamera/internal/converter_dw100.h\n>> new file mode 100644\n>> index 00000000..1972d6a2\n>> --- /dev/null\n>> +++ b/include/libcamera/internal/converter_dw100.h\n>> @@ -0,0 +1,25 @@\n>> +/* SPDX-License-Identifier: LGPL-2.1-or-later */\n>> +/*\n>> + * Copyright 2022 NXP\n>> + *\n>> + * converter_dw100.h - V4l2 M2M dw100 format converter interface\n>> + */\n>> +\n>> +#pragma once\n>> +\n>> +#include <linux/dw100.h>\n>> +\n>> +#include \"libcamera/internal/converter_v4l2_m2m.h\"\n>> +#include \"libcamera/internal/media_device.h\"\n> \n> You can drop this header, it's guaranteed to be included by\n> libcamera/internal/converter_v4l2_m2m.h as the MediaDevice is passed to\n> the V4L2M2MConverter constructor.\n> \n>> +\n>> +namespace libcamera {\n>> +\n>> +class DW100Converter : public V4L2M2MConverter\n>> +{\n>> +public:\n>> +\tDW100Converter(MediaDevice *media)\n>> +\t\t: V4L2M2MConverter(media){};\n> \n> \tDW100Converter(MediaDevice *media)\n> \t\t: V4L2M2MConverter(media)\n> \t{\n> \t};\n> \nThat's not aligned with what requests utils/checkstype.py\n\n@@ -39,9 +37,7 @@\n\n  public:\n  \tDW100Converter(MediaDevice *media)\n-\t\t: V4L2M2MConverter(media)\n-\t{\n-\t};\n+\t\t: V4L2M2MConverter(media){};\n\nEither way is fine for me... So ?\n\n\n>> +\tvirtual int applyMapping(Stream *stream, Mapping &mapping) override;\n> \n> s/virtual //\n> \n>> +};\n>> +\n>> +} /* namespace libcamera */\n>> diff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build\n>> index 132de5ef..c2dd094f 100644\n>> --- a/include/libcamera/internal/meson.build\n>> +++ b/include/libcamera/internal/meson.build\n>> @@ -20,6 +20,7 @@ libcamera_internal_headers = files([\n>>       'control_serializer.h',\n>>       'control_validator.h',\n>>       'converter.h',\n>> +    'converter_dw100.h',\n>>       'converter_v4l2_m2m.h',\n>>       'delayed_controls.h',\n>>       'device_enumerator.h',\n>> diff --git a/src/libcamera/converter_dw100.cpp b/src/libcamera/converter_dw100.cpp\n>> new file mode 100644\n>> index 00000000..b079fb37\n>> --- /dev/null\n>> +++ b/src/libcamera/converter_dw100.cpp\n>> @@ -0,0 +1,32 @@\n>> +/* SPDX-License-Identifier: LGPL-2.1-or-later */\n>> +/*\n>> + * Copyright 2022 NXP\n>> + *\n>> + * converter_dw100.cpp - V4L2 M2M dw100 format converter\n>> + */\n>> +\n>> +#include \"libcamera/internal/converter_dw100.h\"\n>> +\n>> +#include <libcamera/base/log.h>\n>> +\n>> +#include <libcamera/controls.h>\n>> +\n>> +#include \"libcamera/internal/v4l2_videodevice.h\"\n>> +\n>> +namespace libcamera {\n>> +\n>> +LOG_DECLARE_CATEGORY(Converter)\n> \n> Not used.\n> \n>> +\n>> +int DW100Converter::applyMapping(Stream *stream, Mapping &mapping)\n>> +{\n>> +\tControlList ctrls;\n>> +\tauto value = Span<const int32_t>(reinterpret_cast<const int32_t *>(mapping.getMapping()), mapping.getLength());\n>> +\tControlValue c(value);\n>> +\tctrls.set(V4L2_CID_DW100_DEWARPING_16x16_VERTEX_MAP, c);\n>> +\tstream->m2m_->capture()->setControls(&ctrls);\n>> +\treturn 0;\n>> +}\n> \n> As we have a single converter that can perform dewarping, I'd prefer\n> moving the Mapping support from V4L2M2MConverter to this class. It's\n> hard to predict what other dewarpers will need, and designing an API\n> based on a single example usually doesn't produce the best design. We\n> can always refactor the code later when we'll get a second device.\n> \n>> +\n>> +REGISTER_CONVERTER(\"dw100\", DW100Converter)\n>> +\n>> +} /* namespace libcamera */\n>> diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build\n>> index b12c8401..83da3e5f 100644\n>> --- a/src/libcamera/meson.build\n>> +++ b/src/libcamera/meson.build\n>> @@ -14,6 +14,7 @@ libcamera_sources = files([\n>>       'control_serializer.cpp',\n>>       'control_validator.cpp',\n>>       'converter.cpp',\n>> +    'converter_dw100.cpp',\n>>       'converter_v4l2_m2m.cpp',\n>>       'delayed_controls.cpp',\n>>       'device_enumerator.cpp',\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 BEA08C0DA4\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri,  7 Oct 2022 12:52:28 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 151CE62D0B;\n\tFri,  7 Oct 2022 14:52:28 +0200 (CEST)","from EUR05-DB8-obe.outbound.protection.outlook.com\n\t(mail-db8eur05on2071.outbound.protection.outlook.com [40.107.20.71])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 556C960A88\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  7 Oct 2022 14:52:26 +0200 (CEST)","from PAXPR04MB8703.eurprd04.prod.outlook.com\n\t(2603:10a6:102:21e::22)\n\tby DBBPR04MB7897.eurprd04.prod.outlook.com (2603:10a6:10:1e7::24)\n\twith Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.38;\n\tFri, 7 Oct 2022 12:52:21 +0000","from PAXPR04MB8703.eurprd04.prod.outlook.com\n\t([fe80::4f72:a35a:8c60:63f1]) by\n\tPAXPR04MB8703.eurprd04.prod.outlook.com\n\t([fe80::4f72:a35a:8c60:63f1%6]) with mapi id 15.20.5676.034;\n\tFri, 7 Oct 2022 12:52:21 +0000"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1665147148;\n\tbh=on/DO1SUDPszCH9i86ONg6YMhX5isGoz9kakC9EumOY=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=kmvu/SfUOWG546+i3F8W5IoMGo03aVe2yDXCJzkkpeWk7hFiRsXBC6Q43w8bWphYd\n\tHBKqNOuk0KZxOGwvJdkvHpx3jvGlI3ON1gBTHKLN31rd3WGGpGsJMP6bTBJBHXaqiN\n\ttgvScyJP+10MudgEqJUSRTeFM4Wre7bfIpLjHRCIhYh/4PA0Nz54xg5fNFfYTRNKzN\n\tFfL7KLSO7yPboykp44/6wtmRSl/nIcVx0YHVo6JMheZXi7HEpxxJS9y1/TZF6XsKru\n\tYtM7WT5oQWlLZL5ttp7YlvHLzrkCXOQCgUk7iYhxYOroCsWpDcxfvYkFMUV032PZHG\n\tZMpaTLt3/LF/g==","v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com;\n\ts=selector2-NXP1-onmicrosoft-com;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n\tbh=iowO+bEEtfA3O+x31Tn+5iE/RIRDqS3+Hh8x9oh8BhY=;\n\tb=W8EnsDvMDiq2axijkeNhd9BwYo9B0yp4e93jZU+UfR9/UdVqYW/betxkehV8z2o+UWwav19Z+XuWHSDGS42lanh5p4dVSszq4FHSN+k4J1zwdSqid17kBzc5vib04h5ESeCmJX9ycNncTGslDd8ir1SpBFe5LhfRcVwjGgDvNag="],"Authentication-Results":["lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=NXP1.onmicrosoft.com\n\theader.i=@NXP1.onmicrosoft.com\n\theader.b=\"W8EnsDvM\"; dkim-atps=neutral","dkim=none (message not signed)\n\theader.d=none;dmarc=none action=none header.from=oss.nxp.com;"],"ARC-Seal":"i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n\tb=jzBGOYmblX3WfdVNe0URVMHYwII82YbUr4iU1vhI+RKYfg2nWh210M7xpuYO6TjJaH0U7TO3GU8l9ljBxNuejMC2xC+u9sSVTYAA7yaYjKcFPlqBjHzby7gav+EGHKokQzlbZMzRuuI7wjVeAVAz2zeCDLIFniu8x0lnbHnsZ8YYLcLIZSB29BcKyzfHyVUyyL9p6ul7gNOvk9tK/i8Jzofqm0ALGcVIUQEqwPyd1oSrpXunHacyV79x5vBgZFuckN7UXqxnJyHQi1AOhuEHpiLQCCoqcjsal/J+6R3N03V8syy//+2Wdj0UOUAZ+q16P9XiyFgrcKf4Q2qczbHzmw==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n\ts=arcselector9901;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n\tbh=iowO+bEEtfA3O+x31Tn+5iE/RIRDqS3+Hh8x9oh8BhY=;\n\tb=QVxjG2EL5gMPWZtW7Qrvxu421PWXIjLIDs3JRiZCSsfiir8FmWuhh2Bu66EXj6b9NTJZRt6sVyx0Js1CliTFamfQswcw+w11Onwc0lxyQYxBE+gGMjm4dyrHql9+8X4Yl9ujrkyqKbpBE0xmDbzDmzZIUwvKWAnp3U40vLd1I6DO1RoDSZzx4rpQ70hGtP1vDA51DqZYBgC2J/F7/wzmkdIgroMVItkDPTb/fdi2sagjHqA1R6s9AHIJ0kWD6iC5sGKT7HDkLn0Hwr0nqkJEDoQJmZmmka1g217LDXc3W8z62F6hjO6bdVKPFiyxRf5NO/V4mshDXvk8nMXY7CTg3g==","ARC-Authentication-Results":"i=1; mx.microsoft.com 1; spf=pass\n\tsmtp.mailfrom=oss.nxp.com;\n\tdmarc=pass action=none header.from=oss.nxp.com; \n\tdkim=pass header.d=oss.nxp.com; arc=none","Message-ID":"<f6c4d47e-aabd-6c6c-0fdc-6aa4553f71b4@oss.nxp.com>","Date":"Fri, 7 Oct 2022 14:52:19 +0200","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101\n\tThunderbird/102.3.1","Content-Language":"en-US, fr","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","References":"<20220908184850.1874303-1-xavier.roumegue@oss.nxp.com>\n\t<20220908184850.1874303-10-xavier.roumegue@oss.nxp.com>\n\t<Yztp+gjcpcVOem6v@pendragon.ideasonboard.com>","In-Reply-To":"<Yztp+gjcpcVOem6v@pendragon.ideasonboard.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","X-ClientProxiedBy":"PR1P264CA0061.FRAP264.PROD.OUTLOOK.COM\n\t(2603:10a6:102:2ca::15) To PAXPR04MB8703.eurprd04.prod.outlook.com\n\t(2603:10a6:102:21e::22)","MIME-Version":"1.0","X-MS-Exchange-MessageSentRepresentingType":"1","X-MS-PublicTrafficType":"Email","X-MS-TrafficTypeDiagnostic":"PAXPR04MB8703:EE_|DBBPR04MB7897:EE_","X-MS-Office365-Filtering-Correlation-Id":"b331d83d-88ea-49f4-f7c3-08daa862c62b","X-MS-Exchange-SharedMailbox-RoutingAgent-Processed":"True","X-MS-Exchange-SenderADCheck":"1","X-MS-Exchange-AntiSpam-Relay":"0","X-Microsoft-Antispam":"BCL:0;","X-Microsoft-Antispam-Message-Info":"hfF0IrJ4owOA+hq8dMnhP2EmcmTnS6Kz/pHTDtp0T57LzgKtwy3JYeK5HoSxoeJ54E5Ihwn93z8H9NbZfYaIekGMbvMZcIRvMZut9SJy8Vn7u1yg6nAOPLb3XbD2UPpOAuLAndppjP8LSM8DI88qKVs1/d2KprRMSOO/AtxDALbBd+u4xqjcltM6GBpRGd4pBEQx1sC4N49+cFb9FDPZ4giCXm397iuLTuxQn+5Rs2KJKgRh5pFMgDftpW748vbDHU5jyN+qsHDef4g+a77BzqtgZE5vFcmfWU8EuBqFJ7yy+0M23cEoyTMOrlUmo3Fm2zsYoSFWCjclfXbc+Oor2Pfnl0FtyImwZp2g3n6GKMWa7UMjjWeeiaV2BPjtixYBmCYop325MqFj5HzZtSRj4EEpqxksM0c9cM471pzp6pD1W56sH/dQ79/hFi3LbU+NUjXcZNRV6dpOVRfYg0gb+GMkCLm8ftKfJ6JNRQbXTM+9SYPLFWrX9o6oaVVdgWTX1aalT1SoCkopIYg85TSvKAWS2ZKCAurloqcxcOf7Eur0SAdYNUV3lCl5iE97Qlk1rCf2ZLDna1VjOv6v9fC379al7OOQlmMY/ZMlQwsyRcg3g2ooUyxb8/SSSybde45U5ftaPH3CuK0ptb/0lDpmeQBW+iLWKnKXnI7ayIwdYIxMVIChXJSXDPOo2aAex7kDxz7SoBN3AP2u5aoIlhHAW5A8hkcJhSkcS0DMdWUNKfCGiYzkn2L6k2yM4KGTQJ1Wza/1DCFqI2nO1ZMYUfqMFh9Wan2GszwVWUMelxso5fo=","X-Forefront-Antispam-Report":"CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n\tIPV:NLI; SFV:NSPM; H:PAXPR04MB8703.eurprd04.prod.outlook.com; PTR:;\n\tCAT:NONE; \n\tSFS:(13230022)(4636009)(376002)(136003)(396003)(39860400002)(366004)(346002)(451199015)(2616005)(5660300002)(186003)(52116002)(53546011)(2906002)(41300700001)(8936002)(6512007)(38100700002)(6506007)(83380400001)(86362001)(31696002)(6486002)(316002)(6916009)(478600001)(31686004)(66946007)(8676002)(4326008)(66556008)(66476007)(45980500001)(43740500002);\n\tDIR:OUT; SFP:1101; ","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"1","X-MS-Exchange-AntiSpam-MessageData-0":"=?utf-8?q?9mhKfZtINBi7/9lRN/zpovXlX?=\n\t=?utf-8?q?kc7XpVMBHV77LL+D1PQcpAAsDOKwDqAsCVAbvyiOWVlJQagp/O2wcfwE?=\n\t=?utf-8?q?vcikF8p9nFlwf+gbomcA3wisIWrYI8GjipLB6Y/sPE14RUCbkfpQ+6z9?=\n\t=?utf-8?q?bLRNQdVuRO5IsAjtiCM7j9Si63Bn4rAql2T4w8djr/ESVWtYdrc7hPEc?=\n\t=?utf-8?q?ph9ThBMj6o+/w9fH/STbOjD7D0DZF9aQGKJh+ov+UyqsoXCex1ge++5u?=\n\t=?utf-8?q?5c6aFu2XVl6Vb0Hvateqzlca/FhIEvawZGO+JARCwJQdB9NXj3Ubs8bo?=\n\t=?utf-8?q?ud/BCyYxKlzHM321I98HihgNBDZJT8kNDE5V9C18+B/0j0TuM8xFVJHi?=\n\t=?utf-8?q?HXS2VTng30C+CrzLjxUqOz/e8EUeVDaSNkd/fDTNysH2mxicHo1bUfEQ?=\n\t=?utf-8?q?P7AOsi9MvyFVGdsy7Y0fO/qH/6LLqpm/tKLqfhaMpHS2+Bt0GM9XpMaS?=\n\t=?utf-8?q?IJOZCmZh06MeufeNprTAdFFfP74GIYL146hWmNtXJ7DwAmvfRIZslkkG?=\n\t=?utf-8?q?S8ULYEfaL2lTm+oRIgaQmeBAPX9OULNnKxS2gJ+C8KLKEe6xPyg3btlm?=\n\t=?utf-8?q?T2c7GPCdK3UD5VHLiAKjaecFPPAgjB/63ETwNs5DAYkq0iESnnbAVVBZ?=\n\t=?utf-8?q?v8NokGkaq/jqQMaFnolvxZIP/i2rgMn6EYJr3q6Oy52c5UtuF9bZ1vKG?=\n\t=?utf-8?q?Nmdl5mhhiB8J4k2tzijfj29ZhdHuX3yOmTb0JS4EXJu3MVEpFhBNCoWK?=\n\t=?utf-8?q?M/wUcUNBduY0q+tzS6L8P7cD8ZYdY2h5DreqI6R7dhVo8meq/Rz+1ZA3?=\n\t=?utf-8?q?0JiZzxdKg8FQNlgEd9I7ghTXqbmyxQbRs8qkYPEbhO259ZFmZ7sdfCUG?=\n\t=?utf-8?q?hgOu6ocwhmNCwotxEAoVfsrZgEzHxWdPtlIFJ4g/PL2QCYgdm/QXMlHI?=\n\t=?utf-8?q?Sslquzj//dd5P2gPpJbg0NgfCYi8va+df94DbG3lW5Dm6ytkp1gZg9m5?=\n\t=?utf-8?q?RG1E4tQubuJW260IGYI5jtfkKniOSYmpdOtBDDtE2OVPTSZ33uSLgkI1?=\n\t=?utf-8?q?+vNtnZclzJr+O+KPPqM3Wn8Vco759riCV4tLXdmdxpKrsA3NVwI1MBPB?=\n\t=?utf-8?q?LdTCF6m3Tn/VD76kE2SvetE5VRmZYVofGTQ4Sko7d95EGaQ+Xf5ukSqT?=\n\t=?utf-8?q?AzcZGEziUPdumIXLIU2d+kdb1WmE6WEqEpxW5tBC+LS9f6fTAa8KX/bi?=\n\t=?utf-8?q?l33CGozo1lnBsLfy4v/YBQPMXAh31s1Uf42Ai1af0TqMVZslsCujTFQU?=\n\t=?utf-8?q?md7+t3iS2T7qAEB2T5gM0JZehIvopl1OZbzD7Uo9MdPrERAucLTkWgPJ?=\n\t=?utf-8?q?oUrhwattct2ZOqIgq4cFfJhUe427ekiXqsqJInJNEQoldUjgQj+YNugk?=\n\t=?utf-8?q?fzmk9gxXgo+x2xzDZ9xZdMGVX9zbqz3xo6O2F99ge1BSqvZJ3vtfs1IV?=\n\t=?utf-8?q?rk1u93GD3cw8o+DZv/ZtRA3Yxd0tTztX+bo94g3MN6LBQN6IF+HD+pn2?=\n\t=?utf-8?q?lUqWKvGNDQvnugIO1HqVSEAntuHdv7DIpjU6mbKkkZsX6FswNCzMEGVQ?=\n\t=?utf-8?q?bI8ohfq6Z9MLdtx6EfTOzu32eLmw8u+v2v9dODiC1+9nRsAuLNHjdbRs?=\n\t=?utf-8?q?VbULiHjUnqB/+ij7cDyvJK2fBneAeb/O9TnQAnJJ46MhKIc4AN+ryIOU?=\n\t=?utf-8?q?78SKB4lGkUPJkQXEErorMzRppeyeeX2Y/Bq+A=3D=3D?=","X-OriginatorOrg":"oss.nxp.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"b331d83d-88ea-49f4-f7c3-08daa862c62b","X-MS-Exchange-CrossTenant-AuthSource":"PAXPR04MB8703.eurprd04.prod.outlook.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"07 Oct 2022 12:52:21.5920\n\t(UTC)","X-MS-Exchange-CrossTenant-FromEntityHeader":"Hosted","X-MS-Exchange-CrossTenant-Id":"686ea1d3-bc2b-4c6f-a92c-d99c5c301635","X-MS-Exchange-CrossTenant-MailboxType":"HOSTED","X-MS-Exchange-CrossTenant-UserPrincipalName":"5YyVDJbLAIiqmr3Nae8bbGan1xHRQSWJa27Obg0+JklxQuRdAPkZLPkgvbmivbUT7aiStIkF4/sHT2owSCahuw==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"DBBPR04MB7897","Subject":"Re: [libcamera-devel] [PATCH 09/14] libcamera: converter: Introduce\n\tdw100 converter","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>","From":"\"Xavier Roumegue \\(OSS\\) via libcamera-devel\"\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"\"Xavier Roumegue \\(OSS\\)\" <xavier.roumegue@oss.nxp.com>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":25328,"web_url":"https://patchwork.libcamera.org/comment/25328/","msgid":"<Y0An1PFmXyAIoQ9r@pendragon.ideasonboard.com>","date":"2022-10-07T13:21:24","subject":"Re: [libcamera-devel] [PATCH 09/14] libcamera: converter: Introduce\n\tdw100 converter","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Xavier,\n\nOn Fri, Oct 07, 2022 at 02:52:19PM +0200, Xavier Roumegue (OSS) wrote:\n> On 10/4/22 01:02, Laurent Pinchart wrote:\n> > On Thu, Sep 08, 2022 at 08:48:45PM +0200, Xavier Roumegue via libcamera-devel wrote:\n> >> Add converter support for the Vivante DW100 Dewarp Processor IP core\n> >> found on i.MX8MP SoC.\n> >>\n> >> The processor core applies a programmable geometrical transformation on\n> >> input images to correct distorsion introduced by lenses.\n> >> The transformation function is exposed as a grid map with 16x16 pixel\n> >> macroblocks indexed using X, Y vertex coordinates.\n> >>\n> >> A set of input/output vertices mapping can be loaded at runtime through\n> >> a configuration file. If no mapping is loaded, the vertices mapping\n> >> fallbacks to an identity transformation. Scaling and pixel format\n> >> conversion can be used independently of the vertices remapping.\n> >>\n> >> Signed-off-by: Xavier Roumegue <xavier.roumegue@oss.nxp.com>\n> >> ---\n> >>   include/libcamera/internal/converter_dw100.h | 25 +++++++++++++++\n> >>   include/libcamera/internal/meson.build       |  1 +\n> >>   src/libcamera/converter_dw100.cpp            | 32 ++++++++++++++++++++\n> >>   src/libcamera/meson.build                    |  1 +\n> >>   4 files changed, 59 insertions(+)\n> >>   create mode 100644 include/libcamera/internal/converter_dw100.h\n> >>   create mode 100644 src/libcamera/converter_dw100.cpp\n> >>\n> >> diff --git a/include/libcamera/internal/converter_dw100.h b/include/libcamera/internal/converter_dw100.h\n> >> new file mode 100644\n> >> index 00000000..1972d6a2\n> >> --- /dev/null\n> >> +++ b/include/libcamera/internal/converter_dw100.h\n> >> @@ -0,0 +1,25 @@\n> >> +/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> >> +/*\n> >> + * Copyright 2022 NXP\n> >> + *\n> >> + * converter_dw100.h - V4l2 M2M dw100 format converter interface\n> >> + */\n> >> +\n> >> +#pragma once\n> >> +\n> >> +#include <linux/dw100.h>\n> >> +\n> >> +#include \"libcamera/internal/converter_v4l2_m2m.h\"\n> >> +#include \"libcamera/internal/media_device.h\"\n> > \n> > You can drop this header, it's guaranteed to be included by\n> > libcamera/internal/converter_v4l2_m2m.h as the MediaDevice is passed to\n> > the V4L2M2MConverter constructor.\n> > \n> >> +\n> >> +namespace libcamera {\n> >> +\n> >> +class DW100Converter : public V4L2M2MConverter\n> >> +{\n> >> +public:\n> >> +\tDW100Converter(MediaDevice *media)\n> >> +\t\t: V4L2M2MConverter(media){};\n> > \n> > \tDW100Converter(MediaDevice *media)\n> > \t\t: V4L2M2MConverter(media)\n> > \t{\n> > \t};\n> > \n> \n> That's not aligned with what requests utils/checkstype.py\n> \n> @@ -39,9 +37,7 @@\n> \n>   public:\n>   \tDW100Converter(MediaDevice *media)\n> -\t\t: V4L2M2MConverter(media)\n> -\t{\n> -\t};\n> +\t\t: V4L2M2MConverter(media){};\n> \n> Either way is fine for me... So ?\n\nI need to find out how to get clang-format to behave the way we want\nhere. Please ignore the recommendation from checkstyle.py here, and also\ndrop the ; after } as that's not needed.\n\n> >> +\tvirtual int applyMapping(Stream *stream, Mapping &mapping) override;\n> > \n> > s/virtual //\n> > \n> >> +};\n> >> +\n> >> +} /* namespace libcamera */\n> >> diff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build\n> >> index 132de5ef..c2dd094f 100644\n> >> --- a/include/libcamera/internal/meson.build\n> >> +++ b/include/libcamera/internal/meson.build\n> >> @@ -20,6 +20,7 @@ libcamera_internal_headers = files([\n> >>       'control_serializer.h',\n> >>       'control_validator.h',\n> >>       'converter.h',\n> >> +    'converter_dw100.h',\n> >>       'converter_v4l2_m2m.h',\n> >>       'delayed_controls.h',\n> >>       'device_enumerator.h',\n> >> diff --git a/src/libcamera/converter_dw100.cpp b/src/libcamera/converter_dw100.cpp\n> >> new file mode 100644\n> >> index 00000000..b079fb37\n> >> --- /dev/null\n> >> +++ b/src/libcamera/converter_dw100.cpp\n> >> @@ -0,0 +1,32 @@\n> >> +/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> >> +/*\n> >> + * Copyright 2022 NXP\n> >> + *\n> >> + * converter_dw100.cpp - V4L2 M2M dw100 format converter\n> >> + */\n> >> +\n> >> +#include \"libcamera/internal/converter_dw100.h\"\n> >> +\n> >> +#include <libcamera/base/log.h>\n> >> +\n> >> +#include <libcamera/controls.h>\n> >> +\n> >> +#include \"libcamera/internal/v4l2_videodevice.h\"\n> >> +\n> >> +namespace libcamera {\n> >> +\n> >> +LOG_DECLARE_CATEGORY(Converter)\n> > \n> > Not used.\n> > \n> >> +\n> >> +int DW100Converter::applyMapping(Stream *stream, Mapping &mapping)\n> >> +{\n> >> +\tControlList ctrls;\n> >> +\tauto value = Span<const int32_t>(reinterpret_cast<const int32_t *>(mapping.getMapping()), mapping.getLength());\n> >> +\tControlValue c(value);\n> >> +\tctrls.set(V4L2_CID_DW100_DEWARPING_16x16_VERTEX_MAP, c);\n> >> +\tstream->m2m_->capture()->setControls(&ctrls);\n> >> +\treturn 0;\n> >> +}\n> > \n> > As we have a single converter that can perform dewarping, I'd prefer\n> > moving the Mapping support from V4L2M2MConverter to this class. It's\n> > hard to predict what other dewarpers will need, and designing an API\n> > based on a single example usually doesn't produce the best design. We\n> > can always refactor the code later when we'll get a second device.\n> > \n> >> +\n> >> +REGISTER_CONVERTER(\"dw100\", DW100Converter)\n> >> +\n> >> +} /* namespace libcamera */\n> >> diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build\n> >> index b12c8401..83da3e5f 100644\n> >> --- a/src/libcamera/meson.build\n> >> +++ b/src/libcamera/meson.build\n> >> @@ -14,6 +14,7 @@ libcamera_sources = files([\n> >>       'control_serializer.cpp',\n> >>       'control_validator.cpp',\n> >>       'converter.cpp',\n> >> +    'converter_dw100.cpp',\n> >>       'converter_v4l2_m2m.cpp',\n> >>       'delayed_controls.cpp',\n> >>       'device_enumerator.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 C75E2C0DA4\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri,  7 Oct 2022 13:21:30 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 3B56960A88;\n\tFri,  7 Oct 2022 15:21:30 +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 097E860A88\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  7 Oct 2022 15:21:29 +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 7437313FA;\n\tFri,  7 Oct 2022 15:21:28 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1665148890;\n\tbh=o8PRc7p87HyCRJaOdT/i4q7gOAiTQ2z4bCj1b8wQD5w=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=h+C146e00WRlJVaxRj/wdfkgf0urXrlSM9MaqlGlejYv6qjuvHJn4fW5aDG498gXP\n\tI60Phs9wmp7avxjyOCmxbasRh0ZJXMe2KrK+wQFKoQ8Fe+bkAK9l8u2fqmSiSbOlU8\n\t/0a/g1Bta0JC4LHTajC28ou7bL8cU3lvqBANwx0BAdgtLMFgHWEs/X+MlgLYT9FhGP\n\t5ncH/kXxqbMMcUzkqBLWyhrHaeQRvjsaW2fKgyApeDHp7D6WfWKWmYh4MSbVzy4lrz\n\tDBWkYVtmjityPY61C7k9ZOKSChVcA3gC9q0wMgzbtAUxjlR8UY6cH3i3a6e5d2ccP+\n\tDZP9ggpB1TJcw==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1665148888;\n\tbh=o8PRc7p87HyCRJaOdT/i4q7gOAiTQ2z4bCj1b8wQD5w=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=hL0CRrmn5RxZl0u0GmCJ3ydYwkyv3ywxMhdb8ger2ZD5Pd5fXS0VJ4vm7ePG3g79S\n\t6AUYha4iS/XboV7dfPVieclMTzOa3suYsXvsw2QTvRieCQ5p/8foYf/PYntL9XNyP8\n\taqt7dKjq/J0+tF5O9uaymO0AOo82iam17NlHQk0k="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"hL0CRrmn\"; dkim-atps=neutral","Date":"Fri, 7 Oct 2022 16:21:24 +0300","To":"\"Xavier Roumegue (OSS)\" <xavier.roumegue@oss.nxp.com>","Message-ID":"<Y0An1PFmXyAIoQ9r@pendragon.ideasonboard.com>","References":"<20220908184850.1874303-1-xavier.roumegue@oss.nxp.com>\n\t<20220908184850.1874303-10-xavier.roumegue@oss.nxp.com>\n\t<Yztp+gjcpcVOem6v@pendragon.ideasonboard.com>\n\t<f6c4d47e-aabd-6c6c-0fdc-6aa4553f71b4@oss.nxp.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<f6c4d47e-aabd-6c6c-0fdc-6aa4553f71b4@oss.nxp.com>","Subject":"Re: [libcamera-devel] [PATCH 09/14] libcamera: converter: Introduce\n\tdw100 converter","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>","From":"Laurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]