[{"id":33501,"web_url":"https://patchwork.libcamera.org/comment/33501/","msgid":"<174068620681.31628.2175002044685903562@ping.linuxembedded.co.uk>","date":"2025-02-27T19:56:46","subject":"Re: [PATCH] libcamera: simple: Check all media devices matched the\n\tpipeline","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Fang,\n\nQuoting Fang Hui (2025-02-25 02:10:23)\n> The current implementation of SimplePipelineHandler::match() will return false\n> once meet an un-complete media device such as no sensor plugged. Thus the rest\n> media devices will lost the chance to be discovered.\n> To discover all the cameras present, this change instanciates the cameras\n> discovery procedure for each media device that contains a supported camera port.\n> \n> Signed-off-by: Fang Hui <hui.fang@nxp.com>\n> ---\n>  src/libcamera/pipeline/simple/simple.cpp | 50 +++++++++++++++++-------\n>  1 file changed, 35 insertions(+), 15 deletions(-)\n> \n> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\n> index 6e039bf3..134f0a07 100644\n> --- a/src/libcamera/pipeline/simple/simple.cpp\n> +++ b/src/libcamera/pipeline/simple/simple.cpp\n> @@ -379,6 +379,8 @@ private:\n>         const MediaPad *acquirePipeline(SimpleCameraData *data);\n>         void releasePipeline(SimpleCameraData *data);\n>  \n> +       bool matchMedia(DeviceEnumerator *enumerator, const SimplePipelineInfo *info, MediaDevice *media);\n> +\n>         std::map<const MediaEntity *, EntityData> entities_;\n>  \n>         MediaDevice *converter_;\n> @@ -1532,23 +1534,9 @@ int SimplePipelineHandler::resetRoutingTable(V4L2Subdevice *subdev)\n>         return 0;\n>  }\n>  \n> -bool SimplePipelineHandler::match(DeviceEnumerator *enumerator)\n> +bool SimplePipelineHandler::matchMedia(DeviceEnumerator *enumerator, const SimplePipelineInfo *info, MediaDevice *media)\n>  {\n> -       const SimplePipelineInfo *info = nullptr;\n>         unsigned int numStreams = 1;\n> -       MediaDevice *media;\n> -\n> -       for (const SimplePipelineInfo &inf : supportedDevices) {\n> -               DeviceMatch dm(inf.driver);\n> -               media = acquireMediaDevice(enumerator, dm);\n> -               if (media) {\n> -                       info = &inf;\n> -                       break;\n> -               }\n> -       }\n> -\n> -       if (!media)\n> -               return false;\n>  \n>         for (const auto &[name, streams] : info->converters) {\n>                 DeviceMatch converterMatch(name);\n> @@ -1678,6 +1666,38 @@ bool SimplePipelineHandler::match(DeviceEnumerator *enumerator)\n>         return registered;\n>  }\n>  \n> +bool SimplePipelineHandler::match(DeviceEnumerator *enumerator)\n> +{\n> +       MediaDevice *media;\n> +       std::map<MediaDevice *, const SimplePipelineInfo *> mediaDevices;\n> +\n> +       for (const SimplePipelineInfo &inf : supportedDevices) {\n> +               LOG(SimplePipeline, Debug) << \"check simple pipeline \" << inf.driver;\n> +               DeviceMatch dm(inf.driver);\n> +\n> +               do {\n> +                       media = acquireMediaDevice(enumerator, dm);\n> +                       if (media) {\n> +                               mediaDevices[media] = &inf;\n> +                               LOG(SimplePipeline, Debug) << \"found media \" << media->deviceNode();\n> +                       }\n> +               } while (media);\n> +       }\n> +\n> +       bool matched = false;\n> +\n> +       for (auto it = mediaDevices.begin(); it != mediaDevices.end(); it++) {\n> +               MediaDevice *media = it->first;\n> +               const SimplePipelineInfo *info = it->second;\n> +               LOG(SimplePipeline, Debug)\n> +                       << \"call matchMedia for pipeline \"\n> +                       << info->driver << \", media \" << media->deviceNode();\n> +               matched |= matchMedia(enumerator, info, media);\n> +       }\n\nI'm not 100% sure I understand the implications here. I also tried to\ntackle this topic at https://patchwork.libcamera.org/patch/20849/, and I\nsee your version differs slightly that first you will try to find all\ncompatible graphs, but then match each of the successfully acquired\nones.\n\nBut I think this will be problematic as you will then register (or try\nto register) multiple graphs in a single pipeline handler ?\n\nHave you checked what happens here if there are more than one simple\npipeline handler supported in the system ?\n\n\n\n> +\n> +       return matched;\n> +}\n> +\n>  V4L2VideoDevice *SimplePipelineHandler::video(const MediaEntity *entity)\n>  {\n>         auto iter = entities_.find(entity);\n> -- \n> 2.25.1\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 970EEBE080\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 27 Feb 2025 19:56:52 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A458F6875A;\n\tThu, 27 Feb 2025 20:56:51 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id A2EE260322\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 27 Feb 2025 20:56:49 +0100 (CET)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust6594.18-1.cable.virginm.net [86.31.185.195])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id A66F3982;\n\tThu, 27 Feb 2025 20:55:20 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"MaXVWAo9\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1740686120;\n\tbh=DJeCl+cNGGRqPkCXMM1LOFndM/3GYwWJmyQs8GY2+xw=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=MaXVWAo9lg3JkVAhVIDPKL3ewsAYxgarwm/G19Atr5ekzKhoFGoRlNrkYBH1OfrhJ\n\tLYpeWG5P3My4F7Bp3rlvGdl3Clk4XhcChf0cMtyYrqKsz7HrDgJ9I1UqlwnAQQ82Mj\n\tfoWmTthIwbDT3RoxmEoYJGDNbvvCx7rPK8Z0RSzI=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20250225021023.2112783-1-hui.fang@nxp.com>","References":"<20250225021023.2112783-1-hui.fang@nxp.com>","Subject":"Re: [PATCH] libcamera: simple: Check all media devices matched the\n\tpipeline","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"jacopo.mondi@ideasonboard.com, mzamazal@redhat.com,\n\tdan.scally@ideasonboard.com, hui.fang@nxp.com, antoine.bouyer@nxp.com","To":"Fang Hui <hui.fang@nxp.com>, libcamera-devel@lists.libcamera.org","Date":"Thu, 27 Feb 2025 19:56:46 +0000","Message-ID":"<174068620681.31628.2175002044685903562@ping.linuxembedded.co.uk>","User-Agent":"alot/0.10","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>"}},{"id":33506,"web_url":"https://patchwork.libcamera.org/comment/33506/","msgid":"<DB9PR04MB92847A65F04ABF3E175F26E087CC2@DB9PR04MB9284.eurprd04.prod.outlook.com>","date":"2025-02-28T06:17:38","subject":"RE: [EXT] Re: [PATCH] libcamera: simple: Check all media devices\n\tmatched the pipeline","submitter":{"id":186,"url":"https://patchwork.libcamera.org/api/people/186/","name":"Fang Hui","email":"hui.fang@nxp.com"},"content":"Hi, Bingham\nThanks for your reminding.\n\nThe patch is to fix below issue:\nwevk_8mq has 2 camera slots, if just 1 slot plug sensor, if may mis-discovered.\nThere's 2 media deivces, suggest mediaA(with sensor), mediaB(no sensor). If mediaB is in the 1st place (depends of readdir()) of the enumerator,\npipe->match(enumerator_.get() return false and mediaA has no chance to be discovered.\n\nRef code in camera_manager.cpp\t\nvoid CameraManager::Private::pipelineFactoryMatch(const PipelineHandlerFactoryBase *factory)\n{\n\tCameraManager *const o = LIBCAMERA_O_PTR();\n\n\t/* Provide as many matching pipelines as possible. */\n\twhile (1) {\n\t\tstd::shared_ptr<PipelineHandler> pipe = factory->create(o);\n\t\tif (!pipe->match(enumerator_.get()))\n\t\t\tbreak;\n\n\t\tLOG(Camera, Debug)\n\t\t\t<< \"Pipeline handler \\\"\" << factory->name()\n\t\t\t<< \"\\\" matched\";\n\t}\n}\n\n\nI tested on android, APP/CTS just switch back/front camera, no case to use 2 cameras at same time.\nSince the specific \"Camera\" is register to CameraManager and passed to SimplePipelineHandler, so no issue.\n\nBut if there's case to use 2 cameras at same time, should have issue.\n\nMaybe the best resolution is in driver, don't create a media device if no sensor plugged in the media graph.\n\n\nBRs,\nFang Hui\n\n> -----Original Message-----\n> From: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> Sent: 2025年2月28日 3:57\n> To: Hui Fang <hui.fang@nxp.com>; libcamera-devel@lists.libcamera.org\n> Cc: jacopo.mondi@ideasonboard.com; mzamazal@redhat.com;\n> dan.scally@ideasonboard.com; Hui Fang <hui.fang@nxp.com>; Antoine\n> Bouyer <antoine.bouyer@nxp.com>\n> Subject: [EXT] Re: [PATCH] libcamera: simple: Check all media devices\n> matched the pipeline\n> \n> Caution: This is an external email. Please take care when clicking links or\n> opening attachments. When in doubt, report the message using the 'Report\n> this email' button\n> \n> \n> Hi Fang,\n> \n> Quoting Fang Hui (2025-02-25 02:10:23)\n> > The current implementation of SimplePipelineHandler::match() will\n> > return false once meet an un-complete media device such as no sensor\n> > plugged. Thus the rest media devices will lost the chance to be discovered.\n> > To discover all the cameras present, this change instanciates the\n> > cameras discovery procedure for each media device that contains a\n> supported camera port.\n> >\n> > Signed-off-by: Fang Hui <hui.fang@nxp.com>\n> > ---\n> >  src/libcamera/pipeline/simple/simple.cpp | 50\n> > +++++++++++++++++-------\n> >  1 file changed, 35 insertions(+), 15 deletions(-)\n> >\n> > diff --git a/src/libcamera/pipeline/simple/simple.cpp\n> > b/src/libcamera/pipeline/simple/simple.cpp\n> > index 6e039bf3..134f0a07 100644\n> > --- a/src/libcamera/pipeline/simple/simple.cpp\n> > +++ b/src/libcamera/pipeline/simple/simple.cpp\n> > @@ -379,6 +379,8 @@ private:\n> >         const MediaPad *acquirePipeline(SimpleCameraData *data);\n> >         void releasePipeline(SimpleCameraData *data);\n> >\n> > +       bool matchMedia(DeviceEnumerator *enumerator, const\n> > + SimplePipelineInfo *info, MediaDevice *media);\n> > +\n> >         std::map<const MediaEntity *, EntityData> entities_;\n> >\n> >         MediaDevice *converter_;\n> > @@ -1532,23 +1534,9 @@ int\n> SimplePipelineHandler::resetRoutingTable(V4L2Subdevice *subdev)\n> >         return 0;\n> >  }\n> >\n> > -bool SimplePipelineHandler::match(DeviceEnumerator *enumerator)\n> > +bool SimplePipelineHandler::matchMedia(DeviceEnumerator *enumerator,\n> > +const SimplePipelineInfo *info, MediaDevice *media)\n> >  {\n> > -       const SimplePipelineInfo *info = nullptr;\n> >         unsigned int numStreams = 1;\n> > -       MediaDevice *media;\n> > -\n> > -       for (const SimplePipelineInfo &inf : supportedDevices) {\n> > -               DeviceMatch dm(inf.driver);\n> > -               media = acquireMediaDevice(enumerator, dm);\n> > -               if (media) {\n> > -                       info = &inf;\n> > -                       break;\n> > -               }\n> > -       }\n> > -\n> > -       if (!media)\n> > -               return false;\n> >\n> >         for (const auto &[name, streams] : info->converters) {\n> >                 DeviceMatch converterMatch(name); @@ -1678,6\n> +1666,38\n> > @@ bool SimplePipelineHandler::match(DeviceEnumerator *enumerator)\n> >         return registered;\n> >  }\n> >\n> > +bool SimplePipelineHandler::match(DeviceEnumerator *enumerator) {\n> > +       MediaDevice *media;\n> > +       std::map<MediaDevice *, const SimplePipelineInfo *>\n> > +mediaDevices;\n> > +\n> > +       for (const SimplePipelineInfo &inf : supportedDevices) {\n> > +               LOG(SimplePipeline, Debug) << \"check simple pipeline \"\n> << inf.driver;\n> > +               DeviceMatch dm(inf.driver);\n> > +\n> > +               do {\n> > +                       media = acquireMediaDevice(enumerator,\n> dm);\n> > +                       if (media) {\n> > +                               mediaDevices[media] = &inf;\n> > +                               LOG(SimplePipeline, Debug) <<\n> \"found media \" << media->deviceNode();\n> > +                       }\n> > +               } while (media);\n> > +       }\n> > +\n> > +       bool matched = false;\n> > +\n> > +       for (auto it = mediaDevices.begin(); it != mediaDevices.end(); it++)\n> {\n> > +               MediaDevice *media = it->first;\n> > +               const SimplePipelineInfo *info = it->second;\n> > +               LOG(SimplePipeline, Debug)\n> > +                       << \"call matchMedia for pipeline \"\n> > +                       << info->driver << \", media \" <<\n> media->deviceNode();\n> > +               matched |= matchMedia(enumerator, info, media);\n> > +       }\n> \n> I'm not 100% sure I understand the implications here. I also tried to tackle this\n> topic at\n> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpatch\n> work.libcamera.org%2Fpatch%2F20849%2F&data=05%7C02%7Chui.fang%40\n> nxp.com%7C7df77e1abad34fc20d4908dd5768dfd0%7C686ea1d3bc2b4c6fa9\n> 2cd99c5c301635%7C0%7C0%7C638762830140008274%7CUnknown%7CTW\n> FpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW\n> 4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=Y1vZOi\n> FLPsKslaQ9QjnsgWzAXfVdy6NZ%2BpZc1Gedl%2Fo%3D&reserved=0, and I\n> see your version differs slightly that first you will try to find all compatible\n> graphs, but then match each of the successfully acquired ones.\n> \n> But I think this will be problematic as you will then register (or try to register)\n> multiple graphs in a single pipeline handler ?\n> \n> Have you checked what happens here if there are more than one simple\n> pipeline handler supported in the system ?\n> \n> \n> \n> > +\n> > +       return matched;\n> > +}\n> > +\n> >  V4L2VideoDevice *SimplePipelineHandler::video(const MediaEntity\n> > *entity)  {\n> >         auto iter = entities_.find(entity);\n> > --\n> > 2.25.1\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 9CF92BE080\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 28 Feb 2025 06:17:44 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id AD2C168766;\n\tFri, 28 Feb 2025 07:17:43 +0100 (CET)","from AS8PR03CU001.outbound.protection.outlook.com\n\t(mail-westeuropeazlp170120005.outbound.protection.outlook.com\n\t[IPv6:2a01:111:f403:c201::5])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 8CBA9614EB\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 28 Feb 2025 07:17:40 +0100 (CET)","from DB9PR04MB9284.eurprd04.prod.outlook.com (2603:10a6:10:36c::8)\n\tby DBBPR04MB7898.eurprd04.prod.outlook.com (2603:10a6:10:1ed::12)\n\twith Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8489.22;\n\tFri, 28 Feb 2025 06:17:38 +0000","from DB9PR04MB9284.eurprd04.prod.outlook.com\n\t([fe80::c5dc:4676:2254:2f4]) by\n\tDB9PR04MB9284.eurprd04.prod.outlook.com\n\t([fe80::c5dc:4676:2254:2f4%5]) with mapi id 15.20.8489.018;\n\tFri, 28 Feb 2025 06:17:38 +0000"],"Authentication-Results":["lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"CiOzZmVA\";\n\tdkim-atps=neutral","dkim=none (message not signed)\n\theader.d=none;dmarc=none action=none header.from=nxp.com;"],"ARC-Seal":"i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n\tb=GX4rydlkLiKQLMmCgKhL8Db/uv+p8Nu6nPcxvWLuDVm7fuoIQZ1iqcQseP5Z7f6FX9+8GCFQAYLUMhEbYOt1lSy0Iciz++lSL9hTEvSbSCDICObgfj9YBw2PmftO3bOCzR3l3B4wX9m/B0RtnEu37lYMETxE76T+BdQmxWoMS7y0CYURrgzk55aExebSXC8uaFcjzxUsyGrL4itYA6JSq07nsA7C5ur+YE4nePFxIY5FhwZaLkVCNFocVeAtvbw95bIBriExJoHW/t1qLGvr7HnrQG9+ssZiCnIK0uAznAzSxoAPa2MoJhk2XnReGe5wlvlokUWPjgg/pY+YQuVOtQ==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n\ts=arcselector10001;\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=BnvH0zUS55Rtulbv5XaulctpDJKI13FsRUVDn8d8Vf0=;\n\tb=atJshpAzZ/L18m8uKswfNCohFPvDW1Tt+f6Ao0kfHLjIWlyazhSZsYnMC/gHo5LUCaQ9ZnZblFmYOjUitpqquTY5kRv4Nd6xowjZ5PpCMSBwG48CQ4dewdN1e98M90cfo1+kdc2JJNjP2dnEkr+KRmJtgVPl3rY6anYb2TPwldVYwM1cVFIO5rzG4q7e5s7qCC9mBIARpV4yXYyUjHQdJif/fdCG2StPpKGIgmxy1McmdlwvTeCNBqFtH5M6IS6OapWpoQgCmKcYMMOAWTI/bRj3xnrjKdCrAooG7St6SRk02OQMuvAkf9z4FSLGOKyOFUVvgW9mr58zoxZRcNHmRQ==","ARC-Authentication-Results":"i=1; mx.microsoft.com 1; spf=pass\n\tsmtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com;\n\tdkim=pass header.d=nxp.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n\tbh=BnvH0zUS55Rtulbv5XaulctpDJKI13FsRUVDn8d8Vf0=;\n\tb=CiOzZmVAn1Wc5QL3o8B/Tmmup78hOp3I+YCCwSvlblsnj2RPgBUIbYCfGx6vTzZxZNyHJ0ii33FEmEedNFUod4jDL1EbX1JOzlwRSkt3rw5srcStShvdWtYdnAfJVqJFqK495P3I4FjAGPRCt/KpztRDceudSfouwRj2EV2FWyUfnakqnASTS4axeM11Ry36tZ8xYZ6vJMoD+XFeizKu1IWyY9OHjyoR3fh1c/IksNn5mP3P9+BCKvXNPwB99nOEiUYt/+uqZKMMQ/v8unUOfyY8IpT3UCaYkY2kHk0opAYux7RD4neEgEMYIUla0RKvBuUokrHx0ecIhoGF6mItfg==","From":"Hui Fang <hui.fang@nxp.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>,\n\t\"libcamera-devel@lists.libcamera.org\"\n\t<libcamera-devel@lists.libcamera.org>","CC":"\"jacopo.mondi@ideasonboard.com\" <jacopo.mondi@ideasonboard.com>,\n\t\"mzamazal@redhat.com\" <mzamazal@redhat.com>,\n\t\"dan.scally@ideasonboard.com\"\n\t<dan.scally@ideasonboard.com>, Antoine Bouyer <antoine.bouyer@nxp.com>,\n\tJulien Vuillaumier <julien.vuillaumier@nxp.com>","Subject":"RE: [EXT] Re: [PATCH] libcamera: simple: Check all media devices\n\tmatched the pipeline","Thread-Topic":"[EXT] Re: [PATCH] libcamera: simple: Check all media devices\n\tmatched the pipeline","Thread-Index":"AQHbhy/cEgYtRWS6cUyTPV9GFg86vLNblRYAgACsHZA=","Date":"Fri, 28 Feb 2025 06:17:38 +0000","Message-ID":"<DB9PR04MB92847A65F04ABF3E175F26E087CC2@DB9PR04MB9284.eurprd04.prod.outlook.com>","References":"<20250225021023.2112783-1-hui.fang@nxp.com>\n\t<174068620681.31628.2175002044685903562@ping.linuxembedded.co.uk>","In-Reply-To":"<174068620681.31628.2175002044685903562@ping.linuxembedded.co.uk>","Accept-Language":"en-US","Content-Language":"en-US","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","authentication-results":["lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"CiOzZmVA\";\n\tdkim-atps=neutral","dkim=none (message not signed)\n\theader.d=none;dmarc=none action=none header.from=nxp.com;"],"x-ms-publictraffictype":"Email","x-ms-traffictypediagnostic":"DB9PR04MB9284:EE_|DBBPR04MB7898:EE_","x-ms-office365-filtering-correlation-id":"b1b35f53-964f-4ee4-08be-08dd57bf99ba","x-ms-exchange-senderadcheck":"1","x-ms-exchange-antispam-relay":"0","x-microsoft-antispam":"BCL:0;\n\tARA:13230040|366016|1800799024|376014|38070700018; ","x-microsoft-antispam-message-info":"=?gb2312?b?b0J2QzVUTGRjdlFyVHlQc1VZ?=\n\t=?gb2312?b?c3laejJTSmhIYXFScVAwc05DdFJSZXNIUkRYYU1zVlRWS2RGUjFL?=\n\t=?gb2312?b?aXdDcS9TVm5xQUZ1NDdibUJhbnNQa3BxY0F1R2d5Ym1JcDU2SEM4?=\n\t=?gb2312?b?ZlJKYmVsUTM3VlVRKzhYdHJzQ0UvdEZiMWpZZGdVbVJPd0JyWVMw?=\n\t=?gb2312?b?RUtaRFBJZk05amJ2QXBnQjl4eGF3RWRjTnl3SjA4Wm1YMXlGUVBo?=\n\t=?gb2312?b?OFdZS2JGSThqWnZXcTAvbFRKL25jSWo5RklkRDlhTkF1b1YzUGdD?=\n\t=?gb2312?b?K1hGTHIzUlI1MXRWSE81Y2lCSHhteTF6VlBRazVyeEdWK2dtK0ZZ?=\n\t=?gb2312?b?K1gxK3lDcXlqNGN5Qk5YeWZ4Y3RvQ2tzazY5VnBQN05iUG9QeHVL?=\n\t=?gb2312?b?MEF5bVdTMjN3RWdZdEdZb3ZmV1I0MmJRWEhudGxaNTRCWmFEdk1t?=\n\t=?gb2312?b?ZXF0RmJMaEpvcmk5WG15TjlFM2JFbUNHdllwK1NvUWxab0JzN21z?=\n\t=?gb2312?b?MlBFNUZ3L1RmaVcyS1M0dWtvbHZqYmNFUzhtTkdLeFo3UEoxbnE4?=\n\t=?gb2312?b?cWwyYkpqdkx3c09pdE9Qcm9XNnNsamJWanlkdFg5NkhSNUpYU3o2?=\n\t=?gb2312?b?N3hhcHloR1NWaWE2enNLaEtqczVhbnUvYTJMbDU3NkZET25qeTV2?=\n\t=?gb2312?b?amcwSGQzUmNEUVR6REhWb3lCSlNlbkFQOFpYSjJkdTZNcXpPcEtR?=\n\t=?gb2312?b?S3h1YSt0ZU9ic3VQcEM1NlVIUFdqbFFDZ3JER2ErN2VENWZCdVBE?=\n\t=?gb2312?b?TWhrYmFrR09DTnFreU5NbzR0RjBqVklrVVA3dXNaWlRWNS9vZHVC?=\n\t=?gb2312?b?RkNkTzNmbVY5WjhUR2Y4L2dZYzg3NnFUUzcyVWJYaTJOVTVqdkgv?=\n\t=?gb2312?b?MjFSNzEvaFh2MjZXVGxjd0RCa2hIU01ER0U2Yjh0UTVLNWtRWnVu?=\n\t=?gb2312?b?YnE3U1Z5d3Fuejd6OHZKV0R6ei9pSWQ5WGNWVzhrdUJDQ0dmMW1I?=\n\t=?gb2312?b?aThCT1ZFSXJYZDIxdE5yT01rTXpqOVF5anVNSmJDd2tyOFFrQVBI?=\n\t=?gb2312?b?SjA0YnlPMENoQ0w3ZjEvK0JFZ1FVS0JQWHR6MTM2a1c3SVdKWHlp?=\n\t=?gb2312?b?SklDdDluMFRrbXk0NVl0ZmRYY3ZKbzZzSEN2T0g2T3I1M2Q1WEQ4?=\n\t=?gb2312?b?ZHhaTTF3dUJMYjNQcE94ZHJPYWpuNERJRGV1a3ZEamdVRUxFNXlY?=\n\t=?gb2312?b?RmdBSDZhM1BaRGJJWWlLRUNvRldSN0gvYjA1TDN5YWZ2RmlHNUVs?=\n\t=?gb2312?b?dm02d24yZ1pmZWlKQVNBcTJWanpDVjFDcGo1Q0cxOElxTW9RbE9D?=\n\t=?gb2312?b?ZWlROHJNR29HblZTY1pFYW9hd0NUM05iQlllejc3S2VITDhVRU1G?=\n\t=?gb2312?b?Q2VSZHFPVTM4U0NoYXZTNFVCYkxVUk51MHFjdStZdDFOV3VzWEpG?=\n\t=?gb2312?b?L2xZK1BmcEdacVZkeTFrRHhqTWdIbzlOT3dpM29kRkRDdTZCUm1O?=\n\t=?gb2312?b?NWFXTzBncGxUUGhzUlBIOWVsd3g5aGlNSk9QTkxMK2FIc05YWkdY?=\n\t=?gb2312?b?UlRRVDFVS25GZTQ0ckpLWFdXazVsNkpKS1lpaEw0bU9xOTFKMGo5?=\n\t=?gb2312?b?OHkrNVJMNURHc3FFOEdDMExBWVpkWnN1Ti8wcVN1Wk1tcDN4dmlE?=\n\t=?gb2312?b?em1kdlI0Rm0rQmsvRG9pc21mczZwb0dEaWNkelo2aGV1dHJuS0dL?=\n\t=?gb2312?b?cG1XVW1RazhIMEltb1RIdVlsYWRVUlFhZ3VCNmJjQy8xUVd3WWkw?=\n\t=?gb2312?b?eExBM25SRDZaVUNBZ2tYaDUwRzNNT3kzQ2JieGJienE4aWlPYUo4?=\n\t=?gb2312?b?ZUxSL2FvUndCWTJabWZBM3BFemVWYTFqRjJMbkZSam5HS0lFbElx?=\n\t=?gb2312?b?QVk3RUgvQWNOVTdWSjU5SHYzM21COC9EUW1xdGx3Z29sVnZRTTdF?=\n\t=?gb2312?b?QlJDZWJwN3NGWlFYaFI4SjY0NnVuOW52bFFFOHJtU3NIcmJ6YVZX?=\n\t=?gb2312?b?ZGRyR29GT0V6dGNyeDc2UHAvU3dvWW9sZDlLTGh0ek9zVVBEK3Yr?=\n\t=?gb2312?b?RElnZG5vZzJDbFE=?=","x-forefront-antispam-report":"CIP:255.255.255.255; CTRY:; LANG:zh-cn; SCL:1; \n\tSRV:; IPV:NLI; SFV:NSPM;\n\tH:DB9PR04MB9284.eurprd04.prod.outlook.com; PTR:; \n\tCAT:NONE; SFS:(13230040)(366016)(1800799024)(376014)(38070700018);\n\tDIR:OUT; SFP:1101; ","x-ms-exchange-antispam-messagedata-chunkcount":"1","x-ms-exchange-antispam-messagedata-0":"=?gb2312?b?WGQ5TmtXNS9CeS9NNUtEVStM?=\n\t=?gb2312?b?d0pSNXRjMTd4d1RoRTgyMDRZNjB2anRuNktDZUF2aFl4dUR6YkRw?=\n\t=?gb2312?b?T3JYM0E4L2xSNUlQYXhSWThqck43ZXdySTgrNmVScUFXMGpEcEVy?=\n\t=?gb2312?b?WVZBaDIvZjcwZGdFTDIwN1hIeHEvNjNuK25hZCtWWDh3RXI0c2dt?=\n\t=?gb2312?b?WW5JY3NhOEkrQ2RneVJ4dk9JQlpWU0srNkRNck42L0RYQXNXL3pl?=\n\t=?gb2312?b?VWlhSCt5QSsyckZ1eXV1M2xTR2xYRUZTdWlYeEV0STk4bnYvSDJM?=\n\t=?gb2312?b?TDZ6b1prWmRBUFhZY1l3Y084N0hGVWZKWU9yQ3JBOXIxZ25Tc2ZJ?=\n\t=?gb2312?b?eHFnNVhKbXY5YVpKSFhSVVdHcFNkd01sVGowSXdha21hUVllczZq?=\n\t=?gb2312?b?U3laU2dMTWFFdnQ3NHlnZTZMSHZZWHZ6SnJtZUt2bGJpemt0L3lH?=\n\t=?gb2312?b?S05XQjcyRnI3b3p2MEM3OGJtSktTNnNldnQyeW13OFM5Uy9kTG5a?=\n\t=?gb2312?b?L2NLaEtHL3pMV0Q0TE04TEZldlNZMldLZEYrRG96UFFGYVFYZDk0?=\n\t=?gb2312?b?RGRSL2hWKzJOZk5meWUrc0s4cXNoWU1JZDBJdUNTWFJvZjk2aDl6?=\n\t=?gb2312?b?bi9yZXFNQ2M5SEx2bzVrQmpSUFIxTjNvL2FtT05yRGlTRzYzR043?=\n\t=?gb2312?b?M1dYS1BPdEdvU0xYSFF1MFVmSEF4TFZUdi9rdlQwVnpmdGtSTktD?=\n\t=?gb2312?b?MDVad1c3ZkJyaHN6d05NTHdSTGxzN3d3MExaY2Z6SXlNaVBQQ01E?=\n\t=?gb2312?b?YTlMQ2lmNDVZN05ZdXBtbEJHeUEwdTIwUDkxMzZwcnpTOGM3UzZn?=\n\t=?gb2312?b?MnNFcmdEbDVLcVV2Vk9XeFFOZkV1L1JLbXQ5Nkg3dkV1MlpLUlJq?=\n\t=?gb2312?b?ZXVmN1Z4djl4aUpXUVBST1FKZ2xXeDN1bGV5LzluaStObjRWajV4?=\n\t=?gb2312?b?Ukc1ZTFWMlhReE5xQmp6Zk9PTEtrMGxjaGFnMUJjMXVXZks5Z2ZM?=\n\t=?gb2312?b?VEJxODRzTFMyUkZQZFhQdlM5d1V6YnlSdVhDNFFmMzc5SWlJM3I0?=\n\t=?gb2312?b?QkNiczJIWUxPQXlKbTBneDRKZVpVRitkbXZXK3JQOHorNm1YdDdL?=\n\t=?gb2312?b?NzNKWm1kcGFLTjIyVkZCdkVFS0YrSHhTSUcwNElLMVlCK1hVNkRi?=\n\t=?gb2312?b?SjdCNG5zSWprM1FIMDlRdmhwY0JtUVcwU3NEMmZOQnNwcnJTMSsz?=\n\t=?gb2312?b?SGxBK1U4NWE3T1k4ZEM4YzRLSzRnRFkxazJDTUhRWlMvMmhQamhh?=\n\t=?gb2312?b?d2pydERpTlhzS2xqY1MvelBGWm9xbWIzNVpIRGIzOXRuQ3JleGx6?=\n\t=?gb2312?b?NVVPNVVzOHVqRFAxTExnc1pYNW1FWXlKM2h1SnFEQU9VbGJLMjJv?=\n\t=?gb2312?b?ODBLSExvWEg3SUQ2WmlqeTVKVTIvMHBHdThEYkxBcWordjJ3eW53?=\n\t=?gb2312?b?TE1nUmpwNTFmcC9HVUdhUDRyWGc4cWtSaTNEU0MvMnFNOXIvR280?=\n\t=?gb2312?b?YkswRUI0RlVPd1lEVUhnN3VZTzdNSGF4bnBhOFZCYXVVOVNQR0VT?=\n\t=?gb2312?b?YzZFUS9ybTlDMFMxOU5MQm9tRzRrYXMrYkkzMVB6blJaZ1J5WkVY?=\n\t=?gb2312?b?TGZlRzd3cFE2aldQTTU1SExmTGF5TzZHbHVFN1ZFVmxLNkRyN1RV?=\n\t=?gb2312?b?cnBKODNmdUdtRjdJdlE3b3QxVkIwMGl1b2RSRVhNT1dTT3RteXVm?=\n\t=?gb2312?b?bWdKWmdnaTJObG5mSTRTaVBSdjFoVHdnNnFRT2VZRXRCK2I2cGdI?=\n\t=?gb2312?b?bHJaWWVaU3ExRDNFK2dTWFVnZEkwS0ZVancxd3p6K0NLMmlzWGhZ?=\n\t=?gb2312?b?MUZ0L1oxMXpvOGlYQlBKcGVrWDlIaGxNNTNNYWo3L1B4eFpHd3Z6?=\n\t=?gb2312?b?YWNMeWpNTnkwWmJUeWgzRVVqaXBPOWdqMWozU2N4WHA0MlhDN2lT?=\n\t=?gb2312?b?TWJuOTZCUkJwaStweEpzSGc0YUVmM2crRXJFYW81c2hGREo3SEUz?=\n\t=?gb2312?b?SklSTVYvY1Zmd3dmYjdEeVFrYTFWbjdMalBlNTkrb2JWNEI5UlRM?=\n\t=?gb2312?b?eXNEK2drSW1MQ21taW10ZkJJaXNVWUlaRVNlT2JmTDBNWkNSV2Vt?=\n\t=?gb2312?b?KzZabE5xTEljSkJsQzFEUkVCNWx2SnViYk45cE1YazVCckd3emdT?=\n\t=?gb2312?b?OWsyRW9OQk1hS2ExbnpuRjE3RnN6cHZDd0VIaXBmYmorRlVGaldJ?=\n\t=?gb2312?b?Yz0=?=","Content-Type":"text/plain; charset=\"gb2312\"","Content-Transfer-Encoding":"base64","MIME-Version":"1.0","X-OriginatorOrg":"nxp.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-AuthSource":"DB9PR04MB9284.eurprd04.prod.outlook.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"b1b35f53-964f-4ee4-08be-08dd57bf99ba","X-MS-Exchange-CrossTenant-originalarrivaltime":"28 Feb 2025 06:17:38.5534\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":"GmP+mKUa6Lp4GC0u9IRyeXjrwTgG0SDaUVawHq0g6zXjAZZot6/ZO7JjQKvHQvUb4Mel1AnrLztIwtyv96qMTw==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"DBBPR04MB7898","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>"}},{"id":33507,"web_url":"https://patchwork.libcamera.org/comment/33507/","msgid":"<DB9PR04MB92846FAED000A04B286C463B87CC2@DB9PR04MB9284.eurprd04.prod.outlook.com>","date":"2025-02-28T07:42:35","subject":"RE: [EXT] Re: [PATCH] libcamera: simple: Check all media devices\n\tmatched the pipeline","submitter":{"id":186,"url":"https://patchwork.libcamera.org/api/people/186/","name":"Fang Hui","email":"hui.fang@nxp.com"},"content":"Checked, my patch is similar as https://patchwork.libcamera.org/patch/20849/.\n\nFor the case to use 2 cameras at same time, if the specific \"Camera\" is passed to SimplePipelineHandler's interfaces, maybe should ok?\nNeed test to verity.\n\nBRs,\nFang Hui\n\n> -----Original Message-----\n> From: Hui Fang\n> Sent: 2025年2月28日 14:17\n> To: 'Kieran Bingham' <kieran.bingham@ideasonboard.com>;\n> libcamera-devel@lists.libcamera.org\n> Cc: jacopo.mondi@ideasonboard.com; mzamazal@redhat.com;\n> dan.scally@ideasonboard.com; Antoine Bouyer <antoine.bouyer@nxp.com>;\n> Julien Vuillaumier <julien.vuillaumier@nxp.com>\n> Subject: RE: [EXT] Re: [PATCH] libcamera: simple: Check all media devices\n> matched the pipeline\n>\n> Hi, Bingham\n> Thanks for your reminding.\n>\n> The patch is to fix below issue:\n> wevk_8mq has 2 camera slots, if just 1 slot plug sensor, if may mis-discovered.\n> There's 2 media deivces, suggest mediaA(with sensor), mediaB(no sensor). If\n> mediaB is in the 1st place (depends of readdir()) of the enumerator,\n> pipe->match(enumerator_.get() return false and mediaA has no chance to be\n> discovered.\n>\n> Ref code in camera_manager.cpp\n> void CameraManager::Private::pipelineFactoryMatch(const\n> PipelineHandlerFactoryBase *factory) {\n>       CameraManager *const o = LIBCAMERA_O_PTR();\n>\n>       /* Provide as many matching pipelines as possible. */\n>       while (1) {\n>               std::shared_ptr<PipelineHandler> pipe = factory->create(o);\n>               if (!pipe->match(enumerator_.get()))\n>                       break;\n>\n>               LOG(Camera, Debug)\n>                       << \"Pipeline handler \\\"\" << factory->name()\n>                       << \"\\\" matched\";\n>       }\n> }\n>\n>\n> I tested on android, APP/CTS just switch back/front camera, no case to use 2\n> cameras at same time.\n> Since the specific \"Camera\" is register to CameraManager and passed to\n> SimplePipelineHandler, so no issue.\n>\n> But if there's case to use 2 cameras at same time, should have issue.\n>\n> Maybe the best resolution is in driver, don't create a media device if no sensor\n> plugged in the media graph.\n>\n>\n> BRs,\n> Fang Hui\n>\n> > -----Original Message-----\n> > From: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> > Sent: 2025年2月28日 3:57\n> > To: Hui Fang <hui.fang@nxp.com>; libcamera-devel@lists.libcamera.org\n> > Cc: jacopo.mondi@ideasonboard.com; mzamazal@redhat.com;\n> > dan.scally@ideasonboard.com; Hui Fang <hui.fang@nxp.com>; Antoine\n> > Bouyer <antoine.bouyer@nxp.com>\n> > Subject: [EXT] Re: [PATCH] libcamera: simple: Check all media devices\n> > matched the pipeline\n> >\n> > Caution: This is an external email. Please take care when clicking\n> > links or opening attachments. When in doubt, report the message using\n> > the 'Report this email' button\n> >\n> >\n> > Hi Fang,\n> >\n> > Quoting Fang Hui (2025-02-25 02:10:23)\n> > > The current implementation of SimplePipelineHandler::match() will\n> > > return false once meet an un-complete media device such as no sensor\n> > > plugged. Thus the rest media devices will lost the chance to be\n> discovered.\n> > > To discover all the cameras present, this change instanciates the\n> > > cameras discovery procedure for each media device that contains a\n> > supported camera port.\n> > >\n> > > Signed-off-by: Fang Hui <hui.fang@nxp.com>\n> > > ---\n> > >  src/libcamera/pipeline/simple/simple.cpp | 50\n> > > +++++++++++++++++-------\n> > >  1 file changed, 35 insertions(+), 15 deletions(-)\n> > >\n> > > diff --git a/src/libcamera/pipeline/simple/simple.cpp\n> > > b/src/libcamera/pipeline/simple/simple.cpp\n> > > index 6e039bf3..134f0a07 100644\n> > > --- a/src/libcamera/pipeline/simple/simple.cpp\n> > > +++ b/src/libcamera/pipeline/simple/simple.cpp\n> > > @@ -379,6 +379,8 @@ private:\n> > >         const MediaPad *acquirePipeline(SimpleCameraData *data);\n> > >         void releasePipeline(SimpleCameraData *data);\n> > >\n> > > +       bool matchMedia(DeviceEnumerator *enumerator, const\n> > > + SimplePipelineInfo *info, MediaDevice *media);\n> > > +\n> > >         std::map<const MediaEntity *, EntityData> entities_;\n> > >\n> > >         MediaDevice *converter_;\n> > > @@ -1532,23 +1534,9 @@ int\n> > SimplePipelineHandler::resetRoutingTable(V4L2Subdevice *subdev)\n> > >         return 0;\n> > >  }\n> > >\n> > > -bool SimplePipelineHandler::match(DeviceEnumerator *enumerator)\n> > > +bool SimplePipelineHandler::matchMedia(DeviceEnumerator\n> > > +*enumerator, const SimplePipelineInfo *info, MediaDevice *media)\n> > >  {\n> > > -       const SimplePipelineInfo *info = nullptr;\n> > >         unsigned int numStreams = 1;\n> > > -       MediaDevice *media;\n> > > -\n> > > -       for (const SimplePipelineInfo &inf : supportedDevices) {\n> > > -               DeviceMatch dm(inf.driver);\n> > > -               media = acquireMediaDevice(enumerator, dm);\n> > > -               if (media) {\n> > > -                       info = &inf;\n> > > -                       break;\n> > > -               }\n> > > -       }\n> > > -\n> > > -       if (!media)\n> > > -               return false;\n> > >\n> > >         for (const auto &[name, streams] : info->converters) {\n> > >                 DeviceMatch converterMatch(name); @@ -1678,6\n> > +1666,38\n> > > @@ bool SimplePipelineHandler::match(DeviceEnumerator *enumerator)\n> > >         return registered;\n> > >  }\n> > >\n> > > +bool SimplePipelineHandler::match(DeviceEnumerator *enumerator) {\n> > > +       MediaDevice *media;\n> > > +       std::map<MediaDevice *, const SimplePipelineInfo *>\n> > > +mediaDevices;\n> > > +\n> > > +       for (const SimplePipelineInfo &inf : supportedDevices) {\n> > > +               LOG(SimplePipeline, Debug) << \"check simple pipeline\n> \"\n> > << inf.driver;\n> > > +               DeviceMatch dm(inf.driver);\n> > > +\n> > > +               do {\n> > > +                       media = acquireMediaDevice(enumerator,\n> > dm);\n> > > +                       if (media) {\n> > > +                               mediaDevices[media] = &inf;\n> > > +                               LOG(SimplePipeline, Debug) <<\n> > \"found media \" << media->deviceNode();\n> > > +                       }\n> > > +               } while (media);\n> > > +       }\n> > > +\n> > > +       bool matched = false;\n> > > +\n> > > +       for (auto it = mediaDevices.begin(); it !=\n> > > + mediaDevices.end(); it++)\n> > {\n> > > +               MediaDevice *media = it->first;\n> > > +               const SimplePipelineInfo *info = it->second;\n> > > +               LOG(SimplePipeline, Debug)\n> > > +                       << \"call matchMedia for pipeline \"\n> > > +                       << info->driver << \", media \" <<\n> > media->deviceNode();\n> > > +               matched |= matchMedia(enumerator, info, media);\n> > > +       }\n> >\n> > I'm not 100% sure I understand the implications here. I also tried to\n> > tackle this topic at\n> > https://patc/\n> > h\n> >\n> work.libcamera.org%2Fpatch%2F20849%2F&data=05%7C02%7Chui.fang%40\n> >\n> nxp.com%7C7df77e1abad34fc20d4908dd5768dfd0%7C686ea1d3bc2b4c6fa9\n> >\n> 2cd99c5c301635%7C0%7C0%7C638762830140008274%7CUnknown%7CTW\n> >\n> FpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW\n> >\n> 4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=Y1vZOi\n> > FLPsKslaQ9QjnsgWzAXfVdy6NZ%2BpZc1Gedl%2Fo%3D&reserved=0, and I\n> see\n> > your version differs slightly that first you will try to find all\n> > compatible graphs, but then match each of the successfully acquired ones.\n> >\n> > But I think this will be problematic as you will then register (or try\n> > to register) multiple graphs in a single pipeline handler ?\n> >\n> > Have you checked what happens here if there are more than one simple\n> > pipeline handler supported in the system ?\n> >\n> >\n> >\n> > > +\n> > > +       return matched;\n> > > +}\n> > > +\n> > >  V4L2VideoDevice *SimplePipelineHandler::video(const MediaEntity\n> > > *entity)  {\n> > >         auto iter = entities_.find(entity);\n> > > --\n> > > 2.25.1\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 BA0C8C3259\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 28 Feb 2025 07:42:39 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id BCBC168768;\n\tFri, 28 Feb 2025 08:42:38 +0100 (CET)","from EUR05-AM6-obe.outbound.protection.outlook.com\n\t(mail-am6eur05on2060f.outbound.protection.outlook.com\n\t[IPv6:2a01:111:f403:2612::60f])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id BC934614EB\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 28 Feb 2025 08:42:36 +0100 (CET)","from DB9PR04MB9284.eurprd04.prod.outlook.com (2603:10a6:10:36c::8)\n\tby PAXPR04MB8733.eurprd04.prod.outlook.com (2603:10a6:102:21d::7)\n\twith Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8489.22;\n\tFri, 28 Feb 2025 07:42:35 +0000","from DB9PR04MB9284.eurprd04.prod.outlook.com\n\t([fe80::c5dc:4676:2254:2f4]) by\n\tDB9PR04MB9284.eurprd04.prod.outlook.com\n\t([fe80::c5dc:4676:2254:2f4%5]) with mapi id 15.20.8489.018;\n\tFri, 28 Feb 2025 07:42:35 +0000"],"Authentication-Results":["lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"dIGXMNkZ\";\n\tdkim-atps=neutral","dkim=none (message not signed)\n\theader.d=none;dmarc=none action=none header.from=nxp.com;"],"ARC-Seal":"i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n\tb=SZQtwtl/ubdwPCah8ygkyI4RYF22BVqzEFJmF4CjT/upINwbGfA+0hq18SuTNi4yuMqqiIcHFCeXZYWCiONRbqu9h6kPyLExSP5Dso3kTbLMDkFtzpPkaxe+ufLkf+0ssvqVXmKdnND2tqxnNuGNmOK+3XQLoUrJivVm6oOyI+4AmH2x4bqdv1zJVWcAR4MA2cXehSQ68RQvvPTHHhBTb/z3TZGtumHAptEcl7vmH6wLvvktxRzcgbUgoIUrIOY+SmbNpmI3pTNzh5PDyoA8TrQ53pvwOb15pLrjam1eYZJODTL/Glru4ApowAnEbXb5ZTMJae0OGvH/WidDqtZCAQ==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n\ts=arcselector10001;\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=isTuohX66A+bIRzAyIURrKj26WgzU2f/Ab1BgI9T2aU=;\n\tb=aHZgE1xqOH9l75Y1tuFZtr8yoFSCaP6BfdE17IGOGjS5WxyO1qpgi4X8MkUxNRUZLt60dQM2pAlHYPRz87pC9wo8GUL2rUwV81W+79Q+x9o9Yuu86eA1VDBQdpfVGR6vNZc/qkm6F1KDg/+6UImfabf6XB24zoIjqo8hEaEOyHxtlx9jJmedc00EWRSu0aW6X94RuCwi7YiJX1ahXWP846k2mQ0LMouJIppqRNaz17lUwQcodqv6RkbGV7AUDqbuXGMKLE3r8ugZgb/QS0JQt5L9ZO398IMGmz5GXLbeKmSTPJ1Du92H85BILGQ7/TAV/WWSk3wHywv5Sb1BAG2wBA==","ARC-Authentication-Results":"i=1; mx.microsoft.com 1; spf=pass\n\tsmtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com;\n\tdkim=pass header.d=nxp.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n\tbh=isTuohX66A+bIRzAyIURrKj26WgzU2f/Ab1BgI9T2aU=;\n\tb=dIGXMNkZkUoaN+UFQqPeE+ie23xcUStvcqSnQnBqxfHA1jBMx28snKuXk+FLhy/+OpRp6yaLISNI76/QJIueIuLMuJQAv02vftHW7XegH5U7YTwdFhIk9Cbe/cBX1fblHijjvBnq/igRuKTv/AuaySd2t74AkYBnkqCfsk3SIzkKm5KFtS7tVzyU4E2aQEOxVdvI67TuzB6FoSTJ9KqOvEflHQCJBTmuPRI3zZu9ov/UWs5vIC1q9FlVb3Nrbz6oiiqRDPh4AYrmseqFKasfeDaBBYYN9m7DK7GpJ5Is8xj4lyGZjAMBneZFMOhtQtq5nut+XjXx8u5RIC/ayyouqw==","From":"Hui Fang <hui.fang@nxp.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>,\n\t\"libcamera-devel@lists.libcamera.org\"\n\t<libcamera-devel@lists.libcamera.org>","CC":"\"jacopo.mondi@ideasonboard.com\" <jacopo.mondi@ideasonboard.com>,\n\t\"mzamazal@redhat.com\" <mzamazal@redhat.com>,\n\t\"dan.scally@ideasonboard.com\"\n\t<dan.scally@ideasonboard.com>, Antoine Bouyer <antoine.bouyer@nxp.com>,\n\tJulien Vuillaumier <julien.vuillaumier@nxp.com>","Subject":"RE: [EXT] Re: [PATCH] libcamera: simple: Check all media devices\n\tmatched the pipeline","Thread-Topic":"[EXT] Re: [PATCH] libcamera: simple: Check all media devices\n\tmatched the pipeline","Thread-Index":"AQHbhy/cEgYtRWS6cUyTPV9GFg86vLNblRYAgACsHZCAABak8A==","Date":"Fri, 28 Feb 2025 07:42:35 +0000","Message-ID":"<DB9PR04MB92846FAED000A04B286C463B87CC2@DB9PR04MB9284.eurprd04.prod.outlook.com>","References":"<20250225021023.2112783-1-hui.fang@nxp.com>\n\t<174068620681.31628.2175002044685903562@ping.linuxembedded.co.uk>\n\t<DB9PR04MB92847A65F04ABF3E175F26E087CC2@DB9PR04MB9284.eurprd04.prod.outlook.com>","In-Reply-To":"<DB9PR04MB92847A65F04ABF3E175F26E087CC2@DB9PR04MB9284.eurprd04.prod.outlook.com>","Accept-Language":"en-US","Content-Language":"en-US","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","authentication-results":["lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"dIGXMNkZ\";\n\tdkim-atps=neutral","dkim=none (message not signed)\n\theader.d=none;dmarc=none action=none header.from=nxp.com;"],"x-ms-publictraffictype":"Email","x-ms-traffictypediagnostic":"DB9PR04MB9284:EE_|PAXPR04MB8733:EE_","x-ms-office365-filtering-correlation-id":"7de69878-d8fc-4984-15f7-08dd57cb7780","x-ms-exchange-senderadcheck":"1","x-ms-exchange-antispam-relay":"0","x-microsoft-antispam":"BCL:0;\n\tARA:13230040|1800799024|366016|376014|38070700018; ","x-microsoft-antispam-message-info":"=?gb2312?b?UXE2cTlhWUltVFZRTi9TM0Rl?=\n\t=?gb2312?b?OU8zdktNbUliTkNqYWppUGNVektEdzlBRGt6MFVCUE9XMndPckNm?=\n\t=?gb2312?b?NTRLdElndk40SzE2dEZsZkJkQkZDSG0rY3J0N2FyQjY2WlpwNWJQ?=\n\t=?gb2312?b?V0dUem9nOWxFTmlSVGtyaU9MN0lveGN6MHlvQTVHZHN4KzlKakxQ?=\n\t=?gb2312?b?YjhoUU9XVkZCc2huZnJqcDJYNEorb1hLNGszN3lQMjdGUlFhdUlH?=\n\t=?gb2312?b?cUJnVjdlUnFQT2lBeXY2YTNKSnFwNmRoMlU3OG4vZFVkM08wUXZu?=\n\t=?gb2312?b?clcvNGdYeTh6R0RLZFdmMU1zOUpSM1dKT3Z6VEFEMnlYWGJEY1hh?=\n\t=?gb2312?b?aDRMQWN3RWhRTGFkVTQ4YjFEc3hhaS92RmdQUThuVmU0VVdOMWNW?=\n\t=?gb2312?b?d0E4YmwrNmlJZ0hUcVVuSjFxRWJxc2gzVXlNdlFmclJydU9iUlRB?=\n\t=?gb2312?b?ZHZpdk84TW4yOUtmaXRqRU1HZE5DVlQ2dFpnazN6d09rSzhOZlc3?=\n\t=?gb2312?b?a2wyOHlHaWNCUVcxdjl5SFZ4T0x2QVhzdCtQclhlcm00ZCtPTmN5?=\n\t=?gb2312?b?YkxZUWZ1QnpVbzhDcUx5RVhuazNJSzRCRW9VL0czSmxya0JCWldJ?=\n\t=?gb2312?b?OFlxb2VyZWJ1M1YrZEJTbjlZSkNneVptemRmK2d6eE1IcUVoQWEr?=\n\t=?gb2312?b?bXNHWXFLaDBVNE1HaTA5aXBaMlFISTIrYUV3VmVJLy8yM05ZVGtw?=\n\t=?gb2312?b?SmlCSWVSelZEU0NJVmx0RE40V2E3QUFJM3Q3UnZPRy9iUmIvVElj?=\n\t=?gb2312?b?YmJydTN2U0N3WHdGOWlzcGdBb3BIY1VFSG5CTEFrMnhFY0hlY0d3?=\n\t=?gb2312?b?ZnRVVGwzTUxEUG4yS0l3UEU4ZmFxTlFaN0h2OUxPUElKVVIyemtF?=\n\t=?gb2312?b?T1F1UFV4SUJrZTdVV3AvRXorRnQ3b0cwMUJJSUFvWnRkWjkxZ2sv?=\n\t=?gb2312?b?alRoTFNoYmQzYWJ2WE0ybHNLNmZxNGJxZkJwOEdOeWdLQlJyVnE2?=\n\t=?gb2312?b?WDNWb3F1bVlBZ24xK2J2QVB3K09LcSsrakxEdGtUdFlNbzJJSVlo?=\n\t=?gb2312?b?NUt5VG9HcE8zdzl4RTB6RkVNWVNUWWFwWDVmWm9uZC9CVW5Rbm9B?=\n\t=?gb2312?b?MHBuL0s2MUpsNkJ6QjlXcG9Cd0YzeWpWa2FOKzU2T0VocjhkbjBY?=\n\t=?gb2312?b?TW5zajZiVlJzMHhOUjBzYm5ESldFSGZQeC82Mkk2b00rU0pTcGdO?=\n\t=?gb2312?b?NnVBNWR0RFBMWWZ6WUlLTXM5TkZFMUl2WlM5ZWFPa05KRUpOaDZW?=\n\t=?gb2312?b?NGRWMUJEd0ZMMGVyNWFNMXQwOG11VzBic01INmRROHZmR1MxVE5v?=\n\t=?gb2312?b?MTlmTUhtWmIzc2dUUyt1aTJxZTFKd0JaS2l2N081WE43ZXBOTGsw?=\n\t=?gb2312?b?ZlNKVGMzdDBEMFZ2VUR6bVluUm84WTlZdXhOMmdxdzJFeUVCVnVp?=\n\t=?gb2312?b?dWxuY2ZoYnoxQnVSTXBKaFNFWXE4TDB2b3hWSk9XblRDR2JIL3FH?=\n\t=?gb2312?b?NkpQV0t0MGVrR2s5bzROSEc3SzhKU3kyZ3pJZm4wUHJpMEdLRngy?=\n\t=?gb2312?b?amwyS2RZeVJHTFFTM1pXb1NZSUJTVkN0S2wxQXhvOHRCSSsyY0ts?=\n\t=?gb2312?b?VGpGR0xySjR4U2djMmVHOVZxZWVOVlhIZnZTMitNNkhENHlHd3h2?=\n\t=?gb2312?b?ODFYVWxnUGd3ZmdiTWgxOHRJTU5xaU1tQUE4d1czVFZZOThWVEow?=\n\t=?gb2312?b?cWRNV2l4MVZSVFYxK3RabU15ZThCcTVvcDRxSklrSVkzYVVNUTNJ?=\n\t=?gb2312?b?WUl5ZXYvMlphbTh0WC9qZnpRc2Q4d3YwRmZtRUNUZmp1bkF2cHdp?=\n\t=?gb2312?b?MGppNUFSc2QwYjdhQ0pIQjRacStDWjlMbG1pSnQ4d1l5VXF6bEwy?=\n\t=?gb2312?b?dlFvY2JEYyttWFo5elFxL1JsYk9nVWI1RHY4d0VXNDBab0tjS1hn?=\n\t=?gb2312?b?NHVGMGgwZDNMQ2FtZU45RXg2VU9aQ05SNA==?=","x-forefront-antispam-report":"CIP:255.255.255.255; CTRY:; LANG:zh-cn; SCL:1; \n\tSRV:; IPV:NLI; SFV:NSPM;\n\tH:DB9PR04MB9284.eurprd04.prod.outlook.com; PTR:; \n\tCAT:NONE; SFS:(13230040)(1800799024)(366016)(376014)(38070700018);\n\tDIR:OUT; SFP:1101; ","x-ms-exchange-antispam-messagedata-chunkcount":"1","x-ms-exchange-antispam-messagedata-0":"=?gb2312?b?TVQ1Y09CYWVxS0NXalFPUUJa?=\n\t=?gb2312?b?U09BcFpIc1BaZFNpSHJhU0lEcGw5eTBMQ1p2WWlrTGlBNVZUK3lS?=\n\t=?gb2312?b?NUNRUTY1UkVRRDNCblVibjNISkx5Wi9vLzdmamVtL2ZxVnhnQXly?=\n\t=?gb2312?b?b1FtVVp3VnR5YTBVMHJ0Y3Era1J5MDQwVnZzN0pMeXg3VW1vY3RS?=\n\t=?gb2312?b?MjBlYm9oNzZOcGZJVW4yQUJENjFkWnhFZzRYWG9sRDRUUmMyM3lH?=\n\t=?gb2312?b?bS9pWTNuTXE5RFJKdzZvN0ZNc1pCc3I4WFZoMCtMcEFiZkIwc2xT?=\n\t=?gb2312?b?Rlcvb0s4djA2VUZaWE10Y09OM3dSU0NPTzI4ZHVLaXRKWmFYQitX?=\n\t=?gb2312?b?QWpzSkh5M2dqNXJrbXZ3blNrVnpleGdsYUhtV0l1ZHYzS2xqMXdP?=\n\t=?gb2312?b?VlIvUU1Nc1BQT0ZLalV3N0RXa1d4L1dxb3NCYzE5aHBMRkVYQmRm?=\n\t=?gb2312?b?b1ZIRHFtRHprZFp3U085Q2k0aXMrSk84U1hyOVVRNnhEQ0FNbjc2?=\n\t=?gb2312?b?Y3JaZDdNb2VuL3M1Y0kzcm5Jc1JrTm1vd2dmUHNobHRFUXlUTjhR?=\n\t=?gb2312?b?YnFhNEJBeTJ0SllERDYyQlUyZTFLbDFGb3ZMTzI3UEFwaEhMempF?=\n\t=?gb2312?b?RmtBWm5XUzl5TDkwZXZkdWJWT3lXM0MwTytNRGNWbDMwTk5QdEdL?=\n\t=?gb2312?b?MGpqYTIxMnJsdm9aQnM4cExuM0pYNzBZYzVoQVAyL0czSzI2d2g4?=\n\t=?gb2312?b?QXhyTTBRbUI1cWRhSGF1ZjBGYnUzc1FkV1dpSDlqL3ZrZHpNVzhk?=\n\t=?gb2312?b?WGg3c3kvR0dXVk12RHo0ZUkzaUpNRVpvRGM5NWNTVThCVFhIbG5o?=\n\t=?gb2312?b?dWdiZ0JJTnpJQjRiV0FRdmVxcXNuTzV2dFhDNjVxekNTUDBvR25L?=\n\t=?gb2312?b?ZTlGR1VuM0hLbHpHaWRyTkUySmNBblNITDZuL2xWcC9Uemhjb3Jm?=\n\t=?gb2312?b?d0U5V2NLS21JdzRHUEdjSFhMY2l4cnpudXZaOHdaSEZpZVc0WVJX?=\n\t=?gb2312?b?UTFod2VpY3BiNDJ1V3pLY2hzanNCTGpxY3lZcVJHSjZEUWdWSGE0?=\n\t=?gb2312?b?MWlDOGJiK29Pekk5Q3RvZWhLYjlmUmNCbG1xRC93cng1R2lSaHFw?=\n\t=?gb2312?b?aFUzQzhLVVQyUWVOTStnOUNaWXM4cjZ0WkZuUmhEUERoNkFaQjA5?=\n\t=?gb2312?b?WmwwUXo0NHcyaWpDaldWRlB4SzdiUmM2QjFkMUdobHRCaTBJV1lT?=\n\t=?gb2312?b?QUdXWGxwd2FVaTVzUjh1dmQ1ZisyNGl6bGNzeHg3cjV1VENua0Ft?=\n\t=?gb2312?b?K3ZpVkVDLyswWjZzUjcxYUFOUUtycWx0alRuYkFHSlNDbkpMMzFM?=\n\t=?gb2312?b?bDNTYjFuNGg5NE1GRHh6T2VzblBHMVRoRi9ndCtabFBFeU9nNVNX?=\n\t=?gb2312?b?QldoWEI4TTh1aE5rY0Q3aEdhbXRxdk04WHNxdkpCc2JLM2hqWkZo?=\n\t=?gb2312?b?Mys3dW9RWmM5dnUxZHdPeHhlSllUNmU0ZG5SWFFaSmRyVWdnQWUv?=\n\t=?gb2312?b?d1R2MlZYUnlsUDFYVzBreXZpL0pXdEExcUVoOHpaQkhaQ012L0Ny?=\n\t=?gb2312?b?ZWE0cTVJaDFOT2Z1ZU91a1l2SGhZSXVnbFJZMG1Mb0pncHEwaFJM?=\n\t=?gb2312?b?MFZIRE42VXJwemVXY0JKamtidmZsemVaUHAvamJRdlZRc1ZiVExX?=\n\t=?gb2312?b?cEVMSC96Ny84ZDFoZVpwSHhSSTQ0UWZTK0VrNmxQK0F6WmtnR0I0?=\n\t=?gb2312?b?NDgyTHZUNkp3emx2OFJZZUh3L1dxdUhrcGorVnJ5WGRjb2NwMGRR?=\n\t=?gb2312?b?UnM5WTVnbTB0ZTMydnEzOUtZTWxmNU14cmY4NkZPSGNsSWdZenhO?=\n\t=?gb2312?b?T2YwcjJTV215RzZPOFRwWlgwbFg0a3dBRkRnRUY1bittTEVreWNV?=\n\t=?gb2312?b?QWFmVTUydzZxWkh5ai8wWkM3blFzU1BkUXpCSGltZzdTOVBHWWFx?=\n\t=?gb2312?b?QWRraHVBb2t0cGNZVmhXSWxhR0hVMkpXN01ucTNUNEY2UE15V1pH?=\n\t=?gb2312?b?blA1UkNVbVF0c1F2UkRBdHZnTFYzMWFjdU9jU3BmUlFTZWtCeWxU?=\n\t=?gb2312?b?TnJYQnBhb0ZxYzk4U0VuSmp3OTl4MDA3U2VRdlZiNEN2d1ZhS2xH?=\n\t=?gb2312?b?aldESWUxSjBBMElsWDNuYWU0MEwrTDJrSEtLekxoTGhITGc5N1FU?=\n\t=?gb2312?b?UnhLQzJqalhnRFJQS0U4ZnFjQ3E0a3FIQUxzT001RFcvaGxWOVdv?=\n\t=?gb2312?b?VT0=?=","Content-Type":"text/plain; charset=\"gb2312\"","Content-Transfer-Encoding":"base64","MIME-Version":"1.0","X-OriginatorOrg":"nxp.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-AuthSource":"DB9PR04MB9284.eurprd04.prod.outlook.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"7de69878-d8fc-4984-15f7-08dd57cb7780","X-MS-Exchange-CrossTenant-originalarrivaltime":"28 Feb 2025 07:42:35.1319\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":"2rWpgeoFVf4VRykRv5uwpip3z8gX00crHatGptjiGEC5Qfm4+0UWsTC6EATKBkJ1ZDs6+sCulSe37x9ceHQReg==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"PAXPR04MB8733","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>"}},{"id":33508,"web_url":"https://patchwork.libcamera.org/comment/33508/","msgid":"<DB9PR04MB928432D31296DF6A028D324F87CC2@DB9PR04MB9284.eurprd04.prod.outlook.com>","date":"2025-02-28T08:39:28","subject":"RE: [EXT] Re: [PATCH] libcamera: simple: Check all media devices\n\tmatched the pipeline","submitter":{"id":186,"url":"https://patchwork.libcamera.org/api/people/186/","name":"Fang Hui","email":"hui.fang@nxp.com"},"content":"Use \"cam\" to capture from 2 cameras at same time, ok.\n\nexport W=1920\nexport H=1080\t\ncam \\\n        --camera 1 \\\n        --stream width=${W},height=${H},pixelformat=YUYV \\\n        --file=frame-#.yuv \\\n        --capture=5 \\\n        --camera 2 \\\n        --stream width=${W},height=${H},pixelformat=YUYV \\\n        --file=frame-#.yuv \\\n        --capture=5\n\nUsing camera /base/soc@0/bus@30800000/i2c@30a20000/ov5640_mipi2@3c as cam0\nUsing camera /base/soc@0/bus@30800000/i2c@30a30000/ov5640_mipi@3c as cam1\ncam0: Capture 5 frames\ncam1: Capture 5 frames\n\n17475.769932 (0.00 fps) cam0-stream0 seq: 000000 bytesused: 4147200\n17475.784579 (0.00 fps) cam1-stream0 seq: 000000 bytesused: 4147200\n17475.817831 (30.07 fps) cam1-stream0 seq: 000001 bytesused: 4147200\n17475.836441 (15.04 fps) cam0-stream0 seq: 000002 bytesused: 4147200\n17475.851084 (30.07 fps) cam1-stream0 seq: 000002 bytesused: 4147200\n17475.869695 (30.07 fps) cam0-stream0 seq: 000003 bytesused: 4147200\n17475.884338 (30.07 fps) cam1-stream0 seq: 000003 bytesused: 4147200\n17475.902949 (30.07 fps) cam0-stream0 seq: 000004 bytesused: 4147200\n17475.936202 (30.07 fps) cam0-stream0 seq: 000005 bytesused: 4147200\n17475.984099 (10.02 fps) cam1-stream0 seq: 000006 bytesused: 4147200\n\n\nBRs,\nFang Hui\n\n> -----Original Message-----\n> From: Hui Fang\n> Sent: 2025年2月28日 15:43\n> To: 'Kieran Bingham' <kieran.bingham@ideasonboard.com>;\n> 'libcamera-devel@lists.libcamera.org' <libcamera-devel@lists.libcamera.org>\n> Cc: 'jacopo.mondi@ideasonboard.com' <jacopo.mondi@ideasonboard.com>;\n> 'mzamazal@redhat.com' <mzamazal@redhat.com>;\n> 'dan.scally@ideasonboard.com' <dan.scally@ideasonboard.com>; Antoine\n> Bouyer <antoine.bouyer@nxp.com>; Julien Vuillaumier\n> <julien.vuillaumier@nxp.com>\n> Subject: RE: [EXT] Re: [PATCH] libcamera: simple: Check all media devices\n> matched the pipeline\n> \n> Checked, my patch is similar as\n> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpatch\n> work.libcamera.org%2Fpatch%2F20849%2F&data=05%7C02%7Chui.fang%40\n> nxp.com%7C7df77e1abad34fc20d4908dd5768dfd0%7C686ea1d3bc2b4c6fa9\n> 2cd99c5c301635%7C0%7C0%7C638762830140008274%7CUnknown%7CTW\n> FpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW\n> 4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=Y1vZOi\n> FLPsKslaQ9QjnsgWzAXfVdy6NZ%2BpZc1Gedl%2Fo%3D&reserved=0.\n> \n> For the case to use 2 cameras at same time, if the specific \"Camera\" is passed\n> to SimplePipelineHandler's interfaces, maybe should ok?\n> Need test to verity.\n> \n> BRs,\n> Fang Hui\n> \n> > -----Original Message-----\n> > From: Hui Fang\n> > Sent: 2025年2月28日 14:17\n> > To: 'Kieran Bingham' <kieran.bingham@ideasonboard.com>;\n> > libcamera-devel@lists.libcamera.org\n> > Cc: jacopo.mondi@ideasonboard.com; mzamazal@redhat.com;\n> > dan.scally@ideasonboard.com; Antoine Bouyer\n> <antoine.bouyer@nxp.com>;\n> > Julien Vuillaumier <julien.vuillaumier@nxp.com>\n> > Subject: RE: [EXT] Re: [PATCH] libcamera: simple: Check all media\n> > devices matched the pipeline\n> >\n> > Hi, Bingham\n> > Thanks for your reminding.\n> >\n> > The patch is to fix below issue:\n> > wevk_8mq has 2 camera slots, if just 1 slot plug sensor, if may\n> mis-discovered.\n> > There's 2 media deivces, suggest mediaA(with sensor), mediaB(no\n> > sensor). If mediaB is in the 1st place (depends of readdir()) of the\n> > enumerator,\n> > pipe->match(enumerator_.get() return false and mediaA has no chance to\n> > pipe->be\n> > discovered.\n> >\n> > Ref code in camera_manager.cpp\n> > void CameraManager::Private::pipelineFactoryMatch(const\n> > PipelineHandlerFactoryBase *factory) {\n> > \tCameraManager *const o = LIBCAMERA_O_PTR();\n> >\n> > \t/* Provide as many matching pipelines as possible. */\n> > \twhile (1) {\n> > \t\tstd::shared_ptr<PipelineHandler> pipe = factory->create(o);\n> > \t\tif (!pipe->match(enumerator_.get()))\n> > \t\t\tbreak;\n> >\n> > \t\tLOG(Camera, Debug)\n> > \t\t\t<< \"Pipeline handler \\\"\" << factory->name()\n> > \t\t\t<< \"\\\" matched\";\n> > \t}\n> > }\n> >\n> >\n> > I tested on android, APP/CTS just switch back/front camera, no case to\n> > use 2 cameras at same time.\n> > Since the specific \"Camera\" is register to CameraManager and passed to\n> > SimplePipelineHandler, so no issue.\n> >\n> > But if there's case to use 2 cameras at same time, should have issue.\n> >\n> > Maybe the best resolution is in driver, don't create a media device if\n> > no sensor plugged in the media graph.\n> >\n> >\n> > BRs,\n> > Fang Hui\n> >\n> > > -----Original Message-----\n> > > From: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> > > Sent: 2025年2月28日 3:57\n> > > To: Hui Fang <hui.fang@nxp.com>; libcamera-devel@lists.libcamera.org\n> > > Cc: jacopo.mondi@ideasonboard.com; mzamazal@redhat.com;\n> > > dan.scally@ideasonboard.com; Hui Fang <hui.fang@nxp.com>; Antoine\n> > > Bouyer <antoine.bouyer@nxp.com>\n> > > Subject: [EXT] Re: [PATCH] libcamera: simple: Check all media\n> > > devices matched the pipeline\n> > >\n> > > Caution: This is an external email. Please take care when clicking\n> > > links or opening attachments. When in doubt, report the message\n> > > using the 'Report this email' button\n> > >\n> > >\n> > > Hi Fang,\n> > >\n> > > Quoting Fang Hui (2025-02-25 02:10:23)\n> > > > The current implementation of SimplePipelineHandler::match() will\n> > > > return false once meet an un-complete media device such as no\n> > > > sensor plugged. Thus the rest media devices will lost the chance\n> > > > to be\n> > discovered.\n> > > > To discover all the cameras present, this change instanciates the\n> > > > cameras discovery procedure for each media device that contains a\n> > > supported camera port.\n> > > >\n> > > > Signed-off-by: Fang Hui <hui.fang@nxp.com>\n> > > > ---\n> > > >  src/libcamera/pipeline/simple/simple.cpp | 50\n> > > > +++++++++++++++++-------\n> > > >  1 file changed, 35 insertions(+), 15 deletions(-)\n> > > >\n> > > > diff --git a/src/libcamera/pipeline/simple/simple.cpp\n> > > > b/src/libcamera/pipeline/simple/simple.cpp\n> > > > index 6e039bf3..134f0a07 100644\n> > > > --- a/src/libcamera/pipeline/simple/simple.cpp\n> > > > +++ b/src/libcamera/pipeline/simple/simple.cpp\n> > > > @@ -379,6 +379,8 @@ private:\n> > > >         const MediaPad *acquirePipeline(SimpleCameraData *data);\n> > > >         void releasePipeline(SimpleCameraData *data);\n> > > >\n> > > > +       bool matchMedia(DeviceEnumerator *enumerator, const\n> > > > + SimplePipelineInfo *info, MediaDevice *media);\n> > > > +\n> > > >         std::map<const MediaEntity *, EntityData> entities_;\n> > > >\n> > > >         MediaDevice *converter_;\n> > > > @@ -1532,23 +1534,9 @@ int\n> > > SimplePipelineHandler::resetRoutingTable(V4L2Subdevice *subdev)\n> > > >         return 0;\n> > > >  }\n> > > >\n> > > > -bool SimplePipelineHandler::match(DeviceEnumerator *enumerator)\n> > > > +bool SimplePipelineHandler::matchMedia(DeviceEnumerator\n> > > > +*enumerator, const SimplePipelineInfo *info, MediaDevice *media)\n> > > >  {\n> > > > -       const SimplePipelineInfo *info = nullptr;\n> > > >         unsigned int numStreams = 1;\n> > > > -       MediaDevice *media;\n> > > > -\n> > > > -       for (const SimplePipelineInfo &inf : supportedDevices) {\n> > > > -               DeviceMatch dm(inf.driver);\n> > > > -               media = acquireMediaDevice(enumerator, dm);\n> > > > -               if (media) {\n> > > > -                       info = &inf;\n> > > > -                       break;\n> > > > -               }\n> > > > -       }\n> > > > -\n> > > > -       if (!media)\n> > > > -               return false;\n> > > >\n> > > >         for (const auto &[name, streams] : info->converters) {\n> > > >                 DeviceMatch converterMatch(name); @@ -1678,6\n> > > +1666,38\n> > > > @@ bool SimplePipelineHandler::match(DeviceEnumerator\n> *enumerator)\n> > > >         return registered;\n> > > >  }\n> > > >\n> > > > +bool SimplePipelineHandler::match(DeviceEnumerator *enumerator) {\n> > > > +       MediaDevice *media;\n> > > > +       std::map<MediaDevice *, const SimplePipelineInfo *>\n> > > > +mediaDevices;\n> > > > +\n> > > > +       for (const SimplePipelineInfo &inf : supportedDevices) {\n> > > > +               LOG(SimplePipeline, Debug) << \"check simple\n> > > > + pipeline\n> > \"\n> > > << inf.driver;\n> > > > +               DeviceMatch dm(inf.driver);\n> > > > +\n> > > > +               do {\n> > > > +                       media = acquireMediaDevice(enumerator,\n> > > dm);\n> > > > +                       if (media) {\n> > > > +                               mediaDevices[media] = &inf;\n> > > > +                               LOG(SimplePipeline, Debug) <<\n> > > \"found media \" << media->deviceNode();\n> > > > +                       }\n> > > > +               } while (media);\n> > > > +       }\n> > > > +\n> > > > +       bool matched = false;\n> > > > +\n> > > > +       for (auto it = mediaDevices.begin(); it !=\n> > > > + mediaDevices.end(); it++)\n> > > {\n> > > > +               MediaDevice *media = it->first;\n> > > > +               const SimplePipelineInfo *info = it->second;\n> > > > +               LOG(SimplePipeline, Debug)\n> > > > +                       << \"call matchMedia for pipeline \"\n> > > > +                       << info->driver << \", media \" <<\n> > > media->deviceNode();\n> > > > +               matched |= matchMedia(enumerator, info, media);\n> > > > +       }\n> > >\n> > > I'm not 100% sure I understand the implications here. I also tried\n> > > to tackle this topic at\n> > > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpa\n> > > tc\n> > > h\n> > >\n> >\n> work.libcamera.org%2Fpatch%2F20849%2F&data=05%7C02%7Chui.fang%40\n> > >\n> >\n> nxp.com%7C7df77e1abad34fc20d4908dd5768dfd0%7C686ea1d3bc2b4c6fa9\n> > >\n> >\n> 2cd99c5c301635%7C0%7C0%7C638762830140008274%7CUnknown%7CTW\n> > >\n> >\n> FpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW\n> > >\n> >\n> 4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=Y1vZOi\n> > > FLPsKslaQ9QjnsgWzAXfVdy6NZ%2BpZc1Gedl%2Fo%3D&reserved=0, and I\n> > see\n> > > your version differs slightly that first you will try to find all\n> > > compatible graphs, but then match each of the successfully acquired ones.\n> > >\n> > > But I think this will be problematic as you will then register (or\n> > > try to register) multiple graphs in a single pipeline handler ?\n> > >\n> > > Have you checked what happens here if there are more than one simple\n> > > pipeline handler supported in the system ?\n> > >\n> > >\n> > >\n> > > > +\n> > > > +       return matched;\n> > > > +}\n> > > > +\n> > > >  V4L2VideoDevice *SimplePipelineHandler::video(const MediaEntity\n> > > > *entity)  {\n> > > >         auto iter = entities_.find(entity);\n> > > > --\n> > > > 2.25.1\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 94D15BE080\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 28 Feb 2025 08:39:32 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id ACCD068768;\n\tFri, 28 Feb 2025 09:39:31 +0100 (CET)","from PA4PR04CU001.outbound.protection.outlook.com\n\t(mail-francecentralazlp170130007.outbound.protection.outlook.com\n\t[IPv6:2a01:111:f403:c20a::7])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 25C7A68743\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 28 Feb 2025 09:39:30 +0100 (CET)","from DB9PR04MB9284.eurprd04.prod.outlook.com (2603:10a6:10:36c::8)\n\tby AS8PR04MB8881.eurprd04.prod.outlook.com (2603:10a6:20b:42c::16)\n\twith Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8489.23;\n\tFri, 28 Feb 2025 08:39:28 +0000","from DB9PR04MB9284.eurprd04.prod.outlook.com\n\t([fe80::c5dc:4676:2254:2f4]) by\n\tDB9PR04MB9284.eurprd04.prod.outlook.com\n\t([fe80::c5dc:4676:2254:2f4%5]) with mapi id 15.20.8489.018;\n\tFri, 28 Feb 2025 08:39:28 +0000"],"Authentication-Results":["lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"Wn+RuHLe\";\n\tdkim-atps=neutral","dkim=none (message not signed)\n\theader.d=none;dmarc=none action=none header.from=nxp.com;"],"ARC-Seal":"i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n\tb=uvQ4SOcSAsHOyqdxVrZzdCKO74fnl0m2pQR7RKAi8aqODuwX+3A3OPTqZyZKASXi333cPEXKBy2ujhwlgTW2snwQiKXyK3L6HGsRZ7hWutllhpjSiVfGABuiIBjIdwUIFiB/CcktluVRzLRtALdK9goOvElqXw/FJc7ZY/Lh8i/EflNamY9PjlhS6Aq23oq4lPmnhw5eytppZKAnGJIWDUhbBPmN53xR3lHW/t9uqsJJQIcLH8B33nTk8Ls5P+5vkKdx2Pjk7/PDDRNwRP8EOPC1VplrT9pwwCqU+bj8ysJfl6ayobLSBsJ9636nAi4u+ton/atxQOGKc3861NahPA==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n\ts=arcselector10001;\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=A6VutAkno7L0IMJf3i17iriFBsXKvOvG4ig72cwMtEI=;\n\tb=M7MrwlVj6cLIn/i+/TbaYs/O6VYtVheiOZm7x4dzP95pR1W4rmt8aDu4NpyjvELg5IsogyW7LEJEoG4rtMlCHBdT3yKPTy5BkhrmgLcngcqA3+2fsMPcbF4Utwh24S82J09dH6qhunAE0CeDnhTxZPNhFr4GDB1HtH+p5rYwtKAlD6edc4APSuFwSv+WGb/lDFK1uSJuDGD9R9xaTvxCHdluLxjTCQwqIhlLLuItUibyyJc5aR1E09Ef6luWVRjOqFlzWEBS8MV1V4drOArG/FW5ifMaJEuxcmjpPzO0ipobwCvVi8GS9g90iXXHSrfQdqhpVPgbNNpAJz55I0ht5A==","ARC-Authentication-Results":"i=1; mx.microsoft.com 1; spf=pass\n\tsmtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com;\n\tdkim=pass header.d=nxp.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n\tbh=A6VutAkno7L0IMJf3i17iriFBsXKvOvG4ig72cwMtEI=;\n\tb=Wn+RuHLeofKsEQFtr5NP2QWh83zSZ/yhNfe99SPPSlX5KmSMhlJd8XnPMf47VBfiaJ6jw9rACCa41kJY4xHvvEL7rj7h3CLQCH6Mk4/L8a0uQQTkjYbssZNaf+balI0DaIGRw+nN2ZyB0+ISbIedGqBcpzd0GF8UR1oJoyLFd1aXYd2B4raNjVg/6kCVEMNmmL3x97CxovjYp7LeI2Gh1gAqbMXvJB7mx5QtUThXky2/kGbM5y2F1DxL17y/zGfVafEGoBMHqbfQ1dUsJ2jk9K/Mf7XP6JxhQuxyRYh4YKbmY5zBEFItfB2UTb8cUNY0ivvPeV0mGfjwLl2mbCAhYw==","From":"Hui Fang <hui.fang@nxp.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>,\n\t\"libcamera-devel@lists.libcamera.org\"\n\t<libcamera-devel@lists.libcamera.org>","CC":"\"jacopo.mondi@ideasonboard.com\" <jacopo.mondi@ideasonboard.com>,\n\t\"mzamazal@redhat.com\" <mzamazal@redhat.com>,\n\t\"dan.scally@ideasonboard.com\"\n\t<dan.scally@ideasonboard.com>, Antoine Bouyer <antoine.bouyer@nxp.com>,\n\tJulien Vuillaumier <julien.vuillaumier@nxp.com>","Subject":"RE: [EXT] Re: [PATCH] libcamera: simple: Check all media devices\n\tmatched the pipeline","Thread-Topic":"[EXT] Re: [PATCH] libcamera: simple: Check all media devices\n\tmatched the pipeline","Thread-Index":"AQHbhy/cEgYtRWS6cUyTPV9GFg86vLNblRYAgACsHZCAABak8IAAEMCA","Date":"Fri, 28 Feb 2025 08:39:28 +0000","Message-ID":"<DB9PR04MB928432D31296DF6A028D324F87CC2@DB9PR04MB9284.eurprd04.prod.outlook.com>","References":"<20250225021023.2112783-1-hui.fang@nxp.com>\n\t<174068620681.31628.2175002044685903562@ping.linuxembedded.co.uk>\n\t<DB9PR04MB92847A65F04ABF3E175F26E087CC2@DB9PR04MB9284.eurprd04.prod.outlook.com>\n\t<DB9PR04MB92846FAED000A04B286C463B87CC2@DB9PR04MB9284.eurprd04.prod.outlook.com>","In-Reply-To":"<DB9PR04MB92846FAED000A04B286C463B87CC2@DB9PR04MB9284.eurprd04.prod.outlook.com>","Accept-Language":"en-US","Content-Language":"en-US","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","authentication-results":["lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"Wn+RuHLe\";\n\tdkim-atps=neutral","dkim=none (message not signed)\n\theader.d=none;dmarc=none action=none header.from=nxp.com;"],"x-ms-publictraffictype":"Email","x-ms-traffictypediagnostic":"DB9PR04MB9284:EE_|AS8PR04MB8881:EE_","x-ms-office365-filtering-correlation-id":"34f7933e-3fde-4563-6aff-08dd57d369fa","x-ms-exchange-senderadcheck":"1","x-ms-exchange-antispam-relay":"0","x-microsoft-antispam":"BCL:0;\n\tARA:13230040|366016|1800799024|376014|38070700018; ","x-microsoft-antispam-message-info":"=?gb2312?b?TktEbTJ2YU5rejhjMXJCQTd4?=\n\t=?gb2312?b?Ni93aDJubi9xWmdyM0dueWZCOUpkS1J5OFZFOXVqRzhnbno4ZCt4?=\n\t=?gb2312?b?VHNJem42N2FRZ2NIYmlrK2UyeXRFVVZZUzlzUFprTDdDSEtTTmNI?=\n\t=?gb2312?b?M3N2emtndWdkRm9sbWFvaWFSejlJRktrSE5zZldNNEc0QzRSTTZS?=\n\t=?gb2312?b?QW1OcVlRNW1RVDRhRXdORkptaTBCcWprSEFHTjB4WEp6ek1lb3NV?=\n\t=?gb2312?b?MTFyMW1QWk5Odlh5OFpxaUhWTENwTG0xblVVNEFhZUVhdmRkUjZN?=\n\t=?gb2312?b?cDVXUTgzOTVsVmxOVWhRYjJMMG5CaElNWU14L1M4KzdFUDlFamtL?=\n\t=?gb2312?b?ZzFHcjlVK1FheXhBYnVDa1YrMmNFejR5bFJCZ0UxQzZjc0EyZm10?=\n\t=?gb2312?b?aUxva0RyNmIyOGNZVHVPbHN4M3ZWeHNLVWhvMEgwbFlrNkZ4d25p?=\n\t=?gb2312?b?ZTA2ZnlBWGduNlNkUU9LMXZIQ2N1RlUyNXBjbHMwUzI3TjB6TG95?=\n\t=?gb2312?b?WlVnRUg0RHVzaFJTYS82Si9wUm9kV2RrczZ4SU9YMTZwQXBHcnhn?=\n\t=?gb2312?b?N2pyUGVrUmNoMXl5YlY3dGNid0d6TERPYXNQbHIyQ1ZUTFdoVXZV?=\n\t=?gb2312?b?SzVlU2s4K0JUZFF2bVlzenpBSlVmK0YydGRmcUJqWHp2d3Uwdkts?=\n\t=?gb2312?b?NUh3VGprMXFFRHhqT3pLVWM2SWZoam9EWTUvdnJDbWo5YnhsVEJ5?=\n\t=?gb2312?b?cDdJY0N2MEtHd3RraE1tb3c0UVVsdllQUm8wVXZZMmJST2xkQkFm?=\n\t=?gb2312?b?bXBaVGNRYTNpSXdpRnQvZjFOSmVMUXkzclAyTTA5aTV2eXpTRlBX?=\n\t=?gb2312?b?Y0JSZUswaW5MUkFNLy80NzB2RUR2MHY3RUZCZTcvbVViLzk5bVNN?=\n\t=?gb2312?b?dk96ZGlSa0V0TndCRll4OEpSSkNtaG5yWWJSVHExdFpzdTl4eThq?=\n\t=?gb2312?b?bVRzeldQWFJwYllCUmhjZmRYTEpzcVpITm52R0pNelVBZkcwTVVl?=\n\t=?gb2312?b?V05lSDhORkluSm5ZZVZGcVVHb2dtMVoxQUNDVkY3d0Fha1ZWTDZ2?=\n\t=?gb2312?b?WnJBbm9ReXFaQU12N2lLSzcrR3RWNWUvaHJNczFFdFdkTThGTU9W?=\n\t=?gb2312?b?UXN0MVFETTBhMzRyVGxmbmR3TUtvTERWWnFSQXVmUmNRakY3VDJG?=\n\t=?gb2312?b?VXlMQS9pWVIzc0RLVTFhRnVwWFVxS0ZkRHZVVGg2VXNKdzlnZHNw?=\n\t=?gb2312?b?MlArWm1yR1BFT0JQWEhwblNrNVBlT2d3bTJnSmtTdkwxd2lYaWQ5?=\n\t=?gb2312?b?dEV1WmppRWNNd0ttVFd4S2dMR1ovUzFxeFdoNFM4WmlqbTZ3MVZ6?=\n\t=?gb2312?b?R2t5YU5CNnlPN1JyNEVGZXVpeDN0VDF6aWhtUDRhUGw1WllpWUVu?=\n\t=?gb2312?b?RzQvU2ExTHQwOVNUSTJrUE5VQU9uNGpPVWV0RnNwcDlyb3R6amdP?=\n\t=?gb2312?b?SURKR3g5aEh0cVpCWmE5VmNDekVVd3ZCdWZjZk9QZ253cHpyRlEw?=\n\t=?gb2312?b?Ynh6RTFFSk5yaUNzMlo4N0VnMDFRNjJLenBtQTF2aUgzUWJMVkRZ?=\n\t=?gb2312?b?MXV3MXFnMi9nd3BrK3JUQWx0WGhwdGk5NFhWUDg1VngyUitDendS?=\n\t=?gb2312?b?ZkRFQ3F4YkZoM3hUNEZyK09TNHNZMklrS3dUaFc2VzBlSUlURlhy?=\n\t=?gb2312?b?ZitOTHNlbitOQTh0ak5MRFZUUTFQeTMwalhsSk1zK2d5T3JhQWJE?=\n\t=?gb2312?b?elhkYm9zV21ONC9tV1pFN0dqTzB1TXk2dFYxc1NUczlNY3B4L3Zz?=\n\t=?gb2312?b?MGlNV0o1R1E1MGFqWW9sU3hTQ2xIcnJFYXRWUzd0RDVVcXpkR0dY?=\n\t=?gb2312?b?a3EzWTRyUFhJcjFpRjA0QkxUV3pNTnh3cERnbGFFazQwd2w5bnEw?=\n\t=?gb2312?b?eTUwYitubk1FaEVnNDc5eTV3bXBDYW9DTm5yNVArb3lJaGVyTFdt?=\n\t=?gb2312?b?UTVuQXNRR29QUlpOQ0xtVndGeDFnTTYrc2hvUjhMRDFVaC9OenJq?=\n\t=?gb2312?b?UVRDbDFmaDVyZ2ZYWGlXaUxkbms2QjVXZTJJcDNHcUcxSC9nYVdp?=\n\t=?gb2312?b?K3pKS1RFL0Iwb1E=?=","x-forefront-antispam-report":"CIP:255.255.255.255; CTRY:; LANG:zh-cn; SCL:1; \n\tSRV:; IPV:NLI; SFV:NSPM;\n\tH:DB9PR04MB9284.eurprd04.prod.outlook.com; PTR:; \n\tCAT:NONE; SFS:(13230040)(366016)(1800799024)(376014)(38070700018);\n\tDIR:OUT; SFP:1101; ","x-ms-exchange-antispam-messagedata-chunkcount":"1","x-ms-exchange-antispam-messagedata-0":"=?gb2312?b?a1VvbytiOWpMbkN1dExQQS9y?=\n\t=?gb2312?b?eWt1V0p0UGdzbk93TUlQUVdQK3haT0ZRdUVjWG4yMm1xVittVW9W?=\n\t=?gb2312?b?dnd4MkhCL3R3ajhpT3dYSXg0anMvcGlOQlgyQldGSVhKNTJCTCtE?=\n\t=?gb2312?b?bU5EZTVjYTF0TFNVRGM1LzgwRXB4NGRBUHBNTi9JakcvcVQ4aFkr?=\n\t=?gb2312?b?ak13TlFKNTJQcGxTM0JIOW81ZEMxRGc5RmVLaVUvLzZBSVpkRHZP?=\n\t=?gb2312?b?RGhEaHNxR0trUDhSVmJ5c1FBNlBickgydzJOVncydkV0cW5RT3p3?=\n\t=?gb2312?b?K3d6aTVUTkpkcEpPZ2VEMmhWSTJyOTVVLzZZQVhRZlowNlQzY1Z0?=\n\t=?gb2312?b?UEFPY3A2elZOMlR4b3JkVXhGam5wUFVwUUVyd21wbHE3UUFpR3ds?=\n\t=?gb2312?b?K3g1dzZZcEZmenVmVk1rZTJ3NEFyVURMNFkxWk10eTVscm43bnpr?=\n\t=?gb2312?b?TUdOQTAvenY3VUY2b1prLytaeitUc1puR05nWHVPTnc1dWh6T1By?=\n\t=?gb2312?b?SXg3cTZIQ0gvWjVqUFUvQVBaTDVLZDdEQVRFeWtzOWNWUXNTc05j?=\n\t=?gb2312?b?eEZzOWo4ZGRlMUJKS0krZTVaTlEvWlFrTHd1bEJ5ZmtvN1l2UVVJ?=\n\t=?gb2312?b?ekt6TythSm83ZnMzWnp3WnRWSkZQam1McWU3Y000RUN5UlNKa0lx?=\n\t=?gb2312?b?SlNKRnBYQmlNdi81Y0x0bjJEWHpJSTdxN3A2YkkzZXdCekFldENC?=\n\t=?gb2312?b?Rmh3Y1ZsdWNFRkNqaVlPallkYWFUQ25sc3JpTExjUFdFM0lpNTZj?=\n\t=?gb2312?b?VC9sbmxKZGZDcnIxRTJWa0kzWk1ZTzI4eFBKQzNpNUtjTjZnckto?=\n\t=?gb2312?b?RmxaM1Zwa1hZYnJUODN3cnJJdThMWThIVmxiTGU4Zlo5N0xLRkZH?=\n\t=?gb2312?b?L2szRTlTNi8rWEc4RmVNQXd2Q21NTDkxdGJweWx4Q3piZzFXVEky?=\n\t=?gb2312?b?THpQR3ovVFNURm9WTXJENnM5aDZYVXJ1RG9tQjZYU0cwSkc4SGhY?=\n\t=?gb2312?b?RlNKWUh3TjFWVFRvZHNDbTZlVFFlZTlkWXI3eWNLa0sxMWdHUWVR?=\n\t=?gb2312?b?bUZLbi85UmtVZHVzYVhHVFlyN053dXlEVnJyamJpdGFIT25vRnNu?=\n\t=?gb2312?b?Zko3dUcwNm5kWXk0K1lVMFlIZWNlNEZJUG9xaFhkYzUwd2hrbk1r?=\n\t=?gb2312?b?MWlLTWVBNlVhcm1yUjVpSVFPQ3NFWml1aHdTcHE2bml5UThTQWtp?=\n\t=?gb2312?b?eXlrVi9QcU9jZHV0T2tpVlF0MjlUTmhUeTEwWmFUR2UyRzZwcjdI?=\n\t=?gb2312?b?dHluQ0Y0aXFpVXdQSnBRaVdqdm9BT3BjU1EzTGFPbmNSUmwzS200?=\n\t=?gb2312?b?WGNZNE1OUmZJV2w2RFdQbVZGNnRJbmlXMmxWUndsbHgrZWlwb1d0?=\n\t=?gb2312?b?T2JJS0JxUEdFUnB5ZFdnZWZyNWpDU1N0ekU3ejE0UWh1aHZMdk05?=\n\t=?gb2312?b?SExEeFJlUmtKaG82OVlkeDNVNUNsdzdEQUFTdVZGRHZWbm9NdnFX?=\n\t=?gb2312?b?cUJUb28xdlJyZVk1dWdmZmVsV09EY3l2RFB0VXN3WUZqWVZWTG9D?=\n\t=?gb2312?b?b1F2TlRWNWtJQUI0bjlIUWN6enFRaHJnVU4rN1FsVlVkMFVqN0hX?=\n\t=?gb2312?b?eGlnM05UcG1XY3gvRnA0UVczU3JPZEVwVXcxaGdKSktLRkwyMUxl?=\n\t=?gb2312?b?RmNYaXdmSURJVFg2VW1qMk1NN2pTeUl5N253aERtUUE4aUdRd3Zo?=\n\t=?gb2312?b?WUJqVHM4TWJxU1g5L0ZjdldGYmQxRzUvZ1VJcHBzb2JrTHZoV094?=\n\t=?gb2312?b?VHRlUUpVYUtsK01hMmZ0LzdzamlLYlRzMUx6TmhtVVNma0hYZmNs?=\n\t=?gb2312?b?YithMVlBWUhHVEJtbWtMM1BZVlVKVEsrbGtvdVd4K2VHZ1RSdUxq?=\n\t=?gb2312?b?NytERlpLbHBFM3MxNHE3dU1UbGJZVUh0Z2dySTlzdVhSZHFiZVFX?=\n\t=?gb2312?b?T2dvRHdVeUJZT0IvcE1Wbk1WSjZUR3Rwdkd5ZTNFa0JKUkp5ZVMx?=\n\t=?gb2312?b?TUZJemFOTEJTK0hNcGZLQWJ3Q3A2TC9tS2F5TXJGN1ZSU3dDb1h2?=\n\t=?gb2312?b?VUR0cWtlMzFCM1Z2Rk5iRis0a2o5UFBqazZReHNwRTA1b1ZhQ0hK?=\n\t=?gb2312?b?dzNTT1dWV3YwcmpnSHZkcUZCN2M4ZHZIcEl4dEQvNFJNRHhNQWdt?=\n\t=?gb2312?b?VWNmOXlEVEdlK0JvM1E4dnBNTUdlKzBsNjBmTHdDd0lOQkdSVWd0?=\n\t=?gb2312?b?cz0=?=","Content-Type":"text/plain; charset=\"gb2312\"","Content-Transfer-Encoding":"base64","MIME-Version":"1.0","X-OriginatorOrg":"nxp.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-AuthSource":"DB9PR04MB9284.eurprd04.prod.outlook.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"34f7933e-3fde-4563-6aff-08dd57d369fa","X-MS-Exchange-CrossTenant-originalarrivaltime":"28 Feb 2025 08:39:28.3909\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":"lYk4+53biKWMeCIOdaGDPUN/z7V3sezvzCnoVaNzl9agyLuLnu+6nb5K/Mz1WTR+c+rPU4oFFrljV6LyvE9h2w==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"AS8PR04MB8881","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>"}},{"id":34406,"web_url":"https://patchwork.libcamera.org/comment/34406/","msgid":"<DB9PR04MB92842A18616A0E1A8F1E76F1876CA@DB9PR04MB9284.eurprd04.prod.outlook.com>","date":"2025-06-04T09:16:28","subject":"RE: [EXT] Re: [PATCH] libcamera: simple: Check all media devices\n\tmatched the pipeline","submitter":{"id":186,"url":"https://patchwork.libcamera.org/api/people/186/","name":"Fang Hui","email":"hui.fang@nxp.com"},"content":"Hi, Kieran\n  As you mentioned, there's a similar patch https://patchwork.libcamera.org/patch/20849/, is there plan to merge it?\n  Also I have already tested that 2 sensors work ok at same time. Are there other concerns? Thanks!\n\n\nBRs,\nFang Hui\n\n> -----Original Message-----\n> From: Hui Fang\n> Sent: 2025年2月28日 16:39\n> To: 'Kieran Bingham' <kieran.bingham@ideasonboard.com>;\n> 'libcamera-devel@lists.libcamera.org' <libcamera-devel@lists.libcamera.org>\n> Cc: 'jacopo.mondi@ideasonboard.com' <jacopo.mondi@ideasonboard.com>;\n> 'mzamazal@redhat.com' <mzamazal@redhat.com>;\n> 'dan.scally@ideasonboard.com' <dan.scally@ideasonboard.com>; Antoine\n> Bouyer <antoine.bouyer@nxp.com>; Julien Vuillaumier\n> <julien.vuillaumier@nxp.com>\n> Subject: RE: [EXT] Re: [PATCH] libcamera: simple: Check all media devices\n> matched the pipeline\n> \n> Use \"cam\" to capture from 2 cameras at same time, ok.\n> \n> export W=1920\n> export H=1080\n> cam \\\n>         --camera 1 \\\n>         --stream width=${W},height=${H},pixelformat=YUYV \\\n>         --file=frame-#.yuv \\\n>         --capture=5 \\\n>         --camera 2 \\\n>         --stream width=${W},height=${H},pixelformat=YUYV \\\n>         --file=frame-#.yuv \\\n>         --capture=5\n> \n> Using camera\n> /base/soc@0/bus@30800000/i2c@30a20000/ov5640_mipi2@3c as cam0\n> Using camera\n> /base/soc@0/bus@30800000/i2c@30a30000/ov5640_mipi@3c as cam1\n> cam0: Capture 5 frames\n> cam1: Capture 5 frames\n> \n> 17475.769932 (0.00 fps) cam0-stream0 seq: 000000 bytesused: 4147200\n> 17475.784579 (0.00 fps) cam1-stream0 seq: 000000 bytesused: 4147200\n> 17475.817831 (30.07 fps) cam1-stream0 seq: 000001 bytesused: 4147200\n> 17475.836441 (15.04 fps) cam0-stream0 seq: 000002 bytesused: 4147200\n> 17475.851084 (30.07 fps) cam1-stream0 seq: 000002 bytesused: 4147200\n> 17475.869695 (30.07 fps) cam0-stream0 seq: 000003 bytesused: 4147200\n> 17475.884338 (30.07 fps) cam1-stream0 seq: 000003 bytesused: 4147200\n> 17475.902949 (30.07 fps) cam0-stream0 seq: 000004 bytesused: 4147200\n> 17475.936202 (30.07 fps) cam0-stream0 seq: 000005 bytesused: 4147200\n> 17475.984099 (10.02 fps) cam1-stream0 seq: 000006 bytesused: 4147200\n> \n> \n> BRs,\n> Fang Hui\n> \n> > -----Original Message-----\n> > From: Hui Fang\n> > Sent: 2025年2月28日 15:43\n> > To: 'Kieran Bingham' <mailto:kieran.bingham@ideasonboard.com>;\n> > 'libcamera-devel@lists.libcamera.org'\n> > <mailto:libcamera-devel@lists.libcamera.org>\n> > Cc: 'jacopo.mondi@ideasonboard.com'\n> <mailto:jacopo.mondi@ideasonboard.com>;\n> > 'mzamazal@redhat.com' <mailto:mzamazal@redhat.com>;\n> > 'dan.scally@ideasonboard.com' <mailto:dan.scally@ideasonboard.com>; Antoine\n> > Bouyer <mailto:antoine.bouyer@nxp.com>; Julien Vuillaumier\n> > <mailto:julien.vuillaumier@nxp.com>\n> > Subject: RE: [EXT] Re: [PATCH] libcamera: simple: Check all media\n> > devices matched the pipeline\n> >\n> > Checked, my patch is similar as\n> > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpatc\n> > h\n> >\n> work.libcamera.org%2Fpatch%2F20849%2F&data=05%7C02%7Chui.fang%40\n> >\n> nxp.com%7C7df77e1abad34fc20d4908dd5768dfd0%7C686ea1d3bc2b4c6fa9\n> >\n> 2cd99c5c301635%7C0%7C0%7C638762830140008274%7CUnknown%7CTW\n> >\n> FpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW\n> >\n> 4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=Y1vZOi\n> > FLPsKslaQ9QjnsgWzAXfVdy6NZ%2BpZc1Gedl%2Fo%3D&reserved=0.\n> >\n> > For the case to use 2 cameras at same time, if the specific \"Camera\"\n> > is passed to SimplePipelineHandler's interfaces, maybe should ok?\n> > Need test to verity.\n> >\n> > BRs,\n> > Fang Hui\n> >\n> > > -----Original Message-----\n> > > From: Hui Fang\n> > > Sent: 2025年2月28日 14:17\n> > > To: 'Kieran Bingham' <mailto:kieran.bingham@ideasonboard.com>;\n> > > mailto:libcamera-devel@lists.libcamera.org\n> > > Cc: mailto:jacopo.mondi@ideasonboard.com; mailto:mzamazal@redhat.com;\n> > > mailto:dan.scally@ideasonboard.com; Antoine Bouyer\n> > <mailto:antoine.bouyer@nxp.com>;\n> > > Julien Vuillaumier <mailto:julien.vuillaumier@nxp.com>\n> > > Subject: RE: [EXT] Re: [PATCH] libcamera: simple: Check all media\n> > > devices matched the pipeline\n> > >\n> > > Hi, Bingham\n> > > Thanks for your reminding.\n> > >\n> > > The patch is to fix below issue:\n> > > wevk_8mq has 2 camera slots, if just 1 slot plug sensor, if may\n> > mis-discovered.\n> > > There's 2 media deivces, suggest mediaA(with sensor), mediaB(no\n> > > sensor). If mediaB is in the 1st place (depends of readdir()) of the\n> > > enumerator,\n> > > pipe->match(enumerator_.get() return false and mediaA has no chance\n> > > pipe->to be\n> > > discovered.\n> > >\n> > > Ref code in camera_manager.cpp\n> > > void CameraManager::Private::pipelineFactoryMatch(const\n> > > PipelineHandlerFactoryBase *factory) {\n> > > \tCameraManager *const o = LIBCAMERA_O_PTR();\n> > >\n> > > \t/* Provide as many matching pipelines as possible. */\n> > > \twhile (1) {\n> > > \t\tstd::shared_ptr<PipelineHandler> pipe = factory->create(o);\n> > > \t\tif (!pipe->match(enumerator_.get()))\n> > > \t\t\tbreak;\n> > >\n> > > \t\tLOG(Camera, Debug)\n> > > \t\t\t<< \"Pipeline handler \\\"\" << factory->name()\n> > > \t\t\t<< \"\\\" matched\";\n> > > \t}\n> > > }\n> > >\n> > >\n> > > I tested on android, APP/CTS just switch back/front camera, no case\n> > > to use 2 cameras at same time.\n> > > Since the specific \"Camera\" is register to CameraManager and passed\n> > > to SimplePipelineHandler, so no issue.\n> > >\n> > > But if there's case to use 2 cameras at same time, should have issue.\n> > >\n> > > Maybe the best resolution is in driver, don't create a media device\n> > > if no sensor plugged in the media graph.\n> > >\n> > >\n> > > BRs,\n> > > Fang Hui\n> > >\n> > > > -----Original Message-----\n> > > > From: Kieran Bingham <mailto:kieran.bingham@ideasonboard.com>\n> > > > Sent: 2025年2月28日 3:57\n> > > > To: Hui Fang <mailto:hui.fang@nxp.com>;\n> > > > mailto:libcamera-devel@lists.libcamera.org\n> > > > Cc: mailto:jacopo.mondi@ideasonboard.com; mailto:mzamazal@redhat.com;\n> > > > mailto:dan.scally@ideasonboard.com; Hui Fang <mailto:hui.fang@nxp.com>; Antoine\n> > > > Bouyer <mailto:antoine.bouyer@nxp.com>\n> > > > Subject: [EXT] Re: [PATCH] libcamera: simple: Check all media\n> > > > devices matched the pipeline\n> > > >\n> > > > Caution: This is an external email. Please take care when clicking\n> > > > links or opening attachments. When in doubt, report the message\n> > > > using the 'Report this email' button\n> > > >\n> > > >\n> > > > Hi Fang,\n> > > >\n> > > > Quoting Fang Hui (2025-02-25 02:10:23)\n> > > > > The current implementation of SimplePipelineHandler::match()\n> > > > > will return false once meet an un-complete media device such as\n> > > > > no sensor plugged. Thus the rest media devices will lost the\n> > > > > chance to be\n> > > discovered.\n> > > > > To discover all the cameras present, this change instanciates\n> > > > > the cameras discovery procedure for each media device that\n> > > > > contains a\n> > > > supported camera port.\n> > > > >\n> > > > > Signed-off-by: Fang Hui <mailto:hui.fang@nxp.com>\n> > > > > ---\n> > > > >  src/libcamera/pipeline/simple/simple.cpp | 50\n> > > > > +++++++++++++++++-------\n> > > > >  1 file changed, 35 insertions(+), 15 deletions(-)\n> > > > >\n> > > > > diff --git a/src/libcamera/pipeline/simple/simple.cpp\n> > > > > b/src/libcamera/pipeline/simple/simple.cpp\n> > > > > index 6e039bf3..134f0a07 100644\n> > > > > --- a/src/libcamera/pipeline/simple/simple.cpp\n> > > > > +++ b/src/libcamera/pipeline/simple/simple.cpp\n> > > > > @@ -379,6 +379,8 @@ private:\n> > > > >         const MediaPad *acquirePipeline(SimpleCameraData\n> *data);\n> > > > >         void releasePipeline(SimpleCameraData *data);\n> > > > >\n> > > > > +       bool matchMedia(DeviceEnumerator *enumerator, const\n> > > > > + SimplePipelineInfo *info, MediaDevice *media);\n> > > > > +\n> > > > >         std::map<const MediaEntity *, EntityData> entities_;\n> > > > >\n> > > > >         MediaDevice *converter_; @@ -1532,23 +1534,9 @@ int\n> > > > SimplePipelineHandler::resetRoutingTable(V4L2Subdevice *subdev)\n> > > > >         return 0;\n> > > > >  }\n> > > > >\n> > > > > -bool SimplePipelineHandler::match(DeviceEnumerator *enumerator)\n> > > > > +bool SimplePipelineHandler::matchMedia(DeviceEnumerator\n> > > > > +*enumerator, const SimplePipelineInfo *info, MediaDevice\n> > > > > +*media)\n> > > > >  {\n> > > > > -       const SimplePipelineInfo *info = nullptr;\n> > > > >         unsigned int numStreams = 1;\n> > > > > -       MediaDevice *media;\n> > > > > -\n> > > > > -       for (const SimplePipelineInfo &inf : supportedDevices) {\n> > > > > -               DeviceMatch dm(inf.driver);\n> > > > > -               media = acquireMediaDevice(enumerator, dm);\n> > > > > -               if (media) {\n> > > > > -                       info = &inf;\n> > > > > -                       break;\n> > > > > -               }\n> > > > > -       }\n> > > > > -\n> > > > > -       if (!media)\n> > > > > -               return false;\n> > > > >\n> > > > >         for (const auto &[name, streams] : info->converters) {\n> > > > >                 DeviceMatch converterMatch(name); @@\n> -1678,6\n> > > > +1666,38\n> > > > > @@ bool SimplePipelineHandler::match(DeviceEnumerator\n> > *enumerator)\n> > > > >         return registered;\n> > > > >  }\n> > > > >\n> > > > > +bool SimplePipelineHandler::match(DeviceEnumerator *enumerator)\n> {\n> > > > > +       MediaDevice *media;\n> > > > > +       std::map<MediaDevice *, const SimplePipelineInfo *>\n> > > > > +mediaDevices;\n> > > > > +\n> > > > > +       for (const SimplePipelineInfo &inf : supportedDevices) {\n> > > > > +               LOG(SimplePipeline, Debug) << \"check simple\n> > > > > + pipeline\n> > > \"\n> > > > << inf.driver;\n> > > > > +               DeviceMatch dm(inf.driver);\n> > > > > +\n> > > > > +               do {\n> > > > > +                       media =\n> acquireMediaDevice(enumerator,\n> > > > dm);\n> > > > > +                       if (media) {\n> > > > > +                               mediaDevices[media] = &inf;\n> > > > > +                               LOG(SimplePipeline, Debug) <<\n> > > > \"found media \" << media->deviceNode();\n> > > > > +                       }\n> > > > > +               } while (media);\n> > > > > +       }\n> > > > > +\n> > > > > +       bool matched = false;\n> > > > > +\n> > > > > +       for (auto it = mediaDevices.begin(); it !=\n> > > > > + mediaDevices.end(); it++)\n> > > > {\n> > > > > +               MediaDevice *media = it->first;\n> > > > > +               const SimplePipelineInfo *info = it->second;\n> > > > > +               LOG(SimplePipeline, Debug)\n> > > > > +                       << \"call matchMedia for pipeline \"\n> > > > > +                       << info->driver << \", media \" <<\n> > > > media->deviceNode();\n> > > > > +               matched |= matchMedia(enumerator, info,\n> media);\n> > > > > +       }\n> > > >\n> > > > I'm not 100% sure I understand the implications here. I also tried\n> > > > to tackle this topic at\n> > > > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2F\n> > > > pa\n> > > > tc\n> > > > h\n> > > >\n> > >\n> >\n> work.libcamera.org%2Fpatch%2F20849%2F&data=05%7C02%7Chui.fang%40\n> > > >\n> > >\n> >\n> nxp.com%7C7df77e1abad34fc20d4908dd5768dfd0%7C686ea1d3bc2b4c6fa9\n> > > >\n> > >\n> >\n> 2cd99c5c301635%7C0%7C0%7C638762830140008274%7CUnknown%7CTW\n> > > >\n> > >\n> >\n> FpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW\n> > > >\n> > >\n> >\n> 4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=Y1vZOi\n> > > > FLPsKslaQ9QjnsgWzAXfVdy6NZ%2BpZc1Gedl%2Fo%3D&reserved=0,\n> and I\n> > > see\n> > > > your version differs slightly that first you will try to find all\n> > > > compatible graphs, but then match each of the successfully acquired\n> ones.\n> > > >\n> > > > But I think this will be problematic as you will then register (or\n> > > > try to register) multiple graphs in a single pipeline handler ?\n> > > >\n> > > > Have you checked what happens here if there are more than one\n> > > > simple pipeline handler supported in the system ?\n> > > >\n> > > >\n> > > >\n> > > > > +\n> > > > > +       return matched;\n> > > > > +}\n> > > > > +\n> > > > >  V4L2VideoDevice *SimplePipelineHandler::video(const MediaEntity\n> > > > > *entity)  {\n> > > > >         auto iter = entities_.find(entity);\n> > > > > --\n> > > > > 2.25.1\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 6E0E6C31E9\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  4 Jun 2025 09:16:35 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 5674B68DB3;\n\tWed,  4 Jun 2025 11:16:34 +0200 (CEST)","from DB3PR0202CU003.outbound.protection.outlook.com\n\t(mail-northeuropeazlp170100001.outbound.protection.outlook.com\n\t[IPv6:2a01:111:f403:c200::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 890DB68DB0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  4 Jun 2025 11:16:32 +0200 (CEST)","from DB9PR04MB9284.eurprd04.prod.outlook.com (2603:10a6:10:36c::8)\n\tby DU0PR04MB9444.eurprd04.prod.outlook.com (2603:10a6:10:35c::5)\n\twith Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.25;\n\tWed, 4 Jun 2025 09:16:30 +0000","from DB9PR04MB9284.eurprd04.prod.outlook.com\n\t([fe80::c5dc:4676:2254:2f4]) by\n\tDB9PR04MB9284.eurprd04.prod.outlook.com\n\t([fe80::c5dc:4676:2254:2f4%7]) with mapi id 15.20.8769.037;\n\tWed, 4 Jun 2025 09:16:29 +0000"],"Authentication-Results":["lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"HKKS+Eko\";\n\tdkim-atps=neutral","dkim=none (message not signed)\n\theader.d=none;dmarc=none action=none header.from=nxp.com;"],"ARC-Seal":"i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n\tb=DQtO1zC4LOy8k8xOLM4kLSn+OjroJ0sBvtJluMoAiqcF8vdX8oS790xodW3rDY2XxHx8RE5j1TlJEIWjn8MJ7KghhdFM+gQgFIpaX0ILqSjL839THqyWUgtCI9NYxn7dECNfIjrieDnbEgI2XyPAHTpKIwlxS7n/9o8WKaOEXst4hLGEkVBBwlZSYJ8FHaOwSswB3hfgMvVKDRIoEsYNHCglrd8THN7VGnIYQnVN1nhtRUz4qnlOaOPp18GaLTI/3A6qno/cwSkU9oPUZZmtjGhk8XLYJa5GWVmITKpWHLmUiNc6IDnjvQVYlaSJR+8gf6mdfiZACooiXmgjP9Nu8w==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n\ts=arcselector10001;\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=Itr5dLaZWTf1ouucfhEA+8kQObUP2freUbQIGR3N8O0=;\n\tb=uTbvWCUyvcug3alqBnzL9k3TeX915RRRyFUQCP89EtjXpsoU5NlHnG6vY/vmgZf2SDSMYh92qhpi4ey2SegHhUnC4Ef/Rj1HiVoEL5wctDvkqJenJ4OuSmNepiFa681YwFOx4QFtxrC1ge04TSQ3PEjO+EZ5/yEcdcrFmdb1W8O3sFzBDwp7UFHgCiTC+Ie+FvMIJ4ZUtW3CVdgvWBdgJ5sa319MXGbgW5mNjIFLzUI+HTOWzv6tCxnsT+O7g6TCg8R2NOTqOv7HqGmG/nR4DWp+vJJAuFXy+sv9hwAeF4cZ8acy+vvrxvcXgc9iTp6tiOIEQ+hP1W+2v/Hwf6kdMQ==","ARC-Authentication-Results":"i=1; mx.microsoft.com 1; spf=pass\n\tsmtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com;\n\tdkim=pass header.d=nxp.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n\tbh=Itr5dLaZWTf1ouucfhEA+8kQObUP2freUbQIGR3N8O0=;\n\tb=HKKS+EkoWIUPHx/OrblW9iD1QbeNf5V6WJnc40Jz+maPlFBS+Etd6bw5VXRI7/80wRT5hMmpLcW0KoOORUva8sCzjVsCsnZ1yXqedaUOVlQ0zwZewkUWoXvg1H0t7B61FnCaA6Phi6qeUP5jrBLJo6WMPqR8VBhOIm9b78P9NGcq31Ix4+5rZNKK0zwljsldZjXRBPS4Bn7QNoj1Zx6Sxjvr+xXllo/13INxs/fZNUOHJT2xC7Iwv2enf7LTo6ZM6ejI+S689tExVEtLkugdwtqDXkyo2A7yX9K50NI955iSMmUv5ZawbYJoH3ONLwQOvvUhVGPhZ1+3HLlk9rdKUQ==","From":"Hui Fang <hui.fang@nxp.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>,\n\t\"libcamera-devel@lists.libcamera.org\"\n\t<libcamera-devel@lists.libcamera.org>","CC":"\"jacopo.mondi@ideasonboard.com\" <jacopo.mondi@ideasonboard.com>,\n\t\"mzamazal@redhat.com\" <mzamazal@redhat.com>,\n\t\"dan.scally@ideasonboard.com\"\n\t<dan.scally@ideasonboard.com>, Antoine Bouyer <antoine.bouyer@nxp.com>,\n\tJulien Vuillaumier <julien.vuillaumier@nxp.com>","Subject":"RE: [EXT] Re: [PATCH] libcamera: simple: Check all media devices\n\tmatched the pipeline","Thread-Topic":"[EXT] Re: [PATCH] libcamera: simple: Check all media devices\n\tmatched the pipeline","Thread-Index":"AQHbhy/cEgYtRWS6cUyTPV9GFg86vLNblRYAgACsHZCAABak8IAAEMCAgJbouyA=","Date":"Wed, 4 Jun 2025 09:16:28 +0000","Message-ID":"<DB9PR04MB92842A18616A0E1A8F1E76F1876CA@DB9PR04MB9284.eurprd04.prod.outlook.com>","References":"<20250225021023.2112783-1-hui.fang@nxp.com>\n\t<174068620681.31628.2175002044685903562@ping.linuxembedded.co.uk>\n\t<DB9PR04MB92847A65F04ABF3E175F26E087CC2@DB9PR04MB9284.eurprd04.prod.outlook.com>\n\t<DB9PR04MB92846FAED000A04B286C463B87CC2@DB9PR04MB9284.eurprd04.prod.outlook.com>\n\t<DB9PR04MB928432D31296DF6A028D324F87CC2@DB9PR04MB9284.eurprd04.prod.outlook.com>","In-Reply-To":"<DB9PR04MB928432D31296DF6A028D324F87CC2@DB9PR04MB9284.eurprd04.prod.outlook.com>","Accept-Language":"en-US","Content-Language":"en-US","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","authentication-results":["lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"HKKS+Eko\";\n\tdkim-atps=neutral","dkim=none (message not signed)\n\theader.d=none;dmarc=none action=none header.from=nxp.com;"],"x-ms-publictraffictype":"Email","x-ms-traffictypediagnostic":"DB9PR04MB9284:EE_|DU0PR04MB9444:EE_","x-ms-office365-filtering-correlation-id":"4772e5a3-72bf-40d0-fe7e-08dda3487d30","x-ms-exchange-senderadcheck":"1","x-ms-exchange-antispam-relay":"0","x-microsoft-antispam":"BCL:0;\n\tARA:13230040|366016|376014|1800799024|38070700018; ","x-microsoft-antispam-message-info":"=?gb2312?b?OUE3U3NYcGg3ZkhmQnlLWEEz?=\n\t=?gb2312?b?dzlOZWl5TnJlcjRrZzJ2cDZpMHFPdlpJSmVzUHRtQXk1N3VOVDNs?=\n\t=?gb2312?b?Rktna3RlRU5LL2UyejI3NUg4bDd2RStCZXk0SzRJczVMa3AybmJF?=\n\t=?gb2312?b?azNOVTdmSlhTMWgyeGhZNTdmdkd0U0hpRjF6aGdCRXpqdHlCY0tC?=\n\t=?gb2312?b?amlxMEdHSm1KOHhYdjZId2NXWXZvME11ZVJvb09MS3hkaHJVbEo2?=\n\t=?gb2312?b?bDVOWE1lTityZ09ZSVB1OGw5NzhFZkpkVndLdGdTSzZoeEcwVGtV?=\n\t=?gb2312?b?NTNORHdsUGFHdnJOSGxRNTg3RmxCZ1BIdUxNVm1jcFVTZFNCenRG?=\n\t=?gb2312?b?Y0F4SlNXU3ZJOHdOZFFDMzNJQ2F5WUZVbWMxRUh1dCsvOEtSYmJY?=\n\t=?gb2312?b?dUp3UnI0K0ZtejEvM2FTNm9CT1c4bi9rQ0kzNGQ2ZFgwdlI0RTlT?=\n\t=?gb2312?b?Y1hvUnZ3b3FoYmdxN0FrOXE3ampaY3hTUUo0d0tHZUJvK1M4a0s0?=\n\t=?gb2312?b?L2NuSHBMQ0I4N2EzcDIwb1RnNDhuemt5a1EyZnI1eFQwZlY0SFF6?=\n\t=?gb2312?b?T0lCZmhKeExwMEZzTFNlUm5vMkhadUVQOTJMRHBSdkJUNkNUUEFw?=\n\t=?gb2312?b?NlY0TTNHN0VPQzJaSXhSbk96ekhhRnhWZDRuc3NpVmlRYlJ4aGVu?=\n\t=?gb2312?b?VzNVTHQ5Qm9iOG1vK0ZTbEtnb3hOK1RmY1Y5ZUkrNWdONkNpSVJ3?=\n\t=?gb2312?b?V09XNU5ReGhBVytpT3kvK3o5SHVtQmNIbVQ4R0pYRFUvYXF1YXZ3?=\n\t=?gb2312?b?dVJOdW96amRRK2R1QmY3WXBWMWVvcXlRZUhTWDF0RGVHYkdyQi9J?=\n\t=?gb2312?b?ZDM2V0pIdXpIWU5hSWpqL1l5K2Z5TDRvemVDMmZpdTEvUERWeE9O?=\n\t=?gb2312?b?Mmd0ZDg1eW5rR0c1K3FzQjhjL1NIM1hEQTNKSGZIT0JWMmRURFZu?=\n\t=?gb2312?b?b1FiRjNkMCtrNWlSOFBudWNINWx0YVNYSDYxN2J3SHpNUklabFo3?=\n\t=?gb2312?b?Qk5raDlUcHcvYTNHYW5hQnF2clFFL0Y2TFJqOWdlTWduYUkyR1JY?=\n\t=?gb2312?b?R3lnd2lncWNnUlBCZ0RXaTZwYndGU0xNK1JzRFFDVmJISXBqNFlx?=\n\t=?gb2312?b?ZFBlMHNrQUpaMDBDRnNqdmlpSGRJQ010UkI5b0NCQmlMQzN2aUtu?=\n\t=?gb2312?b?YXI0dFhwZ0tDVzlNc0pPZXVQdjEweW1JTVE2dDFWN0l5bjFRbE1O?=\n\t=?gb2312?b?VDFKQUpvZm1vZS9tYkY3ZXlMWVhKdGJMcDFYOGpkMDN3SkdqbWhP?=\n\t=?gb2312?b?QjNFd0tONk1XeHZyMWdLdVlUOW9tZ1Y2NnpuNFRKUTFpTWIwMHhX?=\n\t=?gb2312?b?SGhNQkdzRUszaFY3ZDN1NVVzK2VrWCtpVmRmNmlKTmxPTGVUYjNz?=\n\t=?gb2312?b?V2ZXMk8rd3FDTDB3ZDFDd2NxMW9NSjlSdFRmNnVtSis4dWVORGtL?=\n\t=?gb2312?b?R2xWTFRTQkJQUGJiTkdmNGtEVzNyVzBIaEErdVdXb05OaXlRU2Mr?=\n\t=?gb2312?b?ODhiaU9zbGtLQ3BnUnlLUkt6cGNsejdOYWJSc3BaQ0JmV2tNdzhu?=\n\t=?gb2312?b?d0wwVEFjTmZnNStFczY0S0swY0haWTJlVC84bURGODl4UVNoYlBz?=\n\t=?gb2312?b?MWhIWmxKb205SGNFSGxwbXh6TDFCQVc0aFErRHl0ZS9kSlg0QmZB?=\n\t=?gb2312?b?Y2NvaUNvRGUzalByeFQrdTFuOG9nVzdSTlZ5Z3ovUmV4N0Y4a0tR?=\n\t=?gb2312?b?dVUxVDVQMWp6OWdQT1RhWlpES1VPNU1ROVNrVUhObzZRaWtSUXJ3?=\n\t=?gb2312?b?cXZMYWZVS3lMemxKREgxN1dQaitVM21Vc1RlSGVBeXpLamQzdis5?=\n\t=?gb2312?b?cW1abFhtcjRjb3NSSlNNYUNHQUxwOERFRlpRVnMwUFlTS1hOTEww?=\n\t=?gb2312?b?Y1hpbXlsdUlId25QNzBmUWpXU0MwNUZCVG1CdXhUaXlhQ2FVVG80?=\n\t=?gb2312?b?OUszZnVxSHdPY1diaUpnMWl4ZDYzSzZ4YlAvNVVQWnFCYlN2aWFR?=\n\t=?gb2312?b?MnZiNC94bGRZL3E3YUdEd1lPZGQwQU1LZXdGejA9?=","x-forefront-antispam-report":"CIP:255.255.255.255; CTRY:; LANG:zh-cn; SCL:1; \n\tSRV:; IPV:NLI; SFV:NSPM;\n\tH:DB9PR04MB9284.eurprd04.prod.outlook.com; PTR:; \n\tCAT:NONE; SFS:(13230040)(366016)(376014)(1800799024)(38070700018);\n\tDIR:OUT; SFP:1101; ","x-ms-exchange-antispam-messagedata-chunkcount":"1","x-ms-exchange-antispam-messagedata-0":"=?gb2312?b?dmlXa3RBbDhDQlFTdUw1NzU2?=\n\t=?gb2312?b?Vk9STGRnWGpYQk1Ndzc1SHlBYzJ2TDdjUFNUZTRlOXNHd3Niem9K?=\n\t=?gb2312?b?MFpCd0xYRzgyemVxdGpKR0JBcHdKc281akNCTEM3RXh1dys1QmlC?=\n\t=?gb2312?b?akpqYWNOcE92Mm9sQ0k3SjM3eEVndnlKNGtnaFJpV3dnSjdZU2F4?=\n\t=?gb2312?b?SDRZakpUcGJGTDFXck5zaXprd1BxZ0pqUzRCQXlHRnpHMXdTSnRL?=\n\t=?gb2312?b?dmxVSzk0UEFmdGdJMzl4aVdKemx2VGhnaC9tclVoUHdlUXRaT2tP?=\n\t=?gb2312?b?TjBnRXVhRmp6L3JzZzJxRUZZaUF2dW1qREJPYkpsVE1sQnNrZ0xX?=\n\t=?gb2312?b?T3pZYnhWZU5BcklEQWZqY3RUSmRnMVVCOERNVTh6VHlpUmJOSVF0?=\n\t=?gb2312?b?RGVKNUt4UlloeHlZR1hqMC9pUzdTbjhsbk5vOGlXWGlwdW9GTTNS?=\n\t=?gb2312?b?WDRhUndKamk2aERxUHZKN05md1hFMkdzdXRVeHliQ3V0TjRja1RS?=\n\t=?gb2312?b?MkVvdG9hSmc3c0hYQk5YbUx3blhPWDdJc0JOSWFqdnBHN2dQK2Fr?=\n\t=?gb2312?b?YzB2MWJjTThGdGpKSWVyNzc4Mm5mMWtBcStiTlNnNnFMUms4UWhq?=\n\t=?gb2312?b?bGRNRFk2U1R6cTdSYzBRVkhsbHdmdlQyamdyWXl3OVAyWDl1VGQy?=\n\t=?gb2312?b?dGhreWN6aUdkYXp6cU1OdU16TFBtL1VHRVoxbGJseU5YRDhMdmJm?=\n\t=?gb2312?b?cGhwMjd5bGVQRThCaTVMUUxpSWwyRGZhVmF5NzhHeXhkVG9COVd1?=\n\t=?gb2312?b?QWxqQ3lEeUNaUndIMzlWblNjMEcvK1ltdGxWakJmUHFxL2hTZyt6?=\n\t=?gb2312?b?WDU1QlJ1TGpZQ3V6dWZCRjZ1aUpCQTBTT1pjQmFNUHRYdlRGNlRh?=\n\t=?gb2312?b?c0Y0WkJwTHFTZWQ1R3RVVDVuUmNvSVVLbUdTN0oxSkxMSW8yNnZp?=\n\t=?gb2312?b?NFoxTndWaU9uWmNxbENTVktRRVlERjRYY252bHllbHF4N2YybU4v?=\n\t=?gb2312?b?ZEZ1eUZUa3Z5ZnJnU0cwVitLS0NFdkd5dkY4Y2dvVWNsR1hYUXYy?=\n\t=?gb2312?b?SjVtKzhZSGxtZ3Jua0lQUWpGVEl1S3lyeC9HMTVuVzN2dGtobFpa?=\n\t=?gb2312?b?NzZsZ3IyQTlLWUhRYUNyZVBhQW9JRHZKbTlVRjRuZmVScEhkQmVR?=\n\t=?gb2312?b?Um9UZkk5NG11ZlBwbXVYYUo0SGdJWWFVRWFCYm91d1VFMWo4VFJY?=\n\t=?gb2312?b?ZnBwZWxSY2h2ZHZUSFBYbzNNQVVWWW1BUjV4TXR0Y1FaOFhiR0Jz?=\n\t=?gb2312?b?YXhBYW5WbG1WblpkeG9mVmovbGpBTzRiZytLWGR3eEY4QTQydGNH?=\n\t=?gb2312?b?MjRqdjFlSlBOZGhYSDhXNFBwWTJneXlZSXMrbWhkTzlJRnZvaEk0?=\n\t=?gb2312?b?TlNVQVlIZU1OT042MDRQSThFcTJUR2Q0YjlVYjQybmF5bGcrdldW?=\n\t=?gb2312?b?Vnp4MmZrODdERXJYV2tkdzYvMWVjTERjalVEV0VONkxwNlpaR21K?=\n\t=?gb2312?b?ZEdyVkpWa2V1dnRzZnJwSmNWdmlSNzJPeGZVUGZrRFFReXJRbjdY?=\n\t=?gb2312?b?YzM3U2lIRGdmbmV5WXErWjA0K0tuTStsVlk2Nm94dUNGWlJNTng2?=\n\t=?gb2312?b?L0hON1lCbmZ1M3hydXNjd0ltWWRoMm5PcVQxcUo5RmhSeGdqRDNp?=\n\t=?gb2312?b?YnFrZ29aODQzTjdzaE9OQnJsWDhtM2N6eEdTalY3clVoQkNKUVRZ?=\n\t=?gb2312?b?QlEvakEzOTQ2NUtoT3diejhEaUdWTGtyUTNqalZzaGIzeGZ4TDlM?=\n\t=?gb2312?b?ZDFIWDVnbUd6ak50REJCdnJRYnd0dDJrR2xMUU9iM2RZdU9Rc1Vv?=\n\t=?gb2312?b?UXRtQ3lCbGtUOTJPV2RMT1JPWFlFSEVUVEMrNDQ1M29UOEhMK2Z1?=\n\t=?gb2312?b?VHgxQU04di9qME5hRjlPVDZiMHhoNTJDMVlaU3ZBaEFQVzkxSFpS?=\n\t=?gb2312?b?d0tsVXROKzVnY3NWTGlWRWdEVHdCNEo1eWdVcUJXaWplTjQxZzF6?=\n\t=?gb2312?b?MzZNYkxVa01sQnJpNTUvMFNrMnJZaFkwNjVaT0VVVVlFOEN5MnFX?=\n\t=?gb2312?b?clNvY3hhcHBiVnJmWmdtMGExTTBkdVFGOXFSNlpMekZidGpXMDBN?=\n\t=?gb2312?b?QXN1NGE5QjJmQU5EMmFEeDFuZ0VEM29ZYmtiamIvUU9ob1VkalpT?=\n\t=?gb2312?b?bmk2S1ZlZ1Z1MHFtWDEzOUh0dkRYUTVlMGpPRXhwakh5QjZWZ0VB?=\n\t=?gb2312?b?VT0=?=","Content-Type":"text/plain; charset=\"gb2312\"","Content-Transfer-Encoding":"base64","MIME-Version":"1.0","X-OriginatorOrg":"nxp.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-AuthSource":"DB9PR04MB9284.eurprd04.prod.outlook.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"4772e5a3-72bf-40d0-fe7e-08dda3487d30","X-MS-Exchange-CrossTenant-originalarrivaltime":"04 Jun 2025 09:16:28.9665\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":"/L8hcpqWYGSDeET3n4gZxuyp3+7dqFcQHNObTnlIJWq91f38TJJoOMX5LZ6y4gktBAN94UiCZbQ6Et+hUdfRHw==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"DU0PR04MB9444","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>"}},{"id":34407,"web_url":"https://patchwork.libcamera.org/comment/34407/","msgid":"<DB9PR04MB9284B736A01086F4D2027B38876CA@DB9PR04MB9284.eurprd04.prod.outlook.com>","date":"2025-06-04T09:21:17","subject":"Re: [EXT] Re: [PATCH] libcamera: simple: Check all media devices\n\tmatched the pipeline","submitter":{"id":186,"url":"https://patchwork.libcamera.org/api/people/186/","name":"Fang Hui","email":"hui.fang@nxp.com"},"content":"Although one pipeline handler for 2 sensors, the specific \"Camera\" is passed to SimplePipelineHandler's interfaces, so will not mess up if 2 cameras work at same time.\n\nBRs,\nFang Hui","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 B59ADC3237\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  4 Jun 2025 09:21:23 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9095468DBB;\n\tWed,  4 Jun 2025 11:21:22 +0200 (CEST)","from DB3PR0202CU003.outbound.protection.outlook.com\n\t(mail-northeuropeazlp170100001.outbound.protection.outlook.com\n\t[IPv6:2a01:111:f403:c200::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 89D0468DB3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  4 Jun 2025 11:21:20 +0200 (CEST)","from DB9PR04MB9284.eurprd04.prod.outlook.com (2603:10a6:10:36c::8)\n\tby AM9PR04MB8381.eurprd04.prod.outlook.com (2603:10a6:20b:3b5::17)\n\twith Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.32;\n\tWed, 4 Jun 2025 09:21:17 +0000","from DB9PR04MB9284.eurprd04.prod.outlook.com\n\t([fe80::c5dc:4676:2254:2f4]) by\n\tDB9PR04MB9284.eurprd04.prod.outlook.com\n\t([fe80::c5dc:4676:2254:2f4%7]) with mapi id 15.20.8769.037;\n\tWed, 4 Jun 2025 09:21:17 +0000"],"Authentication-Results":["lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"i/1ilom8\";\n\tdkim-atps=neutral","dkim=none (message not signed)\n\theader.d=none;dmarc=none action=none header.from=nxp.com;"],"ARC-Seal":"i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n\tb=nmxHj6JU8exobgdC3p9jxPCYGB5swbFS9SeGtWC81l78XvkQUWfybiqN6MI+N5W9e8LCX4DLhGe+77/P0DRhM1M4Qaa/Uoob8SAL2LNlpqUVcjcyWHT8+q9GEskSw05epR5N72Qxuout5OWFlgKPLUtE7JIRGSeuR8ityKn0SorZ+65F7g9yDZR5odhnNI0XzESwU7KWNeUH+P0B5dIYB5ndv6CzbbpyryGZI6Q2+XUORfOiBDNYuK/W6PglrRDxPhjIxdRKuKf7fu2dfjveYrfPFT3Oo5cCDHNkOXVelLJ0bwYnsz+0p9QhzknQYn16QZAfMPwp/Aq644dVHNYxDw==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n\ts=arcselector10001;\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=J+2lJn9uD3abTcBrPZF84A707vNOvnjnkxAsX+u3ALU=;\n\tb=YMDecSx/vp/1H+WxVj7jgXw0dfyOysBTEHpRWdG6A0AMgpdAZhz3snTpgBdWc8snRGPfUZByYDBfJUCPG8Rr+zVoHwH/QmWM6yFE9dLXqmN2CvST9yqkJdZn1qUBpC6C805yZIQ8z0cJJEbmUqYuZg4hpfBzS7DISZqM9jot96CmqYPvvzDDC0XzWVShbY2kwkYLoiZ/Xg04bb9UfZUuZlwBh/JJE5QmcCSQrCbS2EqquyshevqglH5ZOUPFk+kbwCo6ta19UjWFZOBuzHnNb439Jr5zRJ0Wrq5Hxs1LfML0PC65XqxkxwWeADJKbhzsLm64zA/bqI8Ku6ACXBMkHA==","ARC-Authentication-Results":"i=1; mx.microsoft.com 1; spf=pass\n\tsmtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com;\n\tdkim=pass header.d=nxp.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n\tbh=J+2lJn9uD3abTcBrPZF84A707vNOvnjnkxAsX+u3ALU=;\n\tb=i/1ilom8l+o74bZAgOA+zw35yXpIFEXRRJG3VbQFSck1fm415teOXNfu4pBv8r9sJusRaQOEeOYuHgFzoqUbYNZLZjJly0puzIxWJ8hjFyR/v7OEncCQpxrPiTs8f5901m+vVGmaiTkzA41VnvlMIEfJhfrenv2uRmaNv5yKSK9/bUgmVWz0RIgX3UapHGJxvSCcEwKnKh5VAAEH3oczTKrRS3tsOXQZCMZTJ9Ale+Na8enTfU6/bYw8rTedlSN59IiicA0NY0P1Q7hJiwSPV19IPrgFUSkaXqECS+uFh5X+3vgu7flCi9g3uZ0/n4FnOxEuJfEi6j+UwfgMQ1HqFQ==","From":"Hui Fang <hui.fang@nxp.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>,\n\t\"libcamera-devel@lists.libcamera.org\"\n\t<libcamera-devel@lists.libcamera.org>","CC":"\"jacopo.mondi@ideasonboard.com\" <jacopo.mondi@ideasonboard.com>,\n\t\"mzamazal@redhat.com\" <mzamazal@redhat.com>,\n\t\"dan.scally@ideasonboard.com\"\n\t<dan.scally@ideasonboard.com>, Antoine Bouyer <antoine.bouyer@nxp.com>,\n\tJulien Vuillaumier <julien.vuillaumier@nxp.com>","Subject":"Re: [EXT] Re: [PATCH] libcamera: simple: Check all media devices\n\tmatched the pipeline","Thread-Topic":"[EXT] Re: [PATCH] libcamera: simple: Check all media devices\n\tmatched the pipeline","Thread-Index":"AQHbhy/cEgYtRWS6cUyTPV9GFg86vLNblRYAgACsHZCAABak8IAAEMCAgJbouyCAAANuEw==","Date":"Wed, 4 Jun 2025 09:21:17 +0000","Message-ID":"<DB9PR04MB9284B736A01086F4D2027B38876CA@DB9PR04MB9284.eurprd04.prod.outlook.com>","References":"<20250225021023.2112783-1-hui.fang@nxp.com>\n\t<174068620681.31628.2175002044685903562@ping.linuxembedded.co.uk>\n\t<DB9PR04MB92847A65F04ABF3E175F26E087CC2@DB9PR04MB9284.eurprd04.prod.outlook.com>\n\t<DB9PR04MB92846FAED000A04B286C463B87CC2@DB9PR04MB9284.eurprd04.prod.outlook.com>\n\t<DB9PR04MB928432D31296DF6A028D324F87CC2@DB9PR04MB9284.eurprd04.prod.outlook.com>\n\t<DB9PR04MB92842A18616A0E1A8F1E76F1876CA@DB9PR04MB9284.eurprd04.prod.outlook.com>","In-Reply-To":"<DB9PR04MB92842A18616A0E1A8F1E76F1876CA@DB9PR04MB9284.eurprd04.prod.outlook.com>","Accept-Language":"en-US","Content-Language":"en-US","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","msip_labels":"","authentication-results":["lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"i/1ilom8\";\n\tdkim-atps=neutral","dkim=none (message not signed)\n\theader.d=none;dmarc=none action=none header.from=nxp.com;"],"x-ms-publictraffictype":"Email","x-ms-traffictypediagnostic":"DB9PR04MB9284:EE_|AM9PR04MB8381:EE_","x-ms-office365-filtering-correlation-id":"a8375583-2699-446f-e761-08dda3492922","x-ms-exchange-senderadcheck":"1","x-ms-exchange-antispam-relay":"0","x-microsoft-antispam":"BCL:0;\n\tARA:13230040|1800799024|366016|376014|38070700018|13003099007|7053199007|8096899003;","x-microsoft-antispam-message-info":"=?iso-2022-jp?b?eHJzYjQzSm5tbnpYSU1W?=\n\t=?iso-2022-jp?b?VE92M3FaRGVvd01kZEdJQkJKQ2pXdGJBWHZRMjloSFJ0TURP?=\n\t=?iso-2022-jp?b?dnhpRFRtTWN2TElTaThpbEtJdG1OOUZ6bDh6blhiWktQYUps?=\n\t=?iso-2022-jp?b?Q1R2elVVSGpCVUtacU8rZzBGRURWU242S2lCU2VlQmJ0L1Nw?=\n\t=?iso-2022-jp?b?MkdXdGFpMENtYzYzRFFVbHlCTHJIejdTd093NkdzTENsUWI3?=\n\t=?iso-2022-jp?b?MTFGbE5HOStLRGZyQzJwampTYUVyeHNlNXR3d21mNCtKYVdD?=\n\t=?iso-2022-jp?b?MUN6VEEzNEF4N29CZlFGd01uTUM1SHM1OGJLYkxCSVE0U0lS?=\n\t=?iso-2022-jp?b?d1QrSjF2d2kwc0xHTktIeVZWQXpFYlBQbjIxeTRtOGJ2bXEv?=\n\t=?iso-2022-jp?b?bTRTeE5weEJGbE5hU3RuQ00ybEtLR2pzRmRaQ2NkbnVSV3pC?=\n\t=?iso-2022-jp?b?bGZFcE5CMmRrY3kxZC9SS21kMEE1TDRjVTBZRkhsVVc2UTFo?=\n\t=?iso-2022-jp?b?dFBSKzNTTTBuSWdIUzRnUm1QSmd2K0VycFR4OEZhUnhna1BL?=\n\t=?iso-2022-jp?b?bW9FMGRieVpnOXFsZ0gzb1dlcmVaWGtpNCt6NERHNHdBMUUw?=\n\t=?iso-2022-jp?b?N25USmpuMktnOFZqRytrOHRMTVpyRGZCaDZBdDBwVDgxME1K?=\n\t=?iso-2022-jp?b?QkJpTVUyQ3duYVVWUlQzNVdGUFo1OUlGUlV3Mm1UR2lHMXJ4?=\n\t=?iso-2022-jp?b?amUrZmJQWDFjY3E3a2lmaks0Z2wwSUhFQTJ2ZEx2aDNoZUNN?=\n\t=?iso-2022-jp?b?QXZqWVFhZUlxSjg4NVJYdXRzVGlPVkZ2WmdySzFtTFpIRTUr?=\n\t=?iso-2022-jp?b?MFZkQktCbnVkRThSdGtMSWFWQXdlekF2TDhsUlA2aXF3eTBU?=\n\t=?iso-2022-jp?b?bXFOdkdHOEs5TXFyZ2Q3WmdBcEl0R1lXSGo5ajdUK0h1R3RW?=\n\t=?iso-2022-jp?b?NDcwbFoyWUlvT0djTTk2RFBJaEl0RW8vdGYxbmpYME9QdkNE?=\n\t=?iso-2022-jp?b?MEVxeWpSR1o2TitxRTRTSHFaUzFjTUl1RWpWR000MW0rMUh5?=\n\t=?iso-2022-jp?b?RnNlSmhSbldOSHE5TExhcmsvazI0Sk4rSkY1VXhNSWEyemxu?=\n\t=?iso-2022-jp?b?Q3RNdmNvMVNCV1grZUtyQXBtOFZIUHh4UHhJd0RIdWU4YVRH?=\n\t=?iso-2022-jp?b?ZEVsV2ZOQ3k1SHVkd0V0aHBHaFoxVVIrRTFTcWRLRytHQy9h?=\n\t=?iso-2022-jp?b?cWcrSDZpQzNDVlpTM2xHelZOZFlSNko3aWxnLzZqczFZN00z?=\n\t=?iso-2022-jp?b?QmZuTGs4RHFQWDJBcEwvUTVRd0JRQzBCcmM2SHNmaTBYdzlJ?=\n\t=?iso-2022-jp?b?MmRNY1V0T0xxK3pvSXQ1YVlLcTFtdFYwSmNrd1ljVXRsTmRn?=\n\t=?iso-2022-jp?b?amdNK0MrREVSeThCVUJMRWd2U0ZLd1FJUC83NDlKQWtGYlN5?=\n\t=?iso-2022-jp?b?NkU0VUVDR2R5aUhVd3UzSjJPdUJGM0JEc2syUjgveG5BMk9U?=\n\t=?iso-2022-jp?b?aWordytxQU8vbDhOdVRrL01FcWNraGNSbGdIRXhtdms0QnZs?=\n\t=?iso-2022-jp?b?SmZxS2V0RDgranlycmVMdytha3ZDYVdFTHNkZExHL1ZPRmdX?=\n\t=?iso-2022-jp?b?L0N0dVZ5ZEF1cjNNQldyMjNORkJNd2I0YXZPcEliL0dJdUlO?=\n\t=?iso-2022-jp?b?NEQ4dkxIbXBEeWZJc2IvYWFlS203MTJnRjI3VHBsdWUyQ1FH?=\n\t=?iso-2022-jp?b?NmRGeFVSTFRQZ2J2K0RyVGVkRDNBQkVraGIwSTRwbXcwNmNu?=\n\t=?iso-2022-jp?b?VU5xaWtFM1J6YWpkU0ZJc0hWd2Nod05rWGJoQ0JMdTVtZW90?=\n\t=?iso-2022-jp?b?ZTNlZzVuanZzQm1GN0JpYUhOUDJrcy9pS1FoRDE1NmYyN0Iv?=\n\t=?iso-2022-jp?b?WjJsZHVqSDBaTnd5QStWd0owSHJrNEZCZk41ejg1MEY0dnIv?=\n\t=?iso-2022-jp?b?SjBGUVVUSS92VDVpUm44Z29aayt0eFRYSXgzbEF3UG1DQ2NS?=\n\t=?iso-2022-jp?b?blZRNjlwK1NsUFdtNE5hV1ZsU1VKeHFGeEZoUkpMK0VWQm12?=\n\t=?iso-2022-jp?b?dnNKQUhOQnRVUWtHcFdUOW5uemtyc1dTUU01UENXR1lnUGcw?=\n\t=?iso-2022-jp?b?ZDlKTm9sRm1NSzlLaEludHo3MnBNMEFWQUlwbTl1ajU5Y3Vi?=\n\t=?iso-2022-jp?b?YUhESkRaK21adXNScDVlWmRQOUQzZmtDSU5XazBvcWs9?=","x-forefront-antispam-report":"CIP:255.255.255.255; CTRY:; LANG:ja; SCL:1; SRV:;\n\tIPV:NLI; SFV:NSPM; H:DB9PR04MB9284.eurprd04.prod.outlook.com; PTR:;\n\tCAT:NONE; \n\tSFS:(13230040)(1800799024)(366016)(376014)(38070700018)(13003099007)(7053199007)(8096899003);\n\tDIR:OUT; SFP:1101; ","x-ms-exchange-antispam-messagedata-chunkcount":"1","x-ms-exchange-antispam-messagedata-0":"=?iso-2022-jp?b?U2VVYVlhZTZNOVhH?=\n\t=?iso-2022-jp?b?cUZLbzNxbmI1VmMvTHlvcmJqY3J1NStCYTlsbjVEQUZIcDlW?=\n\t=?iso-2022-jp?b?d1dEWUg0dE9nSDZybDBybVE5bEhuZUxEek4xYmN3bnhubUFK?=\n\t=?iso-2022-jp?b?cW9xZnlYNHVWdVhlNXc1U2lIeERGRkV4QjNzTDJCWWNWTkdu?=\n\t=?iso-2022-jp?b?UTlrSUhJNCtCT3hGVlpNS0gwamxkMGZkQzlaeHpsOEhCbUlQ?=\n\t=?iso-2022-jp?b?QTFza0gvNXROWFk4TkwxTFlwcE5hVE5ucHhGekJSUXFFcjZR?=\n\t=?iso-2022-jp?b?YTl0WTd6azlLV3lOK0Y5WkZ3Tm9hTjU3Q3F4NW9QSklXTzFW?=\n\t=?iso-2022-jp?b?QzlvMW9IQ3c5U3RsWXI0MUcwUENnNFB0L0FFU3NnemE2MnNF?=\n\t=?iso-2022-jp?b?ZU9qbDZHUDVzVlFIT1FrS0N6aGNWQStoOFpXQ09IOVpOSXB5?=\n\t=?iso-2022-jp?b?MlAySmw3T281V2Zlc2pMQ2ZQWVh2TTZUVzVnS2F2S2FEcjVO?=\n\t=?iso-2022-jp?b?dGVJUlRJSGtJZm9lMmVLR0ZHL3BzdU8vWWs3YTVyVEZLTkVv?=\n\t=?iso-2022-jp?b?TGxUK3NYY0FlMVlBd1BPS3F3QS81bGtZc1hXTU9GbmpQUHlQ?=\n\t=?iso-2022-jp?b?cStLd1NmZ3Fhc2wvN2h3SUZ0YzdJTThqR1VzalZ0Yi9DNm5t?=\n\t=?iso-2022-jp?b?NVZBeWRNZlpYcUJNaE5RbXQxSW5CdmE3MnJZSHh3T0Q4WWpX?=\n\t=?iso-2022-jp?b?Y1lMczZFeHpPVzFYV3BnYUxCcEJ6NWg0Q21GY0FIdWIxSWJG?=\n\t=?iso-2022-jp?b?bEFHcmQzL3AzWk11V2RzdEQrR294UVMwZytSTGNEQ2xkM1J4?=\n\t=?iso-2022-jp?b?L2p0dEZYT0RobjhPdmtUYUlsMUNFYzk2WjVkY00xdnJNd1VI?=\n\t=?iso-2022-jp?b?TEx6ZHhFbkdJK0tldnFLV2hZNjVoaXlZeUtFcTFwZllJMzYx?=\n\t=?iso-2022-jp?b?ZmlVQ3VRelBFbzNhM0t6L3c1WGc4bEhuWlBBenBYWHhvdXdJ?=\n\t=?iso-2022-jp?b?UzFYcHdQNUtjY1UxYmFLM2kzWmx3OWlpUHFBNStQaU9aSzhm?=\n\t=?iso-2022-jp?b?VlFUSUhUc2RRdU5NMGd3UVRBUmlGY3dXK1hxMjlxR1plVnBP?=\n\t=?iso-2022-jp?b?YVEvV2h0ZDMxa3ZyYW00aTArQWcyejB4RVNWQ2pDajMwNDNQ?=\n\t=?iso-2022-jp?b?VmFFVmJjMElFeGNObytWM3JHUDliYUlNY3Y2N25OWXVndURV?=\n\t=?iso-2022-jp?b?T0FKYkNpbGoxVHNxbENOZnJCWnBzZ3Q5Q25NdXU0QVVDdXR6?=\n\t=?iso-2022-jp?b?N09nSGxUVHloR0pLQjNBMWV5TXdncjNVTmVtdkdUL1dRdENp?=\n\t=?iso-2022-jp?b?U1IyV2xsbnZzU1hnOGxONE1wNzNnNUVwbHFMVHU3bFU4cTVK?=\n\t=?iso-2022-jp?b?ZEk3R0k3NjIzUmthaXUvdUc0dUhIcHlCYnhocEtKTVZnejQ1?=\n\t=?iso-2022-jp?b?UEtJNnRlVHM5Z0twNDljNUJ0djR3THJJN0QwOTFUeUI1Zi91?=\n\t=?iso-2022-jp?b?aDhSNm9kNVNPTDA3SEp6dzk0a01ZczhDSTlPWWh2QVhaMUFD?=\n\t=?iso-2022-jp?b?WUZZcmpETXY3dW9uZ3ZsOWxyMW9wZFY4ODNWMDJNcVIzamVB?=\n\t=?iso-2022-jp?b?OEtuRmQ1RldUaThkcFIrcUxudjhLd2FsUUlKUTBaYUhjSVEv?=\n\t=?iso-2022-jp?b?Vy9CSjNrTEViK2xUaWtBYWNQd0wvSkZ6U3c3VEQ0NHhzMm9u?=\n\t=?iso-2022-jp?b?MHhmWFNnUG9QVXFIVmxOY3JVbVpFZlV3VG1jU3p4RUFhd0dF?=\n\t=?iso-2022-jp?b?am5PWUxaR3pjc25BZ2txNk5WN0dGbmpIaHdhR2FHY2NOby9C?=\n\t=?iso-2022-jp?b?dThXcTRqUW96cHBZN091ck05d0FTcDdSdHUvRkcrWHl4SlU0?=\n\t=?iso-2022-jp?b?RVB3bndvS21Hd0FoaW9LWDA0L3JYaW9kTlI1NUlYNWFwUTJZ?=\n\t=?iso-2022-jp?b?K1hVSTB4akZ5UkRzNndIS0VGdjY2ZnRiV0wzRTBCb1dvQW5R?=\n\t=?iso-2022-jp?b?WkdhbEphc2YzZVYvNnBXRGtCWTY4YVh6cThSNUd5dVQ3VUd3?=\n\t=?iso-2022-jp?b?YldjTjg5UFQ1UnJLNGNyM2VER3FZSXJncmhzUlNCVEFRZmRG?=\n\t=?iso-2022-jp?b?Uk84R1dHNzd5MmhFdkZBMno5cXpmdzVHMWJEbW1ObDVGMExV?=\n\t=?iso-2022-jp?b?RURsQ2pJYkZNTS93UjVpOXNUZlNtcGVPYXhUTFByS3Z4VFlW?=\n\t=?iso-2022-jp?b?L2RNYUdTR1VIWStxNEtqWlNNNzk0TlF0MGczUmdVSVdsVjFZ?=\n\t=?iso-2022-jp?b?Vmt1NWxJc1E2SHBXMmJNK1BodW1iOWp5L05XYmFUL0Z0Rnow?=\n\t=?iso-2022-jp?b?S0FJYWloN2hiSm1zQmJUOHRqVlN1L0gxVG5MQ1k0TWFScW44?=\n\t=?iso-2022-jp?b?eXFGTUNVNFRRUDNKNWdyWTkrVT0=?=","Content-Type":"multipart/alternative;\n\tboundary=\"_000_DB9PR04MB9284B736A01086F4D2027B38876CADB9PR04MB9284eurp_\"","MIME-Version":"1.0","X-OriginatorOrg":"nxp.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-AuthSource":"DB9PR04MB9284.eurprd04.prod.outlook.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"a8375583-2699-446f-e761-08dda3492922","X-MS-Exchange-CrossTenant-originalarrivaltime":"04 Jun 2025 09:21:17.4545\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":"0D9LmmLGjt7onsB0UX1w1oDryCIER2osHebxubwUDWoFxHLgKmoJvKsG2Afd4Odxc+5lc3j1/jcXtSHreOwOYg==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"AM9PR04MB8381","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>"}},{"id":34429,"web_url":"https://patchwork.libcamera.org/comment/34429/","msgid":"<174911951608.425770.7559062647989353222@ping.linuxembedded.co.uk>","date":"2025-06-05T10:31:56","subject":"Re: [EXT] Re: [PATCH] libcamera: simple: Check all media devices\n\tmatched the pipeline","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Hui Fang (2025-06-04 10:21:17)\n>   Although one pipeline handler for 2 sensors, the specific \"Camera\" is passed to SimplePipelineHandler's interfaces, so will not mess up if 2 cameras work at same time.\n> \n> BRs,\n> Fang Hui\n> \n> ________________________________\n> From: Hui Fang\n> Sent: Wednesday, June 4, 2025 5:16 PM\n> To: Kieran Bingham <kieran.bingham@ideasonboard.com>; libcamera-devel@lists.libcamera.org <libcamera-devel@lists.libcamera.org>\n> Cc: jacopo.mondi@ideasonboard.com <jacopo.mondi@ideasonboard.com>; mzamazal@redhat.com <mzamazal@redhat.com>; dan.scally@ideasonboard.com <dan.scally@ideasonboard.com>; Antoine Bouyer <antoine.bouyer@nxp.com>; Julien Vuillaumier <julien.vuillaumier@nxp.com>\n> Subject: RE: [EXT] Re: [PATCH] libcamera: simple: Check all media devices matched the pipeline\n> \n> Hi, Kieran\n>   As you mentioned, there's a similar patch https://patchwork.libcamera.org/patch/20849/, is there plan to merge it?\n>   Also I have already tested that 2 sensors work ok at same time. Are there other concerns? Thanks!\n> \n\nI think the patch referenced above is now superceeded by \n\nhttps://patchwork.libcamera.org/patch/23363/\n\nCould you test/review that one please? If that solves your issue - a\nreviewed-by / tested by tag would help get it merged.\n\n--\nKieran\n\n\n> \n> BRs,\n> Fang Hui\n> \n> > -----Original Message-----\n> > From: Hui Fang\n> > Sent: 2025$BG/(B2$B7n(B28$BF|(B 16:39\n> > To: 'Kieran Bingham' <kieran.bingham@ideasonboard.com>;\n> > 'libcamera-devel@lists.libcamera.org' <libcamera-devel@lists.libcamera.org>\n> > Cc: 'jacopo.mondi@ideasonboard.com' <jacopo.mondi@ideasonboard.com>;\n> > 'mzamazal@redhat.com' <mzamazal@redhat.com>;\n> > 'dan.scally@ideasonboard.com' <dan.scally@ideasonboard.com>; Antoine\n> > Bouyer <antoine.bouyer@nxp.com>; Julien Vuillaumier\n> > <julien.vuillaumier@nxp.com>\n> > Subject: RE: [EXT] Re: [PATCH] libcamera: simple: Check all media devices\n> > matched the pipeline\n> >\n> > Use \"cam\" to capture from 2 cameras at same time, ok.\n> >\n> > export W=1920\n> > export H=1080\n> > cam \\\n> >         --camera 1 \\\n> >         --stream width=${W},height=${H},pixelformat=YUYV \\\n> >         --file=frame-#.yuv \\\n> >         --capture=5 \\\n> >         --camera 2 \\\n> >         --stream width=${W},height=${H},pixelformat=YUYV \\\n> >         --file=frame-#.yuv \\\n> >         --capture=5\n> >\n> > Using camera\n> > /base/soc@0/bus@30800000/i2c@30a20000/ov5640_mipi2@3c as cam0\n> > Using camera\n> > /base/soc@0/bus@30800000/i2c@30a30000/ov5640_mipi@3c as cam1\n> > cam0: Capture 5 frames\n> > cam1: Capture 5 frames\n> >\n> > 17475.769932 (0.00 fps) cam0-stream0 seq: 000000 bytesused: 4147200\n> > 17475.784579 (0.00 fps) cam1-stream0 seq: 000000 bytesused: 4147200\n> > 17475.817831 (30.07 fps) cam1-stream0 seq: 000001 bytesused: 4147200\n> > 17475.836441 (15.04 fps) cam0-stream0 seq: 000002 bytesused: 4147200\n> > 17475.851084 (30.07 fps) cam1-stream0 seq: 000002 bytesused: 4147200\n> > 17475.869695 (30.07 fps) cam0-stream0 seq: 000003 bytesused: 4147200\n> > 17475.884338 (30.07 fps) cam1-stream0 seq: 000003 bytesused: 4147200\n> > 17475.902949 (30.07 fps) cam0-stream0 seq: 000004 bytesused: 4147200\n> > 17475.936202 (30.07 fps) cam0-stream0 seq: 000005 bytesused: 4147200\n> > 17475.984099 (10.02 fps) cam1-stream0 seq: 000006 bytesused: 4147200\n> >\n> >\n> > BRs,\n> > Fang Hui\n> >\n> > > -----Original Message-----\n> > > From: Hui Fang\n> > > Sent: 2025$BG/(B2$B7n(B28$BF|(B 15:43\n> > > To: 'Kieran Bingham' <mailto:kieran.bingham@ideasonboard.com>;\n> > > 'libcamera-devel@lists.libcamera.org'\n> > > <mailto:libcamera-devel@lists.libcamera.org>\n> > > Cc: 'jacopo.mondi@ideasonboard.com'\n> > <mailto:jacopo.mondi@ideasonboard.com>;\n> > > 'mzamazal@redhat.com' <mailto:mzamazal@redhat.com>;\n> > > 'dan.scally@ideasonboard.com' <mailto:dan.scally@ideasonboard.com>; Antoine\n> > > Bouyer <mailto:antoine.bouyer@nxp.com>; Julien Vuillaumier\n> > > <mailto:julien.vuillaumier@nxp.com>\n> > > Subject: RE: [EXT] Re: [PATCH] libcamera: simple: Check all media\n> > > devices matched the pipeline\n> > >\n> > > Checked, my patch is similar as\n> > > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpatc\n> > > h\n> > >\n> > work.libcamera.org%2Fpatch%2F20849%2F&data=05%7C02%7Chui.fang%40\n> > >\n> > nxp.com%7C7df77e1abad34fc20d4908dd5768dfd0%7C686ea1d3bc2b4c6fa9\n> > >\n> > 2cd99c5c301635%7C0%7C0%7C638762830140008274%7CUnknown%7CTW\n> > >\n> > FpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW\n> > >\n> > 4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=Y1vZOi\n> > > FLPsKslaQ9QjnsgWzAXfVdy6NZ%2BpZc1Gedl%2Fo%3D&reserved=0.\n> > >\n> > > For the case to use 2 cameras at same time, if the specific \"Camera\"\n> > > is passed to SimplePipelineHandler's interfaces, maybe should ok?\n> > > Need test to verity.\n> > >\n> > > BRs,\n> > > Fang Hui\n> > >\n> > > > -----Original Message-----\n> > > > From: Hui Fang\n> > > > Sent: 2025$BG/(B2$B7n(B28$BF|(B 14:17\n> > > > To: 'Kieran Bingham' <mailto:kieran.bingham@ideasonboard.com>;\n> > > > mailto:libcamera-devel@lists.libcamera.org\n> > > > Cc: mailto:jacopo.mondi@ideasonboard.com; mailto:mzamazal@redhat.com;\n> > > > mailto:dan.scally@ideasonboard.com; Antoine Bouyer\n> > > <mailto:antoine.bouyer@nxp.com>;\n> > > > Julien Vuillaumier <mailto:julien.vuillaumier@nxp.com>\n> > > > Subject: RE: [EXT] Re: [PATCH] libcamera: simple: Check all media\n> > > > devices matched the pipeline\n> > > >\n> > > > Hi, Bingham\n> > > > Thanks for your reminding.\n> > > >\n> > > > The patch is to fix below issue:\n> > > > wevk_8mq has 2 camera slots, if just 1 slot plug sensor, if may\n> > > mis-discovered.\n> > > > There's 2 media deivces, suggest mediaA(with sensor), mediaB(no\n> > > > sensor). If mediaB is in the 1st place (depends of readdir()) of the\n> > > > enumerator,\n> > > > pipe->match(enumerator_.get() return false and mediaA has no chance\n> > > > pipe->to be\n> > > > discovered.\n> > > >\n> > > > Ref code in camera_manager.cpp\n> > > > void CameraManager::Private::pipelineFactoryMatch(const\n> > > > PipelineHandlerFactoryBase *factory) {\n> > > >    CameraManager *const o = LIBCAMERA_O_PTR();\n> > > >\n> > > >    /* Provide as many matching pipelines as possible. */\n> > > >    while (1) {\n> > > >            std::shared_ptr<PipelineHandler> pipe = factory->create(o);\n> > > >            if (!pipe->match(enumerator_.get()))\n> > > >                    break;\n> > > >\n> > > >            LOG(Camera, Debug)\n> > > >                    << \"Pipeline handler \\\"\" << factory->name()\n> > > >                    << \"\\\" matched\";\n> > > >    }\n> > > > }\n> > > >\n> > > >\n> > > > I tested on android, APP/CTS just switch back/front camera, no case\n> > > > to use 2 cameras at same time.\n> > > > Since the specific \"Camera\" is register to CameraManager and passed\n> > > > to SimplePipelineHandler, so no issue.\n> > > >\n> > > > But if there's case to use 2 cameras at same time, should have issue.\n> > > >\n> > > > Maybe the best resolution is in driver, don't create a media device\n> > > > if no sensor plugged in the media graph.\n> > > >\n> > > >\n> > > > BRs,\n> > > > Fang Hui\n> > > >\n> > > > > -----Original Message-----\n> > > > > From: Kieran Bingham <mailto:kieran.bingham@ideasonboard.com>\n> > > > > Sent: 2025$BG/(B2$B7n(B28$BF|(B 3:57\n> > > > > To: Hui Fang <mailto:hui.fang@nxp.com>;\n> > > > > mailto:libcamera-devel@lists.libcamera.org\n> > > > > Cc: mailto:jacopo.mondi@ideasonboard.com; mailto:mzamazal@redhat.com;\n> > > > > mailto:dan.scally@ideasonboard.com; Hui Fang <mailto:hui.fang@nxp.com>; Antoine\n> > > > > Bouyer <mailto:antoine.bouyer@nxp.com>\n> > > > > Subject: [EXT] Re: [PATCH] libcamera: simple: Check all media\n> > > > > devices matched the pipeline\n> > > > >\n> > > > > Caution: This is an external email. Please take care when clicking\n> > > > > links or opening attachments. When in doubt, report the message\n> > > > > using the 'Report this email' button\n> > > > >\n> > > > >\n> > > > > Hi Fang,\n> > > > >\n> > > > > Quoting Fang Hui (2025-02-25 02:10:23)\n> > > > > > The current implementation of SimplePipelineHandler::match()\n> > > > > > will return false once meet an un-complete media device such as\n> > > > > > no sensor plugged. Thus the rest media devices will lost the\n> > > > > > chance to be\n> > > > discovered.\n> > > > > > To discover all the cameras present, this change instanciates\n> > > > > > the cameras discovery procedure for each media device that\n> > > > > > contains a\n> > > > > supported camera port.\n> > > > > >\n> > > > > > Signed-off-by: Fang Hui <mailto:hui.fang@nxp.com>\n> > > > > > ---\n> > > > > >  src/libcamera/pipeline/simple/simple.cpp | 50\n> > > > > > +++++++++++++++++-------\n> > > > > >  1 file changed, 35 insertions(+), 15 deletions(-)\n> > > > > >\n> > > > > > diff --git a/src/libcamera/pipeline/simple/simple.cpp\n> > > > > > b/src/libcamera/pipeline/simple/simple.cpp\n> > > > > > index 6e039bf3..134f0a07 100644\n> > > > > > --- a/src/libcamera/pipeline/simple/simple.cpp\n> > > > > > +++ b/src/libcamera/pipeline/simple/simple.cpp\n> > > > > > @@ -379,6 +379,8 @@ private:\n> > > > > >         const MediaPad *acquirePipeline(SimpleCameraData\n> > *data);\n> > > > > >         void releasePipeline(SimpleCameraData *data);\n> > > > > >\n> > > > > > +       bool matchMedia(DeviceEnumerator *enumerator, const\n> > > > > > + SimplePipelineInfo *info, MediaDevice *media);\n> > > > > > +\n> > > > > >         std::map<const MediaEntity *, EntityData> entities_;\n> > > > > >\n> > > > > >         MediaDevice *converter_; @@ -1532,23 +1534,9 @@ int\n> > > > > SimplePipelineHandler::resetRoutingTable(V4L2Subdevice *subdev)\n> > > > > >         return 0;\n> > > > > >  }\n> > > > > >\n> > > > > > -bool SimplePipelineHandler::match(DeviceEnumerator *enumerator)\n> > > > > > +bool SimplePipelineHandler::matchMedia(DeviceEnumerator\n> > > > > > +*enumerator, const SimplePipelineInfo *info, MediaDevice\n> > > > > > +*media)\n> > > > > >  {\n> > > > > > -       const SimplePipelineInfo *info = nullptr;\n> > > > > >         unsigned int numStreams = 1;\n> > > > > > -       MediaDevice *media;\n> > > > > > -\n> > > > > > -       for (const SimplePipelineInfo &inf : supportedDevices) {\n> > > > > > -               DeviceMatch dm(inf.driver);\n> > > > > > -               media = acquireMediaDevice(enumerator, dm);\n> > > > > > -               if (media) {\n> > > > > > -                       info = &inf;\n> > > > > > -                       break;\n> > > > > > -               }\n> > > > > > -       }\n> > > > > > -\n> > > > > > -       if (!media)\n> > > > > > -               return false;\n> > > > > >\n> > > > > >         for (const auto &[name, streams] : info->converters) {\n> > > > > >                 DeviceMatch converterMatch(name); @@\n> > -1678,6\n> > > > > +1666,38\n> > > > > > @@ bool SimplePipelineHandler::match(DeviceEnumerator\n> > > *enumerator)\n> > > > > >         return registered;\n> > > > > >  }\n> > > > > >\n> > > > > > +bool SimplePipelineHandler::match(DeviceEnumerator *enumerator)\n> > {\n> > > > > > +       MediaDevice *media;\n> > > > > > +       std::map<MediaDevice *, const SimplePipelineInfo *>\n> > > > > > +mediaDevices;\n> > > > > > +\n> > > > > > +       for (const SimplePipelineInfo &inf : supportedDevices) {\n> > > > > > +               LOG(SimplePipeline, Debug) << \"check simple\n> > > > > > + pipeline\n> > > > \"\n> > > > > << inf.driver;\n> > > > > > +               DeviceMatch dm(inf.driver);\n> > > > > > +\n> > > > > > +               do {\n> > > > > > +                       media =\n> > acquireMediaDevice(enumerator,\n> > > > > dm);\n> > > > > > +                       if (media) {\n> > > > > > +                               mediaDevices[media] = &inf;\n> > > > > > +                               LOG(SimplePipeline, Debug) <<\n> > > > > \"found media \" << media->deviceNode();\n> > > > > > +                       }\n> > > > > > +               } while (media);\n> > > > > > +       }\n> > > > > > +\n> > > > > > +       bool matched = false;\n> > > > > > +\n> > > > > > +       for (auto it = mediaDevices.begin(); it !=\n> > > > > > + mediaDevices.end(); it++)\n> > > > > {\n> > > > > > +               MediaDevice *media = it->first;\n> > > > > > +               const SimplePipelineInfo *info = it->second;\n> > > > > > +               LOG(SimplePipeline, Debug)\n> > > > > > +                       << \"call matchMedia for pipeline \"\n> > > > > > +                       << info->driver << \", media \" <<\n> > > > > media->deviceNode();\n> > > > > > +               matched |= matchMedia(enumerator, info,\n> > media);\n> > > > > > +       }\n> > > > >\n> > > > > I'm not 100% sure I understand the implications here. I also tried\n> > > > > to tackle this topic at\n> > > > > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2F\n> > > > > pa\n> > > > > tc\n> > > > > h\n> > > > >\n> > > >\n> > >\n> > work.libcamera.org%2Fpatch%2F20849%2F&data=05%7C02%7Chui.fang%40\n> > > > >\n> > > >\n> > >\n> > nxp.com%7C7df77e1abad34fc20d4908dd5768dfd0%7C686ea1d3bc2b4c6fa9\n> > > > >\n> > > >\n> > >\n> > 2cd99c5c301635%7C0%7C0%7C638762830140008274%7CUnknown%7CTW\n> > > > >\n> > > >\n> > >\n> > FpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW\n> > > > >\n> > > >\n> > >\n> > 4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=Y1vZOi\n> > > > > FLPsKslaQ9QjnsgWzAXfVdy6NZ%2BpZc1Gedl%2Fo%3D&reserved=0,\n> > and I\n> > > > see\n> > > > > your version differs slightly that first you will try to find all\n> > > > > compatible graphs, but then match each of the successfully acquired\n> > ones.\n> > > > >\n> > > > > But I think this will be problematic as you will then register (or\n> > > > > try to register) multiple graphs in a single pipeline handler ?\n> > > > >\n> > > > > Have you checked what happens here if there are more than one\n> > > > > simple pipeline handler supported in the system ?\n> > > > >\n> > > > >\n> > > > >\n> > > > > > +\n> > > > > > +       return matched;\n> > > > > > +}\n> > > > > > +\n> > > > > >  V4L2VideoDevice *SimplePipelineHandler::video(const MediaEntity\n> > > > > > *entity)  {\n> > > > > >         auto iter = entities_.find(entity);\n> > > > > > --\n> > > > > > 2.25.1\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 3D8E2C3237\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  5 Jun 2025 10:32:03 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id E7A1868DBD;\n\tThu,  5 Jun 2025 12:32:01 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 8802868D96\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  5 Jun 2025 12:31:59 +0200 (CEST)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust6594.18-1.cable.virginm.net [86.31.185.195])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id A66F6752;\n\tThu,  5 Jun 2025 12:31:55 +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=\"WKjnyZZS\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1749119515;\n\tbh=LGIktmOiSFehnPksW9rgBtamjFsaOGsOAAFRL7dAWlw=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=WKjnyZZSg7HXJ0A7AL6/w3tBOw5EU7U1uOY92Ov+1usG4r9crO8Vxt9HxWcedCgvK\n\t385KbK+0RSuBfX9R7JAQwnNVSQ8LwMfuSBKI+DEgR4pqNi0dNT1dMSHaU2pmIquj1J\n\tc7S0Bh5KfwZb10tCXnjgsIKFtRKbgi5gv4qjYvQk=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<DB9PR04MB9284B736A01086F4D2027B38876CA@DB9PR04MB9284.eurprd04.prod.outlook.com>","References":"<20250225021023.2112783-1-hui.fang@nxp.com>\n\t<174068620681.31628.2175002044685903562@ping.linuxembedded.co.uk>\n\t<DB9PR04MB92847A65F04ABF3E175F26E087CC2@DB9PR04MB9284.eurprd04.prod.outlook.com>\n\t<DB9PR04MB92846FAED000A04B286C463B87CC2@DB9PR04MB9284.eurprd04.prod.outlook.com>\n\t<DB9PR04MB928432D31296DF6A028D324F87CC2@DB9PR04MB9284.eurprd04.prod.outlook.com>\n\t<DB9PR04MB92842A18616A0E1A8F1E76F1876CA@DB9PR04MB9284.eurprd04.prod.outlook.com>\n\t<DB9PR04MB9284B736A01086F4D2027B38876CA@DB9PR04MB9284.eurprd04.prod.outlook.com>","Subject":"Re: [EXT] Re: [PATCH] libcamera: simple: Check all media devices\n\tmatched the pipeline","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"jacopo.mondi@ideasonboard.com <jacopo.mondi@ideasonboard.com>,\n\tmzamazal@redhat.com <mzamazal@redhat.com>,\n\tdan.scally@ideasonboard.com <dan.scally@ideasonboard.com>,\n\tAntoine Bouyer <antoine.bouyer@nxp.com>,\n\tJulien Vuillaumier <julien.vuillaumier@nxp.com>","To":"Hui Fang <hui.fang@nxp.com>, libcamera-devel@lists.libcamera.org,","Date":"Thu, 05 Jun 2025 11:31:56 +0100","Message-ID":"<174911951608.425770.7559062647989353222@ping.linuxembedded.co.uk>","User-Agent":"alot/0.9.1","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>"}},{"id":34435,"web_url":"https://patchwork.libcamera.org/comment/34435/","msgid":"<DB9PR04MB92842C726CF914A4B5BA12CD876BA@DB9PR04MB9284.eurprd04.prod.outlook.com>","date":"2025-06-09T05:52:26","subject":"RE: [EXT] Re: [PATCH] libcamera: simple: Check all media devices\n\tmatched the pipeline","submitter":{"id":186,"url":"https://patchwork.libcamera.org/api/people/186/","name":"Fang Hui","email":"hui.fang@nxp.com"},"content":"Hi, Kieran\nApplied https://patchwork.libcamera.org/patch/23363/, tested ok on evk_8mq plugged 1 ov5640.\n\nevk_8mq:/data/cam-test # ls /dev/media*\n/dev/media0  /dev/media1\nevk_8mq:/data/cam-test #\nevk_8mq:/data/cam-test # cam -l\nAvailable cameras:\n1: 'ov5640' (/base/soc@0/bus@30800000/i2c@30a20000/ov5640_mipi2@3c)\nevk_8mq:/data/cam-test #\nevk_8mq:/data/cam-test # logcat\n06-07 16:36:42.696  1637  1637 I LIBCAMERA: [0:01:43.676715045] [1637]  WARN IPAManager ipa_manager.cpp:148 No IPA found in '/vendor/lib64/ipa'\n06-07 16:36:42.697  1637  1637 I LIBCAMERA: [0:01:43.677268965] [1637]  INFO Camera camera_manager.cpp:326 libcamera v0.5.0+349-b920c09f-dirty\n06-07 16:36:42.700  1637  1638 I LIBCAMERA: [0:01:43.680738405] [1638]  INFO SimplePipeline simple.cpp:1686 No sensor found for /dev/media0\n06-07 16:36:42.702  1637  1638 I LIBCAMERA: [0:01:43.682392365] [1638]  WARN CameraSensor camera_sensor_legacy.cpp:354 'ov5640 0-003c': Recommended V4L2 control 0x009a0922 not supported\n06-07 16:36:42.702  1637  1638 I LIBCAMERA: [0:01:43.682487405] [1638]  WARN CameraSensor camera_sensor_legacy.cpp:426 'ov5640 0-003c': The sensor kernel driver needs to be fixed\n06-07 16:36:42.702  1637  1638 I LIBCAMERA: [0:01:43.682568405] [1638]  WARN CameraSensor camera_sensor_legacy.cpp:428 'ov5640 0-003c': See Documentation/sensor_driver_requirements.rst in the libcamera sources for more information\n06-07 16:36:42.703  1637  1638 I LIBCAMERA: [0:01:43.683572445] [1638]  WARN CameraSensor camera_sensor_legacy.cpp:594 'ov5640 0-003c': Failed to retrieve the camera location\n06-07 16:36:42.703  1637  1638 I LIBCAMERA: [0:01:43.683642885] [1638]  WARN CameraSensor camera_sensor_legacy.cpp:616 'ov5640 0-003c': Rotation control not available, default to 0 degrees\n06-07 16:36:42.703  1637  1638 I LIBCAMERA: [0:01:43.683768525] [1638]  WARN CameraSensor camera_sensor_legacy.cpp:501 'ov5640 0-003c': No sensor delays found in static properties. Assuming unverified defaults.\n\t\nBRs,\nFang Hui\n\n> -----Original Message-----\n> > ________________________________\n> > From: Hui Fang\n> > Sent: Wednesday, June 4, 2025 5:16 PM\n> > To: Kieran Bingham <kieran.bingham@ideasonboard.com>;\n> > libcamera-devel@lists.libcamera.org\n> > <libcamera-devel@lists.libcamera.org>\n> > Cc: jacopo.mondi@ideasonboard.com <jacopo.mondi@ideasonboard.com>;\n> > mzamazal@redhat.com <mzamazal@redhat.com>;\n> dan.scally@ideasonboard.com\n> > <dan.scally@ideasonboard.com>; Antoine Bouyer\n> > <antoine.bouyer@nxp.com>; Julien Vuillaumier\n> > <julien.vuillaumier@nxp.com>\n> > Subject: RE: [EXT] Re: [PATCH] libcamera: simple: Check all media\n> > devices matched the pipeline\n> >\n> > Hi, Kieran\n> >   As you mentioned, there's a similar patch\n> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpatch\n> work.libcamera.org%2Fpatch%2F20849%2F&data=05%7C02%7Chui.fang%40\n> nxp.com%7Cc8b78686e66346ad844508dda41c3442%7C686ea1d3bc2b4c6fa\n> 92cd99c5c301635%7C0%7C0%7C638847163234281141%7CUnknown%7CT\n> WFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXa\n> W4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=FIU\n> DlBN5dNHNzTSwzr9kvoQMijd2CRKfJEVBr0umiL4%3D&reserved=0, is there\n> plan to merge it?\n> >   Also I have already tested that 2 sensors work ok at same time. Are there\n> other concerns? Thanks!\n> >\n> \n> I think the patch referenced above is now superceeded by\n> \n> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpatch\n> work.libcamera.org%2Fpatch%2F23363%2F&data=05%7C02%7Chui.fang%40\n> nxp.com%7Cc8b78686e66346ad844508dda41c3442%7C686ea1d3bc2b4c6fa\n> 92cd99c5c301635%7C0%7C0%7C638847163234328382%7CUnknown%7CT\n> WFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXa\n> W4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=7%2\n> Bv5ikttk1l8AqL6T6EGdF99YM7v3WP4IzFNH6NW3xw%3D&reserved=0\n> \n> Could you test/review that one please? If that solves your issue - a\n> reviewed-by / tested by tag would help get it merged.\n> \n> --\n> Kieran","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 46C43BDE6B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  9 Jun 2025 05:52:38 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B9AC868DBD;\n\tMon,  9 Jun 2025 07:52:36 +0200 (CEST)","from AM0PR83CU005.outbound.protection.outlook.com\n\t(mail-westeuropeazlp170100001.outbound.protection.outlook.com\n\t[IPv6:2a01:111:f403:c201::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 8A7656154F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  9 Jun 2025 07:52:31 +0200 (CEST)","from DB9PR04MB9284.eurprd04.prod.outlook.com (2603:10a6:10:36c::8)\n\tby DU2PR04MB8616.eurprd04.prod.outlook.com (2603:10a6:10:2db::16)\n\twith Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.37;\n\tMon, 9 Jun 2025 05:52:27 +0000","from DB9PR04MB9284.eurprd04.prod.outlook.com\n\t([fe80::c5dc:4676:2254:2f4]) by\n\tDB9PR04MB9284.eurprd04.prod.outlook.com\n\t([fe80::c5dc:4676:2254:2f4%4]) with mapi id 15.20.8813.024;\n\tMon, 9 Jun 2025 05:52:27 +0000"],"Authentication-Results":["lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"HNftI9Mq\";\n\tdkim-atps=neutral","dkim=none (message not signed)\n\theader.d=none;dmarc=none action=none header.from=nxp.com;"],"ARC-Seal":"i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n\tb=ZSiq+bz1grfYm64TnoA7Sn9Gh+jdEUVASYOAnYWRoedChAB+siVtu2d2FodudXHkEuxaPaJn4ejV8sljP5j+Wwuui5sltxM/UpetRO/XaLAz/tO1HZclbFZ/srvhyzS02kCEw6UEjNB0l9GRCdAkOcgq7x4XD0JI2+xgM5B9K3Pn70y6UhD0wtU7OsFyVWjgCb7xj9rPMhujOw5n8M5VlLU2gRoTIv0S305AZTmYVO7LBbABgdDeY7+fKXqsUxouegBIt7eTy6ak7YfmIudbuPNv36/O/gDY+30a+ml4v2gNuUEbY8cc9EbXdFcu1lv2R6POiPm243QLzluI+J/W5Q==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n\ts=arcselector10001;\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=WrccyY+PoLcb7jNx+k96yW9shMexMaLe6MvWNUFG4ws=;\n\tb=QvgmRFWN8fWrIxzsCWXZF3dyPQLrXOyCX6eTTIW7twZMOOdSx7bH4HyHbQP/qAipfPkxs5P2y7Tnv62bxSsUXQMbhJcy3DAA1IUCExl3UGDxYJnCT85iaoVl+EGXOlbiPA2s0pWHDnwTi7OB+pWC1sXvqcWWRuagAFvzUbqPUbpF2RtQHitUkbHLgD0Q/hzyTLK0xx2+sXEJ6X6jZWWk+gVNuhO1+qAtkLcWkAteb8dY90R3EfiwGvHCwmwgsPazj7va+RKTlcoyTAZobBxKuHQJfVg49S0f1xr1aHohO0JmPlTqL/IRa/ttcg5t6E8y5zQIXwhryqbSBOdcpuMPwQ==","ARC-Authentication-Results":"i=1; mx.microsoft.com 1; spf=pass\n\tsmtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com;\n\tdkim=pass header.d=nxp.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n\tbh=WrccyY+PoLcb7jNx+k96yW9shMexMaLe6MvWNUFG4ws=;\n\tb=HNftI9MquxCe1XsiOzhV/vOKKcbvKcIo97mf6QrSPDMNxIrz2Jrm6t3Nh0U1sQG80N/pBx2CzWMqUXGmFqhSiISpC3hF04LjdCoD5RN3qcForq2tSBwmQi4e20nY7BhkPajkuANY697xlekzYSiRQSDSC0DsUyHnNWC3vxYJ8SmP8IJ0PrOgMQXhTqK4sm8O5Z3fWkgf+p94geaZmh1MtkrcRJrG7hoAFw3M+J37KmqF7qMjwnSwepIp5P4sbLPlCJKHQl1GAzewAnIUn/jRvbTvDh4vu001GQEfCfvU6zqqPB2VMunUw3puChScY3hF4Rr5mt8PKChWSNKzNRxE3w==","From":"Hui Fang <hui.fang@nxp.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>,\n\t\"libcamera-devel@lists.libcamera.org\"\n\t<libcamera-devel@lists.libcamera.org>","CC":"\"jacopo.mondi@\" <ideasonboard.com jacopo.mondi@ideasonboard.com>,\n\t\"mzamazal@\" <redhat.com mzamazal@redhat.com>, \"dan.scally@\"\n\t<ideasonboard.com dan.scally@ideasonboard.com>, Antoine Bouyer\n\t<antoine.bouyer@nxp.com>, Julien Vuillaumier <julien.vuillaumier@nxp.com>","Subject":"RE: [EXT] Re: [PATCH] libcamera: simple: Check all media devices\n\tmatched the pipeline","Thread-Topic":"[EXT] Re: [PATCH] libcamera: simple: Check all media devices\n\tmatched the pipeline","Thread-Index":"AQHbhy/cEgYtRWS6cUyTPV9GFg86vLNblRYAgACsHZCAABak8IAAEMCAgJbouyCAAANuE4ABpv8AgAX51IA=","Date":"Mon, 9 Jun 2025 05:52:26 +0000","Message-ID":"<DB9PR04MB92842C726CF914A4B5BA12CD876BA@DB9PR04MB9284.eurprd04.prod.outlook.com>","References":"<20250225021023.2112783-1-hui.fang@nxp.com>\n\t<174068620681.31628.2175002044685903562@ping.linuxembedded.co.uk>\n\t<DB9PR04MB92847A65F04ABF3E175F26E087CC2@DB9PR04MB9284.eurprd04.prod.outlook.com>\n\t<DB9PR04MB92846FAED000A04B286C463B87CC2@DB9PR04MB9284.eurprd04.prod.outlook.com>\n\t<DB9PR04MB928432D31296DF6A028D324F87CC2@DB9PR04MB9284.eurprd04.prod.outlook.com>\n\t<DB9PR04MB92842A18616A0E1A8F1E76F1876CA@DB9PR04MB9284.eurprd04.prod.outlook.com>\n\t<DB9PR04MB9284B736A01086F4D2027B38876CA@DB9PR04MB9284.eurprd04.prod.outlook.com>\n\t<174911951608.425770.7559062647989353222@ping.linuxembedded.co.uk>","In-Reply-To":"<174911951608.425770.7559062647989353222@ping.linuxembedded.co.uk>","Accept-Language":"en-US","Content-Language":"en-US","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","authentication-results":["lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"HNftI9Mq\";\n\tdkim-atps=neutral","dkim=none (message not signed)\n\theader.d=none;dmarc=none action=none header.from=nxp.com;"],"x-ms-publictraffictype":"Email","x-ms-traffictypediagnostic":"DB9PR04MB9284:EE_|DU2PR04MB8616:EE_","x-ms-office365-filtering-correlation-id":"adec0fe4-ade8-49b0-2365-08dda719d050","x-ms-exchange-senderadcheck":"1","x-ms-exchange-antispam-relay":"0","x-microsoft-antispam":"BCL:0;\n\tARA:13230040|366016|376014|1800799024|38070700018; ","x-microsoft-antispam-message-info":"8W2zVEDpWVzLFUrj2cG9kgcdxOia+kHny8knRajRuIjCnEhOKpxz//8yOyX1Q9rNVRLaH8v2rQm83SlkyY0nQjvspQWdK1U5/ABUlrioT+3m0WRHpfxQFn0dsV0CaoEfFlxv0PapsoGl+D27Yq1x7E8bPLIMaFuftlAS4OuUYGPuhTCU3xOajm8f7EqYMYfMPbaz1qmFdPi3Zh853X4LmUEzGiFnx6RpS0H+dcmfQGIcIqZYlb7VXNa1a2erZ1+9wsqJutx7MgSd+HHCJgrelPKZCWXiWSUg3lMCrfdkzkanCNO8LIwXbG2Q5OlBQZJ2NFRqBNmQ20Z1vOcVjuGdPhRcBEBm9+EW8q1sy38dHz595vijZs/h/4zeMdrEGXa71UJ3KS3jSZMTDosilkA0Ltu3C9DOfvzeeLFoL40PuZO34cGJfq1tNHbtLGaTccozsoNv5p6AE745JOn87BIgIqEkC+GVKBuHEL754RWYxIXfxlkMt3659hE14TW5KjJyvmxQWXvADNOl/hTL0niAf4EYr8JibhKguTNxXZGp67p6qL06H3iiEE+0z1ZEuXUhZeCNzfR/cGR7HYdB/jHyLlRk8wwJtDn5KPQyz32Th4cfW0mIcZWPq28IjdhaV/7cHn34b0LfrC+VmoxSu4kclW6ZP90r/jJPqFpOlOoRGj4QTQvkqhAU3ulgciT+93659xcHEjDnrTGx9EdyM50T9jMC1z1/I4o/ZJPyR7tE1WYSRZ3H0KPmWtFQ+ILNkInb0+2FEKXYhB9mHvpVt1XElJ+OEZeIbJ8fLAuyvG1DeuDzxC4XpDZtAoICUswoMzbLRzniB63ROS72CsDtxpCmrLdoy0z365q2pbUbcJOmALXxOSfnD2cWc11TDrCvAuKoIrGFyNGv1OPKsIscIeui/ClXMEK1C0vTY4ilT8JMK5dqR6rwh0+aoaCl9yWbFMoC09FTfSvlWLTgn5BgVBz2F1knNb7421rHG5BQ4Ziw1IxacTojcnB+qdZZEEV4JLiQOdUzFm5TjawngV/GP2olKJEoLMWWknxUZQNh+YK9JHUFiAZw+o6w0Yy73hzxhKHbAlM3g87w0Gab6Hduad6y3vlOi2naTtjm3bhQ4v7yqKfXSawil/F8uxj4VyWoxHNOXMYLRRjdRMbonPE1PF0pEDWcHU+PGb/bxRWg8KWW+HJmLK91teMyjY8qQ7DQVfgeHZpnwzJg/MWd/MS/xLNcoByZogfc4wplcVOexauBQ99DFixUgKEjto/B4vz99MxmvHqfBCkHH3H84x2E3PY6DjKSY4kFVBDlUN0PPZU/IIbo8Wv0q8dwV3T7hYl+1LBIE255P28493OoELN1gBdD1HmpGC12bQKil62tm69sBG2f30U+0dJrKEHkLXZMPhq81+2nDI4M00HZu6cAOs+cRVDLZjP/qpTt5DwXkRoWybg=","x-forefront-antispam-report":"CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n\tIPV:NLI; SFV:NSPM; H:DB9PR04MB9284.eurprd04.prod.outlook.com; PTR:;\n\tCAT:NONE; \n\tSFS:(13230040)(366016)(376014)(1800799024)(38070700018); DIR:OUT;\n\tSFP:1101; ","x-ms-exchange-antispam-messagedata-chunkcount":"1","x-ms-exchange-antispam-messagedata-0":"msKTXaRBuQZ1vcep7cqqIl+XTy0eOHJQpaINRsO+ciW2F3uq2QMv/b5W5Wl/iNy8GS9EQDmD4aQrOlWJ7JwLujHFlofkec+jz+Mp/8tUq0zRETSYNJfCMinV7j4vSVXPmlac2M472fFgBcV0cxTqjj+rRiaeVI75bUBaS/2KA/8K65DZ2yGSi4CAaPm1SFOAunmFJBTqDgNFl3wc/pkiMZ2kVIkc0yylvTZcf/MnrqH7PkERNK6/sx70WPyvosBBqPoSTDDyjJo1DMaF+zGNnUNW3ekzciIDRkVu+9QPaCG6uYOl/nnqdpMmWawtAJdOJhMF1KuHxpKQcv4bPah2toHMqEww2J9L7N3cDMJBoh6VeyqIlKTzzwmkKJhg7IHj17/jJ3rJ6D8UEXEwaO4dNoVRZscPqyJw5z+7tBuHztduelJfllyNCjjZCBH6KHuSZ2liWHEI1ig3tNnw8utciXzO+2mdIiSW4RAnJHsEk80LX+8zPlQENTz3olDRPny8jgmONPTXi1Dn1+CcdAX1WLUR65dsD7zVaMtiARDP1kTDezkwUmoMpSYVEiFyD/vAGiH4gAGEYED7ZcHmSL5KDuw3D8b29qSXmbkI+LUZWxGLM0Ub0ddbAeURvMSlMuknIaWTfMzEcRA4+twO86icajkoTaBR0kOzq/uS0PPzpVV8g/U2lqt/ZGYAtKU6mUznJqlir30GY2BdU8eekhRsaDwWSB361kdfTHd+Z7hzouNWnay2KSBSJqZic1ROcBZr09SoQTJW15Wg6QhbLq3bc3Subi+XFOFixI8ZoxrJ6/Gukj7j3YSmcL0wUO9fNFFiKOqAG6LwpWhhICkpo9wNQXsUaDDKgPpT3imCHF9BPrJEeloRCQrmTarIfQbYWIp1com4AA9+FnBkPwSDQXA/vTHwtDmQmRliV/fU2BBDNxYEpVmzsNpgf4otbpnXLYnIgP34c68L/bWc8yOYn2HQoL7Ws4J7e8VIkdcPxmTLzUl3Oz2oG5urQagjRmdLvF0m3nwBPORjkOG5277a546BGUff8557sgqFY4f4CwiFPn1++6XrVxHDPkkebn06JA9p8B2z7CR1wIdLNK3Syjff+M7CrRlpGHArZ6bkDeveZLnjjDieUBbuWuxfLHaslhC8rslb691HHeWf7+N6mZDOhCbNbOO2lSLLjcllFsySOLooVjh6BMfIdC4eKWAmHRPDKG7q7Fzb+CMeLmZNVhZftkn8e+BuGEN2cz7LjcqbO5VpBfOCfY2CzvE5Ei58Jf4FPUsaRlC5SrZ3YOlni9Bdu9uEeMxjqMov0MJiGSCpyPfXQ4lygbjroNDgGr4DZlVEoOHR+oSV9bxVQ0jTkggkex4TYReP7Sjsx+o0r93CU9cJkOhI0EnLK+j7YFTMyI0EexnVanO6eslJ+kG8tJ1hfcH+zkKhcRA8+sg5T4OGlqrwNBfx054FvBtSg5uNKsbBzIxt83Dk2wuziYoGAra9e996e+f8jghECXvlzF4+As3ZEknaEcDpXAqg78LMWzCOkH+FPjy0OX7JHmh+F99q57wqU2o+bWHQ1b2huBMANO0=","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"quoted-printable","MIME-Version":"1.0","X-OriginatorOrg":"nxp.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-AuthSource":"DB9PR04MB9284.eurprd04.prod.outlook.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"adec0fe4-ade8-49b0-2365-08dda719d050","X-MS-Exchange-CrossTenant-originalarrivaltime":"09 Jun 2025 05:52:26.6848\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":"p4NKZtLoM3spdVb2wHxc2DwlqcZ58FZyYAH3QtrFU80gnLqB1wB44pHP05y/Fhfk9zPVydLIDDCtQ9LujcvenQ==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"DU2PR04MB8616","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>"}}]