media: coda: only wake up capture queue if no pending buffers to encode

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>
This commit is contained in:
Philipp Zabel 2019-06-18 12:45:28 -04:00 committed by Mauro Carvalho Chehab
parent 0ee08a1e7b
commit 0f8f633834
1 changed files with 9 additions and 8 deletions

View 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;
}