On Tue Oct 21 15:46:17 2025 -0500, Brandon Brnich wrote:
> When STREAMON(CAP) is called after STREAMON(OUT), the driver was failing to
> switch states from VPU_INST_STATE_OPEN to VPU_INST_STATE_INIT_SEQ and
> VPU_INST_STATE_PIC_RUN because the capture queue streaming boolean had not
> yet been set to true. This led to a hang in the encoder since the state
> was stuck in VPU_INST_STATE_OPEN. During the second call to
> start_streaming, the sequence initialization and frame buffer allocation
> should occur.
> 
> Signed-off-by: Brandon Brnich <[email protected]>
> Reviewed-by: Nicolas Dufresne <[email protected]>
> Signed-off-by: Nicolas Dufresne <[email protected]>
> Signed-off-by: Hans Verkuil <[email protected]>

Patch committed.

Thanks,
Hans Verkuil

 drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

---

diff --git a/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c 
b/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
index 9bfaa9fb3ceb..bca881a0a161 100644
--- a/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
+++ b/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
@@ -1367,7 +1367,8 @@ static int wave5_vpu_enc_start_streaming(struct vb2_queue 
*q, unsigned int count
                if (ret)
                        goto return_buffers;
        }
-       if (inst->state == VPU_INST_STATE_OPEN && 
m2m_ctx->cap_q_ctx.q.streaming) {
+       if (inst->state == VPU_INST_STATE_OPEN &&
+           (m2m_ctx->cap_q_ctx.q.streaming || q->type == 
V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)) {
                ret = initialize_sequence(inst);
                if (ret) {
                        dev_warn(inst->dev->dev, "Sequence not found: %d\n", 
ret);
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to