| From 220657733e5cefdc2003bc605796cf288ad374f9 Mon Sep 17 00:00:00 2001 |
| From: Hans Verkuil <hverkuil@xs4all.nl> |
| Date: Wed, 13 Mar 2019 10:47:13 -0400 |
| Subject: media: vicodec: reset last_src/dst_buf based on the IS_OUTPUT |
| |
| [ Upstream commit 76eb24fc233b8c94b2156ead5811e08d2046ad58 ] |
| |
| 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> |
| Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/media/platform/vicodec/vicodec-core.c | 7 +++++-- |
| 1 file changed, 5 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/media/platform/vicodec/vicodec-core.c b/drivers/media/platform/vicodec/vicodec-core.c |
| index 6b618452700c4..8788369e59a0a 100644 |
| --- a/drivers/media/platform/vicodec/vicodec-core.c |
| +++ b/drivers/media/platform/vicodec/vicodec-core.c |
| @@ -1339,8 +1339,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) || |
| -- |
| 2.20.1 |
| |