LinuxTV Patchwork vicodec: reset last_src/dst_buf based on the IS_OUTPUT

login
register
mail settings
Submitter Hans Verkuil
Date March 13, 2019, 2:47 p.m.
Message ID <d1af1611-5862-367c-da3e-10121f2745e1@xs4all.nl>
Download mbox | patch
Permalink /patch/55038/
State Accepted
Delegated to: Hans Verkuil
Headers show

Comments

Hans Verkuil - March 13, 2019, 2:47 p.m.
When start_streaming was called both last_src_buf and last_dst_buf
pointers were set to NULL, but this depends on whether the capture
or output queue starts streaming.

When decoding with resolution changes in between the capture queue
has to restart streaming whenever a resolution change occurs. And
that would reset last_src_buf as well, which causes a problem if
the decoder was stopped by the application. Since last_src_buf
is now NULL, the LAST flag is never set for the last capture
buffer.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
---
 drivers/media/platform/vicodec/vicodec-core.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

Patch

diff --git a/drivers/media/platform/vicodec/vicodec-core.c b/drivers/media/platform/vicodec/vicodec-core.c
index 075927dba614..39433ffdf417 100644
--- a/drivers/media/platform/vicodec/vicodec-core.c
+++ b/drivers/media/platform/vicodec/vicodec-core.c
@@ -1337,8 +1337,11 @@  static int vicodec_start_streaming(struct vb2_queue *q,
 	chroma_div = info->width_div * info->height_div;
 	q_data->sequence = 0;

-	ctx->last_src_buf = NULL;
-	ctx->last_dst_buf = NULL;
+	if (V4L2_TYPE_IS_OUTPUT(q->type))
+		ctx->last_src_buf = NULL;
+	else
+		ctx->last_dst_buf = NULL;
+
 	state->gop_cnt = 0;

 	if ((V4L2_TYPE_IS_OUTPUT(q->type) && !ctx->is_enc) ||

Privacy Policy