libcamera: Make converter/softISP configure()'s outputCfgs argument really const
diff mbox series

Message ID 20260325105618.8601-1-johannes.goede@oss.qualcomm.com
State Accepted
Commit 5f770f748c1d75d1056840bea123060659594b5a
Headers show
Series
  • libcamera: Make converter/softISP configure()'s outputCfgs argument really const
Related show

Commit Message

Hans de Goede March 25, 2026, 10:56 a.m. UTC
The intent of the outputCfgs argument to the configure() function of
converter classes and the softISP is to allow the passed in stream-configs
to not be changed.

But only the vector is const, the reference inside the vector are not
const, which allows modifying the stream-configs as can be seen inside
DebayerEGL::configure() which was using a non const reference outputCfg
helper variable.

Fix this by making the references inside the vector const.

Signed-off-by: Hans de Goede <johannes.goede@oss.qualcomm.com>
---
 include/libcamera/internal/converter.h                    | 2 +-
 include/libcamera/internal/converter/converter_dw100.h    | 2 +-
 include/libcamera/internal/converter/converter_v4l2_m2m.h | 2 +-
 include/libcamera/internal/software_isp/software_isp.h    | 2 +-
 src/libcamera/converter/converter_dw100.cpp               | 2 +-
 src/libcamera/converter/converter_v4l2_m2m.cpp            | 2 +-
 src/libcamera/pipeline/rkisp1/rkisp1.cpp                  | 2 +-
 src/libcamera/pipeline/simple/simple.cpp                  | 2 +-
 src/libcamera/software_isp/debayer.h                      | 2 +-
 src/libcamera/software_isp/debayer_cpu.cpp                | 2 +-
 src/libcamera/software_isp/debayer_cpu.h                  | 2 +-
 src/libcamera/software_isp/debayer_egl.cpp                | 4 ++--
 src/libcamera/software_isp/debayer_egl.h                  | 2 +-
 src/libcamera/software_isp/software_isp.cpp               | 2 +-
 14 files changed, 15 insertions(+), 15 deletions(-)

Comments

Barnabás Pőcze March 30, 2026, 9 a.m. UTC | #1
Hi

2026. 03. 25. 11:56 keltezéssel, Hans de Goede írta:
> The intent of the outputCfgs argument to the configure() function of
> converter classes and the softISP is to allow the passed in stream-configs
> to not be changed.
> 
> But only the vector is const, the reference inside the vector are not
> const, which allows modifying the stream-configs as can be seen inside
> DebayerEGL::configure() which was using a non const reference outputCfg
> helper variable.
> 
> Fix this by making the references inside the vector const.
> 
> Signed-off-by: Hans de Goede <johannes.goede@oss.qualcomm.com>
> ---
>   include/libcamera/internal/converter.h                    | 2 +-
>   include/libcamera/internal/converter/converter_dw100.h    | 2 +-
>   include/libcamera/internal/converter/converter_v4l2_m2m.h | 2 +-
>   include/libcamera/internal/software_isp/software_isp.h    | 2 +-
>   src/libcamera/converter/converter_dw100.cpp               | 2 +-
>   src/libcamera/converter/converter_v4l2_m2m.cpp            | 2 +-
>   src/libcamera/pipeline/rkisp1/rkisp1.cpp                  | 2 +-
>   src/libcamera/pipeline/simple/simple.cpp                  | 2 +-
>   src/libcamera/software_isp/debayer.h                      | 2 +-
>   src/libcamera/software_isp/debayer_cpu.cpp                | 2 +-
>   src/libcamera/software_isp/debayer_cpu.h                  | 2 +-
>   src/libcamera/software_isp/debayer_egl.cpp                | 4 ++--
>   src/libcamera/software_isp/debayer_egl.h                  | 2 +-
>   src/libcamera/software_isp/software_isp.cpp               | 2 +-
>   14 files changed, 15 insertions(+), 15 deletions(-)
> 
> diff --git a/include/libcamera/internal/converter.h b/include/libcamera/internal/converter.h
> index 4b811686f..08e80a22f 100644
> --- a/include/libcamera/internal/converter.h
> +++ b/include/libcamera/internal/converter.h
> @@ -71,7 +71,7 @@ public:
>   				   Alignment align = Alignment::Down) = 0;
>   
>   	virtual int configure(const StreamConfiguration &inputCfg,
> -			      const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs) = 0;
> +			      const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs) = 0;

Could be made `Span<const std::reference_wrapper<const StreamConfiguration>>`.
But looks ok to me in any case.

Reviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>



>   	virtual bool isConfigured(const Stream *stream) const = 0;
>   	virtual int exportBuffers(const Stream *stream, unsigned int count,
>   				  std::vector<std::unique_ptr<FrameBuffer>> *buffers) = 0;
> diff --git a/include/libcamera/internal/converter/converter_dw100.h b/include/libcamera/internal/converter/converter_dw100.h
> index d70c8fe76..0a41b180a 100644
> --- a/include/libcamera/internal/converter/converter_dw100.h
> +++ b/include/libcamera/internal/converter/converter_dw100.h
> @@ -34,7 +34,7 @@ public:
>   	int init(const YamlObject &params);
>   
>   	int configure(const StreamConfiguration &inputCfg,
> -		      const std::vector<std::reference_wrapper<StreamConfiguration>>
> +		      const std::vector<std::reference_wrapper<const StreamConfiguration>>
>   			      &outputCfg);
>   	bool isConfigured(const Stream *stream) const;
>   
> diff --git a/include/libcamera/internal/converter/converter_v4l2_m2m.h b/include/libcamera/internal/converter/converter_v4l2_m2m.h
> index 6d2453bb9..63cea6b08 100644
> --- a/include/libcamera/internal/converter/converter_v4l2_m2m.h
> +++ b/include/libcamera/internal/converter/converter_v4l2_m2m.h
> @@ -54,7 +54,7 @@ public:
>   			      const Size &size, Alignment align = Alignment::Down) override;
>   
>   	int configure(const StreamConfiguration &inputCfg,
> -		      const std::vector<std::reference_wrapper<StreamConfiguration>>
> +		      const std::vector<std::reference_wrapper<const StreamConfiguration>>
>   		      &outputCfg) override;
>   	bool isConfigured(const Stream *stream) const override;
>   	int exportBuffers(const Stream *stream, unsigned int count,
> diff --git a/include/libcamera/internal/software_isp/software_isp.h b/include/libcamera/internal/software_isp/software_isp.h
> index ad89c9b3c..585e0d6d9 100644
> --- a/include/libcamera/internal/software_isp/software_isp.h
> +++ b/include/libcamera/internal/software_isp/software_isp.h
> @@ -64,7 +64,7 @@ public:
>   	strideAndFrameSize(const PixelFormat &outputFormat, const Size &size);
>   
>   	int configure(const StreamConfiguration &inputCfg,
> -		      const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
> +		      const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
>   		      const ipa::soft::IPAConfigInfo &configInfo);
>   
>   	int exportBuffers(const Stream *stream, unsigned int count,
> diff --git a/src/libcamera/converter/converter_dw100.cpp b/src/libcamera/converter/converter_dw100.cpp
> index df5155cfd..7899fe8c2 100644
> --- a/src/libcamera/converter/converter_dw100.cpp
> +++ b/src/libcamera/converter/converter_dw100.cpp
> @@ -142,7 +142,7 @@ int ConverterDW100Module::init(const YamlObject &params)
>    * \copydoc libcamera::V4L2M2MConverter::configure
>    */
>   int ConverterDW100Module::configure(const StreamConfiguration &inputCfg,
> -				    const std::vector<std::reference_wrapper<StreamConfiguration>>
> +				    const std::vector<std::reference_wrapper<const StreamConfiguration>>
>   					    &outputCfgs)
>   {
>   	int ret;
> diff --git a/src/libcamera/converter/converter_v4l2_m2m.cpp b/src/libcamera/converter/converter_v4l2_m2m.cpp
> index 4427a37c6..ffba0434e 100644
> --- a/src/libcamera/converter/converter_v4l2_m2m.cpp
> +++ b/src/libcamera/converter/converter_v4l2_m2m.cpp
> @@ -548,7 +548,7 @@ Size V4L2M2MConverter::adjustSizes(const Size &cfgSize,
>    * \copydoc libcamera::Converter::configure
>    */
>   int V4L2M2MConverter::configure(const StreamConfiguration &inputCfg,
> -				const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs)
> +				const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs)
>   {
>   	int ret = 0;
>   
> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> index 320a4dc5a..faeeecd96 100644
> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> @@ -1037,7 +1037,7 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c)
>   	data->properties_.set(properties::ScalerCropMaximum, sensorCrop);
>   
>   	std::map<unsigned int, IPAStream> streamConfig;
> -	std::vector<std::reference_wrapper<StreamConfiguration>> outputCfgs;
> +	std::vector<std::reference_wrapper<const StreamConfiguration>> outputCfgs;
>   
>   	for (const StreamConfiguration &cfg : *config) {
>   		if (cfg.stream() == &data->mainPathStream_) {
> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
> index 4a0b9f58d..9497ac13b 100644
> --- a/src/libcamera/pipeline/simple/simple.cpp
> +++ b/src/libcamera/pipeline/simple/simple.cpp
> @@ -1562,7 +1562,7 @@ int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c)
>   	}
>   
>   	/* Configure the converter if needed. */
> -	std::vector<std::reference_wrapper<StreamConfiguration>> outputCfgs;
> +	std::vector<std::reference_wrapper<const StreamConfiguration>> outputCfgs;
>   	data->useConversion_ = config->needConversion();
>   
>   	data->rawStream_ = nullptr;
> diff --git a/src/libcamera/software_isp/debayer.h b/src/libcamera/software_isp/debayer.h
> index ce9350b7b..ea1ec6dcf 100644
> --- a/src/libcamera/software_isp/debayer.h
> +++ b/src/libcamera/software_isp/debayer.h
> @@ -39,7 +39,7 @@ public:
>   	virtual ~Debayer() = 0;
>   
>   	virtual int configure(const StreamConfiguration &inputCfg,
> -			      const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
> +			      const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
>   			      bool ccmEnabled) = 0;
>   
>   	virtual std::vector<PixelFormat> formats(PixelFormat inputFormat) = 0;
> diff --git a/src/libcamera/software_isp/debayer_cpu.cpp b/src/libcamera/software_isp/debayer_cpu.cpp
> index 1de70b3b7..dd0fff871 100644
> --- a/src/libcamera/software_isp/debayer_cpu.cpp
> +++ b/src/libcamera/software_isp/debayer_cpu.cpp
> @@ -540,7 +540,7 @@ int DebayerCpu::setDebayerFunctions(PixelFormat inputFormat,
>   }
>   
>   int DebayerCpu::configure(const StreamConfiguration &inputCfg,
> -			  const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
> +			  const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
>   			  bool ccmEnabled)
>   {
>   	if (getInputConfig(inputCfg.pixelFormat, inputConfig_) != 0)
> diff --git a/src/libcamera/software_isp/debayer_cpu.h b/src/libcamera/software_isp/debayer_cpu.h
> index a96998e92..c6f263e1b 100644
> --- a/src/libcamera/software_isp/debayer_cpu.h
> +++ b/src/libcamera/software_isp/debayer_cpu.h
> @@ -35,7 +35,7 @@ public:
>   	~DebayerCpu();
>   
>   	int configure(const StreamConfiguration &inputCfg,
> -		      const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
> +		      const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
>   		      bool ccmEnabled);
>   	Size patternSize(PixelFormat inputFormat);
>   	std::vector<PixelFormat> formats(PixelFormat input);
> diff --git a/src/libcamera/software_isp/debayer_egl.cpp b/src/libcamera/software_isp/debayer_egl.cpp
> index 9a0606b5a..547b3c3bd 100644
> --- a/src/libcamera/software_isp/debayer_egl.cpp
> +++ b/src/libcamera/software_isp/debayer_egl.cpp
> @@ -277,7 +277,7 @@ int DebayerEGL::initBayerShaders(PixelFormat inputFormat, PixelFormat outputForm
>   }
>   
>   int DebayerEGL::configure(const StreamConfiguration &inputCfg,
> -			  const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
> +			  const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
>   			  [[maybe_unused]] bool ccmEnabled)
>   {
>   	if (getInputConfig(inputCfg.pixelFormat, inputConfig_) != 0)
> @@ -307,7 +307,7 @@ int DebayerEGL::configure(const StreamConfiguration &inputCfg,
>   		return -EINVAL;
>   	}
>   
> -	StreamConfiguration &outputCfg = outputCfgs[0];
> +	const StreamConfiguration &outputCfg = outputCfgs[0];
>   	SizeRange outSizeRange = sizes(inputCfg.pixelFormat, inputCfg.size);
>   	std::tie(outputConfig_.stride, outputConfig_.frameSize) =
>   		strideAndFrameSize(outputCfg.pixelFormat, outputCfg.size);
> diff --git a/src/libcamera/software_isp/debayer_egl.h b/src/libcamera/software_isp/debayer_egl.h
> index 3abff1ad2..6bbe487a3 100644
> --- a/src/libcamera/software_isp/debayer_egl.h
> +++ b/src/libcamera/software_isp/debayer_egl.h
> @@ -42,7 +42,7 @@ public:
>   	~DebayerEGL();
>   
>   	int configure(const StreamConfiguration &inputCfg,
> -		      const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
> +		      const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
>   		      bool ccmEnabled);
>   
>   	Size patternSize(PixelFormat inputFormat);
> diff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp
> index 4cf5639d9..60228369f 100644
> --- a/src/libcamera/software_isp/software_isp.cpp
> +++ b/src/libcamera/software_isp/software_isp.cpp
> @@ -262,7 +262,7 @@ SoftwareIsp::strideAndFrameSize(const PixelFormat &outputFormat, const Size &siz
>    * \return 0 on success, a negative errno on failure
>    */
>   int SoftwareIsp::configure(const StreamConfiguration &inputCfg,
> -			   const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
> +			   const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
>   			   const ipa::soft::IPAConfigInfo &configInfo)
>   {
>   	ASSERT(ipa_ && debayer_);
Kieran Bingham April 1, 2026, 1:59 p.m. UTC | #2
Quoting Barnabás Pőcze (2026-03-30 10:00:03)
> Hi
> 
> 2026. 03. 25. 11:56 keltezéssel, Hans de Goede írta:
> > The intent of the outputCfgs argument to the configure() function of
> > converter classes and the softISP is to allow the passed in stream-configs
> > to not be changed.
> > 
> > But only the vector is const, the reference inside the vector are not
> > const, which allows modifying the stream-configs as can be seen inside
> > DebayerEGL::configure() which was using a non const reference outputCfg
> > helper variable.
> > 
> > Fix this by making the references inside the vector const.
> > 
> > Signed-off-by: Hans de Goede <johannes.goede@oss.qualcomm.com>
> > ---
> >   include/libcamera/internal/converter.h                    | 2 +-
> >   include/libcamera/internal/converter/converter_dw100.h    | 2 +-
> >   include/libcamera/internal/converter/converter_v4l2_m2m.h | 2 +-
> >   include/libcamera/internal/software_isp/software_isp.h    | 2 +-
> >   src/libcamera/converter/converter_dw100.cpp               | 2 +-
> >   src/libcamera/converter/converter_v4l2_m2m.cpp            | 2 +-
> >   src/libcamera/pipeline/rkisp1/rkisp1.cpp                  | 2 +-
> >   src/libcamera/pipeline/simple/simple.cpp                  | 2 +-
> >   src/libcamera/software_isp/debayer.h                      | 2 +-
> >   src/libcamera/software_isp/debayer_cpu.cpp                | 2 +-
> >   src/libcamera/software_isp/debayer_cpu.h                  | 2 +-
> >   src/libcamera/software_isp/debayer_egl.cpp                | 4 ++--
> >   src/libcamera/software_isp/debayer_egl.h                  | 2 +-
> >   src/libcamera/software_isp/software_isp.cpp               | 2 +-
> >   14 files changed, 15 insertions(+), 15 deletions(-)
> > 
> > diff --git a/include/libcamera/internal/converter.h b/include/libcamera/internal/converter.h
> > index 4b811686f..08e80a22f 100644
> > --- a/include/libcamera/internal/converter.h
> > +++ b/include/libcamera/internal/converter.h
> > @@ -71,7 +71,7 @@ public:
> >                                  Alignment align = Alignment::Down) = 0;
> >   
> >       virtual int configure(const StreamConfiguration &inputCfg,
> > -                           const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs) = 0;
> > +                           const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs) = 0;
> 
> Could be made `Span<const std::reference_wrapper<const StreamConfiguration>>`.
> But looks ok to me in any case.
> 
> Reviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>

I'm fine with this too, span could be something for later, or after we
have std::span!


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

> 
> 
> 
> >       virtual bool isConfigured(const Stream *stream) const = 0;
> >       virtual int exportBuffers(const Stream *stream, unsigned int count,
> >                                 std::vector<std::unique_ptr<FrameBuffer>> *buffers) = 0;
> > diff --git a/include/libcamera/internal/converter/converter_dw100.h b/include/libcamera/internal/converter/converter_dw100.h
> > index d70c8fe76..0a41b180a 100644
> > --- a/include/libcamera/internal/converter/converter_dw100.h
> > +++ b/include/libcamera/internal/converter/converter_dw100.h
> > @@ -34,7 +34,7 @@ public:
> >       int init(const YamlObject &params);
> >   
> >       int configure(const StreamConfiguration &inputCfg,
> > -                   const std::vector<std::reference_wrapper<StreamConfiguration>>
> > +                   const std::vector<std::reference_wrapper<const StreamConfiguration>>
> >                             &outputCfg);
> >       bool isConfigured(const Stream *stream) const;
> >   
> > diff --git a/include/libcamera/internal/converter/converter_v4l2_m2m.h b/include/libcamera/internal/converter/converter_v4l2_m2m.h
> > index 6d2453bb9..63cea6b08 100644
> > --- a/include/libcamera/internal/converter/converter_v4l2_m2m.h
> > +++ b/include/libcamera/internal/converter/converter_v4l2_m2m.h
> > @@ -54,7 +54,7 @@ public:
> >                             const Size &size, Alignment align = Alignment::Down) override;
> >   
> >       int configure(const StreamConfiguration &inputCfg,
> > -                   const std::vector<std::reference_wrapper<StreamConfiguration>>
> > +                   const std::vector<std::reference_wrapper<const StreamConfiguration>>
> >                     &outputCfg) override;
> >       bool isConfigured(const Stream *stream) const override;
> >       int exportBuffers(const Stream *stream, unsigned int count,
> > diff --git a/include/libcamera/internal/software_isp/software_isp.h b/include/libcamera/internal/software_isp/software_isp.h
> > index ad89c9b3c..585e0d6d9 100644
> > --- a/include/libcamera/internal/software_isp/software_isp.h
> > +++ b/include/libcamera/internal/software_isp/software_isp.h
> > @@ -64,7 +64,7 @@ public:
> >       strideAndFrameSize(const PixelFormat &outputFormat, const Size &size);
> >   
> >       int configure(const StreamConfiguration &inputCfg,
> > -                   const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
> > +                   const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
> >                     const ipa::soft::IPAConfigInfo &configInfo);
> >   
> >       int exportBuffers(const Stream *stream, unsigned int count,
> > diff --git a/src/libcamera/converter/converter_dw100.cpp b/src/libcamera/converter/converter_dw100.cpp
> > index df5155cfd..7899fe8c2 100644
> > --- a/src/libcamera/converter/converter_dw100.cpp
> > +++ b/src/libcamera/converter/converter_dw100.cpp
> > @@ -142,7 +142,7 @@ int ConverterDW100Module::init(const YamlObject &params)
> >    * \copydoc libcamera::V4L2M2MConverter::configure
> >    */
> >   int ConverterDW100Module::configure(const StreamConfiguration &inputCfg,
> > -                                 const std::vector<std::reference_wrapper<StreamConfiguration>>
> > +                                 const std::vector<std::reference_wrapper<const StreamConfiguration>>
> >                                           &outputCfgs)
> >   {
> >       int ret;
> > diff --git a/src/libcamera/converter/converter_v4l2_m2m.cpp b/src/libcamera/converter/converter_v4l2_m2m.cpp
> > index 4427a37c6..ffba0434e 100644
> > --- a/src/libcamera/converter/converter_v4l2_m2m.cpp
> > +++ b/src/libcamera/converter/converter_v4l2_m2m.cpp
> > @@ -548,7 +548,7 @@ Size V4L2M2MConverter::adjustSizes(const Size &cfgSize,
> >    * \copydoc libcamera::Converter::configure
> >    */
> >   int V4L2M2MConverter::configure(const StreamConfiguration &inputCfg,
> > -                             const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs)
> > +                             const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs)
> >   {
> >       int ret = 0;
> >   
> > diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> > index 320a4dc5a..faeeecd96 100644
> > --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> > +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> > @@ -1037,7 +1037,7 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c)
> >       data->properties_.set(properties::ScalerCropMaximum, sensorCrop);
> >   
> >       std::map<unsigned int, IPAStream> streamConfig;
> > -     std::vector<std::reference_wrapper<StreamConfiguration>> outputCfgs;
> > +     std::vector<std::reference_wrapper<const StreamConfiguration>> outputCfgs;
> >   
> >       for (const StreamConfiguration &cfg : *config) {
> >               if (cfg.stream() == &data->mainPathStream_) {
> > diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
> > index 4a0b9f58d..9497ac13b 100644
> > --- a/src/libcamera/pipeline/simple/simple.cpp
> > +++ b/src/libcamera/pipeline/simple/simple.cpp
> > @@ -1562,7 +1562,7 @@ int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c)
> >       }
> >   
> >       /* Configure the converter if needed. */
> > -     std::vector<std::reference_wrapper<StreamConfiguration>> outputCfgs;
> > +     std::vector<std::reference_wrapper<const StreamConfiguration>> outputCfgs;
> >       data->useConversion_ = config->needConversion();
> >   
> >       data->rawStream_ = nullptr;
> > diff --git a/src/libcamera/software_isp/debayer.h b/src/libcamera/software_isp/debayer.h
> > index ce9350b7b..ea1ec6dcf 100644
> > --- a/src/libcamera/software_isp/debayer.h
> > +++ b/src/libcamera/software_isp/debayer.h
> > @@ -39,7 +39,7 @@ public:
> >       virtual ~Debayer() = 0;
> >   
> >       virtual int configure(const StreamConfiguration &inputCfg,
> > -                           const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
> > +                           const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
> >                             bool ccmEnabled) = 0;
> >   
> >       virtual std::vector<PixelFormat> formats(PixelFormat inputFormat) = 0;
> > diff --git a/src/libcamera/software_isp/debayer_cpu.cpp b/src/libcamera/software_isp/debayer_cpu.cpp
> > index 1de70b3b7..dd0fff871 100644
> > --- a/src/libcamera/software_isp/debayer_cpu.cpp
> > +++ b/src/libcamera/software_isp/debayer_cpu.cpp
> > @@ -540,7 +540,7 @@ int DebayerCpu::setDebayerFunctions(PixelFormat inputFormat,
> >   }
> >   
> >   int DebayerCpu::configure(const StreamConfiguration &inputCfg,
> > -                       const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
> > +                       const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
> >                         bool ccmEnabled)
> >   {
> >       if (getInputConfig(inputCfg.pixelFormat, inputConfig_) != 0)
> > diff --git a/src/libcamera/software_isp/debayer_cpu.h b/src/libcamera/software_isp/debayer_cpu.h
> > index a96998e92..c6f263e1b 100644
> > --- a/src/libcamera/software_isp/debayer_cpu.h
> > +++ b/src/libcamera/software_isp/debayer_cpu.h
> > @@ -35,7 +35,7 @@ public:
> >       ~DebayerCpu();
> >   
> >       int configure(const StreamConfiguration &inputCfg,
> > -                   const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
> > +                   const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
> >                     bool ccmEnabled);
> >       Size patternSize(PixelFormat inputFormat);
> >       std::vector<PixelFormat> formats(PixelFormat input);
> > diff --git a/src/libcamera/software_isp/debayer_egl.cpp b/src/libcamera/software_isp/debayer_egl.cpp
> > index 9a0606b5a..547b3c3bd 100644
> > --- a/src/libcamera/software_isp/debayer_egl.cpp
> > +++ b/src/libcamera/software_isp/debayer_egl.cpp
> > @@ -277,7 +277,7 @@ int DebayerEGL::initBayerShaders(PixelFormat inputFormat, PixelFormat outputForm
> >   }
> >   
> >   int DebayerEGL::configure(const StreamConfiguration &inputCfg,
> > -                       const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
> > +                       const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
> >                         [[maybe_unused]] bool ccmEnabled)
> >   {
> >       if (getInputConfig(inputCfg.pixelFormat, inputConfig_) != 0)
> > @@ -307,7 +307,7 @@ int DebayerEGL::configure(const StreamConfiguration &inputCfg,
> >               return -EINVAL;
> >       }
> >   
> > -     StreamConfiguration &outputCfg = outputCfgs[0];
> > +     const StreamConfiguration &outputCfg = outputCfgs[0];
> >       SizeRange outSizeRange = sizes(inputCfg.pixelFormat, inputCfg.size);
> >       std::tie(outputConfig_.stride, outputConfig_.frameSize) =
> >               strideAndFrameSize(outputCfg.pixelFormat, outputCfg.size);
> > diff --git a/src/libcamera/software_isp/debayer_egl.h b/src/libcamera/software_isp/debayer_egl.h
> > index 3abff1ad2..6bbe487a3 100644
> > --- a/src/libcamera/software_isp/debayer_egl.h
> > +++ b/src/libcamera/software_isp/debayer_egl.h
> > @@ -42,7 +42,7 @@ public:
> >       ~DebayerEGL();
> >   
> >       int configure(const StreamConfiguration &inputCfg,
> > -                   const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
> > +                   const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
> >                     bool ccmEnabled);
> >   
> >       Size patternSize(PixelFormat inputFormat);
> > diff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp
> > index 4cf5639d9..60228369f 100644
> > --- a/src/libcamera/software_isp/software_isp.cpp
> > +++ b/src/libcamera/software_isp/software_isp.cpp
> > @@ -262,7 +262,7 @@ SoftwareIsp::strideAndFrameSize(const PixelFormat &outputFormat, const Size &siz
> >    * \return 0 on success, a negative errno on failure
> >    */
> >   int SoftwareIsp::configure(const StreamConfiguration &inputCfg,
> > -                        const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
> > +                        const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
> >                          const ipa::soft::IPAConfigInfo &configInfo)
> >   {
> >       ASSERT(ipa_ && debayer_);
>

Patch
diff mbox series

diff --git a/include/libcamera/internal/converter.h b/include/libcamera/internal/converter.h
index 4b811686f..08e80a22f 100644
--- a/include/libcamera/internal/converter.h
+++ b/include/libcamera/internal/converter.h
@@ -71,7 +71,7 @@  public:
 				   Alignment align = Alignment::Down) = 0;
 
 	virtual int configure(const StreamConfiguration &inputCfg,
-			      const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs) = 0;
+			      const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs) = 0;
 	virtual bool isConfigured(const Stream *stream) const = 0;
 	virtual int exportBuffers(const Stream *stream, unsigned int count,
 				  std::vector<std::unique_ptr<FrameBuffer>> *buffers) = 0;
diff --git a/include/libcamera/internal/converter/converter_dw100.h b/include/libcamera/internal/converter/converter_dw100.h
index d70c8fe76..0a41b180a 100644
--- a/include/libcamera/internal/converter/converter_dw100.h
+++ b/include/libcamera/internal/converter/converter_dw100.h
@@ -34,7 +34,7 @@  public:
 	int init(const YamlObject &params);
 
 	int configure(const StreamConfiguration &inputCfg,
-		      const std::vector<std::reference_wrapper<StreamConfiguration>>
+		      const std::vector<std::reference_wrapper<const StreamConfiguration>>
 			      &outputCfg);
 	bool isConfigured(const Stream *stream) const;
 
diff --git a/include/libcamera/internal/converter/converter_v4l2_m2m.h b/include/libcamera/internal/converter/converter_v4l2_m2m.h
index 6d2453bb9..63cea6b08 100644
--- a/include/libcamera/internal/converter/converter_v4l2_m2m.h
+++ b/include/libcamera/internal/converter/converter_v4l2_m2m.h
@@ -54,7 +54,7 @@  public:
 			      const Size &size, Alignment align = Alignment::Down) override;
 
 	int configure(const StreamConfiguration &inputCfg,
-		      const std::vector<std::reference_wrapper<StreamConfiguration>>
+		      const std::vector<std::reference_wrapper<const StreamConfiguration>>
 		      &outputCfg) override;
 	bool isConfigured(const Stream *stream) const override;
 	int exportBuffers(const Stream *stream, unsigned int count,
diff --git a/include/libcamera/internal/software_isp/software_isp.h b/include/libcamera/internal/software_isp/software_isp.h
index ad89c9b3c..585e0d6d9 100644
--- a/include/libcamera/internal/software_isp/software_isp.h
+++ b/include/libcamera/internal/software_isp/software_isp.h
@@ -64,7 +64,7 @@  public:
 	strideAndFrameSize(const PixelFormat &outputFormat, const Size &size);
 
 	int configure(const StreamConfiguration &inputCfg,
-		      const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
+		      const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
 		      const ipa::soft::IPAConfigInfo &configInfo);
 
 	int exportBuffers(const Stream *stream, unsigned int count,
diff --git a/src/libcamera/converter/converter_dw100.cpp b/src/libcamera/converter/converter_dw100.cpp
index df5155cfd..7899fe8c2 100644
--- a/src/libcamera/converter/converter_dw100.cpp
+++ b/src/libcamera/converter/converter_dw100.cpp
@@ -142,7 +142,7 @@  int ConverterDW100Module::init(const YamlObject &params)
  * \copydoc libcamera::V4L2M2MConverter::configure
  */
 int ConverterDW100Module::configure(const StreamConfiguration &inputCfg,
-				    const std::vector<std::reference_wrapper<StreamConfiguration>>
+				    const std::vector<std::reference_wrapper<const StreamConfiguration>>
 					    &outputCfgs)
 {
 	int ret;
diff --git a/src/libcamera/converter/converter_v4l2_m2m.cpp b/src/libcamera/converter/converter_v4l2_m2m.cpp
index 4427a37c6..ffba0434e 100644
--- a/src/libcamera/converter/converter_v4l2_m2m.cpp
+++ b/src/libcamera/converter/converter_v4l2_m2m.cpp
@@ -548,7 +548,7 @@  Size V4L2M2MConverter::adjustSizes(const Size &cfgSize,
  * \copydoc libcamera::Converter::configure
  */
 int V4L2M2MConverter::configure(const StreamConfiguration &inputCfg,
-				const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs)
+				const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs)
 {
 	int ret = 0;
 
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index 320a4dc5a..faeeecd96 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -1037,7 +1037,7 @@  int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c)
 	data->properties_.set(properties::ScalerCropMaximum, sensorCrop);
 
 	std::map<unsigned int, IPAStream> streamConfig;
-	std::vector<std::reference_wrapper<StreamConfiguration>> outputCfgs;
+	std::vector<std::reference_wrapper<const StreamConfiguration>> outputCfgs;
 
 	for (const StreamConfiguration &cfg : *config) {
 		if (cfg.stream() == &data->mainPathStream_) {
diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
index 4a0b9f58d..9497ac13b 100644
--- a/src/libcamera/pipeline/simple/simple.cpp
+++ b/src/libcamera/pipeline/simple/simple.cpp
@@ -1562,7 +1562,7 @@  int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c)
 	}
 
 	/* Configure the converter if needed. */
-	std::vector<std::reference_wrapper<StreamConfiguration>> outputCfgs;
+	std::vector<std::reference_wrapper<const StreamConfiguration>> outputCfgs;
 	data->useConversion_ = config->needConversion();
 
 	data->rawStream_ = nullptr;
diff --git a/src/libcamera/software_isp/debayer.h b/src/libcamera/software_isp/debayer.h
index ce9350b7b..ea1ec6dcf 100644
--- a/src/libcamera/software_isp/debayer.h
+++ b/src/libcamera/software_isp/debayer.h
@@ -39,7 +39,7 @@  public:
 	virtual ~Debayer() = 0;
 
 	virtual int configure(const StreamConfiguration &inputCfg,
-			      const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
+			      const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
 			      bool ccmEnabled) = 0;
 
 	virtual std::vector<PixelFormat> formats(PixelFormat inputFormat) = 0;
diff --git a/src/libcamera/software_isp/debayer_cpu.cpp b/src/libcamera/software_isp/debayer_cpu.cpp
index 1de70b3b7..dd0fff871 100644
--- a/src/libcamera/software_isp/debayer_cpu.cpp
+++ b/src/libcamera/software_isp/debayer_cpu.cpp
@@ -540,7 +540,7 @@  int DebayerCpu::setDebayerFunctions(PixelFormat inputFormat,
 }
 
 int DebayerCpu::configure(const StreamConfiguration &inputCfg,
-			  const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
+			  const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
 			  bool ccmEnabled)
 {
 	if (getInputConfig(inputCfg.pixelFormat, inputConfig_) != 0)
diff --git a/src/libcamera/software_isp/debayer_cpu.h b/src/libcamera/software_isp/debayer_cpu.h
index a96998e92..c6f263e1b 100644
--- a/src/libcamera/software_isp/debayer_cpu.h
+++ b/src/libcamera/software_isp/debayer_cpu.h
@@ -35,7 +35,7 @@  public:
 	~DebayerCpu();
 
 	int configure(const StreamConfiguration &inputCfg,
-		      const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
+		      const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
 		      bool ccmEnabled);
 	Size patternSize(PixelFormat inputFormat);
 	std::vector<PixelFormat> formats(PixelFormat input);
diff --git a/src/libcamera/software_isp/debayer_egl.cpp b/src/libcamera/software_isp/debayer_egl.cpp
index 9a0606b5a..547b3c3bd 100644
--- a/src/libcamera/software_isp/debayer_egl.cpp
+++ b/src/libcamera/software_isp/debayer_egl.cpp
@@ -277,7 +277,7 @@  int DebayerEGL::initBayerShaders(PixelFormat inputFormat, PixelFormat outputForm
 }
 
 int DebayerEGL::configure(const StreamConfiguration &inputCfg,
-			  const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
+			  const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
 			  [[maybe_unused]] bool ccmEnabled)
 {
 	if (getInputConfig(inputCfg.pixelFormat, inputConfig_) != 0)
@@ -307,7 +307,7 @@  int DebayerEGL::configure(const StreamConfiguration &inputCfg,
 		return -EINVAL;
 	}
 
-	StreamConfiguration &outputCfg = outputCfgs[0];
+	const StreamConfiguration &outputCfg = outputCfgs[0];
 	SizeRange outSizeRange = sizes(inputCfg.pixelFormat, inputCfg.size);
 	std::tie(outputConfig_.stride, outputConfig_.frameSize) =
 		strideAndFrameSize(outputCfg.pixelFormat, outputCfg.size);
diff --git a/src/libcamera/software_isp/debayer_egl.h b/src/libcamera/software_isp/debayer_egl.h
index 3abff1ad2..6bbe487a3 100644
--- a/src/libcamera/software_isp/debayer_egl.h
+++ b/src/libcamera/software_isp/debayer_egl.h
@@ -42,7 +42,7 @@  public:
 	~DebayerEGL();
 
 	int configure(const StreamConfiguration &inputCfg,
-		      const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
+		      const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
 		      bool ccmEnabled);
 
 	Size patternSize(PixelFormat inputFormat);
diff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp
index 4cf5639d9..60228369f 100644
--- a/src/libcamera/software_isp/software_isp.cpp
+++ b/src/libcamera/software_isp/software_isp.cpp
@@ -262,7 +262,7 @@  SoftwareIsp::strideAndFrameSize(const PixelFormat &outputFormat, const Size &siz
  * \return 0 on success, a negative errno on failure
  */
 int SoftwareIsp::configure(const StreamConfiguration &inputCfg,
-			   const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
+			   const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
 			   const ipa::soft::IPAConfigInfo &configInfo)
 {
 	ASSERT(ipa_ && debayer_);