[{"id":38498,"web_url":"https://patchwork.libcamera.org/comment/38498/","msgid":"<adTU1B8Eufew641x@zed>","date":"2026-04-07T09:56:56","subject":"Re: [PATCH 01/11] libcamera: software_isp: Convert TODO list to\n\tmarkdown","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"content":"Hi Laurent\n\nOn Sun, Apr 05, 2026 at 10:14:33PM +0300, Laurent Pinchart wrote:\n> To prepare for merging the two software ISP TODO lists (TODO and\n> gpuisp-todo.txt), convert the TODO file to markdown.\n>\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>  src/libcamera/software_isp/{TODO => TODO.md} | 50 ++++++++++++--------\n>  utils/tuning/config-example.yaml             |  2 +-\n>  2 files changed, 32 insertions(+), 20 deletions(-)\n>  rename src/libcamera/software_isp/{TODO => TODO.md} (91%)\n>\n> diff --git a/src/libcamera/software_isp/TODO b/src/libcamera/software_isp/TODO.md\n> similarity index 91%\n> rename from src/libcamera/software_isp/TODO\n> rename to src/libcamera/software_isp/TODO.md\n> index f19e15ae27a0..bdd4a7421766 100644\n> --- a/src/libcamera/software_isp/TODO\n> +++ b/src/libcamera/software_isp/TODO.md\n> @@ -1,5 +1,16 @@\n> -2. Reconsider stats sharing\n> +# Software ISP TODO list\n>\n> +This file contains the TODO list for the software ISP.\n> +\n> +## Common code and CPU-based implementation\n> +\n> +The TODO items in this section gather comments from patch review that were not\n> +deemed to require being addressed right away. The text in block quotes is\n> +copied directly from e-mail review.\n> +\n> +### Reconsider stats sharing\n> +\n> +```\n>  >>> +void SwStatsCpu::finishFrame(void)\n>  >>> +{\n>  >>> +\t*sharedStats_ = stats_;\n> @@ -22,11 +33,11 @@\n>\n>  That would match how we deal with hardware ISPs, and I think that's a\n>  good idea. It will help decoupling the processing side from the IPA.\n> +```\n>\n> ----\n> -\n> -3. Remove statsReady signal\n> +### Remove statsReady signal\n>\n> +```\n>  > class SwStatsCpu\n>  > {\n>  > \t/**\n> @@ -50,11 +61,11 @@ Removing the signal and refactoring those classes doesn't have to be\n>  addressed now, I think it would be part of a larger refactoring\n>  (possibly also considering platforms that have no ISP but can produce\n>  stats in hardware, such as the i.MX7), but please keep it on your radar.\n> +```\n>\n> ----\n> -\n> -5. Store ISP parameters in per-frame buffers\n> +### Store ISP parameters in per-frame buffers\n>\n> +```\n>  > /**\n>  >  * \\fn void Debayer::process(FrameBuffer *input, FrameBuffer *output, DebayerParams params)\n>  >  * \\brief Process the bayer data into the requested format.\n> @@ -68,11 +79,11 @@ stats in hardware, such as the i.MX7), but please keep it on your radar.\n>\n>  Possibly something to address later, by storing ISP parameters in\n>  per-frame buffers like we do for hardware ISPs.\n> +```\n>\n> ----\n> -\n> -8. DebayerCpu cleanups\n> +### DebayerCpu cleanups\n>\n> +```\n>  > >> class DebayerCpu : public Debayer, public Object\n>  > >>   const SharedFD &getStatsFD() { return stats_->getStatsFD(); }\n>  > >\n> @@ -105,21 +116,21 @@ the need for performances and the need for a maintainable architecture.\n>  > I think this falls under the lets wait until we have a GPU\n>  > based SoftISP MVP/POC and then do some refactoring to see which\n>  > bits should go where.\n> +```\n>\n> ----\n> -\n> -8. Decouple pipeline and IPA naming\n> +### Decouple pipeline and IPA naming\n>\n> +```\n>  > The current src/ipa/meson.build assumes the IPA name to match the\n>  > pipeline name. For this reason \"-Dipas=simple\" is used for the\n>  > Soft IPA module.\n>\n>  This should be addressed.\n> +```\n>\n> ----\n> -\n> -9. Doxyfile cleanup\n> +### Doxyfile cleanup\n>\n> +```\n>  >> diff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in\n>  >> index a86ea6c1..2be8d47b 100644\n>  >> --- a/Documentation/Doxyfile.in\n> @@ -160,13 +171,14 @@ Yes, because, well... all the other IPAs were doing that...\n>\n>  > It doesn't have to be done before merging, but could you\n>  > address this sooner than later ?\n> +```\n>\n> ----\n> -\n> -13. Improve black level and colour gains application\n> +### Improve black level and colour gains application\n>\n> +```\n>  I think the black level should eventually be moved before debayering, and\n>  ideally the colour gains as well. I understand the need for optimizations to\n>  lower the CPU consumption, but at the same time I don't feel comfortable\n>  building up on top of an implementation that may work a bit more by chance than\n>  by correctness, as that's not very maintainable.\n> +```\n> diff --git a/utils/tuning/config-example.yaml b/utils/tuning/config-example.yaml\n> index 5593eaef809e..680f9213b269 100644\n> --- a/utils/tuning/config-example.yaml\n> +++ b/utils/tuning/config-example.yaml\n> @@ -51,4 +51,4 @@ general:\n>    macbeth:\n>      small: 1\n>      show: 0\n> -#  blacklevel: 32\n> \\ No newline at end of file\n> +#  blacklevel: 32\n\nIntentional ?\n\n> --\n> Regards,\n>\n> Laurent Pinchart\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 C9DA0BDCBD\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  7 Apr 2026 09:57:02 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 07A8262D52;\n\tTue,  7 Apr 2026 11:57: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 8887062010\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  7 Apr 2026 11:57:00 +0200 (CEST)","from ideasonboard.com (mob-109-113-47-41.net.vodafone.it\n\t[109.113.47.41])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id E08996DC;\n\tTue,  7 Apr 2026 11:55:32 +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=\"MAZpWdzz\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1775555733;\n\tbh=fm3bHajWn9towmzXypWO2BKfEXsiuCbFdcSxWccC+no=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=MAZpWdzz8AgjnhLS6rXjaG4U5xwGG2zaRnxNNO/MFW9+T1O1LAPkK9JrRrGzG8P4z\n\tuM5o4aZffQOo7B1aC55bF1omxTHOULwmqA3cgwDvhQ4VjP0B+75QllQC3/UqhARdBo\n\t9yw/8LaP1dUg9BJ3GgzUPw9OEkXSZfRaYM8NdvuE=","Date":"Tue, 7 Apr 2026 11:56:56 +0200","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Subject":"Re: [PATCH 01/11] libcamera: software_isp: Convert TODO list to\n\tmarkdown","Message-ID":"<adTU1B8Eufew641x@zed>","References":"<20260405191443.1209948-1-laurent.pinchart@ideasonboard.com>\n\t<20260405191443.1209948-2-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20260405191443.1209948-2-laurent.pinchart@ideasonboard.com>","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":38503,"web_url":"https://patchwork.libcamera.org/comment/38503/","msgid":"<20260407101843.GF1268443@killaraus.ideasonboard.com>","date":"2026-04-07T10:18:43","subject":"Re: [PATCH 01/11] libcamera: software_isp: Convert TODO list to\n\tmarkdown","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"On Tue, Apr 07, 2026 at 11:56:56AM +0200, Jacopo Mondi wrote:\n> On Sun, Apr 05, 2026 at 10:14:33PM +0300, Laurent Pinchart wrote:\n> > To prepare for merging the two software ISP TODO lists (TODO and\n> > gpuisp-todo.txt), convert the TODO file to markdown.\n> >\n> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > ---\n> >  src/libcamera/software_isp/{TODO => TODO.md} | 50 ++++++++++++--------\n> >  utils/tuning/config-example.yaml             |  2 +-\n> >  2 files changed, 32 insertions(+), 20 deletions(-)\n> >  rename src/libcamera/software_isp/{TODO => TODO.md} (91%)\n> >\n> > diff --git a/src/libcamera/software_isp/TODO b/src/libcamera/software_isp/TODO.md\n> > similarity index 91%\n> > rename from src/libcamera/software_isp/TODO\n> > rename to src/libcamera/software_isp/TODO.md\n> > index f19e15ae27a0..bdd4a7421766 100644\n> > --- a/src/libcamera/software_isp/TODO\n> > +++ b/src/libcamera/software_isp/TODO.md\n> > @@ -1,5 +1,16 @@\n> > -2. Reconsider stats sharing\n> > +# Software ISP TODO list\n> >\n> > +This file contains the TODO list for the software ISP.\n> > +\n> > +## Common code and CPU-based implementation\n> > +\n> > +The TODO items in this section gather comments from patch review that were not\n> > +deemed to require being addressed right away. The text in block quotes is\n> > +copied directly from e-mail review.\n> > +\n> > +### Reconsider stats sharing\n> > +\n> > +```\n> >  >>> +void SwStatsCpu::finishFrame(void)\n> >  >>> +{\n> >  >>> +\t*sharedStats_ = stats_;\n> > @@ -22,11 +33,11 @@\n> >\n> >  That would match how we deal with hardware ISPs, and I think that's a\n> >  good idea. It will help decoupling the processing side from the IPA.\n> > +```\n> >\n> > ----\n> > -\n> > -3. Remove statsReady signal\n> > +### Remove statsReady signal\n> >\n> > +```\n> >  > class SwStatsCpu\n> >  > {\n> >  > \t/**\n> > @@ -50,11 +61,11 @@ Removing the signal and refactoring those classes doesn't have to be\n> >  addressed now, I think it would be part of a larger refactoring\n> >  (possibly also considering platforms that have no ISP but can produce\n> >  stats in hardware, such as the i.MX7), but please keep it on your radar.\n> > +```\n> >\n> > ----\n> > -\n> > -5. Store ISP parameters in per-frame buffers\n> > +### Store ISP parameters in per-frame buffers\n> >\n> > +```\n> >  > /**\n> >  >  * \\fn void Debayer::process(FrameBuffer *input, FrameBuffer *output, DebayerParams params)\n> >  >  * \\brief Process the bayer data into the requested format.\n> > @@ -68,11 +79,11 @@ stats in hardware, such as the i.MX7), but please keep it on your radar.\n> >\n> >  Possibly something to address later, by storing ISP parameters in\n> >  per-frame buffers like we do for hardware ISPs.\n> > +```\n> >\n> > ----\n> > -\n> > -8. DebayerCpu cleanups\n> > +### DebayerCpu cleanups\n> >\n> > +```\n> >  > >> class DebayerCpu : public Debayer, public Object\n> >  > >>   const SharedFD &getStatsFD() { return stats_->getStatsFD(); }\n> >  > >\n> > @@ -105,21 +116,21 @@ the need for performances and the need for a maintainable architecture.\n> >  > I think this falls under the lets wait until we have a GPU\n> >  > based SoftISP MVP/POC and then do some refactoring to see which\n> >  > bits should go where.\n> > +```\n> >\n> > ----\n> > -\n> > -8. Decouple pipeline and IPA naming\n> > +### Decouple pipeline and IPA naming\n> >\n> > +```\n> >  > The current src/ipa/meson.build assumes the IPA name to match the\n> >  > pipeline name. For this reason \"-Dipas=simple\" is used for the\n> >  > Soft IPA module.\n> >\n> >  This should be addressed.\n> > +```\n> >\n> > ----\n> > -\n> > -9. Doxyfile cleanup\n> > +### Doxyfile cleanup\n> >\n> > +```\n> >  >> diff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in\n> >  >> index a86ea6c1..2be8d47b 100644\n> >  >> --- a/Documentation/Doxyfile.in\n> > @@ -160,13 +171,14 @@ Yes, because, well... all the other IPAs were doing that...\n> >\n> >  > It doesn't have to be done before merging, but could you\n> >  > address this sooner than later ?\n> > +```\n> >\n> > ----\n> > -\n> > -13. Improve black level and colour gains application\n> > +### Improve black level and colour gains application\n> >\n> > +```\n> >  I think the black level should eventually be moved before debayering, and\n> >  ideally the colour gains as well. I understand the need for optimizations to\n> >  lower the CPU consumption, but at the same time I don't feel comfortable\n> >  building up on top of an implementation that may work a bit more by chance than\n> >  by correctness, as that's not very maintainable.\n> > +```\n> > diff --git a/utils/tuning/config-example.yaml b/utils/tuning/config-example.yaml\n> > index 5593eaef809e..680f9213b269 100644\n> > --- a/utils/tuning/config-example.yaml\n> > +++ b/utils/tuning/config-example.yaml\n> > @@ -51,4 +51,4 @@ general:\n> >    macbeth:\n> >      small: 1\n> >      show: 0\n> > -#  blacklevel: 32\n> > \\ No newline at end of file\n> > +#  blacklevel: 32\n> \n> Intentional ?\n\nNo, I'll drop that. Feel free to send a R-b for the patch already, so I\nwon't have to resubmit just for this :-)","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 051AEBDCBD\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  7 Apr 2026 10:18:48 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 42FA162D84;\n\tTue,  7 Apr 2026 12:18:47 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 34B3162846\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  7 Apr 2026 12:18:45 +0200 (CEST)","from killaraus.ideasonboard.com\n\t(2001-14ba-703d-e500--2a1.rev.dnainternet.fi\n\t[IPv6:2001:14ba:703d:e500::2a1])\n\tby perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id A1BB5250;\n\tTue,  7 Apr 2026 12:17:17 +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=\"g/a750h3\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1775557037;\n\tbh=mct2ikuFjV0gNjHsG9iK+0Uohvo3vK8C9C5FrIdrrRg=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=g/a750h3VMOKAnRbNF5w/cjbEvDIClew2B7/DLEWGl7PNxyBcenDFGcKbBkbQihAA\n\tivUNS87jKFbyGnnIuTKKhCz0bTXWS7Mljgd4tuv+ozLl43s23vpYNBMBRaTMdVZpW0\n\tjW5tf1XjtvjNu299iYRExAjks420YVEynXCbLHRo=","Date":"Tue, 7 Apr 2026 13:18:43 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Subject":"Re: [PATCH 01/11] libcamera: software_isp: Convert TODO list to\n\tmarkdown","Message-ID":"<20260407101843.GF1268443@killaraus.ideasonboard.com>","References":"<20260405191443.1209948-1-laurent.pinchart@ideasonboard.com>\n\t<20260405191443.1209948-2-laurent.pinchart@ideasonboard.com>\n\t<adTU1B8Eufew641x@zed>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<adTU1B8Eufew641x@zed>","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":38505,"web_url":"https://patchwork.libcamera.org/comment/38505/","msgid":"<adT00o6uTA0_iXXQ@zed>","date":"2026-04-07T12:13:27","subject":"Re: [PATCH 01/11] libcamera: software_isp: Convert TODO list to\n\tmarkdown","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"content":"Hi Laurent\n\nOn Tue, Apr 07, 2026 at 01:18:43PM +0300, Laurent Pinchart wrote:\n> On Tue, Apr 07, 2026 at 11:56:56AM +0200, Jacopo Mondi wrote:\n> > On Sun, Apr 05, 2026 at 10:14:33PM +0300, Laurent Pinchart wrote:\n> > > To prepare for merging the two software ISP TODO lists (TODO and\n> > > gpuisp-todo.txt), convert the TODO file to markdown.\n> > >\n> > > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > > ---\n> > >  src/libcamera/software_isp/{TODO => TODO.md} | 50 ++++++++++++--------\n> > >  utils/tuning/config-example.yaml             |  2 +-\n> > >  2 files changed, 32 insertions(+), 20 deletions(-)\n> > >  rename src/libcamera/software_isp/{TODO => TODO.md} (91%)\n> > >\n> > > diff --git a/src/libcamera/software_isp/TODO b/src/libcamera/software_isp/TODO.md\n> > > similarity index 91%\n> > > rename from src/libcamera/software_isp/TODO\n> > > rename to src/libcamera/software_isp/TODO.md\n> > > index f19e15ae27a0..bdd4a7421766 100644\n> > > --- a/src/libcamera/software_isp/TODO\n> > > +++ b/src/libcamera/software_isp/TODO.md\n> > > @@ -1,5 +1,16 @@\n> > > -2. Reconsider stats sharing\n> > > +# Software ISP TODO list\n> > >\n> > > +This file contains the TODO list for the software ISP.\n> > > +\n> > > +## Common code and CPU-based implementation\n> > > +\n> > > +The TODO items in this section gather comments from patch review that were not\n> > > +deemed to require being addressed right away. The text in block quotes is\n> > > +copied directly from e-mail review.\n> > > +\n> > > +### Reconsider stats sharing\n> > > +\n> > > +```\n> > >  >>> +void SwStatsCpu::finishFrame(void)\n> > >  >>> +{\n> > >  >>> +\t*sharedStats_ = stats_;\n> > > @@ -22,11 +33,11 @@\n> > >\n> > >  That would match how we deal with hardware ISPs, and I think that's a\n> > >  good idea. It will help decoupling the processing side from the IPA.\n> > > +```\n> > >\n> > > ----\n> > > -\n> > > -3. Remove statsReady signal\n> > > +### Remove statsReady signal\n> > >\n> > > +```\n> > >  > class SwStatsCpu\n> > >  > {\n> > >  > \t/**\n> > > @@ -50,11 +61,11 @@ Removing the signal and refactoring those classes doesn't have to be\n> > >  addressed now, I think it would be part of a larger refactoring\n> > >  (possibly also considering platforms that have no ISP but can produce\n> > >  stats in hardware, such as the i.MX7), but please keep it on your radar.\n> > > +```\n> > >\n> > > ----\n> > > -\n> > > -5. Store ISP parameters in per-frame buffers\n> > > +### Store ISP parameters in per-frame buffers\n> > >\n> > > +```\n> > >  > /**\n> > >  >  * \\fn void Debayer::process(FrameBuffer *input, FrameBuffer *output, DebayerParams params)\n> > >  >  * \\brief Process the bayer data into the requested format.\n> > > @@ -68,11 +79,11 @@ stats in hardware, such as the i.MX7), but please keep it on your radar.\n> > >\n> > >  Possibly something to address later, by storing ISP parameters in\n> > >  per-frame buffers like we do for hardware ISPs.\n> > > +```\n> > >\n> > > ----\n> > > -\n> > > -8. DebayerCpu cleanups\n> > > +### DebayerCpu cleanups\n> > >\n> > > +```\n> > >  > >> class DebayerCpu : public Debayer, public Object\n> > >  > >>   const SharedFD &getStatsFD() { return stats_->getStatsFD(); }\n> > >  > >\n> > > @@ -105,21 +116,21 @@ the need for performances and the need for a maintainable architecture.\n> > >  > I think this falls under the lets wait until we have a GPU\n> > >  > based SoftISP MVP/POC and then do some refactoring to see which\n> > >  > bits should go where.\n> > > +```\n> > >\n> > > ----\n> > > -\n> > > -8. Decouple pipeline and IPA naming\n> > > +### Decouple pipeline and IPA naming\n> > >\n> > > +```\n> > >  > The current src/ipa/meson.build assumes the IPA name to match the\n> > >  > pipeline name. For this reason \"-Dipas=simple\" is used for the\n> > >  > Soft IPA module.\n> > >\n> > >  This should be addressed.\n> > > +```\n> > >\n> > > ----\n> > > -\n> > > -9. Doxyfile cleanup\n> > > +### Doxyfile cleanup\n> > >\n> > > +```\n> > >  >> diff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in\n> > >  >> index a86ea6c1..2be8d47b 100644\n> > >  >> --- a/Documentation/Doxyfile.in\n> > > @@ -160,13 +171,14 @@ Yes, because, well... all the other IPAs were doing that...\n> > >\n> > >  > It doesn't have to be done before merging, but could you\n> > >  > address this sooner than later ?\n> > > +```\n> > >\n> > > ----\n> > > -\n> > > -13. Improve black level and colour gains application\n> > > +### Improve black level and colour gains application\n> > >\n> > > +```\n> > >  I think the black level should eventually be moved before debayering, and\n> > >  ideally the colour gains as well. I understand the need for optimizations to\n> > >  lower the CPU consumption, but at the same time I don't feel comfortable\n> > >  building up on top of an implementation that may work a bit more by chance than\n> > >  by correctness, as that's not very maintainable.\n> > > +```\n> > > diff --git a/utils/tuning/config-example.yaml b/utils/tuning/config-example.yaml\n> > > index 5593eaef809e..680f9213b269 100644\n> > > --- a/utils/tuning/config-example.yaml\n> > > +++ b/utils/tuning/config-example.yaml\n> > > @@ -51,4 +51,4 @@ general:\n> > >    macbeth:\n> > >      small: 1\n> > >      show: 0\n> > > -#  blacklevel: 32\n> > > \\ No newline at end of file\n> > > +#  blacklevel: 32\n> >\n> > Intentional ?\n>\n> No, I'll drop that. Feel free to send a R-b for the patch already, so I\n> won't have to resubmit just for this :-)\n>\n\nOh sure, sorry, I forgot\nReviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n\nThanks\n  j\n\n> --\n> Regards,\n>\n> Laurent Pinchart","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 4F0CABDCBD\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  7 Apr 2026 12:13:33 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 20F5062D82;\n\tTue,  7 Apr 2026 14:13:32 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id F124762846\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  7 Apr 2026 14:13:30 +0200 (CEST)","from ideasonboard.com (mob-109-113-47-41.net.vodafone.it\n\t[109.113.47.41])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 6A7B04B3;\n\tTue,  7 Apr 2026 14:12:03 +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=\"szC21HA0\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1775563923;\n\tbh=P8t3mW+B7zuREvgs30fglPEhw8xuLcWU1CJqqYSyBLw=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=szC21HA0IWe5YpEYO8Ik8f0GAsroCfnPb70Zzrf3td5orkgBk9VMgY2zMdPX6PdUt\n\tsqSmt0EjIz5qdWD7vMuz8m2OGjk97Jo4wPJrZC2YSFhcOyW0wCGlngjl9SlfJVjkZN\n\tSPk56W6xuk0bOtHN0k8aoRADBe0sRqikDjPBZsLQ=","Date":"Tue, 7 Apr 2026 14:13:27 +0200","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>, \n\tlibcamera-devel@lists.libcamera.org","Subject":"Re: [PATCH 01/11] libcamera: software_isp: Convert TODO list to\n\tmarkdown","Message-ID":"<adT00o6uTA0_iXXQ@zed>","References":"<20260405191443.1209948-1-laurent.pinchart@ideasonboard.com>\n\t<20260405191443.1209948-2-laurent.pinchart@ideasonboard.com>\n\t<adTU1B8Eufew641x@zed>\n\t<20260407101843.GF1268443@killaraus.ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20260407101843.GF1268443@killaraus.ideasonboard.com>","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":38589,"web_url":"https://patchwork.libcamera.org/comment/38589/","msgid":"<d508c121-6d0e-4791-b2f8-9492a0df35e4@ideasonboard.com>","date":"2026-04-13T10:36:24","subject":"Re: [PATCH 01/11] libcamera: software_isp: Convert TODO list to\n\tmarkdown","submitter":{"id":216,"url":"https://patchwork.libcamera.org/api/people/216/","name":"Barnabás Pőcze","email":"barnabas.pocze@ideasonboard.com"},"content":"2026. 04. 05. 21:14 keltezéssel, Laurent Pinchart írta:\n> To prepare for merging the two software ISP TODO lists (TODO and\n> gpuisp-todo.txt), convert the TODO file to markdown.\n> \n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>   src/libcamera/software_isp/{TODO => TODO.md} | 50 ++++++++++++--------\n>   utils/tuning/config-example.yaml             |  2 +-\n>   2 files changed, 32 insertions(+), 20 deletions(-)\n>   rename src/libcamera/software_isp/{TODO => TODO.md} (91%)\n> \n> diff --git a/src/libcamera/software_isp/TODO b/src/libcamera/software_isp/TODO.md\n> similarity index 91%\n> rename from src/libcamera/software_isp/TODO\n> rename to src/libcamera/software_isp/TODO.md\n> index f19e15ae27a0..bdd4a7421766 100644\n> --- a/src/libcamera/software_isp/TODO\n> +++ b/src/libcamera/software_isp/TODO.md\n> @@ -1,5 +1,16 @@\n> -2. Reconsider stats sharing\n> +# Software ISP TODO list\n>   \n> +This file contains the TODO list for the software ISP.\n> +\n> +## Common code and CPU-based implementation\n> +\n> +The TODO items in this section gather comments from patch review that were not\n> +deemed to require being addressed right away. The text in block quotes is\n> +copied directly from e-mail review.\n> +\n> +### Reconsider stats sharing\n> +\n> +```\n>   >>> +void SwStatsCpu::finishFrame(void)\n>   >>> +{\n>   >>> +\t*sharedStats_ = stats_;\n> @@ -22,11 +33,11 @@\n>   \n>   That would match how we deal with hardware ISPs, and I think that's a\n>   good idea. It will help decoupling the processing side from the IPA.\n> +```\n>   \n> ----\n> -\n> -3. Remove statsReady signal\n> +### Remove statsReady signal\n>   \n> +```\n>   > class SwStatsCpu\n>   > {\n>   > \t/**\n> @@ -50,11 +61,11 @@ Removing the signal and refactoring those classes doesn't have to be\n>   addressed now, I think it would be part of a larger refactoring\n>   (possibly also considering platforms that have no ISP but can produce\n>   stats in hardware, such as the i.MX7), but please keep it on your radar.\n> +```\n>   \n> ----\n> -\n> -5. Store ISP parameters in per-frame buffers\n> +### Store ISP parameters in per-frame buffers\n>   \n> +```\n>   > /**\n>   >  * \\fn void Debayer::process(FrameBuffer *input, FrameBuffer *output, DebayerParams params)\n>   >  * \\brief Process the bayer data into the requested format.\n> @@ -68,11 +79,11 @@ stats in hardware, such as the i.MX7), but please keep it on your radar.\n>   \n>   Possibly something to address later, by storing ISP parameters in\n>   per-frame buffers like we do for hardware ISPs.\n> +```\n>   \n> ----\n> -\n> -8. DebayerCpu cleanups\n> +### DebayerCpu cleanups\n>   \n> +```\n>   > >> class DebayerCpu : public Debayer, public Object\n>   > >>   const SharedFD &getStatsFD() { return stats_->getStatsFD(); }\n>   > >\n> @@ -105,21 +116,21 @@ the need for performances and the need for a maintainable architecture.\n>   > I think this falls under the lets wait until we have a GPU\n>   > based SoftISP MVP/POC and then do some refactoring to see which\n>   > bits should go where.\n> +```\n>   \n> ----\n> -\n> -8. Decouple pipeline and IPA naming\n> +### Decouple pipeline and IPA naming\n>   \n> +```\n>   > The current src/ipa/meson.build assumes the IPA name to match the\n>   > pipeline name. For this reason \"-Dipas=simple\" is used for the\n>   > Soft IPA module.\n>   \n>   This should be addressed.\n> +```\n>   \n> ----\n> -\n> -9. Doxyfile cleanup\n> +### Doxyfile cleanup\n>   \n> +```\n>   >> diff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in\n>   >> index a86ea6c1..2be8d47b 100644\n>   >> --- a/Documentation/Doxyfile.in\n> @@ -160,13 +171,14 @@ Yes, because, well... all the other IPAs were doing that...\n>   \n>   > It doesn't have to be done before merging, but could you\n>   > address this sooner than later ?\n> +```\n>   \n> ----\n> -\n> -13. Improve black level and colour gains application\n> +### Improve black level and colour gains application\n>   \n> +```\n>   I think the black level should eventually be moved before debayering, and\n>   ideally the colour gains as well. I understand the need for optimizations to\n>   lower the CPU consumption, but at the same time I don't feel comfortable\n>   building up on top of an implementation that may work a bit more by chance than\n>   by correctness, as that's not very maintainable.\n> +```\n> diff --git a/utils/tuning/config-example.yaml b/utils/tuning/config-example.yaml\n> index 5593eaef809e..680f9213b269 100644\n> --- a/utils/tuning/config-example.yaml\n> +++ b/utils/tuning/config-example.yaml\n> @@ -51,4 +51,4 @@ general:\n>     macbeth:\n>       small: 1\n>       show: 0\n> -#  blacklevel: 32\n> \\ No newline at end of file\n> +#  blacklevel: 32\n\nLooks ok to me, apart from the above.\n\nReviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>","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 8BD01BDCBD\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 13 Apr 2026 10:36:30 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D23E562E81;\n\tMon, 13 Apr 2026 12:36:29 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 5F7CE6271A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 13 Apr 2026 12:36:28 +0200 (CEST)","from [192.168.33.49] (185.182.214.8.nat.pool.zt.hu [185.182.214.8])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 8074A4F1;\n\tMon, 13 Apr 2026 12:34:56 +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=\"p/uCGprF\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1776076496;\n\tbh=BtrtbWaNM8U6ksSvfTBctB3ArA+PVwj9SB8QRVQmh/w=;\n\th=Date:Subject:To:References:From:In-Reply-To:From;\n\tb=p/uCGprFFXkSU6JuRFMnl7RInXQJNsI42XkS2022fynTDLXl1X+kTR1E4GsQ+uTWu\n\tHa7RzwcRabglrkFW1/UOtakufHVxhTdUgTwf2ozpPpH1Z7cxH222E+I9PKOckSQjt+\n\thNGSY0ZJ+uCgvu+gjOr63r/nDD877Fp+HI9z2Kz8=","Message-ID":"<d508c121-6d0e-4791-b2f8-9492a0df35e4@ideasonboard.com>","Date":"Mon, 13 Apr 2026 12:36:24 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH 01/11] libcamera: software_isp: Convert TODO list to\n\tmarkdown","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20260405191443.1209948-1-laurent.pinchart@ideasonboard.com>\n\t<20260405191443.1209948-2-laurent.pinchart@ideasonboard.com>","From":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Content-Language":"en-US, hu-HU","In-Reply-To":"<20260405191443.1209948-2-laurent.pinchart@ideasonboard.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"8bit","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>"}}]