[libcamera-devel] [PATCH v3 2/5] ipa: libipa: Add init() function to the Algorithm class

Laurent Pinchart laurent.pinchart at ideasonboard.com
Fri Jun 17 19:29:45 CEST 2022


On Fri, Jun 17, 2022 at 11:33:21AM +0200, Jean-Michel Hautbois via libcamera-devel wrote:
> Hi Florian,
> 
> Thanks for the patch !
> 
> On 17/06/2022 11:23, Florian Sylvestre via libcamera-devel wrote:
> > Add the init() function that will be called during algorithm initialization
> > to provide each algorithm the list of algorithms tuning data.
> > Each algorithm will be responsible to grab their corresponding parameters.
> > 
> > Signed-off-by: Florian Sylvestre <fsylvestre at baylibre.com>
> > Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>
> > ---
> >   src/ipa/ipu3/algorithms/algorithm.h   |  8 +++++---
> >   src/ipa/libipa/algorithm.cpp          | 14 ++++++++++++++
> >   src/ipa/libipa/algorithm.h            | 11 +++++++++--
> >   src/ipa/rkisp1/algorithms/algorithm.h |  8 +++++---
> >   4 files changed, 33 insertions(+), 8 deletions(-)
> > 
> > diff --git a/src/ipa/ipu3/algorithms/algorithm.h b/src/ipa/ipu3/algorithms/algorithm.h
> > index 234b2bd7..8b562e5b 100644
> > --- a/src/ipa/ipu3/algorithms/algorithm.h
> > +++ b/src/ipa/ipu3/algorithms/algorithm.h
> > @@ -15,11 +15,13 @@
> >   
> >   namespace libcamera {
> >   
> > +class YamlObject;
> > +
> >   namespace ipa::ipu3 {
> >   
> > -using Algorithm = libcamera::ipa::Algorithm<IPAContext, IPAFrameContext,
> > -					    IPAConfigInfo, ipu3_uapi_params,
> > -					    ipu3_uapi_stats_3a>;
> > +using Algorithm = libcamera::ipa::Algorithm<IPAContext, YamlObject,
> > +					    IPAFrameContext, IPAConfigInfo,
> > +					    ipu3_uapi_params, ipu3_uapi_stats_3a>;
> >   
> >   } /* namespace ipa::ipu3 */
> >   
> > diff --git a/src/ipa/libipa/algorithm.cpp b/src/ipa/libipa/algorithm.cpp
> > index cce2ed62..f1b04160 100644
> > --- a/src/ipa/libipa/algorithm.cpp
> > +++ b/src/ipa/libipa/algorithm.cpp
> > @@ -29,6 +29,20 @@ namespace ipa {
> >    * to manage algorithms regardless of their specific type.
> >    */
> >   
> > +/**
> > + * \fn Algorithm::init()
> > + * \brief Configure the Algorithm with default parameters
> > + * \param[in] context The shared IPA context
> > + * \param[in] params The initial parameters used to tune algorithms
> 
> This is v3, sorry for not having said it before...
> 
> I am a bit annoyed by this name, params, as it is already used for the 
> parameters buffer in the prepare() call which does not contain the same 
> type of objects. What about tuningParams ?

Or, given that the type name is TuningData, maybe tuningData for the
parameter name ?

> > + *
> > + * This function is called once, when the IPA module is initialized, to
> > + * initialize the algorithm. The \a params YamlObject contains IPA module
> > + * parameters, typically tuning data for all algorithms. The Algorithm is
> > + * responsible for reading the parameters relevant to its configuration.
> > + *
> > + * \return 0 if successful, an error code otherwise
> > + */
> > +
> >   /**
> >    * \fn Algorithm::configure()
> >    * \brief Configure the Algorithm given an IPAConfigInfo
> > diff --git a/src/ipa/libipa/algorithm.h b/src/ipa/libipa/algorithm.h
> > index 032a05b5..2945719e 100644
> > --- a/src/ipa/libipa/algorithm.h
> > +++ b/src/ipa/libipa/algorithm.h
> > @@ -10,13 +10,20 @@ namespace libcamera {
> >   
> >   namespace ipa {
> >   
> > -template<typename Context, typename FrameContext, typename Config,
> > -	 typename Params, typename Stats>
> > +template<typename Context, typename TuningData, typename FrameContext,
> > +	 typename Config, typename Params, typename Stats>
> > +
> >   class Algorithm
> >   {
> >   public:
> >   	virtual ~Algorithm() {}
> >   
> > +	virtual int init([[maybe_unused]] Context &context,
> > +			 [[maybe_unused]] const TuningData &params)
> > +	{
> > +		return 0;
> > +	}
> > +
> >   	virtual int configure([[maybe_unused]] Context &context,
> >   			      [[maybe_unused]] const Config &configInfo)
> >   	{
> > diff --git a/src/ipa/rkisp1/algorithms/algorithm.h b/src/ipa/rkisp1/algorithms/algorithm.h
> > index 68e3a44e..e813756d 100644
> > --- a/src/ipa/rkisp1/algorithms/algorithm.h
> > +++ b/src/ipa/rkisp1/algorithms/algorithm.h
> > @@ -17,11 +17,13 @@
> >   
> >   namespace libcamera {
> >   
> > +class YamlObject;
> > +
> >   namespace ipa::rkisp1 {
> >   
> > -using Algorithm = libcamera::ipa::Algorithm<IPAContext, IPAFrameContext,
> > -					    IPACameraSensorInfo, rkisp1_params_cfg,
> > -					    rkisp1_stat_buffer>;
> > +using Algorithm = libcamera::ipa::Algorithm<IPAContext, YamlObject,
> > +					    IPAFrameContext, IPACameraSensorInfo,
> > +					    rkisp1_params_cfg, rkisp1_stat_buffer>;
> >   
> >   } /* namespace ipa::rkisp1 */
> >   

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list