{"id":17351,"url":"https://patchwork.libcamera.org/api/patches/17351/?format=json","web_url":"https://patchwork.libcamera.org/patch/17351/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20220908184850.1874303-10-xavier.roumegue@oss.nxp.com>","date":"2022-09-08T18:48:45","name":"[libcamera-devel,09/14] libcamera: converter: Introduce dw100 converter","commit_ref":null,"pull_url":null,"state":"changes-requested","archived":false,"hash":"8cdd85855fd278c47e6ee69c00915bfa7931afcc","submitter":{"id":107,"url":"https://patchwork.libcamera.org/api/people/107/?format=json","name":"Xavier Roumegue","email":"xavier.roumegue@oss.nxp.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/17351/mbox/","series":[{"id":3477,"url":"https://patchwork.libcamera.org/api/series/3477/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=3477","date":"2022-09-08T18:48:36","name":"Add dw100 dewarper support to simple/rkisp1 pipeline","version":1,"mbox":"https://patchwork.libcamera.org/series/3477/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/17351/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/17351/checks/","tags":{},"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 6DB6AC3280\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  8 Sep 2022 18:49:28 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 304CA620D7;\n\tThu,  8 Sep 2022 20:49:28 +0200 (CEST)","from EUR04-DB3-obe.outbound.protection.outlook.com\n\t(mail-eopbgr60070.outbound.protection.outlook.com [40.107.6.70])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 3FBEA620C1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  8 Sep 2022 20:49:22 +0200 (CEST)","from PAXPR04MB8703.eurprd04.prod.outlook.com\n\t(2603:10a6:102:21e::22)\n\tby AS8PR04MB8852.eurprd04.prod.outlook.com (2603:10a6:20b:42f::14)\n\twith Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5612.19;\n\tThu, 8 Sep 2022 18:49:20 +0000","from PAXPR04MB8703.eurprd04.prod.outlook.com\n\t([fe80::485:adba:7081:715a]) by\n\tPAXPR04MB8703.eurprd04.prod.outlook.com\n\t([fe80::485:adba:7081:715a%3]) with mapi id 15.20.5612.019;\n\tThu, 8 Sep 2022 18:49:20 +0000"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1662662968;\n\tbh=VLwGBIGV3/rf3PXhQC2E7C2nenUzbwpxRWanMYMGKBY=;\n\th=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:\n\tFrom;\n\tb=ifbBVNj8cbK/+uqTndq3w059UadIB/cDPERoMyFfnzBOOso31VH8xGgAovo2pbesk\n\teFQ7QxKb87YSC3zn0EPX4JR8hnkG/pEJFOtDUaJrYQVbyclRRo0wdMD9aDvltmIchY\n\tpcf7l2kUjpnaVGhqvp2/TNKKdIDGE12Mt21Em3BTqh3Uq1DTfLwMBObFQXY/wGpCUI\n\tCMzul0hYTLbTyDvMLaVIIyuk1BTsMtGpcIazB6lwrhCfak1fkdyf8jg4+WGxw4CDkV\n\tTx0cNKZV2fljG9FQeQZiJaSeCo/6bHAVMElc+h0ylhnR1AEFO6YCH7kHMJBB1i/7Yz\n\tTYPFs+PK7tOjQ==","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=LYXpDQknnxUnTUmztLoxVgzvsHO5mzB2h16T6Di2D94=;\n\tb=RzrITWnQWJtdHkGZCiOnq3c551ThMjELUgr5TQMqXZxyK64E1VeUahciFKFGKZN6yG5j44Tw6unebMj89Vd5sC7Fih24Uz4v7AFxeLjX5PlIBCia08GFhYJyCJZE51s3DdWsQkFMsthWHx5LEvGu3pVceM1vvKG2Ir7XQfhxCAM="],"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=\"RzrITWnQ\"; 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=nLxBwGKzvpgQGzEHpwNEEXUgsvJg9xizUSGW15G+JoUYkDO3QHbs9oEq580Y6pz7gvJmTfaLVXobAxCa7DPr0SyS3B6EQ3iSPjselGlYGYifG+de95R1M4rdLc2QcnmZFmduk8U+XUgBXOvUOTTcj/1GjJca+UIXmGFEEv9coBwPdqymy9GQpifnwEsBXdJlZT2YLGAWV1WRvlPg5reC+SFdmyjhn6zEOwgha4ihN75mWw+Ur4W4xvLR7ZBDa59eGUSDrpksfYLZaRmtJ2xUGdzx0oowQYRYGDHjaUyUilPkrH6CejXZxoCmySv2rUaqy+8mm9Oy+8iQ8pGLZpcEMw==","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=LYXpDQknnxUnTUmztLoxVgzvsHO5mzB2h16T6Di2D94=;\n\tb=OJxzvdeR489jRnDdU3Gs4x7ZtmaniTVbO3j+f6aqPBeSdCh7STsslw3DA91R0fh3YHLozjXXBd9g3M5zsp1QugPNUMZWA/kt0dyg0orB+hR+2gcLpNl7imFULE0ZOTJw+J4YMcR2Ol1fIk/72rN7T2HvtvkGK5vf2w1TsmulQFTOTKYkjCrLvoZ8XTKcPS9baM/bSpanRt/+QyQ1KLnirgKAzLUQSoxaSA9zar/pbYL/e4Eevmn66CQa3QzWM4Sf6McJ/C0AExACgyaaAPFRwICJS7Jqungfyl2Uro7lMcuVhw7sKfgGeSr3XtSxnNKn6m1xEG21e9fR4sX4S0uDOQ==","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","To":"libcamera-devel@lists.libcamera.org","Date":"Thu,  8 Sep 2022 20:48:45 +0200","Message-Id":"<20220908184850.1874303-10-xavier.roumegue@oss.nxp.com>","X-Mailer":"git-send-email 2.37.3","In-Reply-To":"<20220908184850.1874303-1-xavier.roumegue@oss.nxp.com>","References":"<20220908184850.1874303-1-xavier.roumegue@oss.nxp.com>","Content-Transfer-Encoding":"8bit","Content-Type":"text/plain","X-ClientProxiedBy":"PR3P250CA0001.EURP250.PROD.OUTLOOK.COM\n\t(2603:10a6:102:57::6) 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_|AS8PR04MB8852:EE_","X-MS-Office365-Filtering-Correlation-Id":"f41eb887-341b-4c8d-5df1-08da91cad735","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":"Nh44cFwZw7sgnbprfc1xF+cDtC4N9+iHeNJNuwHCmpfrRaOdERifcMgPbTRutdjSPI+3T0Y1F+wuRvznUWgtrSoWI/B284seq10VY2cOTO4jn/nucvZj07eF/QzVw5ZziMoDP1d8tARPFx2vDN1DCS+EZ/ZGCv5JS3EQNtXakD74zQSSk+BvKFaG6kuqNPilT4P1d8P7DYcOTXWFiFCdQHQxARZhPW0c9UPxK6iBZFaq0dVGc4DL2pVlbVheRu053zLDH8uY7i9kRYD9kDtyWA+TVnE9a0mWerHSjOwyodWdzTor5uj2GrV9fSljrqEc+oFsDln5a0UV2BKh04hijlw8n4pa8xxMZYieNIxDC3EPCg+m9zhGtCVih6Capr5FKSHXDTmiKTfcw7JTOc7997ZBz0Bv0ovejt6zpB0oXZ0hvge/fX1u9oO1G/+eBfglW0hSai/1DgZIO9g0PDevmimzXnbcmdVuo1+kCkTgKUextpoX46uyNbOABXlDdfKYg0SuHLcbHeT0zO/K8ZXkofQpZbdZYQgqzGRUAr/R9Suglcx7Sx54Tc0gUA4JOC46gGsb361frhq3t22NZe7LMcGdtfi3BgDV8ThN71kfIHM6B9mkjPT2+faXU99WSda+Xm5spTmSKXxVWwr9h3h6mB8w/Q9495l+GNcfJ32kFbhDy/kWWh1LJ2W5C2HfJkqOKoz8DdGuJoYVZH4xSB5yiA==","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:(13230016)(4636009)(39860400002)(346002)(376002)(396003)(136003)(366004)(38100700002)(66556008)(66476007)(66946007)(8936002)(44832011)(5660300002)(4326008)(8676002)(6916009)(316002)(41300700001)(186003)(1076003)(2616005)(2906002)(478600001)(6666004)(86362001)(6512007)(52116002)(6506007)(83380400001)(6486002);\n\tDIR:OUT; SFP:1101; ","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"1","X-MS-Exchange-AntiSpam-MessageData-0":"0hJZs3sG1pOW4XBW4R+tDu1qY80Gy8tT5GzFMiW1JY9i2m1ArxQFja6kO356/LH7BXHVDhLLTvvuUCaUvI0dtu5CDn0CGZeivKUtWf4upz6Wic8PQZuB5/ZU2PEKv2Fd/uUhdEJe0GyUmaZXNJypWQavIKz+GWKqvl8kUuBuKmYyQd1X8LUeRhoNUaZquFzHvTca6Zvt/av9lOD37PClsDofHgWn7Nhb2dO8rCNUeDIxM7uLOQfHWjv+y5hl+MoZBgbbnOC7It3a9Ku8dO7wUGSxwfXhqpg5zclnlcIzVzjkiTS0SKb9zW1r8W6h2tzYkCvIUhHkCcd33HmRBlbR1I8W0P4jD9PVo/Vf63RHtY5toDFbxHYi70xFIA5khhFyokvuluaW81ja00opKHw59lTGPZ4Wk6toOcDVLFxlYGnf2baaN78xm5b27ow45S6ehltCCQi8nJCzRbcWeorME2LBhAc7FwT93xM9TpmtodT7PaGhP/iK1US3uYCDZBbfuy+Zx5wZeUB4Y+XUnp3/Hm6Mk4Y1LmiGEl/7ASPu5Hcgxrq8paxmJGrCZLN40fNJUl8pmxKsZ4BmpXvMRJi5rLtSs225IqKlvAlqDAXLcLdFgc3dp5bhQQZbbHz/qt5KKHuehqIhiXJgWDYDFi0+LGBC352g+bqgnsIddSoDItspOU8n6M7X2fv2NRhfd+zC4rp+XPySRVNgRTSzST0jW3CtI5gaQSGRXbgL9r0JxWPJ8urhTi2ljqQfMvC/+KPz/GE0FK+QmxXgLxrubRCn/WVqrhB9XrzmZydJpXY0cuIL5PO0bcSPVOlr0FnMuR+cbi7dZvxn/XCJYvdnH/Ne1qS8sFI5py6q61ppJx9Imvno+S4yYZDCudfWon8E1v/kln6T4jHRU1MZ4LHjKf14kpvJjSPXdbEsOuy8Op3YF7TV/eo2s2LWtU6I3A7RUqQg5N48T7EzXaqGm/tC4kHB0JrjbFcYMfgkRMD/ppx16KbEskCkMKn+O4LO4X58f4J4dzV4hXCAYi6SC075ab9tPryL1noExduqFg0HEznMGjpMLswW7qYBvahl+LwkcSQBQQzyJ4SaWtj3lEHZkViEtYInumkSEZiksSzrXGlf0Jb/1W89829N5IbJRb2xnq4vVrxiJdO9uhkg8L4gWwFCeCRhHiC4nWvje5BpYBJvacLMW+xiCBGS5UK4hDYu8neBzwLeNwhVLEvyT/8j5YHDxVKfaBchgcM/d5MO1pRL9sD6/fvWuGNZx1xLgKsOXHm265dmloTRki2HfWKUg5RxcrsPnh0vAkT+nvVAAqP5WMroiAYTMucIIaTo4QwJMWHwRl7K2EKYVOnO9AyFZoVMoRTyvXz11bAyHauaoLdeXctWDoK3RqxRa2VSgniYdXWibENZ4/5HzBsChEmMvy/1j7KZWUY9osfMbY8SGb5Tg3Um699e7ia4j3Re85Grq3UubU4u3MP2RDgJa+HzFjTQBdgwK8ztqE7dJHBynvlExr9vbvU/VhyDBBa7kxZEKXk3ZRLlnsTiqjlIHxPEz15rglteu5zqpvw70KYwcaq0RyQdM1iTb+XybPdKRpME5BNiMr86PxuvEimr5h3hkBP4pgQfjHC70Dlxvi+X6+nH8AW5Ys2pSZ/QoHR9XTN5urQbkt1HuInR6O5jKTf1b6Y9PQ==","X-OriginatorOrg":"oss.nxp.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"f41eb887-341b-4c8d-5df1-08da91cad735","X-MS-Exchange-CrossTenant-AuthSource":"PAXPR04MB8703.eurprd04.prod.outlook.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"08 Sep 2022 18:49:20.7474\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":"Q87LNvqpK/IczLt40KhZMt5PdspR5/oD3xxx8L8nShdyK6ij8wfToxdgyvTdYrC2bDYi1xG1D+zkpQTT2I/ZdA==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"AS8PR04MB8852","Subject":"[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 via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Xavier Roumegue <xavier.roumegue@oss.nxp.com>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"},"content":"Add converter support for the Vivante DW100 Dewarp Processor IP core\nfound on i.MX8MP SoC.\n\nThe processor core applies a programmable geometrical transformation on\ninput images to correct distorsion introduced by lenses.\nThe transformation function is exposed as a grid map with 16x16 pixel\nmacroblocks indexed using X, Y vertex coordinates.\n\nA set of input/output vertices mapping can be loaded at runtime through\na configuration file. If no mapping is loaded, the vertices mapping\nfallbacks to an identity transformation. Scaling and pixel format\nconversion can be used independently of the vertices remapping.\n\nSigned-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","diff":"diff --git a/include/libcamera/internal/converter_dw100.h b/include/libcamera/internal/converter_dw100.h\nnew file mode 100644\nindex 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+namespace libcamera {\n+\n+class DW100Converter : public V4L2M2MConverter\n+{\n+public:\n+\tDW100Converter(MediaDevice *media)\n+\t\t: V4L2M2MConverter(media){};\n+\tvirtual int applyMapping(Stream *stream, Mapping &mapping) override;\n+};\n+\n+} /* namespace libcamera */\ndiff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build\nindex 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',\ndiff --git a/src/libcamera/converter_dw100.cpp b/src/libcamera/converter_dw100.cpp\nnew file mode 100644\nindex 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+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+REGISTER_CONVERTER(\"dw100\", DW100Converter)\n+\n+} /* namespace libcamera */\ndiff --git a/src/libcamera/meson.build b/src/libcamera/meson.build\nindex 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","prefixes":["libcamera-devel","09/14"]}