[{"id":38480,"web_url":"https://patchwork.libcamera.org/comment/38480/","msgid":"<177504167723.2795797.8678915761327458529@ping.linuxembedded.co.uk>","date":"2026-04-01T11:07:57","subject":"Re: [PATCH v7 0/5] software_isp: debayer_cpu: Add multi-threading\n\tsupport","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Hans,\n\nThis looks pretty good for merge, but there are a couple of niggles from\ncheckpatch:\n\nRunning checkstyle for patchwork/5825 (2a1c75504c789b686b5b37ed8729f632ec81d2f0..40a88692e6959511760590ecd976bb2c6723064a) 00:03\n-------------------------------------------------------------------------------------------------------\n1d3fd7a90cfb0c5a9c131f000a687b3e9bed164c software_isp: swstats_cpu: Prepare for multi-threading support\n-------------------------------------------------------------------------------------------------------\n--- src/libcamera/software_isp/swstats_cpu.cpp\n+++ src/libcamera/software_isp/swstats_cpu.cpp\n@@ -77,9 +77,9 @@\n  * \\fn void SwStatsCpu::processLine0(uint32_t frame, unsigned int y, const uint8_t *src[], unsigned int statsBufferIndex = 0)\n  * \\brief Process line 0\n  * \\param[in] frame The frame number\n- * \\param[in] y The y coordinate.\n- * \\param[in] src The input data.\n- * \\param[in] statsBufferIndex Index of stats buffer to use for multi-threading.\n+ * \\param[in] y The y coordinate\n+ * \\param[in] src The input data\n+ * \\param[in] statsBufferIndex Index of stats buffer to use for multi-threading\n  *\n  * This function processes line 0 for input formats with\n  * patternSize height == 1.\n@@ -107,9 +107,9 @@\n  * \\fn void SwStatsCpu::processLine2(uint32_t frame, unsigned int y, const uint8_t *src[], unsigned int statsBufferIndex = 0)\n  * \\brief Process line 2 and 3\n  * \\param[in] frame The frame number\n- * \\param[in] y The y coordinate.\n- * \\param[in] src The input data.\n- * \\param[in] statsBufferIndex Index of stats buffer to use for multi-threading.\n+ * \\param[in] y The y coordinate\n+ * \\param[in] src The input data\n+ * \\param[in] statsBufferIndex Index of stats buffer to use for multi-threading\n  *\n  * This function processes line 2 and 3 for input formats with\n  * patternSize height == 4.\n@@ -190,8 +190,8 @@\n \tstats.yHistogram[yVal * SwIspStats::kYHistogramSize / (256 * 256 * (div))]++;\n \n #define SWSTATS_FINISH_LINE_STATS() \\\n-\tstats.sum_.r() += sumR;    \\\n-\tstats.sum_.g() += sumG;    \\\n+\tstats.sum_.r() += sumR;     \\\n+\tstats.sum_.g() += sumG;     \\\n \tstats.sum_.b() += sumB;\n \n void SwStatsCpu::statsBGGR8Line0(const uint8_t *src[], SwIspStats &stats)\n---\n3 potential issues detected, please review\n----------------------------------------------------------------------------------------------\n3e10daf140a229e0dcb8a4da59497b373c148f9e software_isp: debayer_cpu: Add DebayerCpuThread class\n----------------------------------------------------------------------------------------------\nNo issue detected\n-----------------------------------------------------------------------------------------------\n10ad3ee318f67362169a03cfc8414afce007158d software_isp: debayer_cpu: Add multi-threading support\n-----------------------------------------------------------------------------------------------\n--- src/libcamera/software_isp/debayer_cpu.h\n+++ src/libcamera/software_isp/debayer_cpu.h\n@@ -15,8 +15,8 @@\n #include <stdint.h>\n #include <vector>\n \n+#include <libcamera/base/mutex.h>\n #include <libcamera/base/object.h>\n-#include <libcamera/base/mutex.h>\n \n #include \"libcamera/internal/bayer_format.h\"\n #include \"libcamera/internal/global_configuration.h\"\n---\n1 potential issue detected, please review\n----------------------------------------------------------------------------------------\n9afb093946cba43d5a8fdc195561c706c0452011 software_isp: Log input config from configure()\n----------------------------------------------------------------------------------------\nNo issue detected\n---------------------------------------------------------------------------------------------------------------\n40a88692e6959511760590ecd976bb2c6723064a Documentation/runtime_configuration: Add missing software_isp.mode doc\n---------------------------------------------------------------------------------------------------------------\nNo issue detected\n\n\nPlease add the checkpatch hooks to your local builds so you can see this\nwhile you develop.\n\nMy preferred way is to :\n\n  cp utils/hooks/post-commit .git/hooks/post-commit\n\nthese are really tiny, so I can fix them up with the following which\nI'll do now: Reporting my workflow in case it's helpful to others:\n\n\ngit checkout patchwork/5825\ngit rebase -i origin/master -x ./utils/checkstyle.py\n...\n(let it run and report the break)\n(Breakage on software_isp: swstats_cpu: Prepare for multi-threading support)\n\n./utils/checkstyle.py | patch -p0\ngit add -p\ngit commit --amend\ngit rebase --continue\n\n(next breakage on software_isp: debayer_cpu: Add multi-threading support)\n./utils/checkstyle.py | patch -p0\ngit add -p\ngit commit --amend\ngit rebase --continue\n\nSuccessfully rebased and updated refs/heads/patchwork/5825.\n\nand with that I'll re-run CI and then be able to merge cleanly.\n\n--\nKieran\n\n\n\nQuoting Hans de Goede (2026-03-10 12:01:01)\n> Hi All,\n> \n> The QCM2290 SoC used on the Arduino Uno-Q seems to have a weak GPU, so weak\n> that it is barely faster then a single CPU core (CPU without CCM).\n> \n> This has made me code-up the long envisioned multi-threading support\n> for the CPU softISP.\n> \n> Changes in v7:\n> - Small update to DebayerCpuThread::configure() doc\n> - Add missing space between type and name for threads_ declaration\n> - Add Debug message logging thread count\n> - Gather various tags\n> \n> Changes in v6:\n> - Use \"LIBCAMERA_SOFTISP_MODE, software_isp.mode\" as item title for patch 5/5\n> - Send out patch 5/5 as a standalone v6 as the rest of the series looked\n>   ready for merging (bad idea in hindsight)\n> \n> Changes in v5:\n> - Extend software_isp.threads docs in runtime_configuration.rst\n> - New patch: \"Documentation/runtime_configuration: Add missing\n>   software_isp.mode doc\"\n> \n> Changes in v4:\n> - Use const in for (const auto &s : stats_) {} in SwStatsCpu::finishFrame()\n> - Move kMaxLineBuffers constant to DebayerCpuThread class\n> - Document software_isp.threads option in runtime_configuration.rst\n> - Add an use constants for min/max/default number of threads\n> \n> Changes in v3:\n> - Use std::unique_ptr for the DebayerCpuThread pointers\n> - Document new DebayerCpuThread class\n> - Make DebayerCpuThread inherit from both Thread and Object\n> - Use for (auto &thread : threads_)\n> - Use for (auto &s : stats_) {}\n> - Move input format logging from DebayerCpu::configure() to\n>   SoftwareIsp::configure()\n> \n> Changes in v2:\n> - Quite a bit of refactoring based on v1 feedback, dropped patch 3/5 and 4/5\n>   from v2 since these now no longer make sense\n> - Move the allocation of the vector of SwIspStats objects to inside\n>   the SwStatsCpu class, controlled by a configure() arguments instead\n>   of making the caller allocate the objects\n> - Replace the DebayerCpuThreadData struct from v1 with a DebayerCpuThread\n>   class, derived from Object to allow calling invokeMethod for thread re-use\n>   in followup patches\n> - As part of this also move a bunch of methods which primarily deal with\n>   per thread data: setupInputMemcpy(), shiftLinePointers(), memcpyNextLine(),\n>   process*() to the new DebayerCpuThread class\n> - Re-use threads instead of starting new threads every frame\n> - Add a new patch adding some extra DebayerCpu input format logging\n> \n> Benchmark results for the Uno-Q + IMX219 running at 3280x2464 -> 3272x2464\n> without CCM:\n> \n> 1 thread :  147ms / frame, ~6.5  fps\n> 2 threads:   80ms / frame, ~12.5 fps\n> 3 threads:   65ms / frame, ~15   fps\n> GPU:        130ms / frame, ~7,5  fps\n> GPU 0-copy: 110ms / frame, ~9.5  fps (requires pipeline + camss hacks)\n> GPU lite:    85ms / frame, ~12   fps (CCM, contrast and gamma disabled)\n> \n> Regards,\n> \n> Hans\n> \n> \n> Hans de Goede (5):\n>   software_isp: swstats_cpu: Prepare for multi-threading support\n>   software_isp: debayer_cpu: Add DebayerCpuThread class\n>   software_isp: debayer_cpu: Add multi-threading support\n>   software_isp: Log input config from configure()\n>   Documentation/runtime_configuration: Add missing software_isp.mode doc\n> \n>  Documentation/runtime_configuration.rst       |  17 ++\n>  .../internal/software_isp/swstats_cpu.h       |  25 +-\n>  src/libcamera/software_isp/debayer_cpu.cpp    | 288 ++++++++++++++----\n>  src/libcamera/software_isp/debayer_cpu.h      |  33 +-\n>  src/libcamera/software_isp/software_isp.cpp   |  12 +-\n>  src/libcamera/software_isp/swstats_cpu.cpp    |  54 ++--\n>  6 files changed, 320 insertions(+), 109 deletions(-)\n> \n> -- \n> 2.53.0\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 809ADBEFBE\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  1 Apr 2026 11:08:03 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id ABC7B62D51;\n\tWed,  1 Apr 2026 13:08:02 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id C758F62CF3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  1 Apr 2026 13:08:00 +0200 (CEST)","from monstersaurus.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 83D255B2;\n\tWed,  1 Apr 2026 13:06:37 +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=\"GRXy7KeG\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1775041597;\n\tbh=zGFOrdiStFoN2har3cWFeTmvLW2qZ8H9nMFj3ru+WvY=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=GRXy7KeGonRwSNcsncVySEB0tCYj+LUDtxR/Ka6j4mIlQZ7SZBbtRXY2cSyNMJ6BJ\n\tQW2XnqbYpV5rg/KA/TAfjrSPBctN2XH+CH/E+B0eeQSnXi2AL/hG1GhpQ9IhEL5w6H\n\tspgcY5XTh6eas9s+pYHocvrqZOUK7DuDsQWisiFg=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20260310120106.79922-1-johannes.goede@oss.qualcomm.com>","References":"<20260310120106.79922-1-johannes.goede@oss.qualcomm.com>","Subject":"Re: [PATCH v7 0/5] software_isp: debayer_cpu: Add multi-threading\n\tsupport","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"Milan Zamazal <mzamazal@redhat.com>,\n\tHans de Goede <johannes.goede@oss.qualcomm.com>","To":"Hans de Goede <johannes.goede@oss.qualcomm.com>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Wed, 01 Apr 2026 12:07:57 +0100","Message-ID":"<177504167723.2795797.8678915761327458529@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":38494,"web_url":"https://patchwork.libcamera.org/comment/38494/","msgid":"<11535c65-e328-4090-a0a2-6689371205c5@oss.qualcomm.com>","date":"2026-04-03T10:31:48","subject":"Re: [PATCH v7 0/5] software_isp: debayer_cpu: Add multi-threading\n\tsupport","submitter":{"id":242,"url":"https://patchwork.libcamera.org/api/people/242/","name":"Hans de Goede","email":"johannes.goede@oss.qualcomm.com"},"content":"Hi,\n\nOn 1-Apr-26 13:07, Kieran Bingham wrote:\n> Hi Hans,\n> \n> This looks pretty good for merge, but there are a couple of niggles from\n> checkpatch:\n> \n> Running checkstyle for patchwork/5825 (2a1c75504c789b686b5b37ed8729f632ec81d2f0..40a88692e6959511760590ecd976bb2c6723064a) 00:03\n> -------------------------------------------------------------------------------------------------------\n> 1d3fd7a90cfb0c5a9c131f000a687b3e9bed164c software_isp: swstats_cpu: Prepare for multi-threading support\n> -------------------------------------------------------------------------------------------------------\n> --- src/libcamera/software_isp/swstats_cpu.cpp\n> +++ src/libcamera/software_isp/swstats_cpu.cpp\n> @@ -77,9 +77,9 @@\n>   * \\fn void SwStatsCpu::processLine0(uint32_t frame, unsigned int y, const uint8_t *src[], unsigned int statsBufferIndex = 0)\n>   * \\brief Process line 0\n>   * \\param[in] frame The frame number\n> - * \\param[in] y The y coordinate.\n> - * \\param[in] src The input data.\n> - * \\param[in] statsBufferIndex Index of stats buffer to use for multi-threading.\n> + * \\param[in] y The y coordinate\n> + * \\param[in] src The input data\n> + * \\param[in] statsBufferIndex Index of stats buffer to use for multi-threading\n>   *\n>   * This function processes line 0 for input formats with\n>   * patternSize height == 1.\n> @@ -107,9 +107,9 @@\n>   * \\fn void SwStatsCpu::processLine2(uint32_t frame, unsigned int y, const uint8_t *src[], unsigned int statsBufferIndex = 0)\n>   * \\brief Process line 2 and 3\n>   * \\param[in] frame The frame number\n> - * \\param[in] y The y coordinate.\n> - * \\param[in] src The input data.\n> - * \\param[in] statsBufferIndex Index of stats buffer to use for multi-threading.\n> + * \\param[in] y The y coordinate\n> + * \\param[in] src The input data\n> + * \\param[in] statsBufferIndex Index of stats buffer to use for multi-threading\n>   *\n>   * This function processes line 2 and 3 for input formats with\n>   * patternSize height == 4.\n> @@ -190,8 +190,8 @@\n>  \tstats.yHistogram[yVal * SwIspStats::kYHistogramSize / (256 * 256 * (div))]++;\n>  \n>  #define SWSTATS_FINISH_LINE_STATS() \\\n> -\tstats.sum_.r() += sumR;    \\\n> -\tstats.sum_.g() += sumG;    \\\n> +\tstats.sum_.r() += sumR;     \\\n> +\tstats.sum_.g() += sumG;     \\\n>  \tstats.sum_.b() += sumB;\n>  \n>  void SwStatsCpu::statsBGGR8Line0(const uint8_t *src[], SwIspStats &stats)\n> ---\n> 3 potential issues detected, please review\n> ----------------------------------------------------------------------------------------------\n> 3e10daf140a229e0dcb8a4da59497b373c148f9e software_isp: debayer_cpu: Add DebayerCpuThread class\n> ----------------------------------------------------------------------------------------------\n> No issue detected\n> -----------------------------------------------------------------------------------------------\n> 10ad3ee318f67362169a03cfc8414afce007158d software_isp: debayer_cpu: Add multi-threading support\n> -----------------------------------------------------------------------------------------------\n> --- src/libcamera/software_isp/debayer_cpu.h\n> +++ src/libcamera/software_isp/debayer_cpu.h\n> @@ -15,8 +15,8 @@\n>  #include <stdint.h>\n>  #include <vector>\n>  \n> +#include <libcamera/base/mutex.h>\n>  #include <libcamera/base/object.h>\n> -#include <libcamera/base/mutex.h>\n>  \n>  #include \"libcamera/internal/bayer_format.h\"\n>  #include \"libcamera/internal/global_configuration.h\"\n> ---\n> 1 potential issue detected, please review\n> ----------------------------------------------------------------------------------------\n> 9afb093946cba43d5a8fdc195561c706c0452011 software_isp: Log input config from configure()\n> ----------------------------------------------------------------------------------------\n> No issue detected\n> ---------------------------------------------------------------------------------------------------------------\n> 40a88692e6959511760590ecd976bb2c6723064a Documentation/runtime_configuration: Add missing software_isp.mode doc\n> ---------------------------------------------------------------------------------------------------------------\n> No issue detected\n> \n> \n> Please add the checkpatch hooks to your local builds so you can see this\n> while you develop.\n> \n> My preferred way is to :\n> \n>   cp utils/hooks/post-commit .git/hooks/post-commit\n\nAck, I've done so now.\n\n> these are really tiny, so I can fix them up with the following which\n> I'll do now: Reporting my workflow in case it's helpful to others:\n\nThank you for fixing these up and for merging this\nas well as the \"const\" patch.\n\nRegards,\n\nHans\n\n\n\n\n> \n> \n> git checkout patchwork/5825\n> git rebase -i origin/master -x ./utils/checkstyle.py\n> ...\n> (let it run and report the break)\n> (Breakage on software_isp: swstats_cpu: Prepare for multi-threading support)\n> \n> ./utils/checkstyle.py | patch -p0\n> git add -p\n> git commit --amend\n> git rebase --continue\n> \n> (next breakage on software_isp: debayer_cpu: Add multi-threading support)\n> ./utils/checkstyle.py | patch -p0\n> git add -p\n> git commit --amend\n> git rebase --continue\n> \n> Successfully rebased and updated refs/heads/patchwork/5825.\n> \n> and with that I'll re-run CI and then be able to merge cleanly.\n> \n> --\n> Kieran\n> \n> \n> \n> Quoting Hans de Goede (2026-03-10 12:01:01)\n>> Hi All,\n>>\n>> The QCM2290 SoC used on the Arduino Uno-Q seems to have a weak GPU, so weak\n>> that it is barely faster then a single CPU core (CPU without CCM).\n>>\n>> This has made me code-up the long envisioned multi-threading support\n>> for the CPU softISP.\n>>\n>> Changes in v7:\n>> - Small update to DebayerCpuThread::configure() doc\n>> - Add missing space between type and name for threads_ declaration\n>> - Add Debug message logging thread count\n>> - Gather various tags\n>>\n>> Changes in v6:\n>> - Use \"LIBCAMERA_SOFTISP_MODE, software_isp.mode\" as item title for patch 5/5\n>> - Send out patch 5/5 as a standalone v6 as the rest of the series looked\n>>   ready for merging (bad idea in hindsight)\n>>\n>> Changes in v5:\n>> - Extend software_isp.threads docs in runtime_configuration.rst\n>> - New patch: \"Documentation/runtime_configuration: Add missing\n>>   software_isp.mode doc\"\n>>\n>> Changes in v4:\n>> - Use const in for (const auto &s : stats_) {} in SwStatsCpu::finishFrame()\n>> - Move kMaxLineBuffers constant to DebayerCpuThread class\n>> - Document software_isp.threads option in runtime_configuration.rst\n>> - Add an use constants for min/max/default number of threads\n>>\n>> Changes in v3:\n>> - Use std::unique_ptr for the DebayerCpuThread pointers\n>> - Document new DebayerCpuThread class\n>> - Make DebayerCpuThread inherit from both Thread and Object\n>> - Use for (auto &thread : threads_)\n>> - Use for (auto &s : stats_) {}\n>> - Move input format logging from DebayerCpu::configure() to\n>>   SoftwareIsp::configure()\n>>\n>> Changes in v2:\n>> - Quite a bit of refactoring based on v1 feedback, dropped patch 3/5 and 4/5\n>>   from v2 since these now no longer make sense\n>> - Move the allocation of the vector of SwIspStats objects to inside\n>>   the SwStatsCpu class, controlled by a configure() arguments instead\n>>   of making the caller allocate the objects\n>> - Replace the DebayerCpuThreadData struct from v1 with a DebayerCpuThread\n>>   class, derived from Object to allow calling invokeMethod for thread re-use\n>>   in followup patches\n>> - As part of this also move a bunch of methods which primarily deal with\n>>   per thread data: setupInputMemcpy(), shiftLinePointers(), memcpyNextLine(),\n>>   process*() to the new DebayerCpuThread class\n>> - Re-use threads instead of starting new threads every frame\n>> - Add a new patch adding some extra DebayerCpu input format logging\n>>\n>> Benchmark results for the Uno-Q + IMX219 running at 3280x2464 -> 3272x2464\n>> without CCM:\n>>\n>> 1 thread :  147ms / frame, ~6.5  fps\n>> 2 threads:   80ms / frame, ~12.5 fps\n>> 3 threads:   65ms / frame, ~15   fps\n>> GPU:        130ms / frame, ~7,5  fps\n>> GPU 0-copy: 110ms / frame, ~9.5  fps (requires pipeline + camss hacks)\n>> GPU lite:    85ms / frame, ~12   fps (CCM, contrast and gamma disabled)\n>>\n>> Regards,\n>>\n>> Hans\n>>\n>>\n>> Hans de Goede (5):\n>>   software_isp: swstats_cpu: Prepare for multi-threading support\n>>   software_isp: debayer_cpu: Add DebayerCpuThread class\n>>   software_isp: debayer_cpu: Add multi-threading support\n>>   software_isp: Log input config from configure()\n>>   Documentation/runtime_configuration: Add missing software_isp.mode doc\n>>\n>>  Documentation/runtime_configuration.rst       |  17 ++\n>>  .../internal/software_isp/swstats_cpu.h       |  25 +-\n>>  src/libcamera/software_isp/debayer_cpu.cpp    | 288 ++++++++++++++----\n>>  src/libcamera/software_isp/debayer_cpu.h      |  33 +-\n>>  src/libcamera/software_isp/software_isp.cpp   |  12 +-\n>>  src/libcamera/software_isp/swstats_cpu.cpp    |  54 ++--\n>>  6 files changed, 320 insertions(+), 109 deletions(-)\n>>\n>> -- \n>> 2.53.0\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 8A49BBEFBE\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri,  3 Apr 2026 10:31:56 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 8D10962D67;\n\tFri,  3 Apr 2026 12:31:55 +0200 (CEST)","from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com\n\t[205.220.180.131])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 52E9762781\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  3 Apr 2026 12:31:54 +0200 (CEST)","from pps.filterd (m0279871.ppops.net [127.0.0.1])\n\tby mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n\t63373t5r3449908 for <libcamera-devel@lists.libcamera.org>;\n\tFri, 3 Apr 2026 10:31:52 GMT","from mail-qt1-f199.google.com (mail-qt1-f199.google.com\n\t[209.85.160.199])\n\tby mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4da8u58kyn-1\n\t(version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT)\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 03 Apr 2026 10:31:52 +0000 (GMT)","by mail-qt1-f199.google.com with SMTP id\n\td75a77b69052e-5093787e2fdso72100931cf.2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 03 Apr 2026 03:31:52 -0700 (PDT)","from ?IPV6:2001:1c00:c32:7800:5bfa:a036:83f0:f9ec?\n\t(2001-1c00-0c32-7800-5bfa-a036-83f0-f9ec.cable.dynamic.v6.ziggo.nl.\n\t[2001:1c00:c32:7800:5bfa:a036:83f0:f9ec])\n\tby smtp.gmail.com with ESMTPSA id\n\ta640c23a62f3a-b9c3cec6cc4sm175659666b.32.2026.04.03.03.31.49\n\t(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n\tFri, 03 Apr 2026 03:31:49 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=qualcomm.com header.i=@qualcomm.com\n\theader.b=\"KKA4XNDt\"; dkim=pass (2048-bit key;\n\tunprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n\theader.b=\"iUaUeAj6\"; dkim-atps=neutral","DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=\n\tcc:content-transfer-encoding:content-type:date:from:in-reply-to\n\t:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=\n\t1UZ6hAPsTIvIe9UwqlC45/P6NCM9sJ0OEqe0lVJ8sPE=; b=KKA4XNDtKz/fQxqS\n\t9YFeaGstxk1DGlGHNdL0CWWBuwfddp5s8yYcWlz5of0K3vCw/xDSNTBx708IrDWK\n\tfff8Az73KLi2E1sqFThB5PtNXP/ONTIn1gJ/rvwBrLapxBKHMbfpf8+Naa42oXV7\n\tk5nz8+BXetu0wrq3kVk1xP/AHCJfE/0Bp+Dz39evEC5zHx0WDJgcPtRbgd2nZQv0\n\t2Qt0PPEHlbljjypSCHqAYaB3lNLva+rZ+vWXXZ/aRE9VH9XkGZG4YXEMhg/rga3N\n\tGFS2HlCP8yrOicg9BdAga61+RV/zr5CxN6fWxdkI95Aaer2csAF32AH0EOl+lfop\n\tnpIvjw==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=oss.qualcomm.com; s=google; t=1775212312; x=1775817112;\n\tdarn=lists.libcamera.org; \n\th=content-transfer-encoding:in-reply-to:content-language:references\n\t:cc:to:subject:from:user-agent:mime-version:date:message-id:from:to\n\t:cc:subject:date:message-id:reply-to;\n\tbh=1UZ6hAPsTIvIe9UwqlC45/P6NCM9sJ0OEqe0lVJ8sPE=;\n\tb=iUaUeAj6YymhiPCo1vKOAIyQjb0MmfJ5PNa3lGQFbMWR8vaI/iGK3pm7YAepwKnh6N\n\tbfxJS0uq44WjnnA84thabfhEuFbKcpEJaX0P2WNRw5sGcFNfQOCdstr/x+jcx4tW2xaI\n\tsuBR//WCsLku5/M9IY++hs2Mj995MKsAqEst9A4sZSSa6ClWUCe+JBjl8sJfI9gRUCKu\n\tm9xFDIssIqOU0Go9uC3ODb1ryMcKxc2dgvUZSiNwpxKyu0wyf5kGjqjQUFiExvtLKQHu\n\tNWzA96K09xZxNS3zstEu0wkkCVRM/rUFHafmo2sbaKDnqGT//axap82VXrQyPEk7gmSm\n\t8Y9A=="],"X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20251104; t=1775212312; x=1775817112;\n\th=content-transfer-encoding:in-reply-to:content-language:references\n\t:cc:to:subject:from:user-agent:mime-version:date:message-id:x-gm-gg\n\t:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;\n\tbh=1UZ6hAPsTIvIe9UwqlC45/P6NCM9sJ0OEqe0lVJ8sPE=;\n\tb=hejifPda1f7PJ/VWf8jzlPM8D+l+c7U+d1vqaTTjrzsMuebB49FRYjS3ynpNVCU413\n\t99qv5aEI2Fmy3O8grNLMXaKk4ZCZk6t7t6k4QLMNWhnKSBb3q90ptkbrlsmo0TFpg+0I\n\t/nw7LiwMG+pnmDlf5xTFAKRh/FrD+/EOI2P6yZkv6zuJXF4Jb35hzu7i0Qq9ELLkxghH\n\tunPPZ21ewBDm+qz5udO5oMehQZKLDcC3hLN5fEsHipkdj2PZw3/lxzZUnLljqATKeTfo\n\tZjTaHt1xjMC6EaDTDYJ6LKiB+cnyHky4JNZvkxbQL7Cy7G/phqasjjAbJ2xFKg39A7SJ\n\tEfyw==","X-Forwarded-Encrypted":"i=1;\n\tAJvYcCVz/bRpP5NaEgwxPBYHWZKsy1boRU1mfT+bt+1LF2XL3pfXVJlA2JFe3H0y+XGdaTsdfRSfSy7ajfluAEFzTWQ=@lists.libcamera.org","X-Gm-Message-State":"AOJu0Yxc9IrBFzrRTIOsI+dkQkUfZ1FQ45i8oG0p/SkYEnsSOZK19efl\n\t769qbEa9GeVBMxqVaSGCrB2IMp86HTWTqDZ/hrCiqivSH2SW/LA7s0DwR3KWDI8l2nHmFaXTBhB\n\t928OLh+kxPIWt+vVFKdfP0uqYB3Pv13NIAcDAK7NH21KZFkyb+GlXBtVvO3VLcTZfklLe4pTUOR\n\ta2","X-Gm-Gg":"ATEYQzz/mi7abjeURJ8btY9FFwfOAcLZJkdIWamwfJkhOJP4cpP3z3fnazYrRYpcnvx\n\tF9dE121C38qk32l7dh5q6+sJOG4Bkn83d+vbX3HR2UZBt9nOBqeCKKnjH96HQ1NtVOtCezUMb7j\n\talDFG4hG0fjOO9j3SuJvAdP+KccdK9Nyh0XVgMrTfBiS/4fgNOygQRTdfKn4/oFlOCGXsJ62P4v\n\tJcq7U7WVHV+OqQ9T0PPmoCn3cwEtM5j+WAptVqyGp00v5afomlSlWQgScyqGsSUpdZ+FXn0Yxpg\n\ta69Zh4Aw7lYPao3FVWParI67VkdtfyyL6f6h1Wwr4kZcGzE77lqHYrTOFwiIOCo+2C/sbhPCzDa\n\tQoKYAPZo+Uw98+AEyckS47erv8Q2ZOlVvqsuEzXTV7Jp9EJolTIaSxRYPbAsVx1y+HQJsxg2H6p\n\tG/khoMGd7zaJZnLO/STtn9PEeZqYOjGGRTuXLTxzMMaI9JrgSEooaCeEk8v4GhpkcLpceyA/1Zl\n\ty5tOEnyFZrLeXxW","X-Received":["by 2002:ac8:59ce:0:b0:50b:3e11:359c with SMTP id\n\td75a77b69052e-50d6276c7a3mr38557341cf.25.1775212312051; \n\tFri, 03 Apr 2026 03:31:52 -0700 (PDT)","by 2002:ac8:59ce:0:b0:50b:3e11:359c with SMTP id\n\td75a77b69052e-50d6276c7a3mr38556561cf.25.1775212310411; \n\tFri, 03 Apr 2026 03:31:50 -0700 (PDT)"],"Message-ID":"<11535c65-e328-4090-a0a2-6689371205c5@oss.qualcomm.com>","Date":"Fri, 3 Apr 2026 12:31:48 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","From":"Hans de Goede <johannes.goede@oss.qualcomm.com>","Subject":"Re: [PATCH v7 0/5] software_isp: debayer_cpu: Add multi-threading\n\tsupport","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Cc":"Milan Zamazal <mzamazal@redhat.com>","References":"<20260310120106.79922-1-johannes.goede@oss.qualcomm.com>\n\t<177504167723.2795797.8678915761327458529@ping.linuxembedded.co.uk>","Content-Language":"en-US, nl","In-Reply-To":"<177504167723.2795797.8678915761327458529@ping.linuxembedded.co.uk>","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"7bit","X-Proofpoint-Spam-Details-Enc":"AW1haW4tMjYwNDAzMDA5MiBTYWx0ZWRfX+0MNuQ3E1N6q\n\tdFBo1z2tdDghbJSSCwFagNTw6bw6xVMuJhLWMk3o32iLxVTL7kDUg4+bnylzMH+KcVs0Vpz+suZ\n\tlfTEucT4W/6thWz3C8SHl9wph8BXRQNvVtnlwRoXR6ZUr17+xhOEjlS5Tdd5LvleM6wFT+LyuPc\n\tULPluU5wuWP+n0ifM/KuBvLxlBTWBWSiAiSdYnxkolAOVy/xVoWO9Y3ruQmflIJjeRAvL7XWTyr\n\t9GTUANJcnSShw2Q1Bw5RYWISLCBR3Et7q84CqIIMRXY8dPibnFx25Loy6NSLQRbiQOxQ5JSvIMn\n\t5HqhbzQSdBgUBYD671sqKNj7Y9Y+wRKfAzFD05rMUGtPG3ldI2BHC+iGkapjSJ8puWhUT5AlLqS\n\tY6vRtvv4ZkazfdpdAqP735j5U2VRizEBxCRzWW+Z/okursiiXl6nSNxPTNCGQbZs411ZDRC/O71\n\tFKgRH+ZPscYOZT9rBSw==","X-Authority-Analysis":"v=2.4 cv=W5g1lBWk c=1 sm=1 tr=0 ts=69cf9718 cx=c_pps\n\ta=WeENfcodrlLV9YRTxbY/uA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10\n\ta=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22\n\ta=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22\n\ta=WtdcyfI4Xn_RaxRShywA:9\n\ta=QEXdDO2ut3YA:10 a=kacYvNCVWA4VmyqE58fU:22","X-Proofpoint-ORIG-GUID":"1uvuW4oMZ9ze3xP9GW8srGQgx4lWUOfw","X-Proofpoint-GUID":"1uvuW4oMZ9ze3xP9GW8srGQgx4lWUOfw","X-Proofpoint-Virus-Version":"vendor=baseguard\n\tengine=ICAP:2.0.293, Aquarius:18.0.1143, Hydra:6.1.51,\n\tFMLib:17.12.100.49\n\tdefinitions=2026-04-03_03,2026-04-03_01,2025-10-01_01","X-Proofpoint-Spam-Details":"rule=outbound_notspam policy=outbound score=0\n\tbulkscore=0 suspectscore=0 clxscore=1015 phishscore=0 impostorscore=0\n\tmalwarescore=0 lowpriorityscore=0 adultscore=0 spamscore=0\n\tpriorityscore=1501\n\tclassifier=typeunknown authscore=0 authtc= authcc= route=outbound\n\tadjust=0\n\treason=mlx scancount=1 engine=8.22.0-2603050001\n\tdefinitions=main-2604030092","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>"}}]