[PATCH v5 07/12] libcamera: simple: Identify requested stream roles

Barnabás Pőcze barnabas.pocze at ideasonboard.com
Thu May 22 11:00:45 CEST 2025


Hi


2025. 05. 20. 14:31 keltezéssel, Milan Zamazal írta:
> Currently, raw streams don't work in the simple pipeline and the
> requested stream roles are ignored.  In order to support raw streams, we
> now track in SimpleCameraConfiguration whether raw and/or processed
> streams are requested.  We also check that at most one raw stream is
> requested, there is no reason to have more.
> 
> That information will be used in the followup patches.
> 
> Signed-off-by: Milan Zamazal <mzamazal at redhat.com>
> ---
>   src/libcamera/pipeline/simple/simple.cpp | 19 ++++++++++++++++++-
>   1 file changed, 18 insertions(+), 1 deletion(-)
> 
> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
> index d0f44c7d..78a76f34 100644
> --- a/src/libcamera/pipeline/simple/simple.cpp
> +++ b/src/libcamera/pipeline/simple/simple.cpp
> @@ -378,6 +378,9 @@ public:
>   	bool needConversion() const { return needConversion_; }
>   	const Transform &combinedTransform() const { return combinedTransform_; }
>   
> +	bool processedRequested_;
> +	bool rawRequested_;
> +
>   private:
>   	/*
>   	 * The SimpleCameraData instance is guaranteed to be valid as long as
> @@ -1299,12 +1302,26 @@ std::unique_ptr<CameraConfiguration>
>   SimplePipelineHandler::generateConfiguration(Camera *camera, Span<const StreamRole> roles)
>   {
>   	SimpleCameraData *data = cameraData(camera);
> -	std::unique_ptr<CameraConfiguration> config =
> +	std::unique_ptr<SimpleCameraConfiguration> config =
>   		std::make_unique<SimpleCameraConfiguration>(camera, data);
>   
>   	if (roles.empty())
>   		return config;

In this case the new booleans are left uninitialized. There is also another potential
issue: applications are allowed to call `generateConfiguration()` with an empty list of
roles, and in that case I believe they are supposed to use `CameraConfiguration::addConfiguration()`
to add the streams manually. I think you'll have to update these two in `validate()`,
the same way `needsConversion_` is updated there.


Regards,
Barnabás Pőcze

>   
> +	config->processedRequested_ = false;
> +	config->rawRequested_ = false;
> +	for (auto &role : roles)
> +		if (role == StreamRole::Raw) {
> +			if (config->rawRequested_) {
> +				LOG(SimplePipeline, Error)
> +					<< "Can't capture multiple raw streams";
> +				return nullptr;
> +			}
> +			config->rawRequested_ = true;
> +		} else {
> +			config->processedRequested_ = true;
> +		}
> +
>   	/* Create the formats map. */
>   	std::map<PixelFormat, std::vector<SizeRange>> formats;
>   



More information about the libcamera-devel mailing list