[{"id":39007,"web_url":"https://patchwork.libcamera.org/comment/39007/","msgid":"<178059900749.1119811.250071219068349733@ping.linuxembedded.co.uk>","date":"2026-06-04T18:50:07","subject":"Re: [RFC PATCH v3 05/17] libcamera: software_isp: Introduce\n\targuments for parameters buffers","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Milan Zamazal (2026-06-04 10:50:49)\n> Processing parameters in software ISP are currently passed by value.\n> This is unlike hardware pipelines, which use a ring of buffers for the\n> purpose and pass references to the buffers currently selected from the\n> ring rather than passing the whole parameters buffers.\n\nI'll be curious if this lets us set up parallel asynchronous jobs on the\nGPU sometime ... will this let us parallelise or pipeline multiple jobs\nlater perhaps?\n\n\n> This is a preparatory patch to introduce a similar mechanism in software\n> ISP, in order to resolve TODO #5.  It adds a new argument paramsBufferId\n> for the future parameters buffer ids passed to the calls.  The buffer\n> ids must be passed to the following groups of methods:\n> \n> - IPASoftSimple::prepare, in order to create the parameters in the given\n>   buffer for the corresponding frame processing.\n> \n> - SoftwareIsp::saveIspParams, in order to signal that the parameters are\n>   set by the IPA.\n\nPatch 2/17 \"Rename setIspParams to paramsComputed\" means this might need\nan update here.\n\n\n> \n> - Debayer::process, in order to get the buffer with the processing\n>   parameters.\n> \n> - SoftwareIsp::paramsBufferReady, in order to signal that the selected\n>   parameters buffer from the ring is no longer needed for the given\n>   frame and can be reused.  This is a newly introduced signal.\n> \n> The type of the buffer id parameter is set to uint32_t because:\n> \n> - It can be used in mojom.\n> - It is consistent with the similar types in the hardware pipelines.\n> - It covers file descriptor number range, which will be used as buffer\n>   ids (more on this in followup patches).\n> \n> This patch doesn't do more than adding the arguments, to keep the patch\n> simple.  The buffer handling will be implemented in the followup\n> patches.\n> \n> Signed-off-by: Milan Zamazal <mzamazal@redhat.com>\n> ---\n>  .../libcamera/internal/software_isp/software_isp.h |  3 ++-\n>  include/libcamera/ipa/soft.mojom                   |  4 ++--\n>  src/ipa/simple/soft_simple.cpp                     |  8 +++++---\n>  src/libcamera/software_isp/debayer.cpp             |  8 +++++++-\n>  src/libcamera/software_isp/debayer.h               |  6 +++++-\n>  src/libcamera/software_isp/debayer_cpu.cpp         |  6 +++++-\n>  src/libcamera/software_isp/debayer_cpu.h           |  4 +++-\n>  src/libcamera/software_isp/debayer_egl.cpp         |  6 +++++-\n>  src/libcamera/software_isp/debayer_egl.h           |  4 +++-\n>  src/libcamera/software_isp/software_isp.cpp        | 14 +++++++++++---\n>  10 files changed, 48 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 86cb8f8de..85c9059e2 100644\n> --- a/include/libcamera/internal/software_isp/software_isp.h\n> +++ b/include/libcamera/internal/software_isp/software_isp.h\n> @@ -88,7 +88,8 @@ public:\n>         Signal<const ControlList &> setSensorControls;\n>  \n>  private:\n> -       void saveIspParams();\n> +       void saveIspParams(const uint32_t paramsBufferId);\n> +       void paramsBufferReady(const uint32_t paramsBufferId);\n>         void setSensorCtrls(const ControlList &sensorControls);\n>         void statsReady(uint32_t frame, uint32_t bufferId);\n>         void inputReady(FrameBuffer *input);\n> diff --git a/include/libcamera/ipa/soft.mojom b/include/libcamera/ipa/soft.mojom\n> index e75b03a3d..18789d5de 100644\n> --- a/include/libcamera/ipa/soft.mojom\n> +++ b/include/libcamera/ipa/soft.mojom\n> @@ -25,7 +25,7 @@ interface IPASoftInterface {\n>                 => (int32 ret);\n>  \n>         [async] queueRequest(uint32 frame, libcamera.ControlList sensorControls);\n> -       [async] computeParams(uint32 frame);\n> +       [async] computeParams(uint32 frame, uint32 paramsBufferId);\n>         [async] processStats(uint32 frame,\n>                              uint32 bufferId,\n>                              libcamera.ControlList sensorControls);\n> @@ -33,6 +33,6 @@ interface IPASoftInterface {\n>  \n>  interface IPASoftEventInterface {\n>         setSensorControls(libcamera.ControlList sensorControls);\n> -       paramsComputed();\n> +       paramsComputed(uint32 paramsBufferId);\n>         metadataReady(uint32 frame, libcamera.ControlList metadata);\n>  };\n> diff --git a/src/ipa/simple/soft_simple.cpp b/src/ipa/simple/soft_simple.cpp\n> index cfc1389e4..69bfef302 100644\n> --- a/src/ipa/simple/soft_simple.cpp\n> +++ b/src/ipa/simple/soft_simple.cpp\n> @@ -64,7 +64,8 @@ public:\n>         void stop() override;\n>  \n>         void queueRequest(const uint32_t frame, const ControlList &controls) override;\n> -       void computeParams(const uint32_t frame) override;\n> +       void computeParams(const uint32_t frame,\n> +                          const uint32_t paramsBufferId) override;\n>         void processStats(const uint32_t frame, const uint32_t bufferId,\n>                           const ControlList &sensorControls) override;\n>  \n> @@ -283,7 +284,8 @@ void IPASoftSimple::queueRequest(const uint32_t frame, const ControlList &contro\n>                 algo->queueRequest(context_, frame, frameContext, controls);\n>  }\n>  \n> -void IPASoftSimple::computeParams(const uint32_t frame)\n> +void IPASoftSimple::computeParams(const uint32_t frame,\n> +                                 const uint32_t paramsBufferId)\n>  {\n>         context_.activeState.combinedMatrix = Matrix<float, 3, 3>::identity();\n>  \n> @@ -292,7 +294,7 @@ void IPASoftSimple::computeParams(const uint32_t frame)\n>                 algo->prepare(context_, frame, frameContext, params_);\n>         params_->combinedMatrix = context_.activeState.combinedMatrix;\n>  \n> -       paramsComputed.emit();\n> +       paramsComputed.emit(paramsBufferId);\n>  }\n>  \n>  void IPASoftSimple::processStats(const uint32_t frame,\n> diff --git a/src/libcamera/software_isp/debayer.cpp b/src/libcamera/software_isp/debayer.cpp\n> index 2d7abfb83..7b1be52b2 100644\n> --- a/src/libcamera/software_isp/debayer.cpp\n> +++ b/src/libcamera/software_isp/debayer.cpp\n> @@ -104,9 +104,10 @@ Debayer::~Debayer()\n>   */\n>  \n>  /**\n> - * \\fn void Debayer::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, DebayerParams params)\n> + * \\fn void Debayer::process(uint32_t frame, const uint32_t paramsBufferId, FrameBuffer *input, FrameBuffer *output, DebayerParams params)\n\nI think again, here I would maybe anticipate that there should be a\nlayer translating these buffer allocations ... So I'm a bit weary of\npropogating 'ids' into what is the object that matches where the\nhardware ISP would just get a structured buffer object perhaps?\n\n\n--\nKieran","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 4FB66C324C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  4 Jun 2026 18:50:13 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 058EE635A0;\n\tThu,  4 Jun 2026 20:50:12 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D429662DC4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  4 Jun 2026 20:50:10 +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 CDD7613D7;\n\tThu,  4 Jun 2026 20:49:45 +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=\"IPAaG6fU\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1780598985;\n\tbh=2GtfNTywIm9d275OxbiJbWcmhrezGLP2GkF43nOflUA=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=IPAaG6fUFzzNnkRUjz0wdseY42VKSgctyQCYK/vxLMww9czv4jSznNTR+bsSC1kA2\n\tJ6MAFj/KcADFqYSsdHbvzoTe6rwu5JehntM3O4aitJEsSiJdP8uER0O7yH2b3cOeHN\n\tO/yjh1qy8OIqWJP0JVJPNtYX0FwJ+5lhXoemclRg=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20260604095105.68798-8-mzamazal@redhat.com>","References":"<20260604095105.68798-1-mzamazal@redhat.com>\n\t<20260604095105.68798-8-mzamazal@redhat.com>","Subject":"Re: [RFC PATCH v3 05/17] libcamera: software_isp: Introduce\n\targuments for parameters buffers","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"Milan Zamazal <mzamazal@redhat.com>, =?utf-8?b?QmFybmFiw6FzIFDFkWN6?=\n\t=?utf-8?q?e?= <barnabas.pocze@ideasonboard.com>,\n\tjohannes.goede@oss.qualcomm.com","To":"Milan Zamazal <mzamazal@redhat.com>, libcamera-devel@lists.libcamera.org","Date":"Thu, 04 Jun 2026 19:50:07 +0100","Message-ID":"<178059900749.1119811.250071219068349733@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":39012,"web_url":"https://patchwork.libcamera.org/comment/39012/","msgid":"<85ldcpxer2.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","date":"2026-06-08T14:56:17","subject":"Re: [RFC PATCH v3 05/17] libcamera: software_isp: Introduce\n\targuments for parameters buffers","submitter":{"id":177,"url":"https://patchwork.libcamera.org/api/people/177/","name":"Milan Zamazal","email":"mzamazal@redhat.com"},"content":"Kieran Bingham <kieran.bingham@ideasonboard.com> writes:\n\n> Quoting Milan Zamazal (2026-06-04 10:50:49)\n>> Processing parameters in software ISP are currently passed by value.\n>> This is unlike hardware pipelines, which use a ring of buffers for the\n>> purpose and pass references to the buffers currently selected from the\n>> ring rather than passing the whole parameters buffers.\n>\n> I'll be curious if this lets us set up parallel asynchronous jobs on the\n> GPU sometime ... will this let us parallelise or pipeline multiple jobs\n> later perhaps?\n\nProbably, especially if we switch to computing the parameters on the\nGPU.\n\n>> This is a preparatory patch to introduce a similar mechanism in software\n>> ISP, in order to resolve TODO #5.  It adds a new argument paramsBufferId\n>> for the future parameters buffer ids passed to the calls.  The buffer\n>> ids must be passed to the following groups of methods:\n>> \n>> - IPASoftSimple::prepare, in order to create the parameters in the given\n>>   buffer for the corresponding frame processing.\n>> \n>> - SoftwareIsp::saveIspParams, in order to signal that the parameters are\n>>   set by the IPA.\n>\n> Patch 2/17 \"Rename setIspParams to paramsComputed\" means this might need\n> an update here.\n\nYes.\n\n>> \n>> - Debayer::process, in order to get the buffer with the processing\n>>   parameters.\n>> \n>> - SoftwareIsp::paramsBufferReady, in order to signal that the selected\n>>   parameters buffer from the ring is no longer needed for the given\n>>   frame and can be reused.  This is a newly introduced signal.\n>> \n>> The type of the buffer id parameter is set to uint32_t because:\n>> \n>> - It can be used in mojom.\n>> - It is consistent with the similar types in the hardware pipelines.\n>> - It covers file descriptor number range, which will be used as buffer\n>>   ids (more on this in followup patches).\n>> \n>> This patch doesn't do more than adding the arguments, to keep the patch\n>> simple.  The buffer handling will be implemented in the followup\n>> patches.\n>> \n>> Signed-off-by: Milan Zamazal <mzamazal@redhat.com>\n>> ---\n>>  .../libcamera/internal/software_isp/software_isp.h |  3 ++-\n>>  include/libcamera/ipa/soft.mojom                   |  4 ++--\n>>  src/ipa/simple/soft_simple.cpp                     |  8 +++++---\n>>  src/libcamera/software_isp/debayer.cpp             |  8 +++++++-\n>>  src/libcamera/software_isp/debayer.h               |  6 +++++-\n>>  src/libcamera/software_isp/debayer_cpu.cpp         |  6 +++++-\n>>  src/libcamera/software_isp/debayer_cpu.h           |  4 +++-\n>>  src/libcamera/software_isp/debayer_egl.cpp         |  6 +++++-\n>>  src/libcamera/software_isp/debayer_egl.h           |  4 +++-\n>>  src/libcamera/software_isp/software_isp.cpp        | 14 +++++++++++---\n>>  10 files changed, 48 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 86cb8f8de..85c9059e2 100644\n>> --- a/include/libcamera/internal/software_isp/software_isp.h\n>> +++ b/include/libcamera/internal/software_isp/software_isp.h\n>> @@ -88,7 +88,8 @@ public:\n>>         Signal<const ControlList &> setSensorControls;\n>>  \n>>  private:\n>> -       void saveIspParams();\n>> +       void saveIspParams(const uint32_t paramsBufferId);\n>> +       void paramsBufferReady(const uint32_t paramsBufferId);\n>>         void setSensorCtrls(const ControlList &sensorControls);\n>>         void statsReady(uint32_t frame, uint32_t bufferId);\n>>         void inputReady(FrameBuffer *input);\n>> diff --git a/include/libcamera/ipa/soft.mojom b/include/libcamera/ipa/soft.mojom\n>> index e75b03a3d..18789d5de 100644\n>> --- a/include/libcamera/ipa/soft.mojom\n>> +++ b/include/libcamera/ipa/soft.mojom\n>> @@ -25,7 +25,7 @@ interface IPASoftInterface {\n>>                 => (int32 ret);\n>>  \n>>         [async] queueRequest(uint32 frame, libcamera.ControlList sensorControls);\n>> -       [async] computeParams(uint32 frame);\n>> +       [async] computeParams(uint32 frame, uint32 paramsBufferId);\n>>         [async] processStats(uint32 frame,\n>>                              uint32 bufferId,\n>>                              libcamera.ControlList sensorControls);\n>> @@ -33,6 +33,6 @@ interface IPASoftInterface {\n>>  \n>>  interface IPASoftEventInterface {\n>>         setSensorControls(libcamera.ControlList sensorControls);\n>> -       paramsComputed();\n>> +       paramsComputed(uint32 paramsBufferId);\n>>         metadataReady(uint32 frame, libcamera.ControlList metadata);\n>>  };\n>> diff --git a/src/ipa/simple/soft_simple.cpp b/src/ipa/simple/soft_simple.cpp\n>> index cfc1389e4..69bfef302 100644\n>> --- a/src/ipa/simple/soft_simple.cpp\n>> +++ b/src/ipa/simple/soft_simple.cpp\n>> @@ -64,7 +64,8 @@ public:\n>>         void stop() override;\n>>  \n>>         void queueRequest(const uint32_t frame, const ControlList &controls) override;\n>> -       void computeParams(const uint32_t frame) override;\n>> +       void computeParams(const uint32_t frame,\n>> +                          const uint32_t paramsBufferId) override;\n>>         void processStats(const uint32_t frame, const uint32_t bufferId,\n>>                           const ControlList &sensorControls) override;\n>>  \n>> @@ -283,7 +284,8 @@ void IPASoftSimple::queueRequest(const uint32_t frame, const ControlList &contro\n>>                 algo->queueRequest(context_, frame, frameContext, controls);\n>>  }\n>>  \n>> -void IPASoftSimple::computeParams(const uint32_t frame)\n>> +void IPASoftSimple::computeParams(const uint32_t frame,\n>> +                                 const uint32_t paramsBufferId)\n>>  {\n>>         context_.activeState.combinedMatrix = Matrix<float, 3, 3>::identity();\n>>  \n>> @@ -292,7 +294,7 @@ void IPASoftSimple::computeParams(const uint32_t frame)\n>>                 algo->prepare(context_, frame, frameContext, params_);\n>>         params_->combinedMatrix = context_.activeState.combinedMatrix;\n>>  \n>> -       paramsComputed.emit();\n>> +       paramsComputed.emit(paramsBufferId);\n>>  }\n>>  \n>>  void IPASoftSimple::processStats(const uint32_t frame,\n>> diff --git a/src/libcamera/software_isp/debayer.cpp b/src/libcamera/software_isp/debayer.cpp\n>> index 2d7abfb83..7b1be52b2 100644\n>> --- a/src/libcamera/software_isp/debayer.cpp\n>> +++ b/src/libcamera/software_isp/debayer.cpp\n>> @@ -104,9 +104,10 @@ Debayer::~Debayer()\n>>   */\n>>  \n>>  /**\n>> - * \\fn void Debayer::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, DebayerParams params)\n>> + * \\fn void Debayer::process(uint32_t frame, const uint32_t paramsBufferId, FrameBuffer *input, FrameBuffer *output, DebayerParams params)\n>\n> I think again, here I would maybe anticipate that there should be a\n> layer translating these buffer allocations ... So I'm a bit weary of\n> propogating 'ids' into what is the object that matches where the\n> hardware ISP would just get a structured buffer object perhaps?\n\nI'll have to remind myself what the hardware pipelines do exactly.","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 87498C324C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  8 Jun 2026 14:56:25 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B543961EDD;\n\tMon,  8 Jun 2026 16:56:24 +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 332EC61E74\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  8 Jun 2026 16:56:23 +0200 (CEST)","from mail-wr1-f71.google.com (mail-wr1-f71.google.com\n\t[209.85.221.71]) by relay.mimecast.com with ESMTP with STARTTLS\n\t(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n\tus-mta-125-Q_3BAC_NOjSc2kTLktmPVg-1; Mon, 08 Jun 2026 10:56:20 -0400","by mail-wr1-f71.google.com with SMTP id\n\tffacd0b85a97d-46016bedbaaso1621358f8f.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 08 Jun 2026 07:56:20 -0700 (PDT)","from mzamazal-thinkpadp1gen7.tpbc.csb\n\t(ip-77-48-47-4.net.vodafone.cz. [77.48.47.4])\n\tby smtp.gmail.com with ESMTPSA id\n\tffacd0b85a97d-4601f2dcae2sm56136408f8f.6.2026.06.08.07.56.17\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tMon, 08 Jun 2026 07:56:18 -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=\"Vx5pzbpj\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1780930581;\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=6cMkgc+FMVbS9c17w5Prk/iLo8QYj8u+cvZxP2vai8I=;\n\tb=Vx5pzbpjaWjLl3+qtwcfj7y6NVGehMlOgwNI852HOcNHjlM+q5iEa9IFOkyu75d62xxQVw\n\tJAkcV4IO4IbNXRb5b2jpd+9aeKWi5Kbzscl9OWTYzGOWQwfOUi54E/SaPmtiJPzFV93zp9\n\t6O3//20gu0l0xKvkapJFFTnXZboWFTQ=","X-MC-Unique":"Q_3BAC_NOjSc2kTLktmPVg-1","X-Mimecast-MFC-AGG-ID":"Q_3BAC_NOjSc2kTLktmPVg_1780930579","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20251104; t=1780930579; x=1781535379;\n\th=mime-version:user-agent:message-id:date:references:in-reply-to\n\t:subject:cc:to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject\n\t:date:message-id:reply-to;\n\tbh=6cMkgc+FMVbS9c17w5Prk/iLo8QYj8u+cvZxP2vai8I=;\n\tb=fy2GoDwRoWt8FGWdhH7/PjyXQ+1Ryjk0SkykfPQkEa2wqTzGz20DryDWS5IuER6kqF\n\t9MZ6svyyqb3uaRGwRqksuc+rHYUsW36J5NsTEZse9cBYYBy+Xt7nbZiBhaEAJhU10xS9\n\tqifSa9OQI7VnViPkt5yzxClIZmGo4X8cx1IxKXeIz9+O9griqgPF3WI6NOn/09TeE+zh\n\trddvdYBmmhc5fXh2CFzMmVg6Ish/A3Vmm5lMBE639/x3zt7KbhF1hrtMRloiLdIaAZpW\n\tF8D1lxe5HCPtqZ15+Ghj6Uh9lTizkwjA1OZCemrZJUptcxRPzPs4quQ5Rr6fRyoVluA8\n\tyfMQ==","X-Gm-Message-State":"AOJu0Yy/iQZVzEuYmF2x9zJy1HapAV3Gg++oAGEb8ghkjqQ0yd1rXvm7\n\tUrNOG73SLar3ZSCp0/Y9nn8Rb5shXORT8KKUrNbWeaPjRoRHWUT7DRZufeNzaTSco8kotXoOymQ\n\t6oA/Co6Psqmn43W09/+nw8Pavlvcb4vTBdjjr3V4343l4Emx7Pr/VUDGRlGXIMC+A43MiWvgjlV\n\tQ=","X-Gm-Gg":"Acq92OGpZJToEgzeiAvUGUbwupUsxs6WdOdvOxadSEN6olqBuTfGJp00c2TOGzqqXdI\n\tt7nHH87So0f8JNUmjKQaInJl/B0t+oGm0Sk3Omil582XxbBDtsWh12ak6NDuLAxRADrxOYLpmSq\n\thU2ABhrmCgrAIhNkItjuUuxF8r4WFLr0z0WwtDquxoCtlO10076tsaJW+1lNEddSctOuT35tbdO\n\thqK80AkRiouElLa55AYrbXtoKhkP5uXWwy5mRJj0OoBeNsmSIGUDRD9nTVaWE87wbDIC8jXgHge\n\tSNVrkRv/YPrJSTGlz0SEzEDLl7JGRm8dJOPTmuE75gLbRpapV47R8pHD8wJE/DDDfk+R2XAj12Q\n\tHtEIQH3FVZz8TaKRf7Kcls4T15zBKMkOohUXy5edRghnqxPa1uiF+VvM9dv9ZRjtTjd99ICHuNK\n\tEuek6D1fiADQ==","X-Received":["by 2002:a5d:4742:0:b0:44b:7ec9:2d76 with SMTP id\n\tffacd0b85a97d-460304ee3fdmr18612241f8f.7.1780930579113; \n\tMon, 08 Jun 2026 07:56:19 -0700 (PDT)","by 2002:a5d:4742:0:b0:44b:7ec9:2d76 with SMTP id\n\tffacd0b85a97d-460304ee3fdmr18612200f8f.7.1780930578659; \n\tMon, 08 Jun 2026 07:56:18 -0700 (PDT)"],"From":"Milan Zamazal <mzamazal@redhat.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org, =?utf-8?b?QmFybmFiw6FzIFDFkWN6?=\n\t=?utf-8?q?e?= <barnabas.pocze@ideasonboard.com>,\n\tjohannes.goede@oss.qualcomm.com","Subject":"Re: [RFC PATCH v3 05/17] libcamera: software_isp: Introduce\n\targuments for parameters buffers","In-Reply-To":"<178059900749.1119811.250071219068349733@ping.linuxembedded.co.uk>\n\t(Kieran Bingham's message of \"Thu, 04 Jun 2026 19:50:07 +0100\")","References":"<20260604095105.68798-1-mzamazal@redhat.com>\n\t<20260604095105.68798-8-mzamazal@redhat.com>\n\t<178059900749.1119811.250071219068349733@ping.linuxembedded.co.uk>","Date":"Mon, 08 Jun 2026 16:56:17 +0200","Message-ID":"<85ldcpxer2.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","User-Agent":"Gnus/5.13 (Gnus v5.13)","MIME-Version":"1.0","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"_fJvLx26aPYUTeVJWCD7PsyCCGN8LhKtNuvm0Q8Mgy4_1780930579","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>"}},{"id":39013,"web_url":"https://patchwork.libcamera.org/comment/39013/","msgid":"<85mrx5vxkh.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","date":"2026-06-08T15:52:46","subject":"Re: [RFC PATCH v3 05/17] libcamera: software_isp: Introduce\n\targuments for parameters buffers","submitter":{"id":177,"url":"https://patchwork.libcamera.org/api/people/177/","name":"Milan Zamazal","email":"mzamazal@redhat.com"},"content":"Milan Zamazal <mzamazal@redhat.com> writes:\n\n> Kieran Bingham <kieran.bingham@ideasonboard.com> writes:\n>\n>> I think again, here I would maybe anticipate that there should be a\n>> layer translating these buffer allocations ... So I'm a bit weary of\n>> propogating 'ids' into what is the object that matches where the\n>> hardware ISP would just get a structured buffer object perhaps?\n>\n> I'll have to remind myself what the hardware pipelines do exactly.\n\nIIRC I was initially deterred by using FrameBuffer there, which is not\nexactly matching the software ISP needs.  But yes, we could still use a\nsimilar mechanism, with a simpler struct:\n\n- There is nothing to change on the IPA side.  We pass the buffer id to\n  the IPA, which keeps mapping of ids to buffers.  This is similar to\n  what the hardware pipelines do.\n\n- On the debayering side, Debayer::paramsBuffers_ mapping could be\n  removed and a struct like\n\n     struct Debayer::Params {\n       DebayerParams *buffer;\n       uint32_t id;\n     }\n\n  could be used.  The struct would be passed instead of buffer id to the\n  processing.\n\nIs it what you mean?  It wouldn't be a complicated change.","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 21A12C328C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  8 Jun 2026 15:52:54 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 40E6761EF1;\n\tMon,  8 Jun 2026 17:52:53 +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 694B761E74\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  8 Jun 2026 17:52:51 +0200 (CEST)","from mail-wr1-f70.google.com (mail-wr1-f70.google.com\n\t[209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS\n\t(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n\tus-mta-317-uv_pbTgqNpOhHMXFjbc1Mw-1; Mon, 08 Jun 2026 11:52:49 -0400","by mail-wr1-f70.google.com with SMTP id\n\tffacd0b85a97d-46010392f89so4116725f8f.2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 08 Jun 2026 08:52:48 -0700 (PDT)","from mzamazal-thinkpadp1gen7.tpbc.csb\n\t(ip-77-48-47-4.net.vodafone.cz. [77.48.47.4])\n\tby smtp.gmail.com with ESMTPSA id\n\tffacd0b85a97d-4601f345209sm54945484f8f.17.2026.06.08.08.52.46\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tMon, 08 Jun 2026 08:52:46 -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=\"QU02/S7Q\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1780933970;\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=9ZLgY3lDUW7SZy7MLr7pNaETbXXUgQ/yJ2ZZvO0Cj80=;\n\tb=QU02/S7QnzfLA/voBGrudpMD15tGKZFZGBtGA/rn7t8qB6vzxGP5OXm2tK1bFHdToMQl3P\n\ta20d1fXh2RiVAqdTNe6EFTT6GGyskKWNY4K01CF3zt2krMOYZ0VqCKVoEx2rOXxWr31P+L\n\t79BsEQQ/XdhxvfJ2TN9JyPXs0+jKwhQ=","X-MC-Unique":"uv_pbTgqNpOhHMXFjbc1Mw-1","X-Mimecast-MFC-AGG-ID":"uv_pbTgqNpOhHMXFjbc1Mw_1780933968","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20251104; t=1780933968; x=1781538768;\n\th=mime-version:user-agent:message-id:date:references:in-reply-to\n\t:subject:cc:to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject\n\t:date:message-id:reply-to;\n\tbh=9ZLgY3lDUW7SZy7MLr7pNaETbXXUgQ/yJ2ZZvO0Cj80=;\n\tb=PUOvJXtI0GFHeG4NXBETc4ksXJyYNkHZSveBUt1Tsv4y+KTBrOB3eaDNzrlrJyElR6\n\tXEPQ72/4/02VJYP4B/gA1XFHCe333g7hxZwYwxst6UaSHEBuPd4dW/u2qUyz8Fdm/lrf\n\tvN8KZma9TOcBsE4h5YNJqEFb6ye8aJvg7XP4RjOxZaI42jj9GFyCypZVAwJOHAhRrKgu\n\tDXIEz20pkmTZAYAbdQOEezTu+PYNkitj2hiOjArcNfW0D452DQ34f6vQR6N/+8Fv3uAC\n\tVRsa/dW5h2A5nPyrGk1C0N52YABSY/klwr3lvxsXhi7gmJ/fTeeABA6pPnqvV1n+/pnq\n\tvghg==","X-Gm-Message-State":"AOJu0YxufXojkX+3uOLEp9i2eKbbx1+GevDxEiK5rvqLt8eXWgbP99gB\n\tVr5Tki6ZNzIvmzjhi/Tlgk7LZPmqoUQJlGGnBdC6dVa1PUeMYeGN3SpZ1+0A3NP4oSYFfka7unS\n\tMRIyylyTNo1bZvYb7TBsZFgxLciD3soA7+qyst+EFePMhgGpaU6swdEC0gJVatQEutNt7bZtc//\n\tjRkt6D1sc=","X-Gm-Gg":"Acq92OHznRkOlyf3Q5W8cYqX7AMnknyXEbvAfqka1kAOrhJD6bYtAlvnxvnY0+3tYVd\n\tgnnw+YnAgssBKZ4sjjG6Q8Pvq5DvTOdACsv0bl81iPnWvTifiZGR39MFr4JySq86PtW1DLN3FRk\n\twCTls9v786qHiRD56X5OP9L8OA+39IA92ensxuLEiL0oJAlMG/fxqMtt9HgmalS3o9S7DRH5ptb\n\t3wHp1WBIWYJVEr9IJt6r83eAYJM7gex/YrunhiCbUb65Hp9q7KmXT7LXEbKp6otAumJ/CysOkdb\n\tOqN5iaq5ehnmrL22UY4Co3zyS6Ln3xFmtI/F+zpe3vtcC1teJrNAC0fbHjSK3GSHvwkxRxV2T6a\n\t6IAaWjtP0G75OM7Qa4hh9AH7BSDW4eLZza5O2f//wAz3Xg9ziQ1P8GR0lgdJEtoI6FtOfPVYs2c\n\tWHPLsPf5HIEg==","X-Received":["by 2002:adf:e005:0:20b0:45e:edcc:f6dc with SMTP id\n\tffacd0b85a97d-460304eb340mr18384665f8f.6.1780933967887; \n\tMon, 08 Jun 2026 08:52:47 -0700 (PDT)","by 2002:adf:e005:0:20b0:45e:edcc:f6dc with SMTP id\n\tffacd0b85a97d-460304eb340mr18384635f8f.6.1780933967458; \n\tMon, 08 Jun 2026 08:52:47 -0700 (PDT)"],"From":"Milan Zamazal <mzamazal@redhat.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org, =?utf-8?b?QmFybmFiw6FzIFDFkWN6?=\n\t=?utf-8?q?e?= <barnabas.pocze@ideasonboard.com>,\n\tjohannes.goede@oss.qualcomm.com","Subject":"Re: [RFC PATCH v3 05/17] libcamera: software_isp: Introduce\n\targuments for parameters buffers","In-Reply-To":"<85ldcpxer2.fsf@mzamazal-thinkpadp1gen7.tpbc.csb> (Milan\n\tZamazal's message of \"Mon, 08 Jun 2026 16:56:17 +0200\")","References":"<20260604095105.68798-1-mzamazal@redhat.com>\n\t<20260604095105.68798-8-mzamazal@redhat.com>\n\t<178059900749.1119811.250071219068349733@ping.linuxembedded.co.uk>\n\t<85ldcpxer2.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","Date":"Mon, 08 Jun 2026 17:52:46 +0200","Message-ID":"<85mrx5vxkh.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","User-Agent":"Gnus/5.13 (Gnus v5.13)","MIME-Version":"1.0","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"bTdEG34thG3-FU4hY7aw_38qhRsE1EF3KEA2K-Aurg4_1780933968","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>"}}]