| Message ID | 20260720-libipa-algorithms-v6-0-ececb73f97cb@ideasonboard.com |
|---|---|
| Headers | show |
| Series |
|
| Related | show |
Hi Jacopo, Jacopo Mondi <jacopo.mondi@ideasonboard.com> writes: > The series is identical to v5 up to patch 27. The only minor difference > is that I back-tracked on making functions class members but in the > RkISP1 IPA I kept them as static helpers. > > Patches 28 and 29 are new. > > They remove the templating of the LscAlgorithm class hierarchy and > instead implement quantization in the LscAlgorithm class. > > So we now expand polynomials and parse tables as floats, store them > in a map and in LscAlgorithm we re-iterate over it to either quantized > them in the polynomial case, or simply cast floats to the register bit > width if table. > > Timing the duration of the whole RkISP1 configure operation, it now > takes 3 msec compared to 600 usec. > > RkISP1Lsc lsc.cpp:171 Configure took = 3081[µs] > > RkISP1Lsc lsc.cpp:172 Configure took = 583[µs] > > Also, now each IPA has to define their own Interpolator::interpolate() > overload (see rkisp1 IPA as an example of this). > > As the interface of LscAlgorithm has changed, patches on the list that > port the LSC algorithm of other platforms based on v5 will have to be > rebased. I'm having trouble to understand the exact motivation for the change. From the libipa consumer side, it means that for `simple' pipeline, I had to copy & substitute & paste code from rkisp1 for no very good reason. Which looks like a step against the code unification goal, while it doesn't seem to simplify rkisp1 that much. The float representation could be useful for software ISP, where there is no inherent reason to use quantized values (although they may still have its use for portable textures, as pointed out by Bryan). But it seems using quantized values is still imposed on libipa LSC consumers? > > > Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > --- > Changes in v6: > - Address comments received on v5, mostly on documentation > - Remove templating of LscPolynomial and perform quantization in > LscAlgorithm > > Changes in v5: > - Add "ipa: libipa: lsc_polynomial: Fix polynomial parsing error" > to fix and exiting potential issue with Polynomial parsing > - Fix Simple, which I broke in v4, thanks Milan > > Changes in v4: > - s/awb/AWB in comments everywhere, same for CCM and LSC > - Awb: changelog per patch > - Make AwbStats pure virtual and move stats parsing logic to the IPA > modules > - Reduce comments/renames to reduce patch size and comments > - Collect tags > > Changes in v3: > - Address comments on Awb from Stefan: > - Introduce AwbImplementation::Result > - Move AwbStats implementation to IPAs > - Drop AwbStats::rg()/bg() and re-implement AwbGray accordingly > - Fix Saturation bug in Simple Ccm algorithm > - Fix Simple Ccm gain limits using Q<2, 8> > - Update Mali CCM and Gamma to latest uAPI patch version > - Fix Mali CCM gain masking as reported by Dan > - Break down libIPA Lsc implementation as requested by Stefan > > Changes in v2: > - Introduce awb::Context to simplify ActiveState and FrameContext > definition > - Add mali uAPI header for CCM and Gamma > - Do not rename Mali functions for hardware configuration in awb and lsc > - Spelling and documentation > > --- > Jacopo Mondi (28): > ipa: libipa: awb: Reimplement AwbAlgorithm > ipa: mali-c55: awb: Port to use libipa AwbAlgorithm > ipa: libipa: Add CcmAlgorithm to libipa > ipa: rkisp1: ccm: Port to use CcmAlgorithm > include: linux: mali-c55: Update to support CCM and Gamma > ipa: mali-c55: Implement Ccm algorithm > ipa: rkisp1: lsc: Re-architecture Lsc support > ipa: libipa: Introduce lsc_base.h > ipa: libipa: lsc_polynomial: Fix polynomial parsing error > ipa: libipa: lsc_polynomial: Rename LscPolynomial > ipa: libipa: lsc_polynomial: Do not inline functions > ipa: libipa: lsc: Move Interpolator<lsc::Components> to lsc_base > ipa: rkisp1: lsc: Remove rogue empty line > ipa: libipa: lsc_polynomial: Move LscPolynomial from RkISP1 > ipa: libipa: lsc_table: Move LscTable from RkISP1 > ipa: libipa: lsc_base: Add sampleForCrop documentation > ipa: libipa: lsc: Introduce LscAlgorithm > ipa: libipa: lsc: Move sizesListToPositions() back to rkisp1 > ipa: rkisp1: lsc: Port to use LscAlgorithm > ipa: libipa: lsc: Make Components a map<> > ipa: libipa: lsc: Document Components parsing > ipa: libipa: lsc_polynomial: Remove sensorSize_ > ipa: libipa: lsc: Document LscDescriptor::sensorSize usage > ipa: libipa: lsc: Quantize lsc gains in IPA > ipa: libipa: lsc: Quantize gains in LscAlgorithm > ipa: libipa: lsc: Re-sort LscAlgorithmBase documentation > ipa: mali-c55: Add sensorInfo to IPAContext > ipa: mali-c55: Port to use LscAlgorithm > > Kieran Bingham (2): > ipa: simple: awb: Port to use libipa AwbAlgorithm > ipa: simple: Port to use libipa CcmAlgorithm > > Laurent Pinchart (1): > ipa: libipa: lsc_polynomial: Don't inline ValueNode accessor > > .../internal/software_isp/debayer_params.h | 4 +- > include/linux/media/arm/mali-c55-config.h | 86 ++++- > src/ipa/libipa/awb.cpp | 418 +++++++++++++++++--- > src/ipa/libipa/awb.h | 100 ++++- > src/ipa/libipa/awb_bayes.cpp | 52 +-- > src/ipa/libipa/awb_bayes.h | 12 +- > src/ipa/libipa/awb_grey.cpp | 16 +- > src/ipa/libipa/awb_grey.h | 6 +- > src/ipa/libipa/ccm.cpp | 245 ++++++++++++ > src/ipa/libipa/ccm.h | 77 ++++ > src/ipa/libipa/lsc.cpp | 372 ++++++++++++++++++ > src/ipa/libipa/lsc.h | 137 +++++++ > src/ipa/libipa/lsc_base.cpp | 136 +++++++ > src/ipa/libipa/lsc_base.h | 56 +++ > src/ipa/libipa/lsc_polynomial.cpp | 208 +++++++++- > src/ipa/libipa/lsc_polynomial.h | 100 ++--- > src/ipa/libipa/lsc_table.cpp | 107 +++++ > src/ipa/libipa/lsc_table.h | 55 +++ > src/ipa/libipa/meson.build | 8 + > src/ipa/mali-c55/algorithms/awb.cpp | 223 ++++++----- > src/ipa/mali-c55/algorithms/awb.h | 28 +- > src/ipa/mali-c55/algorithms/ccm.cpp | 173 +++++++++ > src/ipa/mali-c55/algorithms/ccm.h | 66 ++++ > src/ipa/mali-c55/algorithms/lsc.cpp | 156 +++++--- > src/ipa/mali-c55/algorithms/lsc.h | 32 +- > src/ipa/mali-c55/algorithms/meson.build | 1 + > src/ipa/mali-c55/ipa_context.cpp | 3 + > src/ipa/mali-c55/ipa_context.h | 20 +- > src/ipa/mali-c55/mali-c55.cpp | 2 + > src/ipa/mali-c55/params.h | 2 + > src/ipa/rkisp1/algorithms/awb.cpp | 191 ++------- > src/ipa/rkisp1/algorithms/awb.h | 18 +- > src/ipa/rkisp1/algorithms/ccm.cpp | 97 +---- > src/ipa/rkisp1/algorithms/ccm.h | 17 +- > src/ipa/rkisp1/algorithms/lsc.cpp | 429 +++------------------ > src/ipa/rkisp1/algorithms/lsc.h | 74 ++-- > src/ipa/rkisp1/ipa_context.h | 49 +-- > src/ipa/simple/algorithms/awb.cpp | 140 +++++-- > src/ipa/simple/algorithms/awb.h | 28 ++ > src/ipa/simple/algorithms/blc.cpp | 2 +- > src/ipa/simple/algorithms/ccm.cpp | 74 ++-- > src/ipa/simple/algorithms/ccm.h | 22 +- > src/ipa/simple/ipa_context.h | 15 +- > src/libcamera/software_isp/debayer_cpu.cpp | 12 +- > 44 files changed, 2934 insertions(+), 1135 deletions(-) > --- > base-commit: 709ad59a8d90af3570be1c8d02dee0ec9e011954 > change-id: 20260615-libipa-algorithms-59666bca0a2f > > Best regards,
Hi Milan thanks for the review On Tue, Jul 21, 2026 at 02:25:56PM +0200, Milan Zamazal wrote: > Hi Jacopo, > > Jacopo Mondi <jacopo.mondi@ideasonboard.com> writes: > > > The series is identical to v5 up to patch 27. The only minor difference > > is that I back-tracked on making functions class members but in the > > RkISP1 IPA I kept them as static helpers. > > > > Patches 28 and 29 are new. > > > > They remove the templating of the LscAlgorithm class hierarchy and > > instead implement quantization in the LscAlgorithm class. > > > > So we now expand polynomials and parse tables as floats, store them > > in a map and in LscAlgorithm we re-iterate over it to either quantized > > them in the polynomial case, or simply cast floats to the register bit > > width if table. > > > > Timing the duration of the whole RkISP1 configure operation, it now > > takes 3 msec compared to 600 usec. > > > > RkISP1Lsc lsc.cpp:171 Configure took = 3081[µs] > > > > RkISP1Lsc lsc.cpp:172 Configure took = 583[µs] > > > > Also, now each IPA has to define their own Interpolator::interpolate() > > overload (see rkisp1 IPA as an example of this). > > > > As the interface of LscAlgorithm has changed, patches on the list that > > port the LSC algorithm of other platforms based on v5 will have to be > > rebased. > > I'm having trouble to understand the exact motivation for the change. I've been suggested to move quantization to LscAlgorithm to remove templating of LscPolynomial and LscTable. > From the libipa consumer side, it means that for `simple' pipeline, I > had to copy & substitute & paste code from rkisp1 for no very good > reason. Which looks like a step against the code unification goal, > while it doesn't seem to simplify rkisp1 that much. Agreed > > The float representation could be useful for software ISP, where there > is no inherent reason to use quantized values (although they may still > have its use for portable textures, as pointed out by Bryan). But it > seems using quantized values is still imposed on libipa LSC consumers? Let's put LscPolynomial aside for a second and only consider LscTable. Gains in the tuning files are currently expressed in register format (iow already quantized). This means Lsc tables are not portable across platforms. I think there is consensus on the desire to express gains as floats in tuning files, so that we can share lsc tables among platforms. This is good and will be done on top along with table re-scaling to adapt them to different sensor's resolutions. On quantization: up until v5 I templated the whole LscImplementation class hierarchy with the platform's Q format, so that when the gain vectors are populated (when a polynomial is expanded or a table-resampled in future) they are stored in register format ready to be consumed by the IPA. This required to template a few classes, which was not that bad to me. I've been suggested to remove quantization from the LscImplementation hierarchy, so that it's simpler and instead perform quantization either in the IPA module itself or in LscAlgorithm class. This requires to go over the already populated arrays and quantize the entries one by one before passing them to the IPA. I don't think it's ideal. However having floats as an intermediate values might make interpolation more accurate (I don't know and I don't see why, I'm just speculating) and the implementation is simpler. v6 requires however that each IPA defines its own Interpolator::interpolate() overload (maybe this could be generalized?). Is this the code that you needed to add to your IPA ? On the gain format: simple is kind of special. It doesn't require quantization and you could maybe do with floats. But the same reasoning applies to AWB, gamma, CCM and all other algorithms, where you don't have any register format to translate to. If you want floats in your IPA to work with, maybe using UQ<0, 32> as register format would do ? > > > > > > > Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > > --- > > Changes in v6: > > - Address comments received on v5, mostly on documentation > > - Remove templating of LscPolynomial and perform quantization in > > LscAlgorithm > > > > Changes in v5: > > - Add "ipa: libipa: lsc_polynomial: Fix polynomial parsing error" > > to fix and exiting potential issue with Polynomial parsing > > - Fix Simple, which I broke in v4, thanks Milan > > > > Changes in v4: > > - s/awb/AWB in comments everywhere, same for CCM and LSC > > - Awb: changelog per patch > > - Make AwbStats pure virtual and move stats parsing logic to the IPA > > modules > > - Reduce comments/renames to reduce patch size and comments > > - Collect tags > > > > Changes in v3: > > - Address comments on Awb from Stefan: > > - Introduce AwbImplementation::Result > > - Move AwbStats implementation to IPAs > > - Drop AwbStats::rg()/bg() and re-implement AwbGray accordingly > > - Fix Saturation bug in Simple Ccm algorithm > > - Fix Simple Ccm gain limits using Q<2, 8> > > - Update Mali CCM and Gamma to latest uAPI patch version > > - Fix Mali CCM gain masking as reported by Dan > > - Break down libIPA Lsc implementation as requested by Stefan > > > > Changes in v2: > > - Introduce awb::Context to simplify ActiveState and FrameContext > > definition > > - Add mali uAPI header for CCM and Gamma > > - Do not rename Mali functions for hardware configuration in awb and lsc > > - Spelling and documentation > > > > --- > > Jacopo Mondi (28): > > ipa: libipa: awb: Reimplement AwbAlgorithm > > ipa: mali-c55: awb: Port to use libipa AwbAlgorithm > > ipa: libipa: Add CcmAlgorithm to libipa > > ipa: rkisp1: ccm: Port to use CcmAlgorithm > > include: linux: mali-c55: Update to support CCM and Gamma > > ipa: mali-c55: Implement Ccm algorithm > > ipa: rkisp1: lsc: Re-architecture Lsc support > > ipa: libipa: Introduce lsc_base.h > > ipa: libipa: lsc_polynomial: Fix polynomial parsing error > > ipa: libipa: lsc_polynomial: Rename LscPolynomial > > ipa: libipa: lsc_polynomial: Do not inline functions > > ipa: libipa: lsc: Move Interpolator<lsc::Components> to lsc_base > > ipa: rkisp1: lsc: Remove rogue empty line > > ipa: libipa: lsc_polynomial: Move LscPolynomial from RkISP1 > > ipa: libipa: lsc_table: Move LscTable from RkISP1 > > ipa: libipa: lsc_base: Add sampleForCrop documentation > > ipa: libipa: lsc: Introduce LscAlgorithm > > ipa: libipa: lsc: Move sizesListToPositions() back to rkisp1 > > ipa: rkisp1: lsc: Port to use LscAlgorithm > > ipa: libipa: lsc: Make Components a map<> > > ipa: libipa: lsc: Document Components parsing > > ipa: libipa: lsc_polynomial: Remove sensorSize_ > > ipa: libipa: lsc: Document LscDescriptor::sensorSize usage > > ipa: libipa: lsc: Quantize lsc gains in IPA > > ipa: libipa: lsc: Quantize gains in LscAlgorithm > > ipa: libipa: lsc: Re-sort LscAlgorithmBase documentation > > ipa: mali-c55: Add sensorInfo to IPAContext > > ipa: mali-c55: Port to use LscAlgorithm > > > > Kieran Bingham (2): > > ipa: simple: awb: Port to use libipa AwbAlgorithm > > ipa: simple: Port to use libipa CcmAlgorithm > > > > Laurent Pinchart (1): > > ipa: libipa: lsc_polynomial: Don't inline ValueNode accessor > > > > .../internal/software_isp/debayer_params.h | 4 +- > > include/linux/media/arm/mali-c55-config.h | 86 ++++- > > src/ipa/libipa/awb.cpp | 418 +++++++++++++++++--- > > src/ipa/libipa/awb.h | 100 ++++- > > src/ipa/libipa/awb_bayes.cpp | 52 +-- > > src/ipa/libipa/awb_bayes.h | 12 +- > > src/ipa/libipa/awb_grey.cpp | 16 +- > > src/ipa/libipa/awb_grey.h | 6 +- > > src/ipa/libipa/ccm.cpp | 245 ++++++++++++ > > src/ipa/libipa/ccm.h | 77 ++++ > > src/ipa/libipa/lsc.cpp | 372 ++++++++++++++++++ > > src/ipa/libipa/lsc.h | 137 +++++++ > > src/ipa/libipa/lsc_base.cpp | 136 +++++++ > > src/ipa/libipa/lsc_base.h | 56 +++ > > src/ipa/libipa/lsc_polynomial.cpp | 208 +++++++++- > > src/ipa/libipa/lsc_polynomial.h | 100 ++--- > > src/ipa/libipa/lsc_table.cpp | 107 +++++ > > src/ipa/libipa/lsc_table.h | 55 +++ > > src/ipa/libipa/meson.build | 8 + > > src/ipa/mali-c55/algorithms/awb.cpp | 223 ++++++----- > > src/ipa/mali-c55/algorithms/awb.h | 28 +- > > src/ipa/mali-c55/algorithms/ccm.cpp | 173 +++++++++ > > src/ipa/mali-c55/algorithms/ccm.h | 66 ++++ > > src/ipa/mali-c55/algorithms/lsc.cpp | 156 +++++--- > > src/ipa/mali-c55/algorithms/lsc.h | 32 +- > > src/ipa/mali-c55/algorithms/meson.build | 1 + > > src/ipa/mali-c55/ipa_context.cpp | 3 + > > src/ipa/mali-c55/ipa_context.h | 20 +- > > src/ipa/mali-c55/mali-c55.cpp | 2 + > > src/ipa/mali-c55/params.h | 2 + > > src/ipa/rkisp1/algorithms/awb.cpp | 191 ++------- > > src/ipa/rkisp1/algorithms/awb.h | 18 +- > > src/ipa/rkisp1/algorithms/ccm.cpp | 97 +---- > > src/ipa/rkisp1/algorithms/ccm.h | 17 +- > > src/ipa/rkisp1/algorithms/lsc.cpp | 429 +++------------------ > > src/ipa/rkisp1/algorithms/lsc.h | 74 ++-- > > src/ipa/rkisp1/ipa_context.h | 49 +-- > > src/ipa/simple/algorithms/awb.cpp | 140 +++++-- > > src/ipa/simple/algorithms/awb.h | 28 ++ > > src/ipa/simple/algorithms/blc.cpp | 2 +- > > src/ipa/simple/algorithms/ccm.cpp | 74 ++-- > > src/ipa/simple/algorithms/ccm.h | 22 +- > > src/ipa/simple/ipa_context.h | 15 +- > > src/libcamera/software_isp/debayer_cpu.cpp | 12 +- > > 44 files changed, 2934 insertions(+), 1135 deletions(-) > > --- > > base-commit: 709ad59a8d90af3570be1c8d02dee0ec9e011954 > > change-id: 20260615-libipa-algorithms-59666bca0a2f > > > > Best regards, >
The series is identical to v5 up to patch 27. The only minor difference is that I back-tracked on making functions class members but in the RkISP1 IPA I kept them as static helpers. Patches 28 and 29 are new. They remove the templating of the LscAlgorithm class hierarchy and instead implement quantization in the LscAlgorithm class. So we now expand polynomials and parse tables as floats, store them in a map and in LscAlgorithm we re-iterate over it to either quantized them in the polynomial case, or simply cast floats to the register bit width if table. Timing the duration of the whole RkISP1 configure operation, it now takes 3 msec compared to 600 usec. RkISP1Lsc lsc.cpp:171 Configure took = 3081[µs] RkISP1Lsc lsc.cpp:172 Configure took = 583[µs] Also, now each IPA has to define their own Interpolator::interpolate() overload (see rkisp1 IPA as an example of this). As the interface of LscAlgorithm has changed, patches on the list that port the LSC algorithm of other platforms based on v5 will have to be rebased. Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> --- Changes in v6: - Address comments received on v5, mostly on documentation - Remove templating of LscPolynomial and perform quantization in LscAlgorithm Changes in v5: - Add "ipa: libipa: lsc_polynomial: Fix polynomial parsing error" to fix and exiting potential issue with Polynomial parsing - Fix Simple, which I broke in v4, thanks Milan Changes in v4: - s/awb/AWB in comments everywhere, same for CCM and LSC - Awb: changelog per patch - Make AwbStats pure virtual and move stats parsing logic to the IPA modules - Reduce comments/renames to reduce patch size and comments - Collect tags Changes in v3: - Address comments on Awb from Stefan: - Introduce AwbImplementation::Result - Move AwbStats implementation to IPAs - Drop AwbStats::rg()/bg() and re-implement AwbGray accordingly - Fix Saturation bug in Simple Ccm algorithm - Fix Simple Ccm gain limits using Q<2, 8> - Update Mali CCM and Gamma to latest uAPI patch version - Fix Mali CCM gain masking as reported by Dan - Break down libIPA Lsc implementation as requested by Stefan Changes in v2: - Introduce awb::Context to simplify ActiveState and FrameContext definition - Add mali uAPI header for CCM and Gamma - Do not rename Mali functions for hardware configuration in awb and lsc - Spelling and documentation --- Jacopo Mondi (28): ipa: libipa: awb: Reimplement AwbAlgorithm ipa: mali-c55: awb: Port to use libipa AwbAlgorithm ipa: libipa: Add CcmAlgorithm to libipa ipa: rkisp1: ccm: Port to use CcmAlgorithm include: linux: mali-c55: Update to support CCM and Gamma ipa: mali-c55: Implement Ccm algorithm ipa: rkisp1: lsc: Re-architecture Lsc support ipa: libipa: Introduce lsc_base.h ipa: libipa: lsc_polynomial: Fix polynomial parsing error ipa: libipa: lsc_polynomial: Rename LscPolynomial ipa: libipa: lsc_polynomial: Do not inline functions ipa: libipa: lsc: Move Interpolator<lsc::Components> to lsc_base ipa: rkisp1: lsc: Remove rogue empty line ipa: libipa: lsc_polynomial: Move LscPolynomial from RkISP1 ipa: libipa: lsc_table: Move LscTable from RkISP1 ipa: libipa: lsc_base: Add sampleForCrop documentation ipa: libipa: lsc: Introduce LscAlgorithm ipa: libipa: lsc: Move sizesListToPositions() back to rkisp1 ipa: rkisp1: lsc: Port to use LscAlgorithm ipa: libipa: lsc: Make Components a map<> ipa: libipa: lsc: Document Components parsing ipa: libipa: lsc_polynomial: Remove sensorSize_ ipa: libipa: lsc: Document LscDescriptor::sensorSize usage ipa: libipa: lsc: Quantize lsc gains in IPA ipa: libipa: lsc: Quantize gains in LscAlgorithm ipa: libipa: lsc: Re-sort LscAlgorithmBase documentation ipa: mali-c55: Add sensorInfo to IPAContext ipa: mali-c55: Port to use LscAlgorithm Kieran Bingham (2): ipa: simple: awb: Port to use libipa AwbAlgorithm ipa: simple: Port to use libipa CcmAlgorithm Laurent Pinchart (1): ipa: libipa: lsc_polynomial: Don't inline ValueNode accessor .../internal/software_isp/debayer_params.h | 4 +- include/linux/media/arm/mali-c55-config.h | 86 ++++- src/ipa/libipa/awb.cpp | 418 +++++++++++++++++--- src/ipa/libipa/awb.h | 100 ++++- src/ipa/libipa/awb_bayes.cpp | 52 +-- src/ipa/libipa/awb_bayes.h | 12 +- src/ipa/libipa/awb_grey.cpp | 16 +- src/ipa/libipa/awb_grey.h | 6 +- src/ipa/libipa/ccm.cpp | 245 ++++++++++++ src/ipa/libipa/ccm.h | 77 ++++ src/ipa/libipa/lsc.cpp | 372 ++++++++++++++++++ src/ipa/libipa/lsc.h | 137 +++++++ src/ipa/libipa/lsc_base.cpp | 136 +++++++ src/ipa/libipa/lsc_base.h | 56 +++ src/ipa/libipa/lsc_polynomial.cpp | 208 +++++++++- src/ipa/libipa/lsc_polynomial.h | 100 ++--- src/ipa/libipa/lsc_table.cpp | 107 +++++ src/ipa/libipa/lsc_table.h | 55 +++ src/ipa/libipa/meson.build | 8 + src/ipa/mali-c55/algorithms/awb.cpp | 223 ++++++----- src/ipa/mali-c55/algorithms/awb.h | 28 +- src/ipa/mali-c55/algorithms/ccm.cpp | 173 +++++++++ src/ipa/mali-c55/algorithms/ccm.h | 66 ++++ src/ipa/mali-c55/algorithms/lsc.cpp | 156 +++++--- src/ipa/mali-c55/algorithms/lsc.h | 32 +- src/ipa/mali-c55/algorithms/meson.build | 1 + src/ipa/mali-c55/ipa_context.cpp | 3 + src/ipa/mali-c55/ipa_context.h | 20 +- src/ipa/mali-c55/mali-c55.cpp | 2 + src/ipa/mali-c55/params.h | 2 + src/ipa/rkisp1/algorithms/awb.cpp | 191 ++------- src/ipa/rkisp1/algorithms/awb.h | 18 +- src/ipa/rkisp1/algorithms/ccm.cpp | 97 +---- src/ipa/rkisp1/algorithms/ccm.h | 17 +- src/ipa/rkisp1/algorithms/lsc.cpp | 429 +++------------------ src/ipa/rkisp1/algorithms/lsc.h | 74 ++-- src/ipa/rkisp1/ipa_context.h | 49 +-- src/ipa/simple/algorithms/awb.cpp | 140 +++++-- src/ipa/simple/algorithms/awb.h | 28 ++ src/ipa/simple/algorithms/blc.cpp | 2 +- src/ipa/simple/algorithms/ccm.cpp | 74 ++-- src/ipa/simple/algorithms/ccm.h | 22 +- src/ipa/simple/ipa_context.h | 15 +- src/libcamera/software_isp/debayer_cpu.cpp | 12 +- 44 files changed, 2934 insertions(+), 1135 deletions(-) --- base-commit: 709ad59a8d90af3570be1c8d02dee0ec9e011954 change-id: 20260615-libipa-algorithms-59666bca0a2f Best regards,