[libcamera-devel,v4,08/32] ipa: libipa: algorithm: queueRequest(): Pass frame context
diff mbox series

Message ID 20220908014200.28728-9-laurent.pinchart@ideasonboard.com
State Superseded
Headers show
Series
  • ipa: Frame context queue, IPU3 & RkISP consolidation, and RkISP1 improvements
Related show

Commit Message

Laurent Pinchart Sept. 8, 2022, 1:41 a.m. UTC
From: Kieran Bingham <kieran.bingham@ideasonboard.com>

IPA modules have access to incoming Request's controls list and
need to store them in the frame context at queueRequest() time.

As each algorithm is expected to have ownership of a certain set of
controls it should have access to the frame context where they have been
stored, and where the algorithm computation results can be stored to
later populate metadata.

Now that both the IPU3 and RkISP1 IPA modules comply with the same
interface, propagate the queueRequest() call to algorithms in the IPU3
IPA module.

Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
---
 src/ipa/libipa/algorithm.cpp         | 1 +
 src/ipa/libipa/algorithm.h           | 1 +
 src/ipa/rkisp1/algorithms/awb.cpp    | 1 +
 src/ipa/rkisp1/algorithms/awb.h      | 1 +
 src/ipa/rkisp1/algorithms/cproc.cpp  | 1 +
 src/ipa/rkisp1/algorithms/cproc.h    | 1 +
 src/ipa/rkisp1/algorithms/dpf.cpp    | 1 +
 src/ipa/rkisp1/algorithms/dpf.h      | 1 +
 src/ipa/rkisp1/algorithms/filter.cpp | 1 +
 src/ipa/rkisp1/algorithms/filter.h   | 1 +
 src/ipa/rkisp1/rkisp1.cpp            | 5 ++++-
 11 files changed, 14 insertions(+), 1 deletion(-)

Comments

Kieran Bingham Sept. 20, 2022, 2:05 p.m. UTC | #1
Quoting Laurent Pinchart (2022-09-08 02:41:36)
> From: Kieran Bingham <kieran.bingham@ideasonboard.com>
> 
> IPA modules have access to incoming Request's controls list and
> need to store them in the frame context at queueRequest() time.
> 
> As each algorithm is expected to have ownership of a certain set of
> controls it should have access to the frame context where they have been
> stored, and where the algorithm computation results can be stored to
> later populate metadata.
> 
> Now that both the IPU3 and RkISP1 IPA modules comply with the same
> interface, propagate the queueRequest() call to algorithms in the IPU3

In the RKISP module? Or is this where something was dropped from the
IPU3?


It might be worth highlighting that this commit adds a dummy frame
context for the RKISP for the time being ?

But other than that, lets get this moving.

Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>


> IPA module.
> 
> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
> ---
>  src/ipa/libipa/algorithm.cpp         | 1 +
>  src/ipa/libipa/algorithm.h           | 1 +
>  src/ipa/rkisp1/algorithms/awb.cpp    | 1 +
>  src/ipa/rkisp1/algorithms/awb.h      | 1 +
>  src/ipa/rkisp1/algorithms/cproc.cpp  | 1 +
>  src/ipa/rkisp1/algorithms/cproc.h    | 1 +
>  src/ipa/rkisp1/algorithms/dpf.cpp    | 1 +
>  src/ipa/rkisp1/algorithms/dpf.h      | 1 +
>  src/ipa/rkisp1/algorithms/filter.cpp | 1 +
>  src/ipa/rkisp1/algorithms/filter.h   | 1 +
>  src/ipa/rkisp1/rkisp1.cpp            | 5 ++++-
>  11 files changed, 14 insertions(+), 1 deletion(-)
> 
> diff --git a/src/ipa/libipa/algorithm.cpp b/src/ipa/libipa/algorithm.cpp
> index 30eab67f71fc..c152b885aee1 100644
> --- a/src/ipa/libipa/algorithm.cpp
> +++ b/src/ipa/libipa/algorithm.cpp
> @@ -88,6 +88,7 @@ namespace ipa {
>   * \brief Provide control values to the algorithm
>   * \param[in] context The shared IPA context
>   * \param[in] frame The frame number to apply the control values
> + * \param[in] frameContext The current frame's context
>   * \param[in] controls The list of user controls
>   *
>   * This function is called for each request queued to the camera. It provides
> diff --git a/src/ipa/libipa/algorithm.h b/src/ipa/libipa/algorithm.h
> index ee93d260ca3f..d8601f9ccaff 100644
> --- a/src/ipa/libipa/algorithm.h
> +++ b/src/ipa/libipa/algorithm.h
> @@ -47,6 +47,7 @@ public:
>  
>         virtual void queueRequest([[maybe_unused]] typename Module::Context &context,
>                                   [[maybe_unused]] const uint32_t frame,
> +                                 [[maybe_unused]] typename Module::FrameContext &frameContext,
>                                   [[maybe_unused]] const ControlList &controls)
>         {
>         }
> diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp
> index aefba6382807..a23c32015454 100644
> --- a/src/ipa/rkisp1/algorithms/awb.cpp
> +++ b/src/ipa/rkisp1/algorithms/awb.cpp
> @@ -128,6 +128,7 @@ void Awb::prepare(IPAContext &context,
>   */
>  void Awb::queueRequest(IPAContext &context,
>                        [[maybe_unused]] const uint32_t frame,
> +                      [[maybe_unused]] IPAFrameContext &frameContext,
>                        const ControlList &controls)
>  {
>         auto &awb = context.frameContext.awb;
> diff --git a/src/ipa/rkisp1/algorithms/awb.h b/src/ipa/rkisp1/algorithms/awb.h
> index 806e11a2ec93..6d4a39467038 100644
> --- a/src/ipa/rkisp1/algorithms/awb.h
> +++ b/src/ipa/rkisp1/algorithms/awb.h
> @@ -24,6 +24,7 @@ public:
>                      IPAFrameContext &frameContext,
>                      rkisp1_params_cfg *params) override;
>         void queueRequest(IPAContext &context, const uint32_t frame,
> +                         IPAFrameContext &frameContext,
>                           const ControlList &controls) override;
>         void process(IPAContext &context, const uint32_t frame,
>                      IPAFrameContext &frameCtx,
> diff --git a/src/ipa/rkisp1/algorithms/cproc.cpp b/src/ipa/rkisp1/algorithms/cproc.cpp
> index c0505c68765b..bc4a07073706 100644
> --- a/src/ipa/rkisp1/algorithms/cproc.cpp
> +++ b/src/ipa/rkisp1/algorithms/cproc.cpp
> @@ -38,6 +38,7 @@ LOG_DEFINE_CATEGORY(RkISP1CProc)
>   */
>  void ColorProcessing::queueRequest(IPAContext &context,
>                                    [[maybe_unused]] const uint32_t frame,
> +                                  [[maybe_unused]] IPAFrameContext &frameContext,
>                                    const ControlList &controls)
>  {
>         auto &cproc = context.frameContext.cproc;
> diff --git a/src/ipa/rkisp1/algorithms/cproc.h b/src/ipa/rkisp1/algorithms/cproc.h
> index 02c3d9c95488..ba6e901ae110 100644
> --- a/src/ipa/rkisp1/algorithms/cproc.h
> +++ b/src/ipa/rkisp1/algorithms/cproc.h
> @@ -22,6 +22,7 @@ public:
>         ~ColorProcessing() = default;
>  
>         void queueRequest(IPAContext &context, const uint32_t frame,
> +                         IPAFrameContext &frameContext,
>                           const ControlList &controls) override;
>         void prepare(IPAContext &context, const uint32_t frame,
>                      IPAFrameContext &frameContext,
> diff --git a/src/ipa/rkisp1/algorithms/dpf.cpp b/src/ipa/rkisp1/algorithms/dpf.cpp
> index 8286f83facc1..be024fc5fe90 100644
> --- a/src/ipa/rkisp1/algorithms/dpf.cpp
> +++ b/src/ipa/rkisp1/algorithms/dpf.cpp
> @@ -176,6 +176,7 @@ int Dpf::init([[maybe_unused]] IPAContext &context,
>   */
>  void Dpf::queueRequest(IPAContext &context,
>                        [[maybe_unused]] const uint32_t frame,
> +                      [[maybe_unused]] IPAFrameContext &frameContext,
>                        const ControlList &controls)
>  {
>         auto &dpf = context.frameContext.dpf;
> diff --git a/src/ipa/rkisp1/algorithms/dpf.h b/src/ipa/rkisp1/algorithms/dpf.h
> index 656d78dee67c..e232cad4ee87 100644
> --- a/src/ipa/rkisp1/algorithms/dpf.h
> +++ b/src/ipa/rkisp1/algorithms/dpf.h
> @@ -23,6 +23,7 @@ public:
>  
>         int init(IPAContext &context, const YamlObject &tuningData) override;
>         void queueRequest(IPAContext &context, const uint32_t frame,
> +                         IPAFrameContext &frameContext,
>                           const ControlList &controls) override;
>         void prepare(IPAContext &context, const uint32_t frame,
>                      IPAFrameContext &frameContext,
> diff --git a/src/ipa/rkisp1/algorithms/filter.cpp b/src/ipa/rkisp1/algorithms/filter.cpp
> index 02562339d008..6aa5476aa25e 100644
> --- a/src/ipa/rkisp1/algorithms/filter.cpp
> +++ b/src/ipa/rkisp1/algorithms/filter.cpp
> @@ -44,6 +44,7 @@ static constexpr uint32_t kFiltModeDefault = 0x000004f2;
>   */
>  void Filter::queueRequest(IPAContext &context,
>                           [[maybe_unused]] const uint32_t frame,
> +                         [[maybe_unused]] IPAFrameContext &frameContext,
>                           const ControlList &controls)
>  {
>         auto &filter = context.frameContext.filter;
> diff --git a/src/ipa/rkisp1/algorithms/filter.h b/src/ipa/rkisp1/algorithms/filter.h
> index ac69657e2f0f..3fd882ea41dc 100644
> --- a/src/ipa/rkisp1/algorithms/filter.h
> +++ b/src/ipa/rkisp1/algorithms/filter.h
> @@ -22,6 +22,7 @@ public:
>         ~Filter() = default;
>  
>         void queueRequest(IPAContext &context, const uint32_t frame,
> +                         IPAFrameContext &frameContext,
>                           const ControlList &controls) override;
>         void prepare(IPAContext &context, const uint32_t frame,
>                      IPAFrameContext &frameContext,
> diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp
> index b2593a584a1a..07210d16b5b5 100644
> --- a/src/ipa/rkisp1/rkisp1.cpp
> +++ b/src/ipa/rkisp1/rkisp1.cpp
> @@ -292,8 +292,11 @@ void IPARkISP1::unmapBuffers(const std::vector<unsigned int> &ids)
>  
>  void IPARkISP1::queueRequest(const uint32_t frame, const ControlList &controls)
>  {
> +       /* \todo Obtain the frame context to pass to process from the FCQueue */
> +       IPAFrameContext frameContext;
> +
>         for (auto const &algo : algorithms())
> -               algo->queueRequest(context_, frame, controls);
> +               algo->queueRequest(context_, frame, frameContext, controls);
>  }
>  
>  void IPARkISP1::fillParamsBuffer(const uint32_t frame, const uint32_t bufferId)
> -- 
> Regards,
> 
> Laurent Pinchart
>
Laurent Pinchart Sept. 20, 2022, 7:14 p.m. UTC | #2
Hi Kieran,

On Tue, Sep 20, 2022 at 03:05:07PM +0100, Kieran Bingham wrote:
> Quoting Laurent Pinchart (2022-09-08 02:41:36)
> > From: Kieran Bingham <kieran.bingham@ideasonboard.com>
> > 
> > IPA modules have access to incoming Request's controls list and
> > need to store them in the frame context at queueRequest() time.
> > 
> > As each algorithm is expected to have ownership of a certain set of
> > controls it should have access to the frame context where they have been
> > stored, and where the algorithm computation results can be stored to
> > later populate metadata.
> > 
> > Now that both the IPU3 and RkISP1 IPA modules comply with the same
> > interface, propagate the queueRequest() call to algorithms in the IPU3
> 
> In the RKISP module? Or is this where something was dropped from the
> IPU3?
> 
> 
> It might be worth highlighting that this commit adds a dummy frame
> context for the RKISP for the time being ?

I'll update the commit message.

> But other than that, lets get this moving.
> 
> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
> 
> 
> > IPA module.
> > 
> > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
> > Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
> > Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
> > ---
> >  src/ipa/libipa/algorithm.cpp         | 1 +
> >  src/ipa/libipa/algorithm.h           | 1 +
> >  src/ipa/rkisp1/algorithms/awb.cpp    | 1 +
> >  src/ipa/rkisp1/algorithms/awb.h      | 1 +
> >  src/ipa/rkisp1/algorithms/cproc.cpp  | 1 +
> >  src/ipa/rkisp1/algorithms/cproc.h    | 1 +
> >  src/ipa/rkisp1/algorithms/dpf.cpp    | 1 +
> >  src/ipa/rkisp1/algorithms/dpf.h      | 1 +
> >  src/ipa/rkisp1/algorithms/filter.cpp | 1 +
> >  src/ipa/rkisp1/algorithms/filter.h   | 1 +
> >  src/ipa/rkisp1/rkisp1.cpp            | 5 ++++-
> >  11 files changed, 14 insertions(+), 1 deletion(-)
> > 
> > diff --git a/src/ipa/libipa/algorithm.cpp b/src/ipa/libipa/algorithm.cpp
> > index 30eab67f71fc..c152b885aee1 100644
> > --- a/src/ipa/libipa/algorithm.cpp
> > +++ b/src/ipa/libipa/algorithm.cpp
> > @@ -88,6 +88,7 @@ namespace ipa {
> >   * \brief Provide control values to the algorithm
> >   * \param[in] context The shared IPA context
> >   * \param[in] frame The frame number to apply the control values
> > + * \param[in] frameContext The current frame's context
> >   * \param[in] controls The list of user controls
> >   *
> >   * This function is called for each request queued to the camera. It provides
> > diff --git a/src/ipa/libipa/algorithm.h b/src/ipa/libipa/algorithm.h
> > index ee93d260ca3f..d8601f9ccaff 100644
> > --- a/src/ipa/libipa/algorithm.h
> > +++ b/src/ipa/libipa/algorithm.h
> > @@ -47,6 +47,7 @@ public:
> >  
> >         virtual void queueRequest([[maybe_unused]] typename Module::Context &context,
> >                                   [[maybe_unused]] const uint32_t frame,
> > +                                 [[maybe_unused]] typename Module::FrameContext &frameContext,
> >                                   [[maybe_unused]] const ControlList &controls)
> >         {
> >         }
> > diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp
> > index aefba6382807..a23c32015454 100644
> > --- a/src/ipa/rkisp1/algorithms/awb.cpp
> > +++ b/src/ipa/rkisp1/algorithms/awb.cpp
> > @@ -128,6 +128,7 @@ void Awb::prepare(IPAContext &context,
> >   */
> >  void Awb::queueRequest(IPAContext &context,
> >                        [[maybe_unused]] const uint32_t frame,
> > +                      [[maybe_unused]] IPAFrameContext &frameContext,
> >                        const ControlList &controls)
> >  {
> >         auto &awb = context.frameContext.awb;
> > diff --git a/src/ipa/rkisp1/algorithms/awb.h b/src/ipa/rkisp1/algorithms/awb.h
> > index 806e11a2ec93..6d4a39467038 100644
> > --- a/src/ipa/rkisp1/algorithms/awb.h
> > +++ b/src/ipa/rkisp1/algorithms/awb.h
> > @@ -24,6 +24,7 @@ public:
> >                      IPAFrameContext &frameContext,
> >                      rkisp1_params_cfg *params) override;
> >         void queueRequest(IPAContext &context, const uint32_t frame,
> > +                         IPAFrameContext &frameContext,
> >                           const ControlList &controls) override;
> >         void process(IPAContext &context, const uint32_t frame,
> >                      IPAFrameContext &frameCtx,
> > diff --git a/src/ipa/rkisp1/algorithms/cproc.cpp b/src/ipa/rkisp1/algorithms/cproc.cpp
> > index c0505c68765b..bc4a07073706 100644
> > --- a/src/ipa/rkisp1/algorithms/cproc.cpp
> > +++ b/src/ipa/rkisp1/algorithms/cproc.cpp
> > @@ -38,6 +38,7 @@ LOG_DEFINE_CATEGORY(RkISP1CProc)
> >   */
> >  void ColorProcessing::queueRequest(IPAContext &context,
> >                                    [[maybe_unused]] const uint32_t frame,
> > +                                  [[maybe_unused]] IPAFrameContext &frameContext,
> >                                    const ControlList &controls)
> >  {
> >         auto &cproc = context.frameContext.cproc;
> > diff --git a/src/ipa/rkisp1/algorithms/cproc.h b/src/ipa/rkisp1/algorithms/cproc.h
> > index 02c3d9c95488..ba6e901ae110 100644
> > --- a/src/ipa/rkisp1/algorithms/cproc.h
> > +++ b/src/ipa/rkisp1/algorithms/cproc.h
> > @@ -22,6 +22,7 @@ public:
> >         ~ColorProcessing() = default;
> >  
> >         void queueRequest(IPAContext &context, const uint32_t frame,
> > +                         IPAFrameContext &frameContext,
> >                           const ControlList &controls) override;
> >         void prepare(IPAContext &context, const uint32_t frame,
> >                      IPAFrameContext &frameContext,
> > diff --git a/src/ipa/rkisp1/algorithms/dpf.cpp b/src/ipa/rkisp1/algorithms/dpf.cpp
> > index 8286f83facc1..be024fc5fe90 100644
> > --- a/src/ipa/rkisp1/algorithms/dpf.cpp
> > +++ b/src/ipa/rkisp1/algorithms/dpf.cpp
> > @@ -176,6 +176,7 @@ int Dpf::init([[maybe_unused]] IPAContext &context,
> >   */
> >  void Dpf::queueRequest(IPAContext &context,
> >                        [[maybe_unused]] const uint32_t frame,
> > +                      [[maybe_unused]] IPAFrameContext &frameContext,
> >                        const ControlList &controls)
> >  {
> >         auto &dpf = context.frameContext.dpf;
> > diff --git a/src/ipa/rkisp1/algorithms/dpf.h b/src/ipa/rkisp1/algorithms/dpf.h
> > index 656d78dee67c..e232cad4ee87 100644
> > --- a/src/ipa/rkisp1/algorithms/dpf.h
> > +++ b/src/ipa/rkisp1/algorithms/dpf.h
> > @@ -23,6 +23,7 @@ public:
> >  
> >         int init(IPAContext &context, const YamlObject &tuningData) override;
> >         void queueRequest(IPAContext &context, const uint32_t frame,
> > +                         IPAFrameContext &frameContext,
> >                           const ControlList &controls) override;
> >         void prepare(IPAContext &context, const uint32_t frame,
> >                      IPAFrameContext &frameContext,
> > diff --git a/src/ipa/rkisp1/algorithms/filter.cpp b/src/ipa/rkisp1/algorithms/filter.cpp
> > index 02562339d008..6aa5476aa25e 100644
> > --- a/src/ipa/rkisp1/algorithms/filter.cpp
> > +++ b/src/ipa/rkisp1/algorithms/filter.cpp
> > @@ -44,6 +44,7 @@ static constexpr uint32_t kFiltModeDefault = 0x000004f2;
> >   */
> >  void Filter::queueRequest(IPAContext &context,
> >                           [[maybe_unused]] const uint32_t frame,
> > +                         [[maybe_unused]] IPAFrameContext &frameContext,
> >                           const ControlList &controls)
> >  {
> >         auto &filter = context.frameContext.filter;
> > diff --git a/src/ipa/rkisp1/algorithms/filter.h b/src/ipa/rkisp1/algorithms/filter.h
> > index ac69657e2f0f..3fd882ea41dc 100644
> > --- a/src/ipa/rkisp1/algorithms/filter.h
> > +++ b/src/ipa/rkisp1/algorithms/filter.h
> > @@ -22,6 +22,7 @@ public:
> >         ~Filter() = default;
> >  
> >         void queueRequest(IPAContext &context, const uint32_t frame,
> > +                         IPAFrameContext &frameContext,
> >                           const ControlList &controls) override;
> >         void prepare(IPAContext &context, const uint32_t frame,
> >                      IPAFrameContext &frameContext,
> > diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp
> > index b2593a584a1a..07210d16b5b5 100644
> > --- a/src/ipa/rkisp1/rkisp1.cpp
> > +++ b/src/ipa/rkisp1/rkisp1.cpp
> > @@ -292,8 +292,11 @@ void IPARkISP1::unmapBuffers(const std::vector<unsigned int> &ids)
> >  
> >  void IPARkISP1::queueRequest(const uint32_t frame, const ControlList &controls)
> >  {
> > +       /* \todo Obtain the frame context to pass to process from the FCQueue */
> > +       IPAFrameContext frameContext;
> > +
> >         for (auto const &algo : algorithms())
> > -               algo->queueRequest(context_, frame, controls);
> > +               algo->queueRequest(context_, frame, frameContext, controls);
> >  }
> >  
> >  void IPARkISP1::fillParamsBuffer(const uint32_t frame, const uint32_t bufferId)

Patch
diff mbox series

diff --git a/src/ipa/libipa/algorithm.cpp b/src/ipa/libipa/algorithm.cpp
index 30eab67f71fc..c152b885aee1 100644
--- a/src/ipa/libipa/algorithm.cpp
+++ b/src/ipa/libipa/algorithm.cpp
@@ -88,6 +88,7 @@  namespace ipa {
  * \brief Provide control values to the algorithm
  * \param[in] context The shared IPA context
  * \param[in] frame The frame number to apply the control values
+ * \param[in] frameContext The current frame's context
  * \param[in] controls The list of user controls
  *
  * This function is called for each request queued to the camera. It provides
diff --git a/src/ipa/libipa/algorithm.h b/src/ipa/libipa/algorithm.h
index ee93d260ca3f..d8601f9ccaff 100644
--- a/src/ipa/libipa/algorithm.h
+++ b/src/ipa/libipa/algorithm.h
@@ -47,6 +47,7 @@  public:
 
 	virtual void queueRequest([[maybe_unused]] typename Module::Context &context,
 				  [[maybe_unused]] const uint32_t frame,
+				  [[maybe_unused]] typename Module::FrameContext &frameContext,
 				  [[maybe_unused]] const ControlList &controls)
 	{
 	}
diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp
index aefba6382807..a23c32015454 100644
--- a/src/ipa/rkisp1/algorithms/awb.cpp
+++ b/src/ipa/rkisp1/algorithms/awb.cpp
@@ -128,6 +128,7 @@  void Awb::prepare(IPAContext &context,
  */
 void Awb::queueRequest(IPAContext &context,
 		       [[maybe_unused]] const uint32_t frame,
+		       [[maybe_unused]] IPAFrameContext &frameContext,
 		       const ControlList &controls)
 {
 	auto &awb = context.frameContext.awb;
diff --git a/src/ipa/rkisp1/algorithms/awb.h b/src/ipa/rkisp1/algorithms/awb.h
index 806e11a2ec93..6d4a39467038 100644
--- a/src/ipa/rkisp1/algorithms/awb.h
+++ b/src/ipa/rkisp1/algorithms/awb.h
@@ -24,6 +24,7 @@  public:
 		     IPAFrameContext &frameContext,
 		     rkisp1_params_cfg *params) override;
 	void queueRequest(IPAContext &context, const uint32_t frame,
+			  IPAFrameContext &frameContext,
 			  const ControlList &controls) override;
 	void process(IPAContext &context, const uint32_t frame,
 		     IPAFrameContext &frameCtx,
diff --git a/src/ipa/rkisp1/algorithms/cproc.cpp b/src/ipa/rkisp1/algorithms/cproc.cpp
index c0505c68765b..bc4a07073706 100644
--- a/src/ipa/rkisp1/algorithms/cproc.cpp
+++ b/src/ipa/rkisp1/algorithms/cproc.cpp
@@ -38,6 +38,7 @@  LOG_DEFINE_CATEGORY(RkISP1CProc)
  */
 void ColorProcessing::queueRequest(IPAContext &context,
 				   [[maybe_unused]] const uint32_t frame,
+				   [[maybe_unused]] IPAFrameContext &frameContext,
 				   const ControlList &controls)
 {
 	auto &cproc = context.frameContext.cproc;
diff --git a/src/ipa/rkisp1/algorithms/cproc.h b/src/ipa/rkisp1/algorithms/cproc.h
index 02c3d9c95488..ba6e901ae110 100644
--- a/src/ipa/rkisp1/algorithms/cproc.h
+++ b/src/ipa/rkisp1/algorithms/cproc.h
@@ -22,6 +22,7 @@  public:
 	~ColorProcessing() = default;
 
 	void queueRequest(IPAContext &context, const uint32_t frame,
+			  IPAFrameContext &frameContext,
 			  const ControlList &controls) override;
 	void prepare(IPAContext &context, const uint32_t frame,
 		     IPAFrameContext &frameContext,
diff --git a/src/ipa/rkisp1/algorithms/dpf.cpp b/src/ipa/rkisp1/algorithms/dpf.cpp
index 8286f83facc1..be024fc5fe90 100644
--- a/src/ipa/rkisp1/algorithms/dpf.cpp
+++ b/src/ipa/rkisp1/algorithms/dpf.cpp
@@ -176,6 +176,7 @@  int Dpf::init([[maybe_unused]] IPAContext &context,
  */
 void Dpf::queueRequest(IPAContext &context,
 		       [[maybe_unused]] const uint32_t frame,
+		       [[maybe_unused]] IPAFrameContext &frameContext,
 		       const ControlList &controls)
 {
 	auto &dpf = context.frameContext.dpf;
diff --git a/src/ipa/rkisp1/algorithms/dpf.h b/src/ipa/rkisp1/algorithms/dpf.h
index 656d78dee67c..e232cad4ee87 100644
--- a/src/ipa/rkisp1/algorithms/dpf.h
+++ b/src/ipa/rkisp1/algorithms/dpf.h
@@ -23,6 +23,7 @@  public:
 
 	int init(IPAContext &context, const YamlObject &tuningData) override;
 	void queueRequest(IPAContext &context, const uint32_t frame,
+			  IPAFrameContext &frameContext,
 			  const ControlList &controls) override;
 	void prepare(IPAContext &context, const uint32_t frame,
 		     IPAFrameContext &frameContext,
diff --git a/src/ipa/rkisp1/algorithms/filter.cpp b/src/ipa/rkisp1/algorithms/filter.cpp
index 02562339d008..6aa5476aa25e 100644
--- a/src/ipa/rkisp1/algorithms/filter.cpp
+++ b/src/ipa/rkisp1/algorithms/filter.cpp
@@ -44,6 +44,7 @@  static constexpr uint32_t kFiltModeDefault = 0x000004f2;
  */
 void Filter::queueRequest(IPAContext &context,
 			  [[maybe_unused]] const uint32_t frame,
+			  [[maybe_unused]] IPAFrameContext &frameContext,
 			  const ControlList &controls)
 {
 	auto &filter = context.frameContext.filter;
diff --git a/src/ipa/rkisp1/algorithms/filter.h b/src/ipa/rkisp1/algorithms/filter.h
index ac69657e2f0f..3fd882ea41dc 100644
--- a/src/ipa/rkisp1/algorithms/filter.h
+++ b/src/ipa/rkisp1/algorithms/filter.h
@@ -22,6 +22,7 @@  public:
 	~Filter() = default;
 
 	void queueRequest(IPAContext &context, const uint32_t frame,
+			  IPAFrameContext &frameContext,
 			  const ControlList &controls) override;
 	void prepare(IPAContext &context, const uint32_t frame,
 		     IPAFrameContext &frameContext,
diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp
index b2593a584a1a..07210d16b5b5 100644
--- a/src/ipa/rkisp1/rkisp1.cpp
+++ b/src/ipa/rkisp1/rkisp1.cpp
@@ -292,8 +292,11 @@  void IPARkISP1::unmapBuffers(const std::vector<unsigned int> &ids)
 
 void IPARkISP1::queueRequest(const uint32_t frame, const ControlList &controls)
 {
+	/* \todo Obtain the frame context to pass to process from the FCQueue */
+	IPAFrameContext frameContext;
+
 	for (auto const &algo : algorithms())
-		algo->queueRequest(context_, frame, controls);
+		algo->queueRequest(context_, frame, frameContext, controls);
 }
 
 void IPARkISP1::fillParamsBuffer(const uint32_t frame, const uint32_t bufferId)