[PATCH v4 06/11] libcamera: simple: Identify requested stream roles
Milan Zamazal
mzamazal at redhat.com
Tue May 13 12:05:37 CEST 2025
Hi Barnabás,
thank you for review.
Barnabás Pőcze <barnabas.pocze at ideasonboard.com> writes:
> Hi
>
> 2025. 04. 07. 10:56 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 SimpleCameraData 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 | 16 ++++++++++++++++
>> 1 file changed, 16 insertions(+)
>> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
>> index 82d7a9a5..bf9d75f4 100644
>> --- a/src/libcamera/pipeline/simple/simple.cpp
>> +++ b/src/libcamera/pipeline/simple/simple.cpp
>> @@ -345,6 +345,8 @@ public:
>> };
>> std::queue<RequestOutputs> conversionQueue_;
>> bool useConversion_;
>> + bool processedRequested_;
>> + bool rawRequested_;
>> std::unique_ptr<Converter> converter_;
>> std::unique_ptr<SoftwareIsp> swIsp_;
>> @@ -1305,6 +1307,20 @@ SimplePipelineHandler::generateConfiguration(Camera *camera, Span<const StreamRo
>> if (roles.empty())
>> return config;
>> + data->processedRequested_ = false;
>> + data->rawRequested_ = false;
>
> I am not sure if `generateConfiguration()` should modify the state of the
> camera. It does not seem to be compatible with e.g an application caching
> multiple desired configurations. But crucially, the `generateConfiguration()`
> method, in contrast to most other similar methods, runs in the caller's thread,
> and does not run in the camera manager's private thread. (I am not sure if this
> is just an oversight or intentional.)
>
> So these two flags should probably be stored in `SimpleCameraConfiguration`,
> and copied into `SimpleCameraData` after a successful `configure()`. Similarly
> to `useConversion_`, as far as I can tell.
Good point, I'll try to rework it. As for the thread, I don't know.
> Regards,
> Barnabás Pőcze
>
>
>> + for (auto &role : roles)
>> + if (role == StreamRole::Raw) {
>> + if (data->rawRequested_) {
>> + LOG(SimplePipeline, Error)
>> + << "Can't capture multiple raw streams";
>> + return nullptr;
>> + }
>> + data->rawRequested_ = true;
>> + } else {
>> + data->processedRequested_ = true;
>> + }
>> +
>> /* Create the formats map. */
>> std::map<PixelFormat, std::vector<SizeRange>> formats;
>>
More information about the libcamera-devel
mailing list