[libcamera-devel,v6,0/4] Implement IPA algorithms and demo with IPU3
mbox series

Message ID 20210422051857.20594-1-jeanmichel.hautbois@ideasonboard.com
Headers show
Series
  • Implement IPA algorithms and demo with IPU3
Related show

Message

Jean-Michel Hautbois April 22, 2021, 5:18 a.m. UTC
Here is v6 of the IPA demonstration on IPU3.
It demonstrates a conjunction of automatic exposure (AGC)
and automatic white balance (AWB).

The skeleton are extracted from RPi controller and probably subject to
modifications and discussions :
- are the mandatory methods really those ?
- how to exchange data between algorithms ?
  - metadata like RPi?
  - IPC ?
  - public methods?
  - controller API ?
- is the controller needed at all ?

The implementation in IPU3 is tested on SGo2.
It is not perfect but shows a really better behaviour than default.
Right now, the AGC algorithm is part of the RPi one, adapted to the
stats and parameters we have in IPU3 on SGo2.

Changes in v6:
- rework to use ipa::ipu3 namespace
- some comments adressed

Changes in v5:
- adress multiple issues found at review time
- use RPi grey-world AWB algorithm and correct gains
- prepare for a more generic ISP stat usage

Changes in v4:
- removed unneeded patch setting exposure and gains
- improve documentation of Histogram class
- take review comments 

Changes in v3:
- introduce histogram class (for AGC)
- add a patch to introduce parameter context saving
- changes in AGC to simplify it using part of RPi work
- changes in the AWB loop
- calculate the grid for the parameters using the BDS size from pipeline
  handler

In v2:
- splits AWB and AEC/AGC algorithms.
- remove unused Controller
- remove unused variables/methods
- rename most of the class members

Jean-Michel Hautbois (4):
  ipa: Add a common interface for algorithm objects
  ipa: ipu3: Add a histogram class
  ipa: ipu3: Add support for IPU3 AWB algorithm
  ipa: ipu3: Add support for IPU3 AEC/AGC algorithm

 src/ipa/ipu3/ipu3.cpp        |  96 +++++++++-
 src/ipa/ipu3/ipu3_agc.cpp    | 202 ++++++++++++++++++++
 src/ipa/ipu3/ipu3_agc.h      |  62 ++++++
 src/ipa/ipu3/ipu3_awb.cpp    | 356 +++++++++++++++++++++++++++++++++++
 src/ipa/ipu3/ipu3_awb.h      |  91 +++++++++
 src/ipa/ipu3/meson.build     |   8 +-
 src/ipa/libipa/algorithm.cpp |  39 ++++
 src/ipa/libipa/algorithm.h   |  24 +++
 src/ipa/libipa/histogram.cpp | 153 +++++++++++++++
 src/ipa/libipa/histogram.h   |  40 ++++
 src/ipa/libipa/meson.build   |   6 +-
 11 files changed, 1067 insertions(+), 10 deletions(-)
 create mode 100644 src/ipa/ipu3/ipu3_agc.cpp
 create mode 100644 src/ipa/ipu3/ipu3_agc.h
 create mode 100644 src/ipa/ipu3/ipu3_awb.cpp
 create mode 100644 src/ipa/ipu3/ipu3_awb.h
 create mode 100644 src/ipa/libipa/algorithm.cpp
 create mode 100644 src/ipa/libipa/algorithm.h
 create mode 100644 src/ipa/libipa/histogram.cpp
 create mode 100644 src/ipa/libipa/histogram.h