提交 50248ad9 编写于 作者: M Michał Krawczyk 提交者: Hans Verkuil

media: venus: dec: Fix handling of the start cmd

The decoder driver should clear the last_buffer_dequeued flag of the
capture queue upon receiving V4L2_DEC_CMD_START.

The last_buffer_dequeued flag is set upon receiving EOS (which always
happens upon receiving V4L2_DEC_CMD_STOP).

Without this patch, after issuing the V4L2_DEC_CMD_STOP and
V4L2_DEC_CMD_START, the vb2_dqbuf() function will always fail, even if
the buffers are completed by the hardware.

Fixes: beac8290 ("media: venus: make decoder compliant with stateful codec API")
Signed-off-by: NMichał Krawczyk <mk@semihalf.com>
Signed-off-by: NStanimir Varbanov <stanimir.k.varbanov@gmail.com>
Signed-off-by: NHans Verkuil <hverkuil-cisco@xs4all.nl>
上级 9c592f8a
...@@ -526,6 +526,7 @@ static int ...@@ -526,6 +526,7 @@ static int
vdec_decoder_cmd(struct file *file, void *fh, struct v4l2_decoder_cmd *cmd) vdec_decoder_cmd(struct file *file, void *fh, struct v4l2_decoder_cmd *cmd)
{ {
struct venus_inst *inst = to_inst(file); struct venus_inst *inst = to_inst(file);
struct vb2_queue *dst_vq;
struct hfi_frame_data fdata = {0}; struct hfi_frame_data fdata = {0};
int ret; int ret;
...@@ -556,6 +557,13 @@ vdec_decoder_cmd(struct file *file, void *fh, struct v4l2_decoder_cmd *cmd) ...@@ -556,6 +557,13 @@ vdec_decoder_cmd(struct file *file, void *fh, struct v4l2_decoder_cmd *cmd)
inst->codec_state = VENUS_DEC_STATE_DRAIN; inst->codec_state = VENUS_DEC_STATE_DRAIN;
inst->drain_active = true; inst->drain_active = true;
} }
} else if (cmd->cmd == V4L2_DEC_CMD_START &&
inst->codec_state == VENUS_DEC_STATE_STOPPED) {
dst_vq = v4l2_m2m_get_vq(inst->fh.m2m_ctx,
V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE);
vb2_clear_last_buffer_dequeued(dst_vq);
inst->codec_state = VENUS_DEC_STATE_DECODING;
} }
unlock: unlock:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册