summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJacopo Mondi <jacopo@jmondi.org>2019-07-13 08:05:04 +0200
committerJacopo Mondi <jacopo@jmondi.org>2019-07-17 04:51:33 +0200
commit8f0984f2cc176e66c422fd306e573e9b2efbf1fa (patch)
tree5990d69dc85728567d6da46e4870a9b9d15994e2 /src
parent01c0ad98c478bc624a941f485ef4289286008a8b (diff)
libcamera: ipu3: Do not re-queue cancelled buffers
When a video device is stopped all the buffers there queued are released and their state is set to BufferCancelled. Currently, on buffer completion, cancelled buffers are blindly re-queued to the ImgU input or CIO2 output devices, preventing them to be re-started succesfully in future capture sessions. Fix that by inspecting the buffers status and skip re-queueing if they're reported as cancelled. For the ImgU output buffer this is not required, as cancelled request should be reported to applications in order to report them failure of the capture operations. Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Diffstat (limited to 'src')
-rw-r--r--src/libcamera/pipeline/ipu3/ipu3.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index bae3072b..c27fe755 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -927,6 +927,10 @@ int PipelineHandlerIPU3::registerCameras()
*/
void IPU3CameraData::imguInputBufferReady(Buffer *buffer)
{
+ /* \todo Handle buffer failures when state is set to BufferError. */
+ if (buffer->status() == Buffer::BufferCancelled)
+ return;
+
cio2_.output_->queueBuffer(buffer);
}
@@ -957,6 +961,10 @@ void IPU3CameraData::imguOutputBufferReady(Buffer *buffer)
*/
void IPU3CameraData::cio2BufferReady(Buffer *buffer)
{
+ /* \todo Handle buffer failures when state is set to BufferError. */
+ if (buffer->status() == Buffer::BufferCancelled)
+ return;
+
imgu_->input_->queueBuffer(buffer);
}