media: coda: flag the last encoded buffer
authorPhilipp Zabel <p.zabel@pengutronix.de>
Tue, 18 Jun 2019 16:45:29 +0000 (12:45 -0400)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Mon, 24 Jun 2019 18:43:53 +0000 (14:43 -0400)
Use the flagged last output buffer to also flag the corresponding
capture buffer after encoding. This causes the end of stream event
to be issued and the buffer to be dequeued with the last flag set.

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-bit.c

index cbcec571a014aea42c969b433549b8a351b9dd8c..7bcdfe8dcf3d6bdc11cf627c5ecb0d730a588fa2 100644 (file)
@@ -1565,13 +1565,14 @@ static void coda_finish_encode(struct coda_ctx *ctx)
        coda_read(dev, CODA_RET_ENC_PIC_SLICE_NUM);
        coda_read(dev, CODA_RET_ENC_PIC_FLAG);
 
-       if (coda_read(dev, CODA_RET_ENC_PIC_TYPE) == 0) {
+       dst_buf->flags &= ~(V4L2_BUF_FLAG_KEYFRAME |
+                           V4L2_BUF_FLAG_PFRAME |
+                           V4L2_BUF_FLAG_LAST);
+       if (coda_read(dev, CODA_RET_ENC_PIC_TYPE) == 0)
                dst_buf->flags |= V4L2_BUF_FLAG_KEYFRAME;
-               dst_buf->flags &= ~V4L2_BUF_FLAG_PFRAME;
-       } else {
+       else
                dst_buf->flags |= V4L2_BUF_FLAG_PFRAME;
-               dst_buf->flags &= ~V4L2_BUF_FLAG_KEYFRAME;
-       }
+       dst_buf->flags |= src_buf->flags & V4L2_BUF_FLAG_LAST;
 
        v4l2_m2m_buf_copy_metadata(src_buf, dst_buf, false);
 
@@ -1584,8 +1585,9 @@ static void coda_finish_encode(struct coda_ctx *ctx)
        if (ctx->gopcounter < 0)
                ctx->gopcounter = ctx->params.gop_size - 1;
 
-       coda_dbg(1, ctx, "job finished: encoded %c frame (%d)\n",
-                coda_frame_type_char(dst_buf->flags), dst_buf->sequence);
+       coda_dbg(1, ctx, "job finished: encoded %c frame (%d)%s\n",
+                coda_frame_type_char(dst_buf->flags), dst_buf->sequence,
+                (dst_buf->flags & V4L2_BUF_FLAG_LAST) ? " (last)" : "");
 }
 
 static void coda_seq_end_work(struct work_struct *work)