libcamera: pipeline: simple: Rename converterBuffers_ and related vars

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.

Tested-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> # sc8280xp Lenovo x13s
Tested-by: Pavel Machek <pavel@ucw.cz>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Pavel Machek <pavel@ucw.cz>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Andrey Konovalov <andrey.konovalov@linaro.org>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Andrey Konovalov 2024-04-16 11:13:48 +02:00 committed by Kieran Bingham
parent 6362bd46ca
commit 4095a8184b

View file

@ -270,17 +270,18 @@ public:
std::vector<Configuration> configs_; std::vector<Configuration> configs_;
std::map<PixelFormat, std::vector<const Configuration *>> formats_; 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::unique_ptr<Converter> converter_;
std::vector<std::unique_ptr<FrameBuffer>> converterBuffers_;
bool useConverter_;
std::queue<std::map<unsigned int, FrameBuffer *>> converterQueue_;
private: private:
void tryPipeline(unsigned int code, const Size &size); void tryPipeline(unsigned int code, const Size &size);
static std::vector<const MediaPad *> routedSourcePads(MediaPad *sink); static std::vector<const MediaPad *> routedSourcePads(MediaPad *sink);
void converterInputDone(FrameBuffer *buffer); void conversionInputDone(FrameBuffer *buffer);
void converterOutputDone(FrameBuffer *buffer); void conversionOutputDone(FrameBuffer *buffer);
}; };
class SimpleCameraConfiguration : public CameraConfiguration class SimpleCameraConfiguration : public CameraConfiguration
@ -504,8 +505,8 @@ int SimpleCameraData::init()
<< "Failed to create converter, disabling format conversion"; << "Failed to create converter, disabling format conversion";
converter_.reset(); converter_.reset();
} else { } else {
converter_->inputBufferReady.connect(this, &SimpleCameraData::converterInputDone); converter_->inputBufferReady.connect(this, &SimpleCameraData::conversionInputDone);
converter_->outputBufferReady.connect(this, &SimpleCameraData::converterOutputDone); converter_->outputBufferReady.connect(this, &SimpleCameraData::conversionOutputDone);
} }
} }
@ -741,7 +742,7 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)
* point converting an erroneous buffer. * point converting an erroneous buffer.
*/ */
if (buffer->metadata().status != FrameMetadata::FrameSuccess) { if (buffer->metadata().status != FrameMetadata::FrameSuccess) {
if (!useConverter_) { if (!useConversion_) {
/* No conversion, just complete the request. */ /* No conversion, just complete the request. */
Request *request = buffer->request(); Request *request = buffer->request();
pipe->completeBuffer(request, buffer); pipe->completeBuffer(request, buffer);
@ -757,16 +758,16 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)
if (buffer->metadata().status != FrameMetadata::FrameCancelled) if (buffer->metadata().status != FrameMetadata::FrameCancelled)
video_->queueBuffer(buffer); video_->queueBuffer(buffer);
if (converterQueue_.empty()) if (conversionQueue_.empty())
return; return;
Request *request = nullptr; Request *request = nullptr;
for (auto &item : converterQueue_.front()) { for (auto &item : conversionQueue_.front()) {
FrameBuffer *outputBuffer = item.second; FrameBuffer *outputBuffer = item.second;
request = outputBuffer->request(); request = outputBuffer->request();
pipe->completeBuffer(request, outputBuffer); pipe->completeBuffer(request, outputBuffer);
} }
converterQueue_.pop(); conversionQueue_.pop();
if (request) if (request)
pipe->completeRequest(request); pipe->completeRequest(request);
@ -783,9 +784,9 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)
*/ */
Request *request = buffer->request(); Request *request = buffer->request();
if (useConverter_ && !converterQueue_.empty()) { if (useConversion_ && !conversionQueue_.empty()) {
const std::map<unsigned int, FrameBuffer *> &outputs = const std::map<unsigned int, FrameBuffer *> &outputs =
converterQueue_.front(); conversionQueue_.front();
if (!outputs.empty()) { if (!outputs.empty()) {
FrameBuffer *outputBuffer = outputs.begin()->second; FrameBuffer *outputBuffer = outputs.begin()->second;
if (outputBuffer) if (outputBuffer)
@ -802,14 +803,14 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)
* conversion is needed. If there's no queued request, just requeue the * conversion is needed. If there's no queued request, just requeue the
* captured buffer for capture. * captured buffer for capture.
*/ */
if (useConverter_) { if (useConversion_) {
if (converterQueue_.empty()) { if (conversionQueue_.empty()) {
video_->queueBuffer(buffer); video_->queueBuffer(buffer);
return; return;
} }
converter_->queueBuffers(buffer, converterQueue_.front()); converter_->queueBuffers(buffer, conversionQueue_.front());
converterQueue_.pop(); conversionQueue_.pop();
return; return;
} }
@ -818,13 +819,13 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)
pipe->completeRequest(request); pipe->completeRequest(request);
} }
void SimpleCameraData::converterInputDone(FrameBuffer *buffer) void SimpleCameraData::conversionInputDone(FrameBuffer *buffer)
{ {
/* Queue the input buffer back for capture. */ /* Queue the input buffer back for capture. */
video_->queueBuffer(buffer); video_->queueBuffer(buffer);
} }
void SimpleCameraData::converterOutputDone(FrameBuffer *buffer) void SimpleCameraData::conversionOutputDone(FrameBuffer *buffer)
{ {
SimplePipelineHandler *pipe = SimpleCameraData::pipe(); SimplePipelineHandler *pipe = SimpleCameraData::pipe();
@ -1193,14 +1194,14 @@ int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c)
/* Configure the converter if needed. */ /* Configure the converter if needed. */
std::vector<std::reference_wrapper<StreamConfiguration>> outputCfgs; std::vector<std::reference_wrapper<StreamConfiguration>> outputCfgs;
data->useConverter_ = config->needConversion(); data->useConversion_ = config->needConversion();
for (unsigned int i = 0; i < config->size(); ++i) { for (unsigned int i = 0; i < config->size(); ++i) {
StreamConfiguration &cfg = config->at(i); StreamConfiguration &cfg = config->at(i);
cfg.setStream(&data->streams_[i]); cfg.setStream(&data->streams_[i]);
if (data->useConverter_) if (data->useConversion_)
outputCfgs.push_back(cfg); outputCfgs.push_back(cfg);
} }
@ -1226,7 +1227,7 @@ int SimplePipelineHandler::exportFrameBuffers(Camera *camera, Stream *stream,
* Export buffers on the converter or capture video node, depending on * Export buffers on the converter or capture video node, depending on
* whether the converter is used or not. * whether the converter is used or not.
*/ */
if (data->useConverter_) if (data->useConversion_)
return data->converter_->exportBuffers(data->streamIndex(stream), return data->converter_->exportBuffers(data->streamIndex(stream),
count, buffers); count, buffers);
else else
@ -1247,13 +1248,13 @@ int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] const ControlL
return -EBUSY; return -EBUSY;
} }
if (data->useConverter_) { if (data->useConversion_) {
/* /*
* When using the converter allocate a fixed number of internal * When using the converter allocate a fixed number of internal
* buffers. * buffers.
*/ */
ret = video->allocateBuffers(kNumInternalBuffers, ret = video->allocateBuffers(kNumInternalBuffers,
&data->converterBuffers_); &data->conversionBuffers_);
} else { } else {
/* Otherwise, prepare for using buffers from the only stream. */ /* Otherwise, prepare for using buffers from the only stream. */
Stream *stream = &data->streams_[0]; Stream *stream = &data->streams_[0];
@ -1272,7 +1273,7 @@ int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] const ControlL
return ret; return ret;
} }
if (data->useConverter_) { if (data->useConversion_) {
ret = data->converter_->start(); ret = data->converter_->start();
if (ret < 0) { if (ret < 0) {
stop(camera); stop(camera);
@ -1280,7 +1281,7 @@ int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] const ControlL
} }
/* Queue all internal buffers for capture. */ /* 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()); video->queueBuffer(buffer.get());
} }
@ -1292,7 +1293,7 @@ void SimplePipelineHandler::stopDevice(Camera *camera)
SimpleCameraData *data = cameraData(camera); SimpleCameraData *data = cameraData(camera);
V4L2VideoDevice *video = data->video_; V4L2VideoDevice *video = data->video_;
if (data->useConverter_) if (data->useConversion_)
data->converter_->stop(); data->converter_->stop();
video->streamOff(); video->streamOff();
@ -1300,7 +1301,7 @@ void SimplePipelineHandler::stopDevice(Camera *camera)
video->bufferReady.disconnect(data, &SimpleCameraData::bufferReady); video->bufferReady.disconnect(data, &SimpleCameraData::bufferReady);
data->converterBuffers_.clear(); data->conversionBuffers_.clear();
releasePipeline(data); releasePipeline(data);
} }
@ -1318,7 +1319,7 @@ int SimplePipelineHandler::queueRequestDevice(Camera *camera, Request *request)
* queue, it will be handed to the converter in the capture * queue, it will be handed to the converter in the capture
* completion handler. * completion handler.
*/ */
if (data->useConverter_) { if (data->useConversion_) {
buffers.emplace(data->streamIndex(stream), buffer); buffers.emplace(data->streamIndex(stream), buffer);
} else { } else {
ret = data->video_->queueBuffer(buffer); ret = data->video_->queueBuffer(buffer);
@ -1327,8 +1328,8 @@ int SimplePipelineHandler::queueRequestDevice(Camera *camera, Request *request)
} }
} }
if (data->useConverter_) if (data->useConversion_)
data->converterQueue_.push(std::move(buffers)); data->conversionQueue_.push(std::move(buffers));
return 0; return 0;
} }