[v6,0/5] ipa: Allow IPA creation by name
mbox series

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

Message

Hans de Goede July 28, 2026, 5:24 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.

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 (3):
  libcamera: Create IPA by name
  pipeline: rpi: Explictly pass pipe()->name() when creating IPA
  libcamera: Create IPA by IPA proxy type name

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

 include/libcamera/internal/ipa_manager.h      |  6 +--
 include/libcamera/internal/ipa_module.h       |  4 +-
 include/libcamera/internal/pipeline_handler.h |  9 ++++-
 include/libcamera/ipa/ipa_module_info.h       |  1 -
 meson_options.txt                             |  2 +-
 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 => soft}/algorithms/adjust.cpp    |  0
 src/ipa/{simple => soft}/algorithms/adjust.h  |  0
 src/ipa/{simple => soft}/algorithms/agc.cpp   |  0
 src/ipa/{simple => soft}/algorithms/agc.h     |  0
 .../{simple => soft}/algorithms/algorithm.h   |  0
 src/ipa/{simple => soft}/algorithms/awb.cpp   |  2 +-
 src/ipa/{simple => soft}/algorithms/awb.h     |  0
 src/ipa/{simple => soft}/algorithms/blc.cpp   |  0
 src/ipa/{simple => soft}/algorithms/blc.h     |  0
 src/ipa/{simple => soft}/algorithms/ccm.cpp   |  0
 src/ipa/{simple => soft}/algorithms/ccm.h     |  0
 .../{simple => soft}/algorithms/meson.build   |  0
 src/ipa/{simple => soft}/data/meson.build     |  2 +-
 .../{simple => soft}/data/uncalibrated.yaml   |  0
 src/ipa/{simple => soft}/ipa_context.cpp      |  0
 src/ipa/{simple => soft}/ipa_context.h        |  0
 src/ipa/{simple => soft}/meson.build          |  0
 src/ipa/{simple => soft}/module.h             |  0
 src/ipa/{simple => soft}/soft_simple.cpp      |  3 +-
 src/ipa/vimc/vimc.cpp                         |  1 -
 src/libcamera/ipa_manager.cpp                 |  8 ++--
 src/libcamera/ipa_module.cpp                  | 29 ++++++--------
 .../pipeline/rpi/common/pipeline_base.cpp     |  2 +-
 src/libcamera/pipeline_handler.cpp            | 25 +++++++++++-
 test/ipa/ipa_interface_test.cpp               |  2 +-
 test/ipa/ipa_module_test.cpp                  |  3 --
 .../module_ipa_proxy.h.tmpl                   |  2 +
 38 files changed, 91 insertions(+), 55 deletions(-)
 rename src/ipa/{simple => soft}/algorithms/adjust.cpp (100%)
 rename src/ipa/{simple => soft}/algorithms/adjust.h (100%)
 rename src/ipa/{simple => soft}/algorithms/agc.cpp (100%)
 rename src/ipa/{simple => soft}/algorithms/agc.h (100%)
 rename src/ipa/{simple => soft}/algorithms/algorithm.h (100%)
 rename src/ipa/{simple => soft}/algorithms/awb.cpp (98%)
 rename src/ipa/{simple => soft}/algorithms/awb.h (100%)
 rename src/ipa/{simple => soft}/algorithms/blc.cpp (100%)
 rename src/ipa/{simple => soft}/algorithms/blc.h (100%)
 rename src/ipa/{simple => soft}/algorithms/ccm.cpp (100%)
 rename src/ipa/{simple => soft}/algorithms/ccm.h (100%)
 rename src/ipa/{simple => soft}/algorithms/meson.build (100%)
 rename src/ipa/{simple => soft}/data/meson.build (80%)
 rename src/ipa/{simple => soft}/data/uncalibrated.yaml (100%)
 rename src/ipa/{simple => soft}/ipa_context.cpp (100%)
 rename src/ipa/{simple => soft}/ipa_context.h (100%)
 rename src/ipa/{simple => soft}/meson.build (100%)
 rename src/ipa/{simple => soft}/module.h (100%)
 rename src/ipa/{simple => soft}/soft_simple.cpp (99%)