Patch "media: venus: dec: Fix handling of the start cmd" has been added to the 6.1-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

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

to the 6.1-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     media-venus-dec-fix-handling-of-the-start-cmd.patch
and it can be found in the queue-6.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 2882b4589cbe9ce4b25eae5c17726b7bca32d16b
Author: Michał Krawczyk <mk@xxxxxxxxxxxx>
Date:   Mon Jan 30 13:54:18 2023 +0000

    media: venus: dec: Fix handling of the start cmd
    
    [ Upstream commit 50248ad9f190d527cbd578190ca769729518b703 ]
    
    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: beac82904a87 ("media: venus: make decoder compliant with stateful codec API")
    
    Signed-off-by: Michał Krawczyk <mk@xxxxxxxxxxxx>
    Signed-off-by: Stanimir Varbanov <stanimir.k.varbanov@xxxxxxxxx>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/media/platform/qcom/venus/vdec.c b/drivers/media/platform/qcom/venus/vdec.c
index 4ceaba37e2e57..9d26587716bf6 100644
--- a/drivers/media/platform/qcom/venus/vdec.c
+++ b/drivers/media/platform/qcom/venus/vdec.c
@@ -526,6 +526,7 @@ static int
 vdec_decoder_cmd(struct file *file, void *fh, struct v4l2_decoder_cmd *cmd)
 {
 	struct venus_inst *inst = to_inst(file);
+	struct vb2_queue *dst_vq;
 	struct hfi_frame_data fdata = {0};
 	int ret;
 
@@ -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->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:



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux