[PATCH v4 8/9] libcamera: software_isp: Track whether CCM is enabled

Kieran Bingham kieran.bingham at ideasonboard.com
Wed Jan 29 11:57:05 CET 2025


Quoting Milan Zamazal (2025-01-29 10:45:45)
> Hi Laurent,
> 
> Laurent Pinchart <laurent.pinchart at ideasonboard.com> writes:
> 
> > Hi Milan,
> >
> > On Tue, Jan 28, 2025 at 04:19:39PM +0100, Milan Zamazal wrote:
> >> Laurent Pinchart writes:
> >> > On Mon, Jan 13, 2025 at 02:51:05PM +0100, Milan Zamazal wrote:
> >> >> Applying color correction matrix (CCM) in software ISP is optional due
> >> >> to performance reasons.  CCM is applied if and only if `Ccm' algorithm
> >> >> is present in the tuning file and it defines some CCM.
> >> >> 
> >> >> Software ISP debayering is a performance critical piece of code and we
> >> >> do not want to use dynamic conditionals there.  Therefore we pass
> >> >> information about CCM application to debayering configuration and let it
> >> >> select the right versions of debayering functions using templates.  This
> >> >> is a similar trick as the previously used one for adding or not adding
> >> >> an alpha channel to the output.
> >> >> 
> >> >> Debayering gets this information but it ignores it in this patch.
> >> >> Actual processing with CCM is added in the followup patch.
> >> >> 
> >> >> Signed-off-by: Milan Zamazal <mzamazal at redhat.com>
> >> >> ---
> >> >>  include/libcamera/ipa/soft.mojom            |  2 +-
> >> >>  src/ipa/simple/algorithms/ccm.cpp           | 11 +++++--
> >> >>  src/ipa/simple/algorithms/ccm.h             |  1 +
> >> >>  src/ipa/simple/soft_simple.cpp              |  6 ++--
> >> >>  src/libcamera/software_isp/debayer.cpp      |  3 +-
> >> >>  src/libcamera/software_isp/debayer.h        |  3 +-
> >> >>  src/libcamera/software_isp/debayer_cpu.cpp  | 35 ++++++++++++---------
> >> >>  src/libcamera/software_isp/debayer_cpu.h    | 24 +++++++-------
> >> >>  src/libcamera/software_isp/software_isp.cpp |  5 +--
> >> >>  9 files changed, 54 insertions(+), 36 deletions(-)
> >> >> 
> >> >> diff --git a/include/libcamera/ipa/soft.mojom b/include/libcamera/ipa/soft.mojom
> >> >> index d52e6f1a..b5ed3905 100644
> >> >> --- a/include/libcamera/ipa/soft.mojom
> >> >> +++ b/include/libcamera/ipa/soft.mojom
> >> >> @@ -21,7 +21,7 @@ interface IPASoftInterface {
> >> >>   start() => (int32 ret);
> >> >>   stop();
> >> >>   configure(IPAConfigInfo configInfo)
> >> >> -         => (int32 ret);
> >> >> +         => (int32 ret, bool ccmEnabled);
> >> >
> >> > Do you foresee cases where the CCM algorithm could be enabled or
> >> > disabled depending on the camera configuration ? If not, I would return
> >> > this from the init() function instead of the configure() function.
> >> 
> >> OK, it's a bit more complicated to pass to the right place but possible.
> >> I'll do it in v5.
> >> 
> >> >>   [async] queueRequest(uint32 frame, libcamera.ControlList sensorControls);
> >> >>   [async] computeParams(uint32 frame);
> >> >> diff --git a/src/ipa/simple/algorithms/ccm.cpp b/src/ipa/simple/algorithms/ccm.cpp
> >> >> index 3c7fca2d..96038966 100644
> >> >> --- a/src/ipa/simple/algorithms/ccm.cpp
> >> >> +++ b/src/ipa/simple/algorithms/ccm.cpp
> >> >> @@ -38,12 +38,17 @@ int Ccm::init([[maybe_unused]] IPAContext &context, const YamlObject &tuningData
> >> >>   return 0;
> >> >>  }
> >> >>  
> >> >> -void Ccm::prepare(IPAContext &context, const uint32_t frame,
> >> >> -           IPAFrameContext &frameContext, [[maybe_unused]] DebayerParams *params)
> >> >> +int Ccm::configure(IPAContext &context,
> >> >> +            [[maybe_unused]] const IPAConfigInfo &configInfo)
> >> >
> >> > I think you can skip this and handled the ccmEnabled variable purely in
> >> > the IPA module, but checking if the CCM algorithm has been instantiated.
> >> > This can be done by inspecting the algorithms list.
> >> 
> >> I wouldn't like inspecting the algorithms list, I think it's cleaner to
> >> provide the information from the algorithm itself.  Moreover, other
> >> algorithms need information about CCM.
> >
> > You need to support the case where the CCM algorithm is not listed in
> > the tuning file, so the information has to be handled in the IPA module
> > itself. If the need is to check if a CCM algorithm has been
> > instantiated, then looking at the algorithms list seems the best fit.
> 
> Why is it better to check the list of the algorithms rather than the
> algorithm self-reporting itself by setting a flag in the context, which
> must be done anyway so that the other algorithms know (and the IPA
> module just passes this info to software ISP)?

Can you check what happens when there is no ccm: section in the tuning
file ?

I expect no ccm: in tuning file will mean no CCM algorithm gets
loaded/executed at all in the IPA. That's how the other libipa modules
work.

--
Kieran


More information about the libcamera-devel mailing list