summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libcamera/pipeline/simple/simple.cpp26
1 files changed, 13 insertions, 13 deletions
diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
index 67f583b8..13c0a189 100644
--- a/src/libcamera/pipeline/simple/simple.cpp
+++ b/src/libcamera/pipeline/simple/simple.cpp
@@ -282,7 +282,11 @@ public:
std::unique_ptr<DelayedControls> delayedCtrls_;
std::vector<std::unique_ptr<FrameBuffer>> conversionBuffers_;
- std::queue<std::map<const Stream *, FrameBuffer *>> conversionQueue_;
+ struct RequestOutputs {
+ Request *request;
+ std::map<const Stream *, FrameBuffer *> outputs;
+ };
+ std::queue<RequestOutputs> conversionQueue_;
bool useConversion_;
std::unique_ptr<Converter> converter_;
@@ -808,16 +812,12 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)
if (conversionQueue_.empty())
return;
- Request *request = nullptr;
- for (auto &item : conversionQueue_.front()) {
- FrameBuffer *outputBuffer = item.second;
- request = outputBuffer->request();
- pipe->completeBuffer(request, outputBuffer);
- }
+ const RequestOutputs &outputs = conversionQueue_.front();
+ for (auto &[stream, buf] : outputs.outputs)
+ pipe->completeBuffer(outputs.request, buf);
+ pipe->completeRequest(outputs.request);
conversionQueue_.pop();
- if (request)
- pipe->completeRequest(request);
return;
}
@@ -833,7 +833,7 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)
if (useConversion_ && !conversionQueue_.empty()) {
const std::map<const Stream *, FrameBuffer *> &outputs =
- conversionQueue_.front();
+ conversionQueue_.front().outputs;
if (!outputs.empty()) {
FrameBuffer *outputBuffer = outputs.begin()->second;
if (outputBuffer)
@@ -857,7 +857,7 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)
}
if (converter_)
- converter_->queueBuffers(buffer, conversionQueue_.front());
+ converter_->queueBuffers(buffer, conversionQueue_.front().outputs);
else
/*
* request->sequence() cannot be retrieved from `buffer' inside
@@ -865,7 +865,7 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)
* already here.
*/
swIsp_->queueBuffers(request->sequence(), buffer,
- conversionQueue_.front());
+ conversionQueue_.front().outputs);
conversionQueue_.pop();
return;
@@ -1429,7 +1429,7 @@ int SimplePipelineHandler::queueRequestDevice(Camera *camera, Request *request)
}
if (data->useConversion_) {
- data->conversionQueue_.push(std::move(buffers));
+ data->conversionQueue_.push({ request, std::move(buffers) });
if (data->swIsp_)
data->swIsp_->queueRequest(request->sequence(), request->controls());
}