Message ID | 20240717085444.289997-14-mzamazal@redhat.com |
---|---|
State | Superseded |
Headers | show |
Series |
|
Related | show |
On 17/07/2024 09:54, Milan Zamazal wrote: > We are ready to introduce algorithms now. First, let's create > algorithms. The algorithms are not called yet, calls to them will be > added in followup patches. > > The maximum number of contexts is set to the same value as in hardware > pipelines. > > Signed-off-by: Milan Zamazal <mzamazal@redhat.com> > Reviewed-by: Umang Jain <umang.jain@ideasonboard.com> > --- Looks good to me: Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com> > src/ipa/simple/algorithms/meson.build | 4 ++++ > src/ipa/simple/data/uncalibrated.yaml | 1 + > src/ipa/simple/meson.build | 7 +++++-- > src/ipa/simple/soft_simple.cpp | 14 ++++++++++++++ > 4 files changed, 24 insertions(+), 2 deletions(-) > create mode 100644 src/ipa/simple/algorithms/meson.build > > diff --git a/src/ipa/simple/algorithms/meson.build b/src/ipa/simple/algorithms/meson.build > new file mode 100644 > index 00000000..31d26e43 > --- /dev/null > +++ b/src/ipa/simple/algorithms/meson.build > @@ -0,0 +1,4 @@ > +# SPDX-License-Identifier: CC0-1.0 > + > +soft_simple_ipa_algorithms = files([ > +]) > diff --git a/src/ipa/simple/data/uncalibrated.yaml b/src/ipa/simple/data/uncalibrated.yaml > index ff981a1a..2cdc39a8 100644 > --- a/src/ipa/simple/data/uncalibrated.yaml > +++ b/src/ipa/simple/data/uncalibrated.yaml > @@ -2,4 +2,5 @@ > %YAML 1.1 > --- > version: 1 > +algorithms: > ... > diff --git a/src/ipa/simple/meson.build b/src/ipa/simple/meson.build > index 363251fb..7515a8d8 100644 > --- a/src/ipa/simple/meson.build > +++ b/src/ipa/simple/meson.build > @@ -1,5 +1,8 @@ > # SPDX-License-Identifier: CC0-1.0 > > +subdir('algorithms') > +subdir('data') > + > ipa_name = 'ipa_soft_simple' > > soft_simple_sources = files([ > @@ -8,6 +11,8 @@ soft_simple_sources = files([ > 'black_level.cpp', > ]) > > +soft_simple_sources += soft_simple_ipa_algorithms > + > mod = shared_module(ipa_name, > [soft_simple_sources, libcamera_generated_ipa_headers], > name_prefix : '', > @@ -25,6 +30,4 @@ if ipa_sign_module > build_by_default : true) > endif > > -subdir('data') > - > ipa_names += ipa_name > diff --git a/src/ipa/simple/soft_simple.cpp b/src/ipa/simple/soft_simple.cpp > index 09e3c8f6..dd300387 100644 > --- a/src/ipa/simple/soft_simple.cpp > +++ b/src/ipa/simple/soft_simple.cpp > @@ -53,12 +53,15 @@ static constexpr float kExposureOptimal = kExposureBinsCount / 2.0; > * enough to prevent the exposure from wobbling around the optimal value. > */ > static constexpr float kExposureSatisfactory = 0.2; > +/* Maximum number of frame contexts to be held */ > +static constexpr uint32_t kMaxFrameContexts = 16; > > class IPASoftSimple : public ipa::soft::IPASoftInterface, public Module > { > public: > IPASoftSimple() > : params_(nullptr), stats_(nullptr), blackLevel_(BlackLevel()), > + context_({ {}, {}, { kMaxFrameContexts } }), > ignoreUpdates_(0) > { > } > @@ -92,6 +95,8 @@ private: > static constexpr unsigned int kGammaLookupSize = 1024; > std::array<uint8_t, kGammaLookupSize> gammaTable_; > int lastBlackLevel_ = -1; > + /* Local parameter storage */ > + struct IPAContext context_; > > int32_t exposureMin_, exposureMax_; > int32_t exposure_; > @@ -138,6 +143,15 @@ int IPASoftSimple::init(const IPASettings &settings, > unsigned int version = (*data)["version"].get<uint32_t>(0); > LOG(IPASoft, Debug) << "Tuning file version " << version; > > + if (!data->contains("algorithms")) { > + LOG(IPASoft, Error) << "Tuning file doesn't contain algorithms"; > + return -EINVAL; > + } > + > + int ret = createAlgorithms(context_, (*data)["algorithms"]); > + if (ret) > + return ret; > + > params_ = nullptr; > stats_ = nullptr; >
Hi Milan, Thank you for the patch. On Wed, Jul 17, 2024 at 10:54:34AM +0200, Milan Zamazal wrote: > We are ready to introduce algorithms now. First, let's create > algorithms. The algorithms are not called yet, calls to them will be > added in followup patches. > > The maximum number of contexts is set to the same value as in hardware > pipelines. > > Signed-off-by: Milan Zamazal <mzamazal@redhat.com> > Reviewed-by: Umang Jain <umang.jain@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > --- > src/ipa/simple/algorithms/meson.build | 4 ++++ > src/ipa/simple/data/uncalibrated.yaml | 1 + > src/ipa/simple/meson.build | 7 +++++-- > src/ipa/simple/soft_simple.cpp | 14 ++++++++++++++ > 4 files changed, 24 insertions(+), 2 deletions(-) > create mode 100644 src/ipa/simple/algorithms/meson.build > > diff --git a/src/ipa/simple/algorithms/meson.build b/src/ipa/simple/algorithms/meson.build > new file mode 100644 > index 00000000..31d26e43 > --- /dev/null > +++ b/src/ipa/simple/algorithms/meson.build > @@ -0,0 +1,4 @@ > +# SPDX-License-Identifier: CC0-1.0 > + > +soft_simple_ipa_algorithms = files([ > +]) > diff --git a/src/ipa/simple/data/uncalibrated.yaml b/src/ipa/simple/data/uncalibrated.yaml > index ff981a1a..2cdc39a8 100644 > --- a/src/ipa/simple/data/uncalibrated.yaml > +++ b/src/ipa/simple/data/uncalibrated.yaml > @@ -2,4 +2,5 @@ > %YAML 1.1 > --- > version: 1 > +algorithms: > ... > diff --git a/src/ipa/simple/meson.build b/src/ipa/simple/meson.build > index 363251fb..7515a8d8 100644 > --- a/src/ipa/simple/meson.build > +++ b/src/ipa/simple/meson.build > @@ -1,5 +1,8 @@ > # SPDX-License-Identifier: CC0-1.0 > > +subdir('algorithms') > +subdir('data') > + > ipa_name = 'ipa_soft_simple' > > soft_simple_sources = files([ > @@ -8,6 +11,8 @@ soft_simple_sources = files([ > 'black_level.cpp', > ]) > > +soft_simple_sources += soft_simple_ipa_algorithms > + > mod = shared_module(ipa_name, > [soft_simple_sources, libcamera_generated_ipa_headers], > name_prefix : '', > @@ -25,6 +30,4 @@ if ipa_sign_module > build_by_default : true) > endif > > -subdir('data') > - > ipa_names += ipa_name > diff --git a/src/ipa/simple/soft_simple.cpp b/src/ipa/simple/soft_simple.cpp > index 09e3c8f6..dd300387 100644 > --- a/src/ipa/simple/soft_simple.cpp > +++ b/src/ipa/simple/soft_simple.cpp > @@ -53,12 +53,15 @@ static constexpr float kExposureOptimal = kExposureBinsCount / 2.0; > * enough to prevent the exposure from wobbling around the optimal value. > */ > static constexpr float kExposureSatisfactory = 0.2; > +/* Maximum number of frame contexts to be held */ > +static constexpr uint32_t kMaxFrameContexts = 16; > > class IPASoftSimple : public ipa::soft::IPASoftInterface, public Module > { > public: > IPASoftSimple() > : params_(nullptr), stats_(nullptr), blackLevel_(BlackLevel()), > + context_({ {}, {}, { kMaxFrameContexts } }), > ignoreUpdates_(0) > { > } > @@ -92,6 +95,8 @@ private: > static constexpr unsigned int kGammaLookupSize = 1024; > std::array<uint8_t, kGammaLookupSize> gammaTable_; > int lastBlackLevel_ = -1; > + /* Local parameter storage */ > + struct IPAContext context_; > > int32_t exposureMin_, exposureMax_; > int32_t exposure_; > @@ -138,6 +143,15 @@ int IPASoftSimple::init(const IPASettings &settings, > unsigned int version = (*data)["version"].get<uint32_t>(0); > LOG(IPASoft, Debug) << "Tuning file version " << version; > > + if (!data->contains("algorithms")) { > + LOG(IPASoft, Error) << "Tuning file doesn't contain algorithms"; > + return -EINVAL; > + } > + > + int ret = createAlgorithms(context_, (*data)["algorithms"]); > + if (ret) > + return ret; > + > params_ = nullptr; > stats_ = nullptr; >
diff --git a/src/ipa/simple/algorithms/meson.build b/src/ipa/simple/algorithms/meson.build new file mode 100644 index 00000000..31d26e43 --- /dev/null +++ b/src/ipa/simple/algorithms/meson.build @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: CC0-1.0 + +soft_simple_ipa_algorithms = files([ +]) diff --git a/src/ipa/simple/data/uncalibrated.yaml b/src/ipa/simple/data/uncalibrated.yaml index ff981a1a..2cdc39a8 100644 --- a/src/ipa/simple/data/uncalibrated.yaml +++ b/src/ipa/simple/data/uncalibrated.yaml @@ -2,4 +2,5 @@ %YAML 1.1 --- version: 1 +algorithms: ... diff --git a/src/ipa/simple/meson.build b/src/ipa/simple/meson.build index 363251fb..7515a8d8 100644 --- a/src/ipa/simple/meson.build +++ b/src/ipa/simple/meson.build @@ -1,5 +1,8 @@ # SPDX-License-Identifier: CC0-1.0 +subdir('algorithms') +subdir('data') + ipa_name = 'ipa_soft_simple' soft_simple_sources = files([ @@ -8,6 +11,8 @@ soft_simple_sources = files([ 'black_level.cpp', ]) +soft_simple_sources += soft_simple_ipa_algorithms + mod = shared_module(ipa_name, [soft_simple_sources, libcamera_generated_ipa_headers], name_prefix : '', @@ -25,6 +30,4 @@ if ipa_sign_module build_by_default : true) endif -subdir('data') - ipa_names += ipa_name diff --git a/src/ipa/simple/soft_simple.cpp b/src/ipa/simple/soft_simple.cpp index 09e3c8f6..dd300387 100644 --- a/src/ipa/simple/soft_simple.cpp +++ b/src/ipa/simple/soft_simple.cpp @@ -53,12 +53,15 @@ static constexpr float kExposureOptimal = kExposureBinsCount / 2.0; * enough to prevent the exposure from wobbling around the optimal value. */ static constexpr float kExposureSatisfactory = 0.2; +/* Maximum number of frame contexts to be held */ +static constexpr uint32_t kMaxFrameContexts = 16; class IPASoftSimple : public ipa::soft::IPASoftInterface, public Module { public: IPASoftSimple() : params_(nullptr), stats_(nullptr), blackLevel_(BlackLevel()), + context_({ {}, {}, { kMaxFrameContexts } }), ignoreUpdates_(0) { } @@ -92,6 +95,8 @@ private: static constexpr unsigned int kGammaLookupSize = 1024; std::array<uint8_t, kGammaLookupSize> gammaTable_; int lastBlackLevel_ = -1; + /* Local parameter storage */ + struct IPAContext context_; int32_t exposureMin_, exposureMax_; int32_t exposure_; @@ -138,6 +143,15 @@ int IPASoftSimple::init(const IPASettings &settings, unsigned int version = (*data)["version"].get<uint32_t>(0); LOG(IPASoft, Debug) << "Tuning file version " << version; + if (!data->contains("algorithms")) { + LOG(IPASoft, Error) << "Tuning file doesn't contain algorithms"; + return -EINVAL; + } + + int ret = createAlgorithms(context_, (*data)["algorithms"]); + if (ret) + return ret; + params_ = nullptr; stats_ = nullptr;