[{"id":31115,"web_url":"https://patchwork.libcamera.org/comment/31115/","msgid":"<6201e10c-2990-4d38-9f84-1024704d0051@ideasonboard.com>","date":"2024-09-09T08:10:39","subject":"Re: [PATCH v6 07/18] libcamera: software_isp: Track and pass frame\n\tids","submitter":{"id":156,"url":"https://patchwork.libcamera.org/api/people/156/","name":"Dan Scally","email":"dan.scally@ideasonboard.com"},"content":"Hi Milan - thanks for the patch\n\nOn 06/09/2024 13:09, Milan Zamazal wrote:\n> A previous preparation patch implemented passing frame ids to stats\n> processing but without actual meaningful frame id value passed there.\n> This patch extends that by actually providing the frame id and passing\n> it through to the stats processor.\n>\n> The frame id is taken from the request sequence number, the same as in\n> hardware pipelines.\n>\n> Signed-off-by: Milan Zamazal <mzamazal@redhat.com>\n> ---\n>   .../libcamera/internal/software_isp/software_isp.h    |  4 ++--\n>   src/libcamera/pipeline/simple/simple.cpp              |  8 +++++++-\n>   src/libcamera/software_isp/debayer.cpp                |  3 ++-\n>   src/libcamera/software_isp/debayer.h                  |  2 +-\n>   src/libcamera/software_isp/debayer_cpu.cpp            |  9 ++++-----\n>   src/libcamera/software_isp/debayer_cpu.h              |  2 +-\n>   src/libcamera/software_isp/software_isp.cpp           | 11 +++++++----\n>   7 files changed, 24 insertions(+), 15 deletions(-)\n>\n> diff --git a/include/libcamera/internal/software_isp/software_isp.h b/include/libcamera/internal/software_isp/software_isp.h\n> index 3602bce8..3a84418e 100644\n> --- a/include/libcamera/internal/software_isp/software_isp.h\n> +++ b/include/libcamera/internal/software_isp/software_isp.h\n> @@ -73,10 +73,10 @@ public:\n>   \tint start();\n>   \tvoid stop();\n>   \n> -\tint queueBuffers(FrameBuffer *input,\n> +\tint queueBuffers(uint32_t frame, FrameBuffer *input,\n>   \t\t\t const std::map<const Stream *, FrameBuffer *> &outputs);\n>   \n> -\tvoid process(FrameBuffer *input, FrameBuffer *output);\n> +\tvoid process(uint32_t frame, FrameBuffer *input, FrameBuffer *output);\n>   \n>   \tSignal<FrameBuffer *> inputBufferReady;\n>   \tSignal<FrameBuffer *> outputBufferReady;\n> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\n> index 48a568da..ebec592a 100644\n> --- a/src/libcamera/pipeline/simple/simple.cpp\n> +++ b/src/libcamera/pipeline/simple/simple.cpp\n> @@ -865,7 +865,13 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)\n>   \t\tif (converter_)\n>   \t\t\tconverter_->queueBuffers(buffer, conversionQueue_.front());\n>   \t\telse\n> -\t\t\tswIsp_->queueBuffers(buffer, conversionQueue_.front());\n> +\t\t\t/*\n> +\t\t\t * request->sequence() cannot be retrieved from `buffer' inside\n> +\t\t\t * queueBuffers because unique_ptr's make buffer->request() invalid\n> +\t\t\t * already here.\n> +\t\t\t */\n> +\t\t\tswIsp_->queueBuffers(request->sequence(), buffer,\n> +\t\t\t\t\t     conversionQueue_.front());\n>   \n>   \t\tconversionQueue_.pop();\n>   \t\treturn;\n> diff --git a/src/libcamera/software_isp/debayer.cpp b/src/libcamera/software_isp/debayer.cpp\n> index db26c380..f0b83261 100644\n> --- a/src/libcamera/software_isp/debayer.cpp\n> +++ b/src/libcamera/software_isp/debayer.cpp\n> @@ -94,8 +94,9 @@ Debayer::~Debayer()\n>    */\n>   \n>   /**\n> - * \\fn void Debayer::process(FrameBuffer *input, FrameBuffer *output, DebayerParams params)\n> + * \\fn void Debayer::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, DebayerParams params)\n>    * \\brief Process the bayer data into the requested format\n> + * \\param[in] frame The frame number\n>    * \\param[in] input The input buffer\n>    * \\param[in] output The output buffer\n>    * \\param[in] params The parameters to be used in debayering\n> diff --git a/src/libcamera/software_isp/debayer.h b/src/libcamera/software_isp/debayer.h\n> index c151fe5d..d7ca060d 100644\n> --- a/src/libcamera/software_isp/debayer.h\n> +++ b/src/libcamera/software_isp/debayer.h\n> @@ -40,7 +40,7 @@ public:\n>   \tvirtual std::tuple<unsigned int, unsigned int>\n>   \tstrideAndFrameSize(const PixelFormat &outputFormat, const Size &size) = 0;\n>   \n> -\tvirtual void process(FrameBuffer *input, FrameBuffer *output, DebayerParams params) = 0;\n> +\tvirtual void process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, DebayerParams params) = 0;\n>   \n>   \tvirtual SizeRange sizes(PixelFormat inputFormat, const Size &inputSize) = 0;\n>   \n> diff --git a/src/libcamera/software_isp/debayer_cpu.cpp b/src/libcamera/software_isp/debayer_cpu.cpp\n> index 2a2e7edb..f7b3a7d1 100644\n> --- a/src/libcamera/software_isp/debayer_cpu.cpp\n> +++ b/src/libcamera/software_isp/debayer_cpu.cpp\n> @@ -724,7 +724,7 @@ static inline int64_t timeDiff(timespec &after, timespec &before)\n>   \t       (int64_t)after.tv_nsec - (int64_t)before.tv_nsec;\n>   }\n>   \n> -void DebayerCpu::process(FrameBuffer *input, FrameBuffer *output, DebayerParams params)\n> +void DebayerCpu::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, DebayerParams params)\n>   {\n>   \ttimespec frameStartTime;\n>   \n> @@ -778,12 +778,11 @@ void DebayerCpu::process(FrameBuffer *input, FrameBuffer *output, DebayerParams\n>   \t}\n>   \n>   \t/*\n> -\t * Frame and buffer ids are currently not used, so pass zeros as parameters.\n> +\t * Buffer ids are currently not used, so pass zeros as its parameter.\n>   \t *\n> -\t * \\todo Pass real values once frame is passed here and stats buffer passing\n> -\t * is changed.\n> +\t * \\todo Pass real bufferId once stats buffer passing is changed.\n>   \t */\n> -\tstats_->finishFrame(0, 0);\n> +\tstats_->finishFrame(frame, 0);\n>   \toutputBufferReady.emit(output);\n>   \tinputBufferReady.emit(input);\n>   }\n> diff --git a/src/libcamera/software_isp/debayer_cpu.h b/src/libcamera/software_isp/debayer_cpu.h\n> index 8237a64b..2c47e7c6 100644\n> --- a/src/libcamera/software_isp/debayer_cpu.h\n> +++ b/src/libcamera/software_isp/debayer_cpu.h\n> @@ -36,7 +36,7 @@ public:\n>   \tstd::vector<PixelFormat> formats(PixelFormat input);\n>   \tstd::tuple<unsigned int, unsigned int>\n>   \tstrideAndFrameSize(const PixelFormat &outputFormat, const Size &size);\n> -\tvoid process(FrameBuffer *input, FrameBuffer *output, DebayerParams params);\n> +\tvoid process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, DebayerParams params);\n>   \tSizeRange sizes(PixelFormat inputFormat, const Size &inputSize);\n>   \n>   \t/**\n> diff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp\n> index a3855568..c5db45ae 100644\n> --- a/src/libcamera/software_isp/software_isp.cpp\n> +++ b/src/libcamera/software_isp/software_isp.cpp\n> @@ -14,6 +14,7 @@\n>   #include <unistd.h>\n>   \n>   #include <libcamera/formats.h>\n> +#include <libcamera/request.h>\n\n\nIs this needed? I can't see that it is, at least in this patch? Otherwise;\n\n\nReviewed-by: Daniel Scally <dan.scally@ideasonboard.com>\n\n>   #include <libcamera/stream.h>\n>   \n>   #include \"libcamera/internal/ipa_manager.h\"\n> @@ -278,12 +279,13 @@ int SoftwareIsp::exportBuffers(const Stream *stream, unsigned int count,\n>   \n>   /**\n>    * \\brief Queue buffers to Software ISP\n> + * \\param[in] frame The frame number\n>    * \\param[in] input The input framebuffer\n>    * \\param[in] outputs The container holding the output stream pointers and\n>    * their respective frame buffer outputs\n>    * \\return 0 on success, a negative errno on failure\n>    */\n> -int SoftwareIsp::queueBuffers(FrameBuffer *input,\n> +int SoftwareIsp::queueBuffers(uint32_t frame, FrameBuffer *input,\n>   \t\t\t      const std::map<const Stream *, FrameBuffer *> &outputs)\n>   {\n>   \t/*\n> @@ -301,7 +303,7 @@ int SoftwareIsp::queueBuffers(FrameBuffer *input,\n>   \t}\n>   \n>   \tfor (auto iter = outputs.begin(); iter != outputs.end(); iter++)\n> -\t\tprocess(input, iter->second);\n> +\t\tprocess(frame, input, iter->second);\n>   \n>   \treturn 0;\n>   }\n> @@ -333,13 +335,14 @@ void SoftwareIsp::stop()\n>   \n>   /**\n>    * \\brief Passes the input framebuffer to the ISP worker to process\n> + * \\param[in] frame The frame number\n>    * \\param[in] input The input framebuffer\n>    * \\param[out] output The framebuffer to write the processed frame to\n>    */\n> -void SoftwareIsp::process(FrameBuffer *input, FrameBuffer *output)\n> +void SoftwareIsp::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output)\n>   {\n>   \tdebayer_->invokeMethod(&DebayerCpu::process,\n> -\t\t\t       ConnectionTypeQueued, input, output, debayerParams_);\n> +\t\t\t       ConnectionTypeQueued, frame, input, output, debayerParams_);\n>   }\n>   \n>   void SoftwareIsp::saveIspParams()","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 7C33FBF415\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  9 Sep 2024 08:10:44 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 8B400634EB;\n\tMon,  9 Sep 2024 10:10:43 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1209A634E4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  9 Sep 2024 10:10:42 +0200 (CEST)","from [192.168.0.53] (213-229-8-243.static.upcbusiness.at\n\t[213.229.8.243])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id C7BA63EA;\n\tMon,  9 Sep 2024 10:09:25 +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=\"YdNEvsBK\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1725869365;\n\tbh=+TxHmJa5A3QRO0VJGqiOmMw6bq8XYPSHKB6/tP0Ells=;\n\th=Date:Subject:To:Cc:References:From:In-Reply-To:From;\n\tb=YdNEvsBKbPIRjNEUxa+5JBvHMtY/1JphSyP1if4PIAdpBHzleuMSpu3ouE0U0hawG\n\te1n8loYRsKM9soMDR7jbeAfzfSDEbNCPc0Hqxod5Yx2gHH54+tKzOHyTpY+ZAm+Vjr\n\t0hkF3FKgYnsC8gYJ7o4jy+j21uDyOGHebfH1ATlc=","Message-ID":"<6201e10c-2990-4d38-9f84-1024704d0051@ideasonboard.com>","Date":"Mon, 9 Sep 2024 09:10:39 +0100","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v6 07/18] libcamera: software_isp: Track and pass frame\n\tids","To":"Milan Zamazal <mzamazal@redhat.com>, libcamera-devel@lists.libcamera.org","Cc":"Umang Jain <umang.jain@ideasonboard.com>,\n\tLaurent Pinchart <laurent.pinchart@ideasonboard.com>","References":"<20240906120927.4071508-1-mzamazal@redhat.com>\n\t<20240906120927.4071508-8-mzamazal@redhat.com>","Content-Language":"en-US","From":"Dan Scally <dan.scally@ideasonboard.com>","Autocrypt":"addr=dan.scally@ideasonboard.com; keydata=\n\t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","In-Reply-To":"<20240906120927.4071508-8-mzamazal@redhat.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","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":31133,"web_url":"https://patchwork.libcamera.org/comment/31133/","msgid":"<172589675986.2319503.16774798902729363667@ping.linuxembedded.co.uk>","date":"2024-09-09T15:45:59","subject":"Re: [PATCH v6 07/18] libcamera: software_isp: Track and pass frame\n\tids","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Dan Scally (2024-09-09 09:10:39)\n> Hi Milan - thanks for the patch\n> \n> On 06/09/2024 13:09, Milan Zamazal wrote:\n> > A previous preparation patch implemented passing frame ids to stats\n> > processing but without actual meaningful frame id value passed there.\n> > This patch extends that by actually providing the frame id and passing\n> > it through to the stats processor.\n> >\n> > The frame id is taken from the request sequence number, the same as in\n> > hardware pipelines.\n\nI think we'll change/fix this in the future to make everything more\nconsistent for the different 'clock' domains in regards to PFC - but I\nthink it's fine for now.\n\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n> >\n> > Signed-off-by: Milan Zamazal <mzamazal@redhat.com>\n> > ---\n> >   .../libcamera/internal/software_isp/software_isp.h    |  4 ++--\n> >   src/libcamera/pipeline/simple/simple.cpp              |  8 +++++++-\n> >   src/libcamera/software_isp/debayer.cpp                |  3 ++-\n> >   src/libcamera/software_isp/debayer.h                  |  2 +-\n> >   src/libcamera/software_isp/debayer_cpu.cpp            |  9 ++++-----\n> >   src/libcamera/software_isp/debayer_cpu.h              |  2 +-\n> >   src/libcamera/software_isp/software_isp.cpp           | 11 +++++++----\n> >   7 files changed, 24 insertions(+), 15 deletions(-)\n> >\n> > diff --git a/include/libcamera/internal/software_isp/software_isp.h b/include/libcamera/internal/software_isp/software_isp.h\n> > index 3602bce8..3a84418e 100644\n> > --- a/include/libcamera/internal/software_isp/software_isp.h\n> > +++ b/include/libcamera/internal/software_isp/software_isp.h\n> > @@ -73,10 +73,10 @@ public:\n> >       int start();\n> >       void stop();\n> >   \n> > -     int queueBuffers(FrameBuffer *input,\n> > +     int queueBuffers(uint32_t frame, FrameBuffer *input,\n> >                        const std::map<const Stream *, FrameBuffer *> &outputs);\n> >   \n> > -     void process(FrameBuffer *input, FrameBuffer *output);\n> > +     void process(uint32_t frame, FrameBuffer *input, FrameBuffer *output);\n> >   \n> >       Signal<FrameBuffer *> inputBufferReady;\n> >       Signal<FrameBuffer *> outputBufferReady;\n> > diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\n> > index 48a568da..ebec592a 100644\n> > --- a/src/libcamera/pipeline/simple/simple.cpp\n> > +++ b/src/libcamera/pipeline/simple/simple.cpp\n> > @@ -865,7 +865,13 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)\n> >               if (converter_)\n> >                       converter_->queueBuffers(buffer, conversionQueue_.front());\n> >               else\n> > -                     swIsp_->queueBuffers(buffer, conversionQueue_.front());\n> > +                     /*\n> > +                      * request->sequence() cannot be retrieved from `buffer' inside\n> > +                      * queueBuffers because unique_ptr's make buffer->request() invalid\n> > +                      * already here.\n> > +                      */\n> > +                     swIsp_->queueBuffers(request->sequence(), buffer,\n> > +                                          conversionQueue_.front());\n> >   \n> >               conversionQueue_.pop();\n> >               return;\n> > diff --git a/src/libcamera/software_isp/debayer.cpp b/src/libcamera/software_isp/debayer.cpp\n> > index db26c380..f0b83261 100644\n> > --- a/src/libcamera/software_isp/debayer.cpp\n> > +++ b/src/libcamera/software_isp/debayer.cpp\n> > @@ -94,8 +94,9 @@ Debayer::~Debayer()\n> >    */\n> >   \n> >   /**\n> > - * \\fn void Debayer::process(FrameBuffer *input, FrameBuffer *output, DebayerParams params)\n> > + * \\fn void Debayer::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, DebayerParams params)\n> >    * \\brief Process the bayer data into the requested format\n> > + * \\param[in] frame The frame number\n> >    * \\param[in] input The input buffer\n> >    * \\param[in] output The output buffer\n> >    * \\param[in] params The parameters to be used in debayering\n> > diff --git a/src/libcamera/software_isp/debayer.h b/src/libcamera/software_isp/debayer.h\n> > index c151fe5d..d7ca060d 100644\n> > --- a/src/libcamera/software_isp/debayer.h\n> > +++ b/src/libcamera/software_isp/debayer.h\n> > @@ -40,7 +40,7 @@ public:\n> >       virtual std::tuple<unsigned int, unsigned int>\n> >       strideAndFrameSize(const PixelFormat &outputFormat, const Size &size) = 0;\n> >   \n> > -     virtual void process(FrameBuffer *input, FrameBuffer *output, DebayerParams params) = 0;\n> > +     virtual void process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, DebayerParams params) = 0;\n> >   \n> >       virtual SizeRange sizes(PixelFormat inputFormat, const Size &inputSize) = 0;\n> >   \n> > diff --git a/src/libcamera/software_isp/debayer_cpu.cpp b/src/libcamera/software_isp/debayer_cpu.cpp\n> > index 2a2e7edb..f7b3a7d1 100644\n> > --- a/src/libcamera/software_isp/debayer_cpu.cpp\n> > +++ b/src/libcamera/software_isp/debayer_cpu.cpp\n> > @@ -724,7 +724,7 @@ static inline int64_t timeDiff(timespec &after, timespec &before)\n> >              (int64_t)after.tv_nsec - (int64_t)before.tv_nsec;\n> >   }\n> >   \n> > -void DebayerCpu::process(FrameBuffer *input, FrameBuffer *output, DebayerParams params)\n> > +void DebayerCpu::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, DebayerParams params)\n> >   {\n> >       timespec frameStartTime;\n> >   \n> > @@ -778,12 +778,11 @@ void DebayerCpu::process(FrameBuffer *input, FrameBuffer *output, DebayerParams\n> >       }\n> >   \n> >       /*\n> > -      * Frame and buffer ids are currently not used, so pass zeros as parameters.\n> > +      * Buffer ids are currently not used, so pass zeros as its parameter.\n> >        *\n> > -      * \\todo Pass real values once frame is passed here and stats buffer passing\n> > -      * is changed.\n> > +      * \\todo Pass real bufferId once stats buffer passing is changed.\n> >        */\n> > -     stats_->finishFrame(0, 0);\n> > +     stats_->finishFrame(frame, 0);\n> >       outputBufferReady.emit(output);\n> >       inputBufferReady.emit(input);\n> >   }\n> > diff --git a/src/libcamera/software_isp/debayer_cpu.h b/src/libcamera/software_isp/debayer_cpu.h\n> > index 8237a64b..2c47e7c6 100644\n> > --- a/src/libcamera/software_isp/debayer_cpu.h\n> > +++ b/src/libcamera/software_isp/debayer_cpu.h\n> > @@ -36,7 +36,7 @@ public:\n> >       std::vector<PixelFormat> formats(PixelFormat input);\n> >       std::tuple<unsigned int, unsigned int>\n> >       strideAndFrameSize(const PixelFormat &outputFormat, const Size &size);\n> > -     void process(FrameBuffer *input, FrameBuffer *output, DebayerParams params);\n> > +     void process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, DebayerParams params);\n> >       SizeRange sizes(PixelFormat inputFormat, const Size &inputSize);\n> >   \n> >       /**\n> > diff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp\n> > index a3855568..c5db45ae 100644\n> > --- a/src/libcamera/software_isp/software_isp.cpp\n> > +++ b/src/libcamera/software_isp/software_isp.cpp\n> > @@ -14,6 +14,7 @@\n> >   #include <unistd.h>\n> >   \n> >   #include <libcamera/formats.h>\n> > +#include <libcamera/request.h>\n> \n> \n> Is this needed? I can't see that it is, at least in this patch? Otherwise;\n> \n> \n> Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>\n> \n> >   #include <libcamera/stream.h>\n> >   \n> >   #include \"libcamera/internal/ipa_manager.h\"\n> > @@ -278,12 +279,13 @@ int SoftwareIsp::exportBuffers(const Stream *stream, unsigned int count,\n> >   \n> >   /**\n> >    * \\brief Queue buffers to Software ISP\n> > + * \\param[in] frame The frame number\n> >    * \\param[in] input The input framebuffer\n> >    * \\param[in] outputs The container holding the output stream pointers and\n> >    * their respective frame buffer outputs\n> >    * \\return 0 on success, a negative errno on failure\n> >    */\n> > -int SoftwareIsp::queueBuffers(FrameBuffer *input,\n> > +int SoftwareIsp::queueBuffers(uint32_t frame, FrameBuffer *input,\n> >                             const std::map<const Stream *, FrameBuffer *> &outputs)\n> >   {\n> >       /*\n> > @@ -301,7 +303,7 @@ int SoftwareIsp::queueBuffers(FrameBuffer *input,\n> >       }\n> >   \n> >       for (auto iter = outputs.begin(); iter != outputs.end(); iter++)\n> > -             process(input, iter->second);\n> > +             process(frame, input, iter->second);\n> >   \n> >       return 0;\n> >   }\n> > @@ -333,13 +335,14 @@ void SoftwareIsp::stop()\n> >   \n> >   /**\n> >    * \\brief Passes the input framebuffer to the ISP worker to process\n> > + * \\param[in] frame The frame number\n> >    * \\param[in] input The input framebuffer\n> >    * \\param[out] output The framebuffer to write the processed frame to\n> >    */\n> > -void SoftwareIsp::process(FrameBuffer *input, FrameBuffer *output)\n> > +void SoftwareIsp::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output)\n> >   {\n> >       debayer_->invokeMethod(&DebayerCpu::process,\n> > -                            ConnectionTypeQueued, input, output, debayerParams_);\n> > +                            ConnectionTypeQueued, frame, input, output, debayerParams_);\n> >   }\n> >   \n> >   void SoftwareIsp::saveIspParams()","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 AE034BF415\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  9 Sep 2024 15:46:05 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 5D981634F7;\n\tMon,  9 Sep 2024 17:46:04 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0575C634EB\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  9 Sep 2024 17:46:03 +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 8FE8A827;\n\tMon,  9 Sep 2024 17:44:46 +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=\"tozTmxh+\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1725896686;\n\tbh=+NMVS/FfX6Aj5OewbxWME2BjpOUYlhmLwqQsWK+HYCs=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=tozTmxh+Cs18z8o/u7SyrodoPCAFLHqrKYk7kXifwEkXp1mAccSqlFvdJniFuWTNr\n\tZ7dckEGawLyvd7XgD9zdqwtJE+cjcVqW+jY8DmThdAidOg8rXIjUjEY+cTAjZ503rV\n\tJ2QevjtOJKwUJzOhAojW0/nnXVPlwq0XnpBH5MJw=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<6201e10c-2990-4d38-9f84-1024704d0051@ideasonboard.com>","References":"<20240906120927.4071508-1-mzamazal@redhat.com>\n\t<20240906120927.4071508-8-mzamazal@redhat.com>\n\t<6201e10c-2990-4d38-9f84-1024704d0051@ideasonboard.com>","Subject":"Re: [PATCH v6 07/18] libcamera: software_isp: Track and pass frame\n\tids","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"Umang Jain <umang.jain@ideasonboard.com>,\n\tLaurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Dan Scally <dan.scally@ideasonboard.com>,\n\tMilan Zamazal <mzamazal@redhat.com>, libcamera-devel@lists.libcamera.org","Date":"Mon, 09 Sep 2024 16:45:59 +0100","Message-ID":"<172589675986.2319503.16774798902729363667@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":31275,"web_url":"https://patchwork.libcamera.org/comment/31275/","msgid":"<878qvnmvji.fsf@redhat.com>","date":"2024-09-19T16:56:49","subject":"Re: [PATCH v6 07/18] libcamera: software_isp: Track and pass frame\n\tids","submitter":{"id":177,"url":"https://patchwork.libcamera.org/api/people/177/","name":"Milan Zamazal","email":"mzamazal@redhat.com"},"content":"Hi Dan,\n\nthank you for review.\n\nDan Scally <dan.scally@ideasonboard.com> writes:\n\n> Hi Milan - thanks for the patch\n>\n> On 06/09/2024 13:09, Milan Zamazal wrote:\n>> A previous preparation patch implemented passing frame ids to stats\n>> processing but without actual meaningful frame id value passed there.\n>> This patch extends that by actually providing the frame id and passing\n>> it through to the stats processor.\n>>\n>> The frame id is taken from the request sequence number, the same as in\n>> hardware pipelines.\n>>\n>> Signed-off-by: Milan Zamazal <mzamazal@redhat.com>\n>> ---\n>>   .../libcamera/internal/software_isp/software_isp.h    |  4 ++--\n>>   src/libcamera/pipeline/simple/simple.cpp              |  8 +++++++-\n>>   src/libcamera/software_isp/debayer.cpp                |  3 ++-\n>>   src/libcamera/software_isp/debayer.h                  |  2 +-\n>>   src/libcamera/software_isp/debayer_cpu.cpp            |  9 ++++-----\n>>   src/libcamera/software_isp/debayer_cpu.h              |  2 +-\n>>   src/libcamera/software_isp/software_isp.cpp           | 11 +++++++----\n>>   7 files changed, 24 insertions(+), 15 deletions(-)\n>>\n>> diff --git a/include/libcamera/internal/software_isp/software_isp.h b/include/libcamera/internal/software_isp/software_isp.h\n>> index 3602bce8..3a84418e 100644\n>> --- a/include/libcamera/internal/software_isp/software_isp.h\n>> +++ b/include/libcamera/internal/software_isp/software_isp.h\n>> @@ -73,10 +73,10 @@ public:\n>>   \tint start();\n>>   \tvoid stop();\n>>   -\tint queueBuffers(FrameBuffer *input,\n>> +\tint queueBuffers(uint32_t frame, FrameBuffer *input,\n>>   \t\t\t const std::map<const Stream *, FrameBuffer *> &outputs);\n>>   -\tvoid process(FrameBuffer *input, FrameBuffer *output);\n>> +\tvoid process(uint32_t frame, FrameBuffer *input, FrameBuffer *output);\n>>     \tSignal<FrameBuffer *> inputBufferReady;\n>>   \tSignal<FrameBuffer *> outputBufferReady;\n>> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\n>> index 48a568da..ebec592a 100644\n>> --- a/src/libcamera/pipeline/simple/simple.cpp\n>> +++ b/src/libcamera/pipeline/simple/simple.cpp\n>> @@ -865,7 +865,13 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)\n>>   \t\tif (converter_)\n>>   \t\t\tconverter_->queueBuffers(buffer, conversionQueue_.front());\n>>   \t\telse\n>> -\t\t\tswIsp_->queueBuffers(buffer, conversionQueue_.front());\n>> +\t\t\t/*\n>> +\t\t\t * request->sequence() cannot be retrieved from `buffer' inside\n>> +\t\t\t * queueBuffers because unique_ptr's make buffer->request() invalid\n>> +\t\t\t * already here.\n>> +\t\t\t */\n>> +\t\t\tswIsp_->queueBuffers(request->sequence(), buffer,\n>> +\t\t\t\t\t     conversionQueue_.front());\n>>     \t\tconversionQueue_.pop();\n>>   \t\treturn;\n>> diff --git a/src/libcamera/software_isp/debayer.cpp b/src/libcamera/software_isp/debayer.cpp\n>> index db26c380..f0b83261 100644\n>> --- a/src/libcamera/software_isp/debayer.cpp\n>> +++ b/src/libcamera/software_isp/debayer.cpp\n>> @@ -94,8 +94,9 @@ Debayer::~Debayer()\n>>    */\n>>     /**\n>> - * \\fn void Debayer::process(FrameBuffer *input, FrameBuffer *output, DebayerParams params)\n>> + * \\fn void Debayer::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, DebayerParams params)\n>>    * \\brief Process the bayer data into the requested format\n>> + * \\param[in] frame The frame number\n>>    * \\param[in] input The input buffer\n>>    * \\param[in] output The output buffer\n>>    * \\param[in] params The parameters to be used in debayering\n>> diff --git a/src/libcamera/software_isp/debayer.h b/src/libcamera/software_isp/debayer.h\n>> index c151fe5d..d7ca060d 100644\n>> --- a/src/libcamera/software_isp/debayer.h\n>> +++ b/src/libcamera/software_isp/debayer.h\n>> @@ -40,7 +40,7 @@ public:\n>>   \tvirtual std::tuple<unsigned int, unsigned int>\n>>   \tstrideAndFrameSize(const PixelFormat &outputFormat, const Size &size) = 0;\n>>   -\tvirtual void process(FrameBuffer *input, FrameBuffer *output, DebayerParams params) = 0;\n>> +\tvirtual void process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, DebayerParams params) = 0;\n>>     \tvirtual SizeRange sizes(PixelFormat inputFormat, const Size &inputSize) = 0;\n>>   diff --git a/src/libcamera/software_isp/debayer_cpu.cpp b/src/libcamera/software_isp/debayer_cpu.cpp\n>> index 2a2e7edb..f7b3a7d1 100644\n>> --- a/src/libcamera/software_isp/debayer_cpu.cpp\n>> +++ b/src/libcamera/software_isp/debayer_cpu.cpp\n>> @@ -724,7 +724,7 @@ static inline int64_t timeDiff(timespec &after, timespec &before)\n>>   \t       (int64_t)after.tv_nsec - (int64_t)before.tv_nsec;\n>>   }\n>>   -void DebayerCpu::process(FrameBuffer *input, FrameBuffer *output, DebayerParams params)\n>> +void DebayerCpu::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, DebayerParams params)\n>>   {\n>>   \ttimespec frameStartTime;\n>>   @@ -778,12 +778,11 @@ void DebayerCpu::process(FrameBuffer *input, FrameBuffer *output, DebayerParams\n>>   \t}\n>>     \t/*\n>> -\t * Frame and buffer ids are currently not used, so pass zeros as parameters.\n>> +\t * Buffer ids are currently not used, so pass zeros as its parameter.\n>>   \t *\n>> -\t * \\todo Pass real values once frame is passed here and stats buffer passing\n>> -\t * is changed.\n>> +\t * \\todo Pass real bufferId once stats buffer passing is changed.\n>>   \t */\n>> -\tstats_->finishFrame(0, 0);\n>> +\tstats_->finishFrame(frame, 0);\n>>   \toutputBufferReady.emit(output);\n>>   \tinputBufferReady.emit(input);\n>>   }\n>> diff --git a/src/libcamera/software_isp/debayer_cpu.h b/src/libcamera/software_isp/debayer_cpu.h\n>> index 8237a64b..2c47e7c6 100644\n>> --- a/src/libcamera/software_isp/debayer_cpu.h\n>> +++ b/src/libcamera/software_isp/debayer_cpu.h\n>> @@ -36,7 +36,7 @@ public:\n>>   \tstd::vector<PixelFormat> formats(PixelFormat input);\n>>   \tstd::tuple<unsigned int, unsigned int>\n>>   \tstrideAndFrameSize(const PixelFormat &outputFormat, const Size &size);\n>> -\tvoid process(FrameBuffer *input, FrameBuffer *output, DebayerParams params);\n>> +\tvoid process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, DebayerParams params);\n>>   \tSizeRange sizes(PixelFormat inputFormat, const Size &inputSize);\n>>     \t/**\n>> diff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp\n>> index a3855568..c5db45ae 100644\n>> --- a/src/libcamera/software_isp/software_isp.cpp\n>> +++ b/src/libcamera/software_isp/software_isp.cpp\n>> @@ -14,6 +14,7 @@\n>>   #include <unistd.h>\n>>     #include <libcamera/formats.h>\n>> +#include <libcamera/request.h>\n>\n>\n> Is this needed? I can't see that it is, at least in this patch?\n\nIt doesn't seem to be needed at all, I'll remove it.\n\n> Otherwise;\n>\n>\n> Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>\n>\n>>   #include <libcamera/stream.h>\n>>     #include \"libcamera/internal/ipa_manager.h\"\n>> @@ -278,12 +279,13 @@ int SoftwareIsp::exportBuffers(const Stream *stream, unsigned int count,\n>>     /**\n>>    * \\brief Queue buffers to Software ISP\n>> + * \\param[in] frame The frame number\n>>    * \\param[in] input The input framebuffer\n>>    * \\param[in] outputs The container holding the output stream pointers and\n>>    * their respective frame buffer outputs\n>>    * \\return 0 on success, a negative errno on failure\n>>    */\n>> -int SoftwareIsp::queueBuffers(FrameBuffer *input,\n>> +int SoftwareIsp::queueBuffers(uint32_t frame, FrameBuffer *input,\n>>   \t\t\t      const std::map<const Stream *, FrameBuffer *> &outputs)\n>>   {\n>>   \t/*\n>> @@ -301,7 +303,7 @@ int SoftwareIsp::queueBuffers(FrameBuffer *input,\n>>   \t}\n>>     \tfor (auto iter = outputs.begin(); iter != outputs.end(); iter++)\n>> -\t\tprocess(input, iter->second);\n>> +\t\tprocess(frame, input, iter->second);\n>>     \treturn 0;\n>>   }\n>> @@ -333,13 +335,14 @@ void SoftwareIsp::stop()\n>>     /**\n>>    * \\brief Passes the input framebuffer to the ISP worker to process\n>> + * \\param[in] frame The frame number\n>>    * \\param[in] input The input framebuffer\n>>    * \\param[out] output The framebuffer to write the processed frame to\n>>    */\n>> -void SoftwareIsp::process(FrameBuffer *input, FrameBuffer *output)\n>> +void SoftwareIsp::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output)\n>>   {\n>>   \tdebayer_->invokeMethod(&DebayerCpu::process,\n>> -\t\t\t       ConnectionTypeQueued, input, output, debayerParams_);\n>> +\t\t\t       ConnectionTypeQueued, frame, input, output, debayerParams_);\n>>   }\n>>     void SoftwareIsp::saveIspParams()","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 C9A6CC324C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 19 Sep 2024 16:56:59 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 993F9634FC;\n\tThu, 19 Sep 2024 18:56:58 +0200 (CEST)","from us-smtp-delivery-124.mimecast.com\n\t(us-smtp-delivery-124.mimecast.com [170.10.129.124])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 53C8D618E7\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 19 Sep 2024 18:56:56 +0200 (CEST)","from mail-ed1-f70.google.com (mail-ed1-f70.google.com\n\t[209.85.208.70]) by relay.mimecast.com with ESMTP with STARTTLS\n\t(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n\tus-mta-519-mjn8DDYSMv-_ylvfApNbIA-1; Thu, 19 Sep 2024 12:56:54 -0400","by mail-ed1-f70.google.com with SMTP id\n\t4fb4d7f45d1cf-5c421ae1c7aso680905a12.2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 19 Sep 2024 09:56:53 -0700 (PDT)","from nuthatch (ip-77-48-47-2.net.vodafone.cz. [77.48.47.2])\n\tby smtp.gmail.com with ESMTPSA id\n\t4fb4d7f45d1cf-5c42bb5f3d4sm6271439a12.51.2024.09.19.09.56.50\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tThu, 19 Sep 2024 09:56:50 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=redhat.com header.i=@redhat.com\n\theader.b=\"CNcPZeZe\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1726765015;\n\th=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n\tto:to:cc:cc:mime-version:mime-version:content-type:content-type:\n\tin-reply-to:in-reply-to:references:references;\n\tbh=Z0PZ9/jSzfnOc1DyYWRHOxZbmAfQLU7RRRGEdZAjF6M=;\n\tb=CNcPZeZeKkTosvXLttLLGnZ8dfTFhhHLakr4AA+QuzwLDkU1pLdAoGi8Nrqf6nJZa1TE14\n\tTO3Inx/P+sTF6yOx/fKZckwvquSzIYNfkIGFUadQHOtdk8UT+ZO2CXK0kevr85wEld8PUX\n\t9gJc6JEM1G8ZyadQhzjdM4mLgerXuHs=","X-MC-Unique":"mjn8DDYSMv-_ylvfApNbIA-1","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1726765012; x=1727369812;\n\th=mime-version:user-agent:message-id:date:references:in-reply-to\n\t:subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=Z0PZ9/jSzfnOc1DyYWRHOxZbmAfQLU7RRRGEdZAjF6M=;\n\tb=TOW+ydKy7roGz1nLMvbmrU7qUDTYgs8+UzCagtUEv2Sxpfy3eM7Iz6R8Kk/h1qCR2G\n\t42DEgESbjT8WCB/S+MElHjIQBryPEN1ITTKlgPgKM9lGpTr2IXUR75U0PkzfiWWMICFH\n\tz/vZ1dX/r7A3o6FYPmP57cMGDY6RrMAsFCsh7m40huNP23DTbD7v0yYjJjbR3Gv6SX9Q\n\tdPmxxGYc50kXTEIJ+vAxq8b2SBOSjOEnLo0jHEajYnoB4l3tTJ352+UUOJg8k+IgEACw\n\tD08sowyT51cOEFT+MVURDhv0pBBp3TUq/irhgXSDg0csMZ6USsAucaorZLuPMgbqeaTC\n\tr8ug==","X-Gm-Message-State":"AOJu0YxpbmCQvZhCbeFOP4nbV7DyMSKoyid38Dmkk/sZYHYmvG3HqL5c\n\tZ0aJ7NIiGuYYRumOjftumFfFrQSNdNGy1ByBuKljyWhvJx7wQCgTRH2kqV3g99CnUQnV7q2+yOV\n\tpGLDEIv829PuPivaRxKpnCj5ElguGAFxmQIDYawc6PfV/OoSE7eEUwOlyzTlmwd8ffMHNOFJrEZ\n\tB/XnA=","X-Received":["by 2002:a05:6402:26c5:b0:5c3:d908:98f0 with SMTP id\n\t4fb4d7f45d1cf-5c413e05fe5mr20500348a12.3.1726765012546; \n\tThu, 19 Sep 2024 09:56:52 -0700 (PDT)","by 2002:a05:6402:26c5:b0:5c3:d908:98f0 with SMTP id\n\t4fb4d7f45d1cf-5c413e05fe5mr20500324a12.3.1726765012012; \n\tThu, 19 Sep 2024 09:56:52 -0700 (PDT)"],"X-Google-Smtp-Source":"AGHT+IEK35cpeuxCoJWKOBelle/12YQv/KUb/Ru2W+6ML8v8Ww4W4lyMBNeMVMtUTNfmNpAAJw1viQ==","From":"Milan Zamazal <mzamazal@redhat.com>","To":"Dan Scally <dan.scally@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org,  Umang Jain\n\t<umang.jain@ideasonboard.com>,  Laurent Pinchart\n\t<laurent.pinchart@ideasonboard.com>","Subject":"Re: [PATCH v6 07/18] libcamera: software_isp: Track and pass frame\n\tids","In-Reply-To":"<6201e10c-2990-4d38-9f84-1024704d0051@ideasonboard.com> (Dan\n\tScally's message of \"Mon, 9 Sep 2024 09:10:39 +0100\")","References":"<20240906120927.4071508-1-mzamazal@redhat.com>\n\t<20240906120927.4071508-8-mzamazal@redhat.com>\n\t<6201e10c-2990-4d38-9f84-1024704d0051@ideasonboard.com>","Date":"Thu, 19 Sep 2024 18:56:49 +0200","Message-ID":"<878qvnmvji.fsf@redhat.com>","User-Agent":"Gnus/5.13 (Gnus v5.13)","MIME-Version":"1.0","X-Mimecast-Spam-Score":"0","X-Mimecast-Originator":"redhat.com","Content-Type":"text/plain","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>"}}]