media: coda: only wake up capture queue if no pending buffers to encode
authorPhilipp Zabel <p.zabel@pengutronix.de>
Tue, 18 Jun 2019 16:45:28 +0000 (12:45 -0400)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Mon, 24 Jun 2019 18:43:25 +0000 (14:43 -0400)
If there are no pending queued output buffers to be encoded, waking up
the capture queue with -EPIPE signals end of stream. If there are
pending buffers on the other hand, setting the V4L2_BUF_FLAG_LAST on
the resulting encoded capture buffers is all that is needed.

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/platform/coda/coda-common.c

index 46f2bb6febdef11c0f63e5ce0851ed39ca26e97d..73c18be14cbf3497365575b5f39373dd5580f288 100644 (file)
@@ -1035,17 +1035,18 @@ static int coda_encoder_cmd(struct file *file, void *fh,
                return ret;
 
        buf = v4l2_m2m_last_src_buf(ctx->fh.m2m_ctx);
-       if (buf)
+       if (buf) {
                buf->flags |= V4L2_BUF_FLAG_LAST;
+       } else {
+               /* Set the stream-end flag on this context */
+               ctx->bit_stream_param |= CODA_BIT_STREAM_END_FLAG;
 
-       /* Set the stream-end flag on this context */
-       ctx->bit_stream_param |= CODA_BIT_STREAM_END_FLAG;
-
-       flush_work(&ctx->pic_run_work);
+               flush_work(&ctx->pic_run_work);
 
-       /* If there is no buffer in flight, wake up */
-       if (!ctx->streamon_out || ctx->qsequence == ctx->osequence)
-               coda_wake_up_capture_queue(ctx);
+               /* If there is no buffer in flight, wake up */
+               if (!ctx->streamon_out || ctx->qsequence == ctx->osequence)
+                       coda_wake_up_capture_queue(ctx);
+       }
 
        return 0;
 }