[libcamera-devel] [PATCH v2 14/18] libcamera: pipeline: simple: rename converterBuffers_ and related vars

Kieran Bingham kieran.bingham at ideasonboard.com
Sun Jan 14 00:07:56 CET 2024


Quoting Hans de Goede via libcamera-devel (2024-01-13 14:22:14)
> From: Andrey Konovalov <andrey.konovalov at linaro.org>
> 
> The converterBuffers_ and the converterQueue_ are not that specific
> to the Converter, and could be used by another entity doing the format
> conversion.
> 
> Rename converterBuffers_, converterQueue_, and useConverter_ to
> conversionBuffers_, conversionQueue_ and useConversion_ to
> disassociate them from the Converter.

One day I'd love to see processing blocks that could be constructed and
chained together here. Not a full reimplementation of gstreamer of
course ... but I suspect we could end up with other chained reusable
components through out libcamera that may not always be 'convertors'.

Anyway, that's likely a long way off - and I think in the context of
this series - given the preceeding patches this makes sense so I'll
already put this one here:

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

> 
> Signed-off-by: Andrey Konovalov <andrey.konovalov at linaro.org>
> Signed-off-by: Hans de Goede <hdegoede at redhat.com>
> Tested-by: Bryan O'Donoghue <bryan.odonoghue at linaro.org> # sc8280xp Lenovo x13s
> Tested-by: Pavel Machek <pavel at ucw.cz>
> ---
>  src/libcamera/pipeline/simple/simple.cpp | 63 ++++++++++++------------
>  1 file changed, 32 insertions(+), 31 deletions(-)
> 
> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
> index 4d0e7255..fa298746 100644
> --- a/src/libcamera/pipeline/simple/simple.cpp
> +++ b/src/libcamera/pipeline/simple/simple.cpp
> @@ -269,17 +269,18 @@ public:
>         std::vector<Configuration> configs_;
>         std::map<PixelFormat, std::vector<const Configuration *>> formats_;
>  
> +       std::vector<std::unique_ptr<FrameBuffer>> conversionBuffers_;
> +       std::queue<std::map<unsigned int, FrameBuffer *>> conversionQueue_;
> +       bool useConversion_;
> +
>         std::unique_ptr<Converter> converter_;
> -       std::vector<std::unique_ptr<FrameBuffer>> converterBuffers_;
> -       bool useConverter_;
> -       std::queue<std::map<unsigned int, FrameBuffer *>> converterQueue_;
>  
>  private:
>         void tryPipeline(unsigned int code, const Size &size);
>         static std::vector<const MediaPad *> routedSourcePads(MediaPad *sink);
>  
> -       void converterInputDone(FrameBuffer *buffer);
> -       void converterOutputDone(FrameBuffer *buffer);
> +       void conversionInputDone(FrameBuffer *buffer);
> +       void conversionOutputDone(FrameBuffer *buffer);
>  };
>  
>  class SimpleCameraConfiguration : public CameraConfiguration
> @@ -503,8 +504,8 @@ int SimpleCameraData::init()
>                                 << "Failed to create converter, disabling format conversion";
>                         converter_.reset();
>                 } else {
> -                       converter_->inputBufferReady.connect(this, &SimpleCameraData::converterInputDone);
> -                       converter_->outputBufferReady.connect(this, &SimpleCameraData::converterOutputDone);
> +                       converter_->inputBufferReady.connect(this, &SimpleCameraData::conversionInputDone);
> +                       converter_->outputBufferReady.connect(this, &SimpleCameraData::conversionOutputDone);
>                 }
>         }
>  
> @@ -740,7 +741,7 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)
>          * point converting an erroneous buffer.
>          */
>         if (buffer->metadata().status != FrameMetadata::FrameSuccess) {
> -               if (!useConverter_) {
> +               if (!useConversion_) {
>                         /* No conversion, just complete the request. */
>                         Request *request = buffer->request();
>                         pipe->completeBuffer(request, buffer);
> @@ -756,16 +757,16 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)
>                 if (buffer->metadata().status != FrameMetadata::FrameCancelled)
>                         video_->queueBuffer(buffer);
>  
> -               if (converterQueue_.empty())
> +               if (conversionQueue_.empty())
>                         return;
>  
>                 Request *request = nullptr;
> -               for (auto &item : converterQueue_.front()) {
> +               for (auto &item : conversionQueue_.front()) {
>                         FrameBuffer *outputBuffer = item.second;
>                         request = outputBuffer->request();
>                         pipe->completeBuffer(request, outputBuffer);
>                 }
> -               converterQueue_.pop();
> +               conversionQueue_.pop();
>  
>                 if (request)
>                         pipe->completeRequest(request);
> @@ -782,9 +783,9 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)
>          */
>         Request *request = buffer->request();
>  
> -       if (useConverter_ && !converterQueue_.empty()) {
> +       if (useConversion_ && !conversionQueue_.empty()) {
>                 const std::map<unsigned int, FrameBuffer *> &outputs =
> -                       converterQueue_.front();
> +                       conversionQueue_.front();
>                 if (!outputs.empty()) {
>                         FrameBuffer *outputBuffer = outputs.begin()->second;
>                         if (outputBuffer)
> @@ -801,14 +802,14 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)
>          * conversion is needed. If there's no queued request, just requeue the
>          * captured buffer for capture.
>          */
> -       if (useConverter_) {
> -               if (converterQueue_.empty()) {
> +       if (useConversion_) {
> +               if (conversionQueue_.empty()) {
>                         video_->queueBuffer(buffer);
>                         return;
>                 }
>  
> -               converter_->queueBuffers(buffer, converterQueue_.front());
> -               converterQueue_.pop();
> +               converter_->queueBuffers(buffer, conversionQueue_.front());
> +               conversionQueue_.pop();
>                 return;
>         }
>  
> @@ -817,13 +818,13 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)
>         pipe->completeRequest(request);
>  }
>  
> -void SimpleCameraData::converterInputDone(FrameBuffer *buffer)
> +void SimpleCameraData::conversionInputDone(FrameBuffer *buffer)
>  {
>         /* Queue the input buffer back for capture. */
>         video_->queueBuffer(buffer);
>  }
>  
> -void SimpleCameraData::converterOutputDone(FrameBuffer *buffer)
> +void SimpleCameraData::conversionOutputDone(FrameBuffer *buffer)
>  {
>         SimplePipelineHandler *pipe = SimpleCameraData::pipe();
>  
> @@ -1159,14 +1160,14 @@ int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c)
>  
>         /* Configure the converter if needed. */
>         std::vector<std::reference_wrapper<StreamConfiguration>> outputCfgs;
> -       data->useConverter_ = config->needConversion();
> +       data->useConversion_ = config->needConversion();
>  
>         for (unsigned int i = 0; i < config->size(); ++i) {
>                 StreamConfiguration &cfg = config->at(i);
>  
>                 cfg.setStream(&data->streams_[i]);
>  
> -               if (data->useConverter_)
> +               if (data->useConversion_)
>                         outputCfgs.push_back(cfg);
>         }
>  
> @@ -1192,7 +1193,7 @@ int SimplePipelineHandler::exportFrameBuffers(Camera *camera, Stream *stream,
>          * Export buffers on the converter or capture video node, depending on
>          * whether the converter is used or not.
>          */
> -       if (data->useConverter_)
> +       if (data->useConversion_)
>                 return data->converter_->exportBuffers(data->streamIndex(stream),
>                                                        count, buffers);
>         else
> @@ -1213,13 +1214,13 @@ int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] const ControlL
>                 return -EBUSY;
>         }
>  
> -       if (data->useConverter_) {
> +       if (data->useConversion_) {
>                 /*
>                  * When using the converter allocate a fixed number of internal
>                  * buffers.
>                  */
>                 ret = video->allocateBuffers(kNumInternalBuffers,
> -                                            &data->converterBuffers_);
> +                                            &data->conversionBuffers_);
>         } else {
>                 /* Otherwise, prepare for using buffers from the only stream. */
>                 Stream *stream = &data->streams_[0];
> @@ -1238,7 +1239,7 @@ int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] const ControlL
>                 return ret;
>         }
>  
> -       if (data->useConverter_) {
> +       if (data->useConversion_) {
>                 ret = data->converter_->start();
>                 if (ret < 0) {
>                         stop(camera);
> @@ -1246,7 +1247,7 @@ int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] const ControlL
>                 }
>  
>                 /* Queue all internal buffers for capture. */
> -               for (std::unique_ptr<FrameBuffer> &buffer : data->converterBuffers_)
> +               for (std::unique_ptr<FrameBuffer> &buffer : data->conversionBuffers_)
>                         video->queueBuffer(buffer.get());
>         }
>  
> @@ -1258,7 +1259,7 @@ void SimplePipelineHandler::stopDevice(Camera *camera)
>         SimpleCameraData *data = cameraData(camera);
>         V4L2VideoDevice *video = data->video_;
>  
> -       if (data->useConverter_)
> +       if (data->useConversion_)
>                 data->converter_->stop();
>  
>         video->streamOff();
> @@ -1266,7 +1267,7 @@ void SimplePipelineHandler::stopDevice(Camera *camera)
>  
>         video->bufferReady.disconnect(data, &SimpleCameraData::bufferReady);
>  
> -       data->converterBuffers_.clear();
> +       data->conversionBuffers_.clear();
>  
>         releasePipeline(data);
>  }
> @@ -1284,7 +1285,7 @@ int SimplePipelineHandler::queueRequestDevice(Camera *camera, Request *request)
>                  * queue, it will be handed to the converter in the capture
>                  * completion handler.
>                  */
> -               if (data->useConverter_) {
> +               if (data->useConversion_) {
>                         buffers.emplace(data->streamIndex(stream), buffer);
>                 } else {
>                         ret = data->video_->queueBuffer(buffer);
> @@ -1293,8 +1294,8 @@ int SimplePipelineHandler::queueRequestDevice(Camera *camera, Request *request)
>                 }
>         }
>  
> -       if (data->useConverter_)
> -               data->converterQueue_.push(std::move(buffers));
> +       if (data->useConversion_)
> +               data->conversionQueue_.push(std::move(buffers));
>  
>         return 0;
>  }
> -- 
> 2.43.0
>


More information about the libcamera-devel mailing list