[{"id":30113,"web_url":"https://patchwork.libcamera.org/comment/30113/","msgid":"<34003eda-c301-4944-84ca-700dcaf3d79c@ideasonboard.com>","date":"2024-06-28T05:52:17","subject":"Re: [PATCH 08/19] libcamera: software_isp: Track and pass frame ids","submitter":{"id":86,"url":"https://patchwork.libcamera.org/api/people/86/","name":"Umang Jain","email":"umang.jain@ideasonboard.com"},"content":"Hi Milan,\n\nOn 26/06/24 12:50 pm, 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> Dear reviewers: I'm confused even after looking at commit\n> 6084217cd3b52ba5677e3ca2de0e21008fdaa735.  What's the relationship\n> between requests, buffers and frames?  It's not 1:1:1 or is it?  Could\n> you please provide some explanation that could be put here?\n>\n> Signed-off-by: Milan Zamazal <mzamazal@redhat.com>\n> ---\n>   include/libcamera/internal/software_isp/software_isp.h |  4 ++--\n>   src/libcamera/pipeline/simple/simple.cpp               |  2 +-\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            | 10 ++++++----\n>   6 files changed, 15 insertions(+), 14 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 6a03b17f..7365b49a 100644\n> --- a/include/libcamera/internal/software_isp/software_isp.h\n> +++ b/include/libcamera/internal/software_isp/software_isp.h\n> @@ -72,10 +72,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<unsigned int, 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 b1bf0d16..5cca94c3 100644\n> --- a/src/libcamera/pipeline/simple/simple.cpp\n> +++ b/src/libcamera/pipeline/simple/simple.cpp\n> @@ -864,7 +864,7 @@ 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\tswIsp_->queueBuffers(request->sequence(), buffer, conversionQueue_.front());\n>   \n>   \t\tconversionQueue_.pop();\n>   \t\treturn;\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 1575cedb..c75b8967 100644\n> --- a/src/libcamera/software_isp/debayer_cpu.cpp\n> +++ b/src/libcamera/software_isp/debayer_cpu.cpp\n> @@ -731,7 +731,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> @@ -785,12 +785,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 1dac6435..6a9cb4c7 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 3fc4a64b..aa60fb5f 100644\n> --- a/src/libcamera/software_isp/software_isp.cpp\n> +++ b/src/libcamera/software_isp/software_isp.cpp\n> @@ -279,12 +279,13 @@ int SoftwareIsp::exportBuffers(unsigned int output, 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 indexes 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<unsigned int, FrameBuffer *> &outputs)\n\nI am not sure passing the frame here explicitly is the best idea.\n\nInstead one can get the sequence number Via `input` framebuffer in the \nfunction itself ?\n\nSee FrameBuffer::request() API\n\n>   {\n>   \tunsigned int mask = 0;\n> @@ -308,7 +309,7 @@ int SoftwareIsp::queueBuffers(FrameBuffer *input,\n>   \t\tmask |= 1 << index;\n>   \t}\n>   \n> -\tprocess(input, outputs.at(0));\n> +\tprocess(frame, input, outputs.at(0));\n>   \n>   \treturn 0;\n>   }\n> @@ -340,13 +341,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 742F8BD87C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 28 Jun 2024 05:52:25 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 5B42D62C99;\n\tFri, 28 Jun 2024 07:52:24 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id E2CB6619C8\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 28 Jun 2024 07:52:22 +0200 (CEST)","from [IPV6:2405:201:2015:f873:55d7:c02e:b2eb:ee3f] (unknown\n\t[IPv6:2405:201:2015:f873:55d7:c02e:b2eb:ee3f])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id D3A52BEB;\n\tFri, 28 Jun 2024 07:51:57 +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=\"PPpMMueI\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1719553918;\n\tbh=gmSsf7iqdsXurnS7RjIS783polynSFmnLAk5cS5vjuA=;\n\th=Date:Subject:To:References:From:In-Reply-To:From;\n\tb=PPpMMueIj1iG6kO1gvriRbVron/CIlMT8UKi7uxI5P/ovBZJ01+T13PeO2Y5dzmVV\n\t0EshiJXvS0L02uEdRXbgFXzleIWosy0QSMTLVinTeDRnOyKmOGbUxN3gAwm2m8l4de\n\tIalI6t3HGSks3U2PHQDZQI+cQxYhv7OV0RiErHCQ=","Message-ID":"<34003eda-c301-4944-84ca-700dcaf3d79c@ideasonboard.com>","Date":"Fri, 28 Jun 2024 11:22:17 +0530","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH 08/19] libcamera: software_isp: Track and pass frame ids","Content-Language":"en-US","To":"Milan Zamazal <mzamazal@redhat.com>, libcamera-devel@lists.libcamera.org","References":"<20240626072100.55497-1-mzamazal@redhat.com>\n\t<20240626072100.55497-9-mzamazal@redhat.com>","From":"Umang Jain <umang.jain@ideasonboard.com>","In-Reply-To":"<20240626072100.55497-9-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":30278,"web_url":"https://patchwork.libcamera.org/comment/30278/","msgid":"<87jzi2jtm9.fsf@redhat.com>","date":"2024-07-03T17:03:10","subject":"Re: [PATCH 08/19] libcamera: software_isp: Track and pass frame ids","submitter":{"id":177,"url":"https://patchwork.libcamera.org/api/people/177/","name":"Milan Zamazal","email":"mzamazal@redhat.com"},"content":"Hi Umang,\n\nthank you for review.\n\nUmang Jain <umang.jain@ideasonboard.com> writes:\n\n> Hi Milan,\n>\n> On 26/06/24 12:50 pm, 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>> Dear reviewers: I'm confused even after looking at commit\n>> 6084217cd3b52ba5677e3ca2de0e21008fdaa735.  What's the relationship\n>> between requests, buffers and frames?  It's not 1:1:1 or is it?  Could\n>> you please provide some explanation that could be put here?\n>>\n>> Signed-off-by: Milan Zamazal <mzamazal@redhat.com>\n>> ---\n>>   include/libcamera/internal/software_isp/software_isp.h |  4 ++--\n>>   src/libcamera/pipeline/simple/simple.cpp               |  2 +-\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            | 10 ++++++----\n>>   6 files changed, 15 insertions(+), 14 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 6a03b17f..7365b49a 100644\n>> --- a/include/libcamera/internal/software_isp/software_isp.h\n>> +++ b/include/libcamera/internal/software_isp/software_isp.h\n>> @@ -72,10 +72,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<unsigned int, 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 b1bf0d16..5cca94c3 100644\n>> --- a/src/libcamera/pipeline/simple/simple.cpp\n>> +++ b/src/libcamera/pipeline/simple/simple.cpp\n>> @@ -864,7 +864,7 @@ 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\tswIsp_->queueBuffers(request->sequence(), buffer, conversionQueue_.front());\n>>     \t\tconversionQueue_.pop();\n>>   \t\treturn;\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 1575cedb..c75b8967 100644\n>> --- a/src/libcamera/software_isp/debayer_cpu.cpp\n>> +++ b/src/libcamera/software_isp/debayer_cpu.cpp\n>> @@ -731,7 +731,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>>   @@ -785,12 +785,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 1dac6435..6a9cb4c7 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 3fc4a64b..aa60fb5f 100644\n>> --- a/src/libcamera/software_isp/software_isp.cpp\n>> +++ b/src/libcamera/software_isp/software_isp.cpp\n>> @@ -279,12 +279,13 @@ int SoftwareIsp::exportBuffers(unsigned int output, 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 indexes 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<unsigned int, FrameBuffer *> &outputs)\n>\n> I am not sure passing the frame here explicitly is the best idea.\n>\n> Instead one can get the sequence number Via `input` framebuffer in the function itself ?\n>\n> See FrameBuffer::request() API\n\nI tried it but it appeared it doesn't work.  The problem is that the\ncaller assigns buffer->request() to a local variable and some not very\ntransparent unique_ptr machinery around invalidates the request in the\nFrameBuffer.  Then trying to call input->request()->sequence() here hits\na null pointer and segfaults.\n\nMaybe the calling function could be rearranged to avoid this but I think\nit's better not to walk on a thin ice here and to keep the things\nseparated.\n\n>>   {\n>>   \tunsigned int mask = 0;\n>> @@ -308,7 +309,7 @@ int SoftwareIsp::queueBuffers(FrameBuffer *input,\n>>   \t\tmask |= 1 << index;\n>>   \t}\n>>   -\tprocess(input, outputs.at(0));\n>> +\tprocess(frame, input, outputs.at(0));\n>>     \treturn 0;\n>>   }\n>> @@ -340,13 +341,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 0D323BD87C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  3 Jul 2024 17:03:20 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id CCF0162E22;\n\tWed,  3 Jul 2024 19:03:18 +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 9792A62C95\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  3 Jul 2024 19:03:17 +0200 (CEST)","from mail-ej1-f70.google.com (mail-ej1-f70.google.com\n\t[209.85.218.70]) by relay.mimecast.com with ESMTP with STARTTLS\n\t(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n\tus-mta-547-_yUGMQv-NveGhPnTYvthkg-1; Wed, 03 Jul 2024 13:03:14 -0400","by mail-ej1-f70.google.com with SMTP id\n\ta640c23a62f3a-a72b3066669so137415366b.0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 03 Jul 2024 10:03:14 -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\ta640c23a62f3a-a72aaf184a2sm533310766b.11.2024.07.03.10.03.10\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tWed, 03 Jul 2024 10:03:10 -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=\"iPGkd6H2\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1720026196;\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=QuzBH8NRHuV1Bw8XoxgrNmP4kGLxjpsRCyb4iXp5OvY=;\n\tb=iPGkd6H2ot8p4OrSX6s+BY8AJDzsdwj+4nj9HKxfQKKBPjtWETyaUJL91ifDrlOFfUosGA\n\tjViaV9/XzPyd1et/fN8EPxK2gBt7zT3u9crcKw+QjYy0Ns/jJkFXmFU7DmWcWmFSpkS3Of\n\tK1hyV4PumZZegH50mAbNxixVKW+HLlA=","X-MC-Unique":"_yUGMQv-NveGhPnTYvthkg-1","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1720026192; x=1720630992;\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=QuzBH8NRHuV1Bw8XoxgrNmP4kGLxjpsRCyb4iXp5OvY=;\n\tb=wQDhPxvHVFETyqUkpKqb7MtDTjWon5JbnvRi7VkSV/zi3Kx0AJ8vNLUaek21MC7ueg\n\t0Q3Eqo0StGPklL/jWpzpilH7W06FWKypwoiWeV3oF8tZivtVa7ccPiFoW+d9pbxEK62m\n\tkooF54txGdah45Xrz9w/1JbAMQCeE3ORkMfWAe/ggvToremvhKZOjLHb8TiAH4BeDpI7\n\t+pQOJDtHAZJtlBejxceh7Vg68JxtlWrBWGBUlz8H2e1uUvB8l6YqIFxeb3uGvOOpsri5\n\tkaKTGVXXRHm4K6g0Wn3plfMLAVcLWzRvXtvIMw7P6Zufshb1M/ZMXR4DIcSidFoG9efI\n\tfsKA==","X-Gm-Message-State":"AOJu0Yws+L4v5sReyU4i5u9bYdVfN20Um10EvxAFjZcYUwUKHus2GzGd\n\tRgorxfvG0ts/Yw2YRQwfWBrFCqrntkecEMuAbNobwyPXltd/WYtAbntlzGSMKBFOEeaBRrIxo40\n\t9L18zZc28V/LMDtbdXDmQSq3d8SQyHM4PmFIdEwwYDsplhgNZ+J+fjs27Y/y/U4GUHD1573csg1\n\tYA5SsNtUYbIC6K2JtwUEFfwz4PKT0U3bfbikr26JsCURvR4KoSxLNWPOI=","X-Received":["by 2002:a17:906:cf85:b0:a62:e450:b147 with SMTP id\n\ta640c23a62f3a-a77a24fd7a8mr171883366b.29.1720026191933; \n\tWed, 03 Jul 2024 10:03:11 -0700 (PDT)","by 2002:a17:906:cf85:b0:a62:e450:b147 with SMTP id\n\ta640c23a62f3a-a77a24fd7a8mr171881066b.29.1720026191379; \n\tWed, 03 Jul 2024 10:03:11 -0700 (PDT)"],"X-Google-Smtp-Source":"AGHT+IGv3esX9orjMmBiVTyQhAMg5IM04WDRQvq+3xKfIhXtXh5ATL+AZyvfISUT96lqs5Fpoq/i2g==","From":"Milan Zamazal <mzamazal@redhat.com>","To":"Umang Jain <umang.jain@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Subject":"Re: [PATCH 08/19] libcamera: software_isp: Track and pass frame ids","In-Reply-To":"<34003eda-c301-4944-84ca-700dcaf3d79c@ideasonboard.com> (Umang\n\tJain's message of \"Fri, 28 Jun 2024 11:22:17 +0530\")","References":"<20240626072100.55497-1-mzamazal@redhat.com>\n\t<20240626072100.55497-9-mzamazal@redhat.com>\n\t<34003eda-c301-4944-84ca-700dcaf3d79c@ideasonboard.com>","Date":"Wed, 03 Jul 2024 19:03:10 +0200","Message-ID":"<87jzi2jtm9.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>"}}]