From: Hans Verkuil <hverkuil-ci...@xs4all.nl>

Set V4L2_BUF_FLAG_P/KEYFRAME after decoding a frame.

Signed-off-by: Hans Verkuil <hverkuil-ci...@xs4all.nl>
---
 drivers/media/platform/vicodec/vicodec-core.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/media/platform/vicodec/vicodec-core.c 
b/drivers/media/platform/vicodec/vicodec-core.c
index 21000cc2f395..4896f349b4aa 100644
--- a/drivers/media/platform/vicodec/vicodec-core.c
+++ b/drivers/media/platform/vicodec/vicodec-core.c
@@ -335,6 +335,10 @@ static int device_process(struct vicodec_ctx *ctx,
                        copy_cap_to_ref(p_dst, ctx->state.info, &ctx->state);
 
                vb2_set_plane_payload(&dst_vb->vb2_buf, 0, q_dst->sizeimage);
+               if (ntohl(ctx->state.header.flags) & FWHT_FL_I_FRAME)
+                       dst_vb->flags |= V4L2_BUF_FLAG_KEYFRAME;
+               else
+                       dst_vb->flags |= V4L2_BUF_FLAG_PFRAME;
        }
        return ret;
 }
@@ -410,7 +414,6 @@ static void device_run(void *priv)
        u32 state;
        struct media_request *src_req;
 
-
        src_buf = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx);
        dst_buf = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
        src_req = src_buf->vb2_buf.req_obj.req;
@@ -424,7 +427,7 @@ static void device_run(void *priv)
        else
                dst_buf->sequence = q_dst->sequence++;
        dst_buf->flags &= ~V4L2_BUF_FLAG_LAST;
-       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf, !ctx->is_enc);
+       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf, false);
 
        spin_lock(ctx->lock);
        if (!ctx->comp_has_next_frame && src_buf == ctx->last_src_buf) {
-- 
2.17.1

Reply via email to