media: coda: implement CMD_START to restart decoding
authorMichael Tretter <m.tretter@pengutronix.de>
Tue, 18 Jun 2019 16:45:08 +0000 (12:45 -0400)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Mon, 24 Jun 2019 18:12:07 +0000 (14:12 -0400)
The CMD_START shall be used to start the processing after a drain that
was initiated with CMD_STOP.

Up until now, a drain on coda could only be finished with a
STREAMOFF-STREAMON, which resulted in a reset of the device.

Signed-off-by: Michael Tretter <m.tretter@pengutronix.de>
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/platform/coda/coda-common.c

index de64040..c7dcab4 100644 (file)
@@ -1059,16 +1059,29 @@ static int coda_decoder_cmd(struct file *file, void *fh,
                            struct v4l2_decoder_cmd *dc)
 {
        struct coda_ctx *ctx = fh_to_ctx(fh);
+       struct vb2_queue *dst_vq;
        int ret;
 
        ret = coda_try_decoder_cmd(file, fh, dc);
        if (ret < 0)
                return ret;
 
-       /* Set the stream-end flag on this context */
-       coda_bit_stream_end_flag(ctx);
-       ctx->hold = false;
-       v4l2_m2m_try_schedule(ctx->fh.m2m_ctx);
+       switch (dc->cmd) {
+       case V4L2_DEC_CMD_START:
+               dst_vq = v4l2_m2m_get_vq(ctx->fh.m2m_ctx,
+                                        V4L2_BUF_TYPE_VIDEO_CAPTURE);
+               vb2_clear_last_buffer_dequeued(dst_vq);
+               ctx->bit_stream_param &= ~CODA_BIT_STREAM_END_FLAG;
+               break;
+       case V4L2_DEC_CMD_STOP:
+               /* Set the stream-end flag on this context */
+               coda_bit_stream_end_flag(ctx);
+               ctx->hold = false;
+               v4l2_m2m_try_schedule(ctx->fh.m2m_ctx);
+               break;
+       default:
+               return -EINVAL;
+       }
 
        return 0;
 }