| Message ID | 20260325105618.8601-1-johannes.goede@oss.qualcomm.com |
|---|---|
| State | Accepted |
| Commit | 5f770f748c1d75d1056840bea123060659594b5a |
| Headers | show |
| Series |
|
| Related | show |
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 ¶ms); > > 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 ¶ms) > * \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_);
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 ¶ms); > > > > 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 ¶ms) > > * \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_); >
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 ¶ms); 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 ¶ms) * \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_);
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(-)