[libcamera-devel,5/6] ipa: raspberrypi: Embed the metadata parser in the sensor CamHelper classes
diff mbox series

Message ID 20210614095340.3051816-6-naush@raspberrypi.com
State Superseded
Headers show
Series
  • Raspberry Pi: Metadata parsing improvements
Related show

Commit Message

Naushir Patuck June 14, 2021, 9:53 a.m. UTC
This avoids the need for any dynamic allocations and lifetime management. The
base CamHelper class still accesses the parser through a pointer that is setup
by the derived class constructor.

Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
---
 src/ipa/raspberrypi/cam_helper.cpp        | 5 ++---
 src/ipa/raspberrypi/cam_helper.hpp        | 2 +-
 src/ipa/raspberrypi/cam_helper_imx219.cpp | 9 +++++----
 src/ipa/raspberrypi/cam_helper_imx290.cpp | 2 +-
 src/ipa/raspberrypi/cam_helper_imx477.cpp | 5 ++++-
 src/ipa/raspberrypi/cam_helper_ov5647.cpp | 2 +-
 6 files changed, 14 insertions(+), 11 deletions(-)

Comments

Naushir Patuck June 14, 2021, 5:07 p.m. UTC | #1
On Mon, 14 Jun 2021, 10:53 am Naushir Patuck, <naush@raspberrypi.com> wrote:

> This avoids the need for any dynamic allocations and lifetime management.
> The
> base CamHelper class still accesses the parser through a pointer that is
> setup
> by the derived class constructor.
>
> Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
> ---
>  src/ipa/raspberrypi/cam_helper.cpp        | 5 ++---
>  src/ipa/raspberrypi/cam_helper.hpp        | 2 +-
>  src/ipa/raspberrypi/cam_helper_imx219.cpp | 9 +++++----
>  src/ipa/raspberrypi/cam_helper_imx290.cpp | 2 +-
>  src/ipa/raspberrypi/cam_helper_imx477.cpp | 5 ++++-
>  src/ipa/raspberrypi/cam_helper_ov5647.cpp | 2 +-
>  6 files changed, 14 insertions(+), 11 deletions(-)
>
> diff --git a/src/ipa/raspberrypi/cam_helper.cpp
> b/src/ipa/raspberrypi/cam_helper.cpp
> index 062e94c4fef3..ab66e2ddef3e 100644
> --- a/src/ipa/raspberrypi/cam_helper.cpp
> +++ b/src/ipa/raspberrypi/cam_helper.cpp
> @@ -40,15 +40,14 @@ CamHelper *CamHelper::Create(std::string const
> &cam_name)
>         return nullptr;
>  }
>
> -CamHelper::CamHelper(MdParser *parser, unsigned int frameIntegrationDiff)
> -       : parser_(parser), initialized_(false),
> +CamHelper::CamHelper(unsigned int frameIntegrationDiff)
> +       : parser_(nullptr), initialized_(false),
>           frameIntegrationDiff_(frameIntegrationDiff)
>  {
>  }
>
>  CamHelper::~CamHelper()
>  {
> -       delete parser_;
>  }
>
>  void CamHelper::Prepare(Span<const uint8_t> buffer,
> diff --git a/src/ipa/raspberrypi/cam_helper.hpp
> b/src/ipa/raspberrypi/cam_helper.hpp
> index f53f5c39b01c..460839079741 100644
> --- a/src/ipa/raspberrypi/cam_helper.hpp
> +++ b/src/ipa/raspberrypi/cam_helper.hpp
> @@ -67,7 +67,7 @@ class CamHelper
>  {
>  public:
>         static CamHelper *Create(std::string const &cam_name);
> -       CamHelper(MdParser *parser, unsigned int frameIntegrationDiff);
> +       CamHelper(unsigned int frameIntegrationDiff);
>         virtual ~CamHelper();
>         void SetCameraMode(const CameraMode &mode);
>         virtual void Prepare(libcamera::Span<const uint8_t> buffer,
> diff --git a/src/ipa/raspberrypi/cam_helper_imx219.cpp
> b/src/ipa/raspberrypi/cam_helper_imx219.cpp
> index ec218dce5456..36dbe8cd941a 100644
> --- a/src/ipa/raspberrypi/cam_helper_imx219.cpp
> +++ b/src/ipa/raspberrypi/cam_helper_imx219.cpp
> @@ -54,15 +54,16 @@ private:
>          * in units of lines.
>          */
>         static constexpr int frameIntegrationDiff = 4;
> +
> +       MdParserImx219 imx219_parser;
>  };
>

>  CamHelperImx219::CamHelperImx219()
> +       : CamHelper(frameIntegrationDiff)
> +{
>  #if ENABLE_EMBEDDED_DATA
> -       : CamHelper(new MdParserImx219(), frameIntegrationDiff)
> -#else
> -       : CamHelper(nullptr, frameIntegrationDiff)
> +       parser_ = &imx219_parser;
>  #endif
> -{
>  }
>


Looking at this again, I think it might be better to pass the parser
pointer thorough the CamHelper constructor as before. I'll change that back
for v2.



>
>
>  uint32_t CamHelperImx219::GainCode(double gain) const
> diff --git a/src/ipa/raspberrypi/cam_helper_imx290.cpp
> b/src/ipa/raspberrypi/cam_helper_imx290.cpp
> index 6f412e403f16..dea57b84bf0b 100644
> --- a/src/ipa/raspberrypi/cam_helper_imx290.cpp
> +++ b/src/ipa/raspberrypi/cam_helper_imx290.cpp
> @@ -30,7 +30,7 @@ private:
>  };
>
>  CamHelperImx290::CamHelperImx290()
> -       : CamHelper(nullptr, frameIntegrationDiff)
> +       : CamHelper(frameIntegrationDiff)
>  {
>  }
>
> diff --git a/src/ipa/raspberrypi/cam_helper_imx477.cpp
> b/src/ipa/raspberrypi/cam_helper_imx477.cpp
> index 25b36bce0dac..038a8583d311 100644
> --- a/src/ipa/raspberrypi/cam_helper_imx477.cpp
> +++ b/src/ipa/raspberrypi/cam_helper_imx477.cpp
> @@ -47,11 +47,14 @@ private:
>          * in units of lines.
>          */
>         static constexpr int frameIntegrationDiff = 22;
> +
> +       MdParserImx477 imx477_parser;
>  };
>
>  CamHelperImx477::CamHelperImx477()
> -       : CamHelper(new MdParserImx477(), frameIntegrationDiff)
> +       : CamHelper(frameIntegrationDiff)
>  {
> +       parser_ = &imx477_parser;
>  }
>
>  uint32_t CamHelperImx477::GainCode(double gain) const
> diff --git a/src/ipa/raspberrypi/cam_helper_ov5647.cpp
> b/src/ipa/raspberrypi/cam_helper_ov5647.cpp
> index 12be6bf931a8..fff648279d2a 100644
> --- a/src/ipa/raspberrypi/cam_helper_ov5647.cpp
> +++ b/src/ipa/raspberrypi/cam_helper_ov5647.cpp
> @@ -38,7 +38,7 @@ private:
>   */
>
>  CamHelperOv5647::CamHelperOv5647()
> -       : CamHelper(nullptr, frameIntegrationDiff)
> +       : CamHelper(frameIntegrationDiff)
>  {
>  }
>
> --
> 2.25.1
>
>
Laurent Pinchart June 15, 2021, 2:52 a.m. UTC | #2
Hi Naush,

On Mon, Jun 14, 2021 at 06:07:41PM +0100, Naushir Patuck wrote:
> On Mon, 14 Jun 2021, 10:53 am Naushir Patuck wrote:
> > This avoids the need for any dynamic allocations and lifetime management. The
> > base CamHelper class still accesses the parser through a pointer that is setup
> > by the derived class constructor.
> >
> > Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
> > ---
> >  src/ipa/raspberrypi/cam_helper.cpp        | 5 ++---
> >  src/ipa/raspberrypi/cam_helper.hpp        | 2 +-
> >  src/ipa/raspberrypi/cam_helper_imx219.cpp | 9 +++++----
> >  src/ipa/raspberrypi/cam_helper_imx290.cpp | 2 +-
> >  src/ipa/raspberrypi/cam_helper_imx477.cpp | 5 ++++-
> >  src/ipa/raspberrypi/cam_helper_ov5647.cpp | 2 +-
> >  6 files changed, 14 insertions(+), 11 deletions(-)
> >
> > diff --git a/src/ipa/raspberrypi/cam_helper.cpp
> > b/src/ipa/raspberrypi/cam_helper.cpp
> > index 062e94c4fef3..ab66e2ddef3e 100644
> > --- a/src/ipa/raspberrypi/cam_helper.cpp
> > +++ b/src/ipa/raspberrypi/cam_helper.cpp
> > @@ -40,15 +40,14 @@ CamHelper *CamHelper::Create(std::string const
> > &cam_name)
> >         return nullptr;
> >  }
> >
> > -CamHelper::CamHelper(MdParser *parser, unsigned int frameIntegrationDiff)
> > -       : parser_(parser), initialized_(false),
> > +CamHelper::CamHelper(unsigned int frameIntegrationDiff)
> > +       : parser_(nullptr), initialized_(false),
> >           frameIntegrationDiff_(frameIntegrationDiff)
> >  {
> >  }
> >
> >  CamHelper::~CamHelper()
> >  {
> > -       delete parser_;
> >  }
> >
> >  void CamHelper::Prepare(Span<const uint8_t> buffer,
> > diff --git a/src/ipa/raspberrypi/cam_helper.hpp
> > b/src/ipa/raspberrypi/cam_helper.hpp
> > index f53f5c39b01c..460839079741 100644
> > --- a/src/ipa/raspberrypi/cam_helper.hpp
> > +++ b/src/ipa/raspberrypi/cam_helper.hpp
> > @@ -67,7 +67,7 @@ class CamHelper
> >  {
> >  public:
> >         static CamHelper *Create(std::string const &cam_name);
> > -       CamHelper(MdParser *parser, unsigned int frameIntegrationDiff);
> > +       CamHelper(unsigned int frameIntegrationDiff);
> >         virtual ~CamHelper();
> >         void SetCameraMode(const CameraMode &mode);
> >         virtual void Prepare(libcamera::Span<const uint8_t> buffer,
> > diff --git a/src/ipa/raspberrypi/cam_helper_imx219.cpp
> > b/src/ipa/raspberrypi/cam_helper_imx219.cpp
> > index ec218dce5456..36dbe8cd941a 100644
> > --- a/src/ipa/raspberrypi/cam_helper_imx219.cpp
> > +++ b/src/ipa/raspberrypi/cam_helper_imx219.cpp
> > @@ -54,15 +54,16 @@ private:
> >          * in units of lines.
> >          */
> >         static constexpr int frameIntegrationDiff = 4;
> > +
> > +       MdParserImx219 imx219_parser;
> >  };
> >
> 
> >  CamHelperImx219::CamHelperImx219()
> > +       : CamHelper(frameIntegrationDiff)
> > +{
> >  #if ENABLE_EMBEDDED_DATA
> > -       : CamHelper(new MdParserImx219(), frameIntegrationDiff)
> > -#else
> > -       : CamHelper(nullptr, frameIntegrationDiff)
> > +       parser_ = &imx219_parser;
> >  #endif
> > -{
> >  }
> 
> Looking at this again, I think it might be better to pass the parser
> pointer thorough the CamHelper constructor as before. I'll change that back
> for v2.

The rest of the patch looks fine to me.

Should I push patch 1/6 to 4/6 already, or will you include them in a v2
? I have them ready in a branch :-)

> >  uint32_t CamHelperImx219::GainCode(double gain) const
> > diff --git a/src/ipa/raspberrypi/cam_helper_imx290.cpp
> > b/src/ipa/raspberrypi/cam_helper_imx290.cpp
> > index 6f412e403f16..dea57b84bf0b 100644
> > --- a/src/ipa/raspberrypi/cam_helper_imx290.cpp
> > +++ b/src/ipa/raspberrypi/cam_helper_imx290.cpp
> > @@ -30,7 +30,7 @@ private:
> >  };
> >
> >  CamHelperImx290::CamHelperImx290()
> > -       : CamHelper(nullptr, frameIntegrationDiff)
> > +       : CamHelper(frameIntegrationDiff)
> >  {
> >  }
> >
> > diff --git a/src/ipa/raspberrypi/cam_helper_imx477.cpp
> > b/src/ipa/raspberrypi/cam_helper_imx477.cpp
> > index 25b36bce0dac..038a8583d311 100644
> > --- a/src/ipa/raspberrypi/cam_helper_imx477.cpp
> > +++ b/src/ipa/raspberrypi/cam_helper_imx477.cpp
> > @@ -47,11 +47,14 @@ private:
> >          * in units of lines.
> >          */
> >         static constexpr int frameIntegrationDiff = 22;
> > +
> > +       MdParserImx477 imx477_parser;
> >  };
> >
> >  CamHelperImx477::CamHelperImx477()
> > -       : CamHelper(new MdParserImx477(), frameIntegrationDiff)
> > +       : CamHelper(frameIntegrationDiff)
> >  {
> > +       parser_ = &imx477_parser;
> >  }
> >
> >  uint32_t CamHelperImx477::GainCode(double gain) const
> > diff --git a/src/ipa/raspberrypi/cam_helper_ov5647.cpp
> > b/src/ipa/raspberrypi/cam_helper_ov5647.cpp
> > index 12be6bf931a8..fff648279d2a 100644
> > --- a/src/ipa/raspberrypi/cam_helper_ov5647.cpp
> > +++ b/src/ipa/raspberrypi/cam_helper_ov5647.cpp
> > @@ -38,7 +38,7 @@ private:
> >   */
> >
> >  CamHelperOv5647::CamHelperOv5647()
> > -       : CamHelper(nullptr, frameIntegrationDiff)
> > +       : CamHelper(frameIntegrationDiff)
> >  {
> >  }
> >
Naushir Patuck June 15, 2021, 8:56 a.m. UTC | #3
Hi Laurent,

Thank you for your review on this series.

On Tue, 15 Jun 2021 at 03:52, Laurent Pinchart <
laurent.pinchart@ideasonboard.com> wrote:

> Hi Naush,
>
> On Mon, Jun 14, 2021 at 06:07:41PM +0100, Naushir Patuck wrote:
> > On Mon, 14 Jun 2021, 10:53 am Naushir Patuck wrote:
> > > This avoids the need for any dynamic allocations and lifetime
> management. The
> > > base CamHelper class still accesses the parser through a pointer that
> is setup
> > > by the derived class constructor.
> > >
> > > Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
> > > ---
> > >  src/ipa/raspberrypi/cam_helper.cpp        | 5 ++---
> > >  src/ipa/raspberrypi/cam_helper.hpp        | 2 +-
> > >  src/ipa/raspberrypi/cam_helper_imx219.cpp | 9 +++++----
> > >  src/ipa/raspberrypi/cam_helper_imx290.cpp | 2 +-
> > >  src/ipa/raspberrypi/cam_helper_imx477.cpp | 5 ++++-
> > >  src/ipa/raspberrypi/cam_helper_ov5647.cpp | 2 +-
> > >  6 files changed, 14 insertions(+), 11 deletions(-)
> > >
> > > diff --git a/src/ipa/raspberrypi/cam_helper.cpp
> > > b/src/ipa/raspberrypi/cam_helper.cpp
> > > index 062e94c4fef3..ab66e2ddef3e 100644
> > > --- a/src/ipa/raspberrypi/cam_helper.cpp
> > > +++ b/src/ipa/raspberrypi/cam_helper.cpp
> > > @@ -40,15 +40,14 @@ CamHelper *CamHelper::Create(std::string const
> > > &cam_name)
> > >         return nullptr;
> > >  }
> > >
> > > -CamHelper::CamHelper(MdParser *parser, unsigned int
> frameIntegrationDiff)
> > > -       : parser_(parser), initialized_(false),
> > > +CamHelper::CamHelper(unsigned int frameIntegrationDiff)
> > > +       : parser_(nullptr), initialized_(false),
> > >           frameIntegrationDiff_(frameIntegrationDiff)
> > >  {
> > >  }
> > >
> > >  CamHelper::~CamHelper()
> > >  {
> > > -       delete parser_;
> > >  }
> > >
> > >  void CamHelper::Prepare(Span<const uint8_t> buffer,
> > > diff --git a/src/ipa/raspberrypi/cam_helper.hpp
> > > b/src/ipa/raspberrypi/cam_helper.hpp
> > > index f53f5c39b01c..460839079741 100644
> > > --- a/src/ipa/raspberrypi/cam_helper.hpp
> > > +++ b/src/ipa/raspberrypi/cam_helper.hpp
> > > @@ -67,7 +67,7 @@ class CamHelper
> > >  {
> > >  public:
> > >         static CamHelper *Create(std::string const &cam_name);
> > > -       CamHelper(MdParser *parser, unsigned int frameIntegrationDiff);
> > > +       CamHelper(unsigned int frameIntegrationDiff);
> > >         virtual ~CamHelper();
> > >         void SetCameraMode(const CameraMode &mode);
> > >         virtual void Prepare(libcamera::Span<const uint8_t> buffer,
> > > diff --git a/src/ipa/raspberrypi/cam_helper_imx219.cpp
> > > b/src/ipa/raspberrypi/cam_helper_imx219.cpp
> > > index ec218dce5456..36dbe8cd941a 100644
> > > --- a/src/ipa/raspberrypi/cam_helper_imx219.cpp
> > > +++ b/src/ipa/raspberrypi/cam_helper_imx219.cpp
> > > @@ -54,15 +54,16 @@ private:
> > >          * in units of lines.
> > >          */
> > >         static constexpr int frameIntegrationDiff = 4;
> > > +
> > > +       MdParserImx219 imx219_parser;
> > >  };
> > >
> >
> > >  CamHelperImx219::CamHelperImx219()
> > > +       : CamHelper(frameIntegrationDiff)
> > > +{
> > >  #if ENABLE_EMBEDDED_DATA
> > > -       : CamHelper(new MdParserImx219(), frameIntegrationDiff)
> > > -#else
> > > -       : CamHelper(nullptr, frameIntegrationDiff)
> > > +       parser_ = &imx219_parser;
> > >  #endif
> > > -{
> > >  }
> >
> > Looking at this again, I think it might be better to pass the parser
> > pointer thorough the CamHelper constructor as before. I'll change that
> back
> > for v2.
>
> The rest of the patch looks fine to me.
>
> Should I push patch 1/6 to 4/6 already, or will you include them in a v2
> ? I have them ready in a branch :-)
>

Ack all your suggestions, and happy for you to merge patches 1-4 straight
away
while I rework 5/6 and 6/6 (will discuss that in the other email thread).

Regards,
Naush



>
> > >  uint32_t CamHelperImx219::GainCode(double gain) const
> > > diff --git a/src/ipa/raspberrypi/cam_helper_imx290.cpp
> > > b/src/ipa/raspberrypi/cam_helper_imx290.cpp
> > > index 6f412e403f16..dea57b84bf0b 100644
> > > --- a/src/ipa/raspberrypi/cam_helper_imx290.cpp
> > > +++ b/src/ipa/raspberrypi/cam_helper_imx290.cpp
> > > @@ -30,7 +30,7 @@ private:
> > >  };
> > >
> > >  CamHelperImx290::CamHelperImx290()
> > > -       : CamHelper(nullptr, frameIntegrationDiff)
> > > +       : CamHelper(frameIntegrationDiff)
> > >  {
> > >  }
> > >
> > > diff --git a/src/ipa/raspberrypi/cam_helper_imx477.cpp
> > > b/src/ipa/raspberrypi/cam_helper_imx477.cpp
> > > index 25b36bce0dac..038a8583d311 100644
> > > --- a/src/ipa/raspberrypi/cam_helper_imx477.cpp
> > > +++ b/src/ipa/raspberrypi/cam_helper_imx477.cpp
> > > @@ -47,11 +47,14 @@ private:
> > >          * in units of lines.
> > >          */
> > >         static constexpr int frameIntegrationDiff = 22;
> > > +
> > > +       MdParserImx477 imx477_parser;
> > >  };
> > >
> > >  CamHelperImx477::CamHelperImx477()
> > > -       : CamHelper(new MdParserImx477(), frameIntegrationDiff)
> > > +       : CamHelper(frameIntegrationDiff)
> > >  {
> > > +       parser_ = &imx477_parser;
> > >  }
> > >
> > >  uint32_t CamHelperImx477::GainCode(double gain) const
> > > diff --git a/src/ipa/raspberrypi/cam_helper_ov5647.cpp
> > > b/src/ipa/raspberrypi/cam_helper_ov5647.cpp
> > > index 12be6bf931a8..fff648279d2a 100644
> > > --- a/src/ipa/raspberrypi/cam_helper_ov5647.cpp
> > > +++ b/src/ipa/raspberrypi/cam_helper_ov5647.cpp
> > > @@ -38,7 +38,7 @@ private:
> > >   */
> > >
> > >  CamHelperOv5647::CamHelperOv5647()
> > > -       : CamHelper(nullptr, frameIntegrationDiff)
> > > +       : CamHelper(frameIntegrationDiff)
> > >  {
> > >  }
> > >
>
> --
> Regards,
>
> Laurent Pinchart
>

Patch
diff mbox series

diff --git a/src/ipa/raspberrypi/cam_helper.cpp b/src/ipa/raspberrypi/cam_helper.cpp
index 062e94c4fef3..ab66e2ddef3e 100644
--- a/src/ipa/raspberrypi/cam_helper.cpp
+++ b/src/ipa/raspberrypi/cam_helper.cpp
@@ -40,15 +40,14 @@  CamHelper *CamHelper::Create(std::string const &cam_name)
 	return nullptr;
 }
 
-CamHelper::CamHelper(MdParser *parser, unsigned int frameIntegrationDiff)
-	: parser_(parser), initialized_(false),
+CamHelper::CamHelper(unsigned int frameIntegrationDiff)
+	: parser_(nullptr), initialized_(false),
 	  frameIntegrationDiff_(frameIntegrationDiff)
 {
 }
 
 CamHelper::~CamHelper()
 {
-	delete parser_;
 }
 
 void CamHelper::Prepare(Span<const uint8_t> buffer,
diff --git a/src/ipa/raspberrypi/cam_helper.hpp b/src/ipa/raspberrypi/cam_helper.hpp
index f53f5c39b01c..460839079741 100644
--- a/src/ipa/raspberrypi/cam_helper.hpp
+++ b/src/ipa/raspberrypi/cam_helper.hpp
@@ -67,7 +67,7 @@  class CamHelper
 {
 public:
 	static CamHelper *Create(std::string const &cam_name);
-	CamHelper(MdParser *parser, unsigned int frameIntegrationDiff);
+	CamHelper(unsigned int frameIntegrationDiff);
 	virtual ~CamHelper();
 	void SetCameraMode(const CameraMode &mode);
 	virtual void Prepare(libcamera::Span<const uint8_t> buffer,
diff --git a/src/ipa/raspberrypi/cam_helper_imx219.cpp b/src/ipa/raspberrypi/cam_helper_imx219.cpp
index ec218dce5456..36dbe8cd941a 100644
--- a/src/ipa/raspberrypi/cam_helper_imx219.cpp
+++ b/src/ipa/raspberrypi/cam_helper_imx219.cpp
@@ -54,15 +54,16 @@  private:
 	 * in units of lines.
 	 */
 	static constexpr int frameIntegrationDiff = 4;
+
+	MdParserImx219 imx219_parser;
 };
 
 CamHelperImx219::CamHelperImx219()
+	: CamHelper(frameIntegrationDiff)
+{
 #if ENABLE_EMBEDDED_DATA
-	: CamHelper(new MdParserImx219(), frameIntegrationDiff)
-#else
-	: CamHelper(nullptr, frameIntegrationDiff)
+	parser_ = &imx219_parser;
 #endif
-{
 }
 
 uint32_t CamHelperImx219::GainCode(double gain) const
diff --git a/src/ipa/raspberrypi/cam_helper_imx290.cpp b/src/ipa/raspberrypi/cam_helper_imx290.cpp
index 6f412e403f16..dea57b84bf0b 100644
--- a/src/ipa/raspberrypi/cam_helper_imx290.cpp
+++ b/src/ipa/raspberrypi/cam_helper_imx290.cpp
@@ -30,7 +30,7 @@  private:
 };
 
 CamHelperImx290::CamHelperImx290()
-	: CamHelper(nullptr, frameIntegrationDiff)
+	: CamHelper(frameIntegrationDiff)
 {
 }
 
diff --git a/src/ipa/raspberrypi/cam_helper_imx477.cpp b/src/ipa/raspberrypi/cam_helper_imx477.cpp
index 25b36bce0dac..038a8583d311 100644
--- a/src/ipa/raspberrypi/cam_helper_imx477.cpp
+++ b/src/ipa/raspberrypi/cam_helper_imx477.cpp
@@ -47,11 +47,14 @@  private:
 	 * in units of lines.
 	 */
 	static constexpr int frameIntegrationDiff = 22;
+
+	MdParserImx477 imx477_parser;
 };
 
 CamHelperImx477::CamHelperImx477()
-	: CamHelper(new MdParserImx477(), frameIntegrationDiff)
+	: CamHelper(frameIntegrationDiff)
 {
+	parser_ = &imx477_parser;
 }
 
 uint32_t CamHelperImx477::GainCode(double gain) const
diff --git a/src/ipa/raspberrypi/cam_helper_ov5647.cpp b/src/ipa/raspberrypi/cam_helper_ov5647.cpp
index 12be6bf931a8..fff648279d2a 100644
--- a/src/ipa/raspberrypi/cam_helper_ov5647.cpp
+++ b/src/ipa/raspberrypi/cam_helper_ov5647.cpp
@@ -38,7 +38,7 @@  private:
  */
 
 CamHelperOv5647::CamHelperOv5647()
-	: CamHelper(nullptr, frameIntegrationDiff)
+	: CamHelper(frameIntegrationDiff)
 {
 }