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

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>
Reviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Hans de Goede
2026-03-25 11:56:18 +01:00
committed by Kieran Bingham
parent 1500ef15d1
commit 5f770f748c
14 changed files with 15 additions and 15 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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,

View File

@@ -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,

View File

@@ -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;

View File

@@ -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;

View File

@@ -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_) {

View File

@@ -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;

View File

@@ -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;

View File

@@ -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)

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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_);