Commit 1b438b45 authored by Philipp Zabel's avatar Philipp Zabel Committed by Mauro Carvalho Chehab
Browse files

media: coda: mark the last output buffer on decoder stop command



Mark the last output buffer to be decoded and only copy pending queued
output buffers into the bitstream ring buffer in the BIT processor
decoder case.

Signed-off-by: default avatarPhilipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
parent aa3972a3
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -312,6 +312,9 @@ static bool coda_bitstream_try_queue(struct coda_ctx *ctx,
	if (ctx == v4l2_m2m_get_curr_priv(ctx->dev->m2m_dev))
		coda_kfifo_sync_to_device_write(ctx);

	/* Set the stream-end flag after the last buffer is queued */
	if (src_buf->flags & V4L2_BUF_FLAG_LAST)
		coda_bit_stream_end_flag(ctx);
	ctx->hold = false;

	return true;
+6 −0
Original line number Diff line number Diff line
@@ -1071,6 +1071,7 @@ static int coda_decoder_cmd(struct file *file, void *fh,
{
	struct coda_ctx *ctx = fh_to_ctx(fh);
	struct coda_dev *dev = ctx->dev;
	struct vb2_v4l2_buffer *buf;
	struct vb2_queue *dst_vq;
	int ret;

@@ -1092,6 +1093,11 @@ static int coda_decoder_cmd(struct file *file, void *fh,
		mutex_unlock(&ctx->bitstream_mutex);
		break;
	case V4L2_DEC_CMD_STOP:
		buf = v4l2_m2m_last_src_buf(ctx->fh.m2m_ctx);
		if (buf)
			/* Mark last buffer */
			buf->flags |= V4L2_BUF_FLAG_LAST;

		/* Set the stream-end flag on this context */
		coda_bit_stream_end_flag(ctx);
		ctx->hold = false;