[v7,0/8] ipa: Allow IPA creation by name
mbox series

Message ID 20260812184912.287894-1-johannes.goede@oss.qualcomm.com
Headers show
Series
  • ipa: Allow IPA creation by name
Related show

Message

Hans de Goede Aug. 12, 2026, 6:49 p.m. UTC
Hi All,

This is v6 of my / Jacopo's "ipa: Allow IPA creation by name" series,

This new version switches all pipeline handlers over to creating their
IPA by IPA proxy type rather then by name, with the exception of the
raspberry pi pipeline handlers which are switched to creating the IPA by
explicitly passing the pipeline handler name since the rpi/vc4 and rpi/pisp
IPAs share the same IPA proxy type.


Use-cases for this / series blocked by this are:

1. Using a differently named IPA with the rcar-gen4 pipeline handler:
https://patchwork.libcamera.org/project/libcamera/list/?series=6003

2. Using the softISP stats + IPA with the atomisp pipeline handler:
https://patchwork.libcamera.org/project/libcamera/list/?series=5169

3. The new camss pipeline handler will use the softISP as a fallback on
platforms where there is no hardware ISP support yet (so most platforms)
the softISP needs to be able to load its IPA from both the "simple" and
"camss" pipeline handlers, requiring something like this series.
https://patchwork.libcamera.org/project/libcamera/list/?series=6070

This has been tested by Jacopo on R-Car Gen4 and on Mali-C55 and by me
on Qualcomm Agetti and Hamoa SoCs with both the simple and camss pipeline
handlers.

I believe that this is ready for merging now.

Changes in v7:
- Add a comment explaining why pipe()->name() is explicitly passed
  for the RPi IPA creation
- Rename the softISP IPA from "simple" to "softisp" instead of "soft"
- Mark PipelineHandler::createIPA() overload with an explicit IPA name
  argument as deprecated
- 2 new patches to finish the IPA renaming to softisp / IPASoftIsp
  "ipa: softisp: Rename IPASoftSimple to IPASoftIsp"
  "ipa: softisp: Rename ipa::soft namespace to ipa::softisp"
- Moved one patch from camss series here, it fits here better since
  this is all about making the Software ISP usuable from more places:
  "ipa: softisp: Rename setIspParams signal to paramsComputed"

Changes in v6:
- Drop patch switching softISP to create its IPA by name
- Switch raspberry-pi pipeline-handlers to creating IPA by name
- Switch all other pipeline-handlers to creating IPA by proxy type name
- Rename "simple" softISP IPA to "soft" to match its proxy type name

Changes in v5:
- Rebase on top of db998e618aaa ("libcamera: pipeline_handler: Add
  createIPA() function") which moved the createIPA() wrapper for
  pipeline-handlers into the PipelineHandler class
- https://patchwork.libcamera.org/project/libcamera/list/?series=5940

Changes in v4:
- Rebase, change author of first patch to my new email address
- https://patchwork.libcamera.org/project/libcamera/list/?series=5876&state=*

Changes in v3:
- Add "ipa: Allow pipelines to have differently named IPA" patch
- https://lists.libcamera.org/pipermail/libcamera-devel/2025-October/053821.html

Changes in v2:
- Update tags, fix stray blank line

Changes in v1 from Hans' original patch:
- Slightly different approach addressing the review comments on Hans' v1 by
  creating an overload for IPAManager::createIPA() that allows pipelines to
  specify the IPA module name.

Regards,

Hans


Hans de Goede (6):
  libcamera: Create IPA by name
  pipeline: rpi: Explictly pass pipe()->name() when creating IPA
  libcamera: Create IPA by IPA proxy type name
  ipa: softisp: Rename IPASoftSimple to IPASoftIsp
  ipa: softisp: Rename ipa::soft namespace to ipa::softisp
  ipa: softisp: Rename setIspParams signal to paramsComputed

Jacopo Mondi (2):
  ipa: ipa_module: Remove pipelineName
  ipa: Allow pipelines to have differently named IPA

 Documentation/Doxyfile-internal.in            |  2 +-
 include/libcamera/internal/ipa_manager.h      |  6 +-
 include/libcamera/internal/ipa_module.h       |  4 +-
 include/libcamera/internal/pipeline_handler.h |  9 +-
 .../internal/software_isp/software_isp.h      | 10 +--
 include/libcamera/ipa/ipa_module_info.h       |  1 -
 include/libcamera/ipa/meson.build             |  2 +-
 .../ipa/{soft.mojom => softisp.mojom}         |  8 +-
 meson_options.txt                             |  4 +-
 src/ipa/ipu3/ipu3.cpp                         |  1 -
 src/ipa/mali-c55/mali-c55.cpp                 |  1 -
 src/ipa/meson.build                           | 40 ++++++---
 src/ipa/rkisp1/rkisp1.cpp                     |  1 -
 src/ipa/rpi/pisp/pisp.cpp                     |  1 -
 src/ipa/rpi/vc4/vc4.cpp                       |  1 -
 .../{simple => softisp}/algorithms/adjust.cpp | 12 +--
 .../{simple => softisp}/algorithms/adjust.h   |  4 +-
 .../{simple => softisp}/algorithms/agc.cpp    | 12 +--
 src/ipa/{simple => softisp}/algorithms/agc.h  |  4 +-
 .../algorithms/algorithm.h                    |  4 +-
 .../{simple => softisp}/algorithms/awb.cpp    | 20 ++---
 src/ipa/{simple => softisp}/algorithms/awb.h  | 12 +--
 .../{simple => softisp}/algorithms/blc.cpp    | 10 +--
 src/ipa/{simple => softisp}/algorithms/blc.h  |  4 +-
 .../{simple => softisp}/algorithms/ccm.cpp    |  6 +-
 src/ipa/{simple => softisp}/algorithms/ccm.h  |  4 +-
 .../algorithms/meson.build                    |  2 +-
 src/ipa/{simple => softisp}/data/meson.build  |  2 +-
 .../data/uncalibrated.yaml                    |  0
 src/ipa/{simple => softisp}/ipa_context.cpp   |  4 +-
 src/ipa/{simple => softisp}/ipa_context.h     |  6 +-
 src/ipa/{simple => softisp}/meson.build       | 10 +--
 src/ipa/{simple => softisp}/module.h          |  6 +-
 .../soft_simple.cpp => softisp/softisp.cpp}   | 85 +++++++++----------
 src/ipa/vimc/vimc.cpp                         |  1 -
 src/libcamera/ipa_manager.cpp                 |  8 +-
 src/libcamera/ipa_module.cpp                  | 29 +++----
 .../pipeline/rpi/common/pipeline_base.cpp     |  8 +-
 src/libcamera/pipeline/simple/simple.cpp      |  2 +-
 src/libcamera/pipeline_handler.cpp            | 27 +++++-
 src/libcamera/software_isp/software_isp.cpp   |  8 +-
 test/ipa/ipa_interface_test.cpp               |  2 +-
 test/ipa/ipa_module_test.cpp                  |  3 -
 .../module_ipa_proxy.h.tmpl                   |  2 +
 44 files changed, 216 insertions(+), 172 deletions(-)
 rename include/libcamera/ipa/{soft.mojom => softisp.mojom} (88%)
 rename src/ipa/{simple => softisp}/algorithms/adjust.cpp (91%)
 rename src/ipa/{simple => softisp}/algorithms/adjust.h (93%)
 rename src/ipa/{simple => softisp}/algorithms/agc.cpp (95%)
 rename src/ipa/{simple => softisp}/algorithms/agc.h (87%)
 rename src/ipa/{simple => softisp}/algorithms/algorithm.h (84%)
 rename src/ipa/{simple => softisp}/algorithms/awb.cpp (88%)
 rename src/ipa/{simple => softisp}/algorithms/awb.h (85%)
 rename src/ipa/{simple => softisp}/algorithms/blc.cpp (93%)
 rename src/ipa/{simple => softisp}/algorithms/blc.h (91%)
 rename src/ipa/{simple => softisp}/algorithms/ccm.cpp (94%)
 rename src/ipa/{simple => softisp}/algorithms/ccm.h (93%)
 rename src/ipa/{simple => softisp}/algorithms/meson.build (75%)
 rename src/ipa/{simple => softisp}/data/meson.build (79%)
 rename src/ipa/{simple => softisp}/data/uncalibrated.yaml (100%)
 rename src/ipa/{simple => softisp}/ipa_context.cpp (97%)
 rename src/ipa/{simple => softisp}/ipa_context.h (95%)
 rename src/ipa/{simple => softisp}/meson.build (78%)
 rename src/ipa/{simple => softisp}/module.h (82%)
 rename src/ipa/{simple/soft_simple.cpp => softisp/softisp.cpp} (81%)

Comments

Hans de Goede Aug. 12, 2026, 6:50 p.m. UTC | #1
Hi all,

I'm going to resend this since patches 5-8 did not make
it out the first time around.

Regards,

Hans



On 12-Aug-26 20:49, Hans de Goede wrote:
> Hi All,
> 
> This is v6 of my / Jacopo's "ipa: Allow IPA creation by name" series,
> 
> This new version switches all pipeline handlers over to creating their
> IPA by IPA proxy type rather then by name, with the exception of the
> raspberry pi pipeline handlers which are switched to creating the IPA by
> explicitly passing the pipeline handler name since the rpi/vc4 and rpi/pisp
> IPAs share the same IPA proxy type.
> 
> 
> Use-cases for this / series blocked by this are:
> 
> 1. Using a differently named IPA with the rcar-gen4 pipeline handler:
> https://patchwork.libcamera.org/project/libcamera/list/?series=6003
> 
> 2. Using the softISP stats + IPA with the atomisp pipeline handler:
> https://patchwork.libcamera.org/project/libcamera/list/?series=5169
> 
> 3. The new camss pipeline handler will use the softISP as a fallback on
> platforms where there is no hardware ISP support yet (so most platforms)
> the softISP needs to be able to load its IPA from both the "simple" and
> "camss" pipeline handlers, requiring something like this series.
> https://patchwork.libcamera.org/project/libcamera/list/?series=6070
> 
> This has been tested by Jacopo on R-Car Gen4 and on Mali-C55 and by me
> on Qualcomm Agetti and Hamoa SoCs with both the simple and camss pipeline
> handlers.
> 
> I believe that this is ready for merging now.
> 
> Changes in v7:
> - Add a comment explaining why pipe()->name() is explicitly passed
>   for the RPi IPA creation
> - Rename the softISP IPA from "simple" to "softisp" instead of "soft"
> - Mark PipelineHandler::createIPA() overload with an explicit IPA name
>   argument as deprecated
> - 2 new patches to finish the IPA renaming to softisp / IPASoftIsp
>   "ipa: softisp: Rename IPASoftSimple to IPASoftIsp"
>   "ipa: softisp: Rename ipa::soft namespace to ipa::softisp"
> - Moved one patch from camss series here, it fits here better since
>   this is all about making the Software ISP usuable from more places:
>   "ipa: softisp: Rename setIspParams signal to paramsComputed"
> 
> Changes in v6:
> - Drop patch switching softISP to create its IPA by name
> - Switch raspberry-pi pipeline-handlers to creating IPA by name
> - Switch all other pipeline-handlers to creating IPA by proxy type name
> - Rename "simple" softISP IPA to "soft" to match its proxy type name
> 
> Changes in v5:
> - Rebase on top of db998e618aaa ("libcamera: pipeline_handler: Add
>   createIPA() function") which moved the createIPA() wrapper for
>   pipeline-handlers into the PipelineHandler class
> - https://patchwork.libcamera.org/project/libcamera/list/?series=5940
> 
> Changes in v4:
> - Rebase, change author of first patch to my new email address
> - https://patchwork.libcamera.org/project/libcamera/list/?series=5876&state=*
> 
> Changes in v3:
> - Add "ipa: Allow pipelines to have differently named IPA" patch
> - https://lists.libcamera.org/pipermail/libcamera-devel/2025-October/053821.html
> 
> Changes in v2:
> - Update tags, fix stray blank line
> 
> Changes in v1 from Hans' original patch:
> - Slightly different approach addressing the review comments on Hans' v1 by
>   creating an overload for IPAManager::createIPA() that allows pipelines to
>   specify the IPA module name.
> 
> Regards,
> 
> Hans
> 
> 
> Hans de Goede (6):
>   libcamera: Create IPA by name
>   pipeline: rpi: Explictly pass pipe()->name() when creating IPA
>   libcamera: Create IPA by IPA proxy type name
>   ipa: softisp: Rename IPASoftSimple to IPASoftIsp
>   ipa: softisp: Rename ipa::soft namespace to ipa::softisp
>   ipa: softisp: Rename setIspParams signal to paramsComputed
> 
> Jacopo Mondi (2):
>   ipa: ipa_module: Remove pipelineName
>   ipa: Allow pipelines to have differently named IPA
> 
>  Documentation/Doxyfile-internal.in            |  2 +-
>  include/libcamera/internal/ipa_manager.h      |  6 +-
>  include/libcamera/internal/ipa_module.h       |  4 +-
>  include/libcamera/internal/pipeline_handler.h |  9 +-
>  .../internal/software_isp/software_isp.h      | 10 +--
>  include/libcamera/ipa/ipa_module_info.h       |  1 -
>  include/libcamera/ipa/meson.build             |  2 +-
>  .../ipa/{soft.mojom => softisp.mojom}         |  8 +-
>  meson_options.txt                             |  4 +-
>  src/ipa/ipu3/ipu3.cpp                         |  1 -
>  src/ipa/mali-c55/mali-c55.cpp                 |  1 -
>  src/ipa/meson.build                           | 40 ++++++---
>  src/ipa/rkisp1/rkisp1.cpp                     |  1 -
>  src/ipa/rpi/pisp/pisp.cpp                     |  1 -
>  src/ipa/rpi/vc4/vc4.cpp                       |  1 -
>  .../{simple => softisp}/algorithms/adjust.cpp | 12 +--
>  .../{simple => softisp}/algorithms/adjust.h   |  4 +-
>  .../{simple => softisp}/algorithms/agc.cpp    | 12 +--
>  src/ipa/{simple => softisp}/algorithms/agc.h  |  4 +-
>  .../algorithms/algorithm.h                    |  4 +-
>  .../{simple => softisp}/algorithms/awb.cpp    | 20 ++---
>  src/ipa/{simple => softisp}/algorithms/awb.h  | 12 +--
>  .../{simple => softisp}/algorithms/blc.cpp    | 10 +--
>  src/ipa/{simple => softisp}/algorithms/blc.h  |  4 +-
>  .../{simple => softisp}/algorithms/ccm.cpp    |  6 +-
>  src/ipa/{simple => softisp}/algorithms/ccm.h  |  4 +-
>  .../algorithms/meson.build                    |  2 +-
>  src/ipa/{simple => softisp}/data/meson.build  |  2 +-
>  .../data/uncalibrated.yaml                    |  0
>  src/ipa/{simple => softisp}/ipa_context.cpp   |  4 +-
>  src/ipa/{simple => softisp}/ipa_context.h     |  6 +-
>  src/ipa/{simple => softisp}/meson.build       | 10 +--
>  src/ipa/{simple => softisp}/module.h          |  6 +-
>  .../soft_simple.cpp => softisp/softisp.cpp}   | 85 +++++++++----------
>  src/ipa/vimc/vimc.cpp                         |  1 -
>  src/libcamera/ipa_manager.cpp                 |  8 +-
>  src/libcamera/ipa_module.cpp                  | 29 +++----
>  .../pipeline/rpi/common/pipeline_base.cpp     |  8 +-
>  src/libcamera/pipeline/simple/simple.cpp      |  2 +-
>  src/libcamera/pipeline_handler.cpp            | 27 +++++-
>  src/libcamera/software_isp/software_isp.cpp   |  8 +-
>  test/ipa/ipa_interface_test.cpp               |  2 +-
>  test/ipa/ipa_module_test.cpp                  |  3 -
>  .../module_ipa_proxy.h.tmpl                   |  2 +
>  44 files changed, 216 insertions(+), 172 deletions(-)
>  rename include/libcamera/ipa/{soft.mojom => softisp.mojom} (88%)
>  rename src/ipa/{simple => softisp}/algorithms/adjust.cpp (91%)
>  rename src/ipa/{simple => softisp}/algorithms/adjust.h (93%)
>  rename src/ipa/{simple => softisp}/algorithms/agc.cpp (95%)
>  rename src/ipa/{simple => softisp}/algorithms/agc.h (87%)
>  rename src/ipa/{simple => softisp}/algorithms/algorithm.h (84%)
>  rename src/ipa/{simple => softisp}/algorithms/awb.cpp (88%)
>  rename src/ipa/{simple => softisp}/algorithms/awb.h (85%)
>  rename src/ipa/{simple => softisp}/algorithms/blc.cpp (93%)
>  rename src/ipa/{simple => softisp}/algorithms/blc.h (91%)
>  rename src/ipa/{simple => softisp}/algorithms/ccm.cpp (94%)
>  rename src/ipa/{simple => softisp}/algorithms/ccm.h (93%)
>  rename src/ipa/{simple => softisp}/algorithms/meson.build (75%)
>  rename src/ipa/{simple => softisp}/data/meson.build (79%)
>  rename src/ipa/{simple => softisp}/data/uncalibrated.yaml (100%)
>  rename src/ipa/{simple => softisp}/ipa_context.cpp (97%)
>  rename src/ipa/{simple => softisp}/ipa_context.h (95%)
>  rename src/ipa/{simple => softisp}/meson.build (78%)
>  rename src/ipa/{simple => softisp}/module.h (82%)
>  rename src/ipa/{simple/soft_simple.cpp => softisp/softisp.cpp} (81%)
>