[{"id":18848,"web_url":"https://patchwork.libcamera.org/comment/18848/","msgid":"<13d8f501-02f9-6a5e-282c-0fae13a00b66@ideasonboard.com>","date":"2021-08-16T14:41:21","subject":"Re: [libcamera-devel] [PATCH 02/10] libcamera: pipeline: simple:\n\tAdd sink and source pads to entity data","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Laurent,\n\nOn 05/08/2021 23:24, Laurent Pinchart wrote:\n> Record the sink and source pads through which an entity is traversed in\n> the list of entities stored in the camera data. This prepares for\n> implementing mutually exclusive access to entities between cameras.\n> \n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>  src/libcamera/pipeline/simple/simple.cpp | 38 ++++++++++++++++++++----\n>  1 file changed, 32 insertions(+), 6 deletions(-)\n> \n> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\n> index b29fff9820e5..e0695d052629 100644\n> --- a/src/libcamera/pipeline/simple/simple.cpp\n> +++ b/src/libcamera/pipeline/simple/simple.cpp\n> @@ -166,7 +166,22 @@ public:\n>  \t}\n>  \n>  \tstruct Entity {\n> +\t\t/* The media entity, always valid. */\n>  \t\tMediaEntity *entity;\n> +\t\t/*\n> +\t\t * The local sink pad connected to the upstream entity, null for\n> +\t\t * the camera sensor at the beginning of the pipeline.\n> +\t\t */\n> +\t\tconst MediaPad *sink;\n> +\t\t/*\n> +\t\t * The local source pad connected to the downstream entity, null\n> +\t\t * for the video node at the end of the pipeline.\n> +\t\t */\n> +\t\tconst MediaPad *source;\n> +\t\t/*\n> +\t\t * The link to the downstream entity, null for the video node at\n> +\t\t * the end of the pipeline.\n> +\t\t */\n>  \t\tMediaLink *link;\n>  \t};\n>  \n> @@ -288,16 +303,18 @@ SimpleCameraData::SimpleCameraData(SimplePipelineHandler *pipe,\n>  \t * encoders and image converters, and will end in a CSI capture device.\n>  \t */\n>  \tstd::unordered_set<MediaEntity *> visited;\n> -\tstd::queue<MediaEntity *> queue;\n> +\tstd::queue<std::tuple<MediaEntity *, MediaPad *>> queue;\n>  \n>  \t/* Remember at each entity where we came from. */\n>  \tstd::unordered_map<MediaEntity *, Entity> parents;\n>  \tMediaEntity *entity = nullptr;\n>  \n> -\tqueue.push(sensor);\n> +\tqueue.push({ sensor, nullptr });\n>  \n>  \twhile (!queue.empty()) {\n> -\t\tentity = queue.front();\n> +\t\tMediaPad *sinkPad;\n> +\n> +\t\tstd::tie(entity, sinkPad) = queue.front();\n>  \t\tqueue.pop();\n>  \n>  \t\t/* Found the capture device. */\n> @@ -317,8 +334,8 @@ SimpleCameraData::SimpleCameraData(SimplePipelineHandler *pipe,\n>  \t\t\tfor (MediaLink *link : pad->links()) {\n>  \t\t\t\tMediaEntity *next = link->sink()->entity();\n>  \t\t\t\tif (visited.find(next) == visited.end()) {\n> -\t\t\t\t\tqueue.push(next);\n> -\t\t\t\t\tparents.insert({ next, { entity, link } });\n> +\t\t\t\t\tqueue.push({ next, link->sink() });\n> +\t\t\t\t\tparents.insert({ next, { entity, sinkPad, pad, link } });\n>  \t\t\t\t}\n>  \t\t\t}\n>  \t\t}\n> @@ -349,7 +366,16 @@ SimpleCameraData::SimpleCameraData(SimplePipelineHandler *pipe,\n>  \tLOG(SimplePipeline, Debug)\n>  \t\t<< \"Found pipeline: \"\n>  \t\t<< utils::join(entities_, \" -> \",\n> -\t\t\t       [](const Entity &e) { return e.entity->name(); });\n> +\t\t\t       [](const Entity &e) {\n> +\t\t\t\t       std::string s = \"[\";\n> +\t\t\t\t       if (e.sink)\n> +\t\t\t\t\t       s += std::to_string(e.sink->index()) + \"|\";\n> +\t\t\t\t       s += e.entity->name();\n> +\t\t\t\t       if (e.source)\n> +\t\t\t\t\t       s += \"|\" + std::to_string(e.source->index());\n> +\t\t\t\t       s += \"]\";\n> +\t\t\t\t       return s;\n> +\t\t\t       });\n\nAn example of the changes to string formatting would be nice in the\ncommit message, but not essential.\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n\n>  }\n>  \n>  int SimpleCameraData::init()\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 5D8E6BD87D\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 16 Aug 2021 14:41:26 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id CE5C068893;\n\tMon, 16 Aug 2021 16:41:25 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 170826025D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 16 Aug 2021 16:41:24 +0200 (CEST)","from [192.168.0.20]\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 7CD713E5;\n\tMon, 16 Aug 2021 16:41:23 +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=\"swoEHzN7\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1629124883;\n\tbh=qDrBiGRye86B8B+CNLbzqHcbuPVor8r1kUTWGTgeaYo=;\n\th=To:References:From:Subject:Date:In-Reply-To:From;\n\tb=swoEHzN7MqYFsUvC2Tlq500WrbwENVyEaCr+1StwuYYOM62ronIiXuFO+QRb0WDm1\n\trh6CskLsA0OMhDD4eijlT0trPACIw24YeAjUVfUu8vTIc9MrZ2Tk/+p4mr643BCOTt\n\tKyuFbBtZ+L+BVOXLsHPhJs1GjRFi93fraWX+Wg1U=","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20210805222436.6263-1-laurent.pinchart@ideasonboard.com>\n\t<20210805222436.6263-3-laurent.pinchart@ideasonboard.com>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<13d8f501-02f9-6a5e-282c-0fae13a00b66@ideasonboard.com>","Date":"Mon, 16 Aug 2021 15:41:21 +0100","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101\n\tThunderbird/78.11.0","MIME-Version":"1.0","In-Reply-To":"<20210805222436.6263-3-laurent.pinchart@ideasonboard.com>","Content-Type":"text/plain; charset=utf-8","Content-Language":"en-GB","Content-Transfer-Encoding":"8bit","Subject":"Re: [libcamera-devel] [PATCH 02/10] libcamera: pipeline: simple:\n\tAdd sink and source pads to entity data","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":18855,"web_url":"https://patchwork.libcamera.org/comment/18855/","msgid":"<YRr8nEJkX+ZdTXqO@pendragon.ideasonboard.com>","date":"2021-08-17T00:02:36","subject":"Re: [libcamera-devel] [PATCH 02/10] libcamera: pipeline: simple:\n\tAdd sink and source pads to entity data","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Kieran,\n\nOn Mon, Aug 16, 2021 at 03:41:21PM +0100, Kieran Bingham wrote:\n> On 05/08/2021 23:24, Laurent Pinchart wrote:\n> > Record the sink and source pads through which an entity is traversed in\n> > the list of entities stored in the camera data. This prepares for\n> > implementing mutually exclusive access to entities between cameras.\n> > \n> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > ---\n> >  src/libcamera/pipeline/simple/simple.cpp | 38 ++++++++++++++++++++----\n> >  1 file changed, 32 insertions(+), 6 deletions(-)\n> > \n> > diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\n> > index b29fff9820e5..e0695d052629 100644\n> > --- a/src/libcamera/pipeline/simple/simple.cpp\n> > +++ b/src/libcamera/pipeline/simple/simple.cpp\n> > @@ -166,7 +166,22 @@ public:\n> >  \t}\n> >  \n> >  \tstruct Entity {\n> > +\t\t/* The media entity, always valid. */\n> >  \t\tMediaEntity *entity;\n> > +\t\t/*\n> > +\t\t * The local sink pad connected to the upstream entity, null for\n> > +\t\t * the camera sensor at the beginning of the pipeline.\n> > +\t\t */\n> > +\t\tconst MediaPad *sink;\n> > +\t\t/*\n> > +\t\t * The local source pad connected to the downstream entity, null\n> > +\t\t * for the video node at the end of the pipeline.\n> > +\t\t */\n> > +\t\tconst MediaPad *source;\n> > +\t\t/*\n> > +\t\t * The link to the downstream entity, null for the video node at\n> > +\t\t * the end of the pipeline.\n> > +\t\t */\n> >  \t\tMediaLink *link;\n> >  \t};\n> >  \n> > @@ -288,16 +303,18 @@ SimpleCameraData::SimpleCameraData(SimplePipelineHandler *pipe,\n> >  \t * encoders and image converters, and will end in a CSI capture device.\n> >  \t */\n> >  \tstd::unordered_set<MediaEntity *> visited;\n> > -\tstd::queue<MediaEntity *> queue;\n> > +\tstd::queue<std::tuple<MediaEntity *, MediaPad *>> queue;\n> >  \n> >  \t/* Remember at each entity where we came from. */\n> >  \tstd::unordered_map<MediaEntity *, Entity> parents;\n> >  \tMediaEntity *entity = nullptr;\n> >  \n> > -\tqueue.push(sensor);\n> > +\tqueue.push({ sensor, nullptr });\n> >  \n> >  \twhile (!queue.empty()) {\n> > -\t\tentity = queue.front();\n> > +\t\tMediaPad *sinkPad;\n> > +\n> > +\t\tstd::tie(entity, sinkPad) = queue.front();\n> >  \t\tqueue.pop();\n> >  \n> >  \t\t/* Found the capture device. */\n> > @@ -317,8 +334,8 @@ SimpleCameraData::SimpleCameraData(SimplePipelineHandler *pipe,\n> >  \t\t\tfor (MediaLink *link : pad->links()) {\n> >  \t\t\t\tMediaEntity *next = link->sink()->entity();\n> >  \t\t\t\tif (visited.find(next) == visited.end()) {\n> > -\t\t\t\t\tqueue.push(next);\n> > -\t\t\t\t\tparents.insert({ next, { entity, link } });\n> > +\t\t\t\t\tqueue.push({ next, link->sink() });\n> > +\t\t\t\t\tparents.insert({ next, { entity, sinkPad, pad, link } });\n> >  \t\t\t\t}\n> >  \t\t\t}\n> >  \t\t}\n> > @@ -349,7 +366,16 @@ SimpleCameraData::SimpleCameraData(SimplePipelineHandler *pipe,\n> >  \tLOG(SimplePipeline, Debug)\n> >  \t\t<< \"Found pipeline: \"\n> >  \t\t<< utils::join(entities_, \" -> \",\n> > -\t\t\t       [](const Entity &e) { return e.entity->name(); });\n> > +\t\t\t       [](const Entity &e) {\n> > +\t\t\t\t       std::string s = \"[\";\n> > +\t\t\t\t       if (e.sink)\n> > +\t\t\t\t\t       s += std::to_string(e.sink->index()) + \"|\";\n> > +\t\t\t\t       s += e.entity->name();\n> > +\t\t\t\t       if (e.source)\n> > +\t\t\t\t\t       s += \"|\" + std::to_string(e.source->index());\n> > +\t\t\t\t       s += \"]\";\n> > +\t\t\t\t       return s;\n> > +\t\t\t       });\n> \n> An example of the changes to string formatting would be nice in the\n> commit message, but not essential.\n\nNote that this is just a debug message, not the main point of the patch\n:-) I'll add\n\nThe debug message that displays detected pipelines now prints pads to\ndescribe the pipeline more precisely:\n\n[0:00:35.901275750] [260] DEBUG SimplePipeline simple.cpp:404 Found pipeline: [imx290 2-001a|0] -> [0|csis-32e40000.csi|1] -> [0|mxc_isi.0|1] -> [0|mxc_isi.0.capture]\n\n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> \n> >  }\n> >  \n> >  int SimpleCameraData::init()","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 F38D5BD87C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 17 Aug 2021 00:02:45 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 41B2F68893;\n\tTue, 17 Aug 2021 02:02:45 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id EBCC868889\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 17 Aug 2021 02:02:42 +0200 (CEST)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 6973F3E5;\n\tTue, 17 Aug 2021 02:02:42 +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=\"TmgCIR61\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1629158562;\n\tbh=IzXuHThmUkwUnOU7FjtcJP5HITD+OC/UfjeJY8xoMmg=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=TmgCIR61t+4/4pUI8srlAFk3sCYXwc/AFJrOBWl12lWoAEbZzDedd9Qv9w1XYHD4y\n\t8B6K9YxH6OA9A9AzQzhV0jjNv1ajneyOQWGQcbI6/6qHqx9Mjw9kCFc6unt2y7t9ex\n\t6+zBHWKbsZFqKircxc43YgQgBEGSiyQ4ygJ+Vdlw=","Date":"Tue, 17 Aug 2021 03:02:36 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<YRr8nEJkX+ZdTXqO@pendragon.ideasonboard.com>","References":"<20210805222436.6263-1-laurent.pinchart@ideasonboard.com>\n\t<20210805222436.6263-3-laurent.pinchart@ideasonboard.com>\n\t<13d8f501-02f9-6a5e-282c-0fae13a00b66@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<13d8f501-02f9-6a5e-282c-0fae13a00b66@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH 02/10] libcamera: pipeline: simple:\n\tAdd sink and source pads to entity data","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":18863,"web_url":"https://patchwork.libcamera.org/comment/18863/","msgid":"<84024595-f263-b9af-adcb-3e8a1e6d7af9@ideasonboard.com>","date":"2021-08-17T08:01:21","subject":"Re: [libcamera-devel] [PATCH 02/10] libcamera: pipeline: simple:\n\tAdd sink and source pads to entity data","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"On 17/08/2021 01:02, Laurent Pinchart wrote:\n> Hi Kieran,\n> \n> On Mon, Aug 16, 2021 at 03:41:21PM +0100, Kieran Bingham wrote:\n>> On 05/08/2021 23:24, Laurent Pinchart wrote:\n>>> Record the sink and source pads through which an entity is traversed in\n>>> the list of entities stored in the camera data. This prepares for\n>>> implementing mutually exclusive access to entities between cameras.\n>>>\n>>> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>>> ---\n>>>  src/libcamera/pipeline/simple/simple.cpp | 38 ++++++++++++++++++++----\n>>>  1 file changed, 32 insertions(+), 6 deletions(-)\n>>>\n>>> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\n>>> index b29fff9820e5..e0695d052629 100644\n>>> --- a/src/libcamera/pipeline/simple/simple.cpp\n>>> +++ b/src/libcamera/pipeline/simple/simple.cpp\n>>> @@ -166,7 +166,22 @@ public:\n>>>  \t}\n>>>  \n>>>  \tstruct Entity {\n>>> +\t\t/* The media entity, always valid. */\n>>>  \t\tMediaEntity *entity;\n>>> +\t\t/*\n>>> +\t\t * The local sink pad connected to the upstream entity, null for\n>>> +\t\t * the camera sensor at the beginning of the pipeline.\n>>> +\t\t */\n>>> +\t\tconst MediaPad *sink;\n>>> +\t\t/*\n>>> +\t\t * The local source pad connected to the downstream entity, null\n>>> +\t\t * for the video node at the end of the pipeline.\n>>> +\t\t */\n>>> +\t\tconst MediaPad *source;\n>>> +\t\t/*\n>>> +\t\t * The link to the downstream entity, null for the video node at\n>>> +\t\t * the end of the pipeline.\n>>> +\t\t */\n>>>  \t\tMediaLink *link;\n>>>  \t};\n>>>  \n>>> @@ -288,16 +303,18 @@ SimpleCameraData::SimpleCameraData(SimplePipelineHandler *pipe,\n>>>  \t * encoders and image converters, and will end in a CSI capture device.\n>>>  \t */\n>>>  \tstd::unordered_set<MediaEntity *> visited;\n>>> -\tstd::queue<MediaEntity *> queue;\n>>> +\tstd::queue<std::tuple<MediaEntity *, MediaPad *>> queue;\n>>>  \n>>>  \t/* Remember at each entity where we came from. */\n>>>  \tstd::unordered_map<MediaEntity *, Entity> parents;\n>>>  \tMediaEntity *entity = nullptr;\n>>>  \n>>> -\tqueue.push(sensor);\n>>> +\tqueue.push({ sensor, nullptr });\n>>>  \n>>>  \twhile (!queue.empty()) {\n>>> -\t\tentity = queue.front();\n>>> +\t\tMediaPad *sinkPad;\n>>> +\n>>> +\t\tstd::tie(entity, sinkPad) = queue.front();\n>>>  \t\tqueue.pop();\n>>>  \n>>>  \t\t/* Found the capture device. */\n>>> @@ -317,8 +334,8 @@ SimpleCameraData::SimpleCameraData(SimplePipelineHandler *pipe,\n>>>  \t\t\tfor (MediaLink *link : pad->links()) {\n>>>  \t\t\t\tMediaEntity *next = link->sink()->entity();\n>>>  \t\t\t\tif (visited.find(next) == visited.end()) {\n>>> -\t\t\t\t\tqueue.push(next);\n>>> -\t\t\t\t\tparents.insert({ next, { entity, link } });\n>>> +\t\t\t\t\tqueue.push({ next, link->sink() });\n>>> +\t\t\t\t\tparents.insert({ next, { entity, sinkPad, pad, link } });\n>>>  \t\t\t\t}\n>>>  \t\t\t}\n>>>  \t\t}\n>>> @@ -349,7 +366,16 @@ SimpleCameraData::SimpleCameraData(SimplePipelineHandler *pipe,\n>>>  \tLOG(SimplePipeline, Debug)\n>>>  \t\t<< \"Found pipeline: \"\n>>>  \t\t<< utils::join(entities_, \" -> \",\n>>> -\t\t\t       [](const Entity &e) { return e.entity->name(); });\n>>> +\t\t\t       [](const Entity &e) {\n>>> +\t\t\t\t       std::string s = \"[\";\n>>> +\t\t\t\t       if (e.sink)\n>>> +\t\t\t\t\t       s += std::to_string(e.sink->index()) + \"|\";\n>>> +\t\t\t\t       s += e.entity->name();\n>>> +\t\t\t\t       if (e.source)\n>>> +\t\t\t\t\t       s += \"|\" + std::to_string(e.source->index());\n>>> +\t\t\t\t       s += \"]\";\n>>> +\t\t\t\t       return s;\n>>> +\t\t\t       });\n>>\n>> An example of the changes to string formatting would be nice in the\n>> commit message, but not essential.\n> \n> Note that this is just a debug message, not the main point of the patch\n> :-) I'll add\n\nOf course, that's why I said not essential\n\n> \n> The debug message that displays detected pipelines now prints pads to\n> describe the pipeline more precisely:\n> \n> [0:00:35.901275750] [260] DEBUG SimplePipeline simple.cpp:404 Found pipeline: [imx290 2-001a|0] -> [0|csis-32e40000.csi|1] -> [0|mxc_isi.0|1] -> [0|mxc_isi.0.capture]\n> \n\nThanks, I just think it's a good idea to show what the expected change\nis when something changes something that is user (or developer, in this\ninstance) visible, to show the intention of the update.\n\n\n>> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>>\n>>>  }\n>>>  \n>>>  int SimpleCameraData::init()\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 1295ABD87C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 17 Aug 2021 08:01:28 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 61F94688A2;\n\tTue, 17 Aug 2021 10:01:27 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 4AA6768886\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 17 Aug 2021 10:01:25 +0200 (CEST)","from [192.168.0.20]\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id C3A222C5;\n\tTue, 17 Aug 2021 10:01:24 +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=\"Y5YzGxfM\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1629187284;\n\tbh=6tZ63Xj7DOt19dOkcC4saSz+hjZmUXXGi7OXtXEYoqY=;\n\th=From:Subject:To:Cc:References:Date:In-Reply-To:From;\n\tb=Y5YzGxfMtE/fjR3gtCa2PnDpoTi1F88QiKLaBpNrIWWPHE18KRtZClZNk1W8GROWB\n\tW1HXbnoaOLG1Ph6rVdQvMLqS5AzgFs22+f59x7mb755T/Ok8R3OF7UXlLGVuX1xEo6\n\t2ECYXF846PMeKPGFVN2r2qCAB9u1UKWaUp4uKKWo=","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","References":"<20210805222436.6263-1-laurent.pinchart@ideasonboard.com>\n\t<20210805222436.6263-3-laurent.pinchart@ideasonboard.com>\n\t<13d8f501-02f9-6a5e-282c-0fae13a00b66@ideasonboard.com>\n\t<YRr8nEJkX+ZdTXqO@pendragon.ideasonboard.com>","Message-ID":"<84024595-f263-b9af-adcb-3e8a1e6d7af9@ideasonboard.com>","Date":"Tue, 17 Aug 2021 09:01:21 +0100","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101\n\tThunderbird/78.11.0","MIME-Version":"1.0","In-Reply-To":"<YRr8nEJkX+ZdTXqO@pendragon.ideasonboard.com>","Content-Type":"text/plain; charset=utf-8","Content-Language":"en-GB","Content-Transfer-Encoding":"7bit","Subject":"Re: [libcamera-devel] [PATCH 02/10] libcamera: pipeline: simple:\n\tAdd sink and source pads to entity data","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]