]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
media: v4l2-mem2mem: Don't copy frame flags in v4l2_m2m_buf_copy_metadata()
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Wed, 15 Oct 2025 10:01:16 +0000 (13:01 +0300)
committerHans Verkuil <hverkuil+cisco@kernel.org>
Fri, 17 Oct 2025 09:31:16 +0000 (11:31 +0200)
The v4l2_m2m_buf_copy_metadata() function takes a boolean
copy_frame_flags argument. When true, it causes the function to copy the
V4L2_BUF_FLAG_KEYFRAME, V4L2_BUF_FLAG_BFRAME and V4L2_BUF_FLAG_PFRAME
flags from the output buffer to the capture buffer.

There is no use cases in any upstream driver for copying the flags.
KEY/P/B frames are properties of the bitstream buffer in some formats.
Once decoded, this is no longer a property of the video frame and should
be discarded.

It was considered useful to know if an uncompressed frame was decoded
from a KEY/P/B compressed frame, and to preserve that information if
that same uncompressed frame was passed through another M2M device (e.g.
a scaler). However, the V4L2 documentation makes it clear that the flags
are meant for compressed frames only.

Drop the copy_frame_flags argument from v4l2_m2m_buf_copy_metadata().
The change to drivers was performed with the following Coccinelle
semantic patch:

@@
expression src;
expression dst;
expression flag;
@@
-       v4l2_m2m_buf_copy_metadata(src, dst, flag);
+       v4l2_m2m_buf_copy_metadata(src, dst);

include/media/v4l2-mem2mem.h and drivers/media/v4l2-core/v4l2-mem2mem.c
have been updated manually.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
Reviewed-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
33 files changed:
drivers/media/platform/allegro-dvt/allegro-core.c
drivers/media/platform/amphion/vdec.c
drivers/media/platform/amphion/venc.c
drivers/media/platform/chips-media/coda/coda-bit.c
drivers/media/platform/chips-media/coda/coda-jpeg.c
drivers/media/platform/imagination/e5010-jpeg-enc.c
drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c
drivers/media/platform/mediatek/jpeg/mtk_jpeg_dec_hw.c
drivers/media/platform/mediatek/jpeg/mtk_jpeg_enc_hw.c
drivers/media/platform/mediatek/mdp3/mtk-mdp3-m2m.c
drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_av1_req_lat_if.c
drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_req_if.c
drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_req_multi_if.c
drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_hevc_req_multi_if.c
drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_vp8_req_if.c
drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_vp9_req_lat_if.c
drivers/media/platform/nvidia/tegra-vde/h264.c
drivers/media/platform/nxp/dw100/dw100.c
drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c
drivers/media/platform/nxp/imx8-isi/imx8-isi-m2m.c
drivers/media/platform/rockchip/rga/rga.c
drivers/media/platform/rockchip/rkvdec/rkvdec.c
drivers/media/platform/st/stm32/dma2d/dma2d.c
drivers/media/platform/sunxi/sun8i-di/sun8i-di.c
drivers/media/platform/sunxi/sun8i-rotate/sun8i_rotate.c
drivers/media/platform/verisilicon/hantro_drv.c
drivers/media/test-drivers/vicodec/vicodec-core.c
drivers/media/test-drivers/vim2m.c
drivers/media/test-drivers/visl/visl-dec.c
drivers/media/v4l2-core/v4l2-mem2mem.c
drivers/staging/media/imx/imx-media-csc-scaler.c
drivers/staging/media/sunxi/cedrus/cedrus_dec.c
include/media/v4l2-mem2mem.h

index 875e5cbbeb07d339ee7b1348aa6edcb9133120ac..f347d56ac10891c5dcf7196c54952a43b19cc1da 100644 (file)
@@ -2124,7 +2124,7 @@ static void allegro_channel_finish_frame(struct allegro_channel *channel,
 
        state = VB2_BUF_STATE_DONE;
 
-       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf, false);
+       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf);
        if (msg->is_idr)
                dst_buf->flags |= V4L2_BUF_FLAG_KEYFRAME;
        else
index 79790fbadc95783752a2c3ab8c13b6817ffad6fd..c0d2aabb9e0e33ff17bd69a6b76793b21dca768d 100644 (file)
@@ -821,7 +821,7 @@ static int vdec_frame_decoded(struct vpu_inst *inst, void *arg)
        vbuf = &vpu_buf->m2m_buf.vb;
        src_buf = vdec_get_src_buffer(inst, info->consumed_count);
        if (src_buf) {
-               v4l2_m2m_buf_copy_metadata(src_buf, vbuf, true);
+               v4l2_m2m_buf_copy_metadata(src_buf, vbuf);
                if (info->consumed_count) {
                        v4l2_m2m_src_buf_remove(inst->fh.m2m_ctx);
                        vpu_set_buffer_state(src_buf, VPU_BUF_STATE_IDLE);
index 319fbae7057120132bc4dd0095c3d74aa9cb2995..aced76401b690a900706d79fa360bc1ff369ca29 100644 (file)
@@ -788,7 +788,7 @@ static int venc_get_one_encoded_frame(struct vpu_inst *inst,
 
        src_buf = vpu_find_buf_by_sequence(inst, inst->out_format.type, frame->info.frame_id);
        if (src_buf) {
-               v4l2_m2m_buf_copy_metadata(src_buf, vbuf, true);
+               v4l2_m2m_buf_copy_metadata(src_buf, vbuf);
                vpu_set_buffer_state(src_buf, VPU_BUF_STATE_IDLE);
                v4l2_m2m_src_buf_remove_by_buf(inst->fh.m2m_ctx, src_buf);
                v4l2_m2m_buf_done(src_buf, VB2_BUF_STATE_DONE);
index 84ded154adfe37147218d60278a1c1fac88ecadc..fa6b72c3bd9342441b8ee0656681ee6c6d71a84a 100644 (file)
@@ -1685,7 +1685,7 @@ static void coda_finish_encode(struct coda_ctx *ctx)
                dst_buf->flags |= V4L2_BUF_FLAG_PFRAME;
        dst_buf->flags |= src_buf->flags & V4L2_BUF_FLAG_LAST;
 
-       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf, false);
+       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf);
 
        v4l2_m2m_buf_done(src_buf, VB2_BUF_STATE_DONE);
 
index 5746892658b12a9f7b88085cff8bd16aa48dc50b..fb150b87c773063b39dbe7e6cb589e33fb880dd1 100644 (file)
@@ -1245,7 +1245,7 @@ static void coda9_jpeg_finish_encode(struct coda_ctx *ctx)
        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);
+       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf);
 
        v4l2_m2m_buf_done(src_buf, VB2_BUF_STATE_DONE);
        coda_m2m_buf_done(ctx, dst_buf, err_mb ? VB2_BUF_STATE_ERROR :
@@ -1472,7 +1472,7 @@ static void coda9_jpeg_finish_decode(struct coda_ctx *ctx)
        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);
+       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf);
 
        q_data_dst = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE);
        vb2_set_plane_payload(&dst_buf->vb2_buf, 0, q_data_dst->sizeimage);
index 1b5c8b1d6a319277fbdc6f0e6aa4e923384fe2a9..1c6e076033ec78651622c2725dcaadae024bff67 100644 (file)
@@ -1354,7 +1354,7 @@ static void e5010_device_run(void *priv)
        s_vb->sequence = ctx->out_queue.sequence++;
        d_vb->sequence = ctx->cap_queue.sequence++;
 
-       v4l2_m2m_buf_copy_metadata(s_vb, d_vb, false);
+       v4l2_m2m_buf_copy_metadata(s_vb, d_vb);
 
        if (ctx != e5010->last_context_run || ctx->update_qp) {
                dprintk(e5010, 1, "ctx updated: 0x%p -> 0x%p, updating qp tables\n",
index d78b83f062477ff401a83259e7fcfa354347e732..d08fe365cbb280bcba52bef2b9c77e9b1874d0f4 100644 (file)
@@ -1618,7 +1618,7 @@ retry_select:
        if (!dst_buf)
                goto getbuf_fail;
 
-       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf, true);
+       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf);
 
        mtk_jpegenc_set_hw_param(ctx, hw_id, src_buf, dst_buf);
        ret = pm_runtime_get_sync(comp_jpeg[hw_id]->dev);
@@ -1714,7 +1714,7 @@ retry_select:
        if (!dst_buf)
                goto getbuf_fail;
 
-       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf, true);
+       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf);
        jpeg_src_buf = mtk_jpeg_vb2_to_srcbuf(&src_buf->vb2_buf);
        jpeg_dst_buf = mtk_jpeg_vb2_to_srcbuf(&dst_buf->vb2_buf);
 
index e78e1d11093cd81d8de68f7a5611333a389df24a..32372781daf57747b675a42186dbb65951a27ed6 100644 (file)
@@ -530,7 +530,7 @@ static void mtk_jpegdec_timeout_work(struct work_struct *work)
 
        src_buf = cjpeg->hw_param.src_buffer;
        dst_buf = cjpeg->hw_param.dst_buffer;
-       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf, true);
+       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf);
 
        mtk_jpeg_dec_reset(cjpeg->reg_base);
        clk_disable_unprepare(cjpeg->jdec_clk.clks->clk);
@@ -560,7 +560,7 @@ static irqreturn_t mtk_jpegdec_hw_irq_handler(int irq, void *priv)
        ctx = jpeg->hw_param.curr_ctx;
        src_buf = jpeg->hw_param.src_buffer;
        dst_buf = jpeg->hw_param.dst_buffer;
-       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf, true);
+       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf);
 
        irq_status = mtk_jpeg_dec_get_int_status(jpeg->reg_base);
        dec_irq_ret = mtk_jpeg_dec_enum_result(irq_status);
index 9ab27aee302afa4e971ac285039a0f55e9b37c23..b6f5b2249f1f20ac01f360b2016d16b978293703 100644 (file)
@@ -261,7 +261,7 @@ static void mtk_jpegenc_timeout_work(struct work_struct *work)
 
        src_buf = cjpeg->hw_param.src_buffer;
        dst_buf = cjpeg->hw_param.dst_buffer;
-       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf, true);
+       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf);
 
        mtk_jpeg_enc_reset(cjpeg->reg_base);
        clk_disable_unprepare(cjpeg->venc_clk.clks->clk);
@@ -289,7 +289,7 @@ static irqreturn_t mtk_jpegenc_hw_irq_handler(int irq, void *priv)
        ctx = jpeg->hw_param.curr_ctx;
        src_buf = jpeg->hw_param.src_buffer;
        dst_buf = jpeg->hw_param.dst_buffer;
-       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf, true);
+       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf);
 
        irq_status = readl(jpeg->reg_base + JPEG_ENC_INT_STS) &
                JPEG_ENC_INT_STATUS_MASK_ALLIRQ;
index 9ef956b565a791429a477dc96567453cb189d817..44140987cf5fe4a5b96ed0305a66c4b7a79a1334 100644 (file)
@@ -51,7 +51,7 @@ static void mdp_m2m_process_done(void *priv, int vb_state)
        ctx->curr_param.frame_no = ctx->frame_count[MDP_M2M_SRC];
        src_vbuf->sequence = ctx->frame_count[MDP_M2M_SRC]++;
        dst_vbuf->sequence = ctx->frame_count[MDP_M2M_DST]++;
-       v4l2_m2m_buf_copy_metadata(src_vbuf, dst_vbuf, true);
+       v4l2_m2m_buf_copy_metadata(src_vbuf, dst_vbuf);
 
        v4l2_m2m_buf_done(src_vbuf, vb_state);
        v4l2_m2m_buf_done(dst_vbuf, vb_state);
index 08e0f5a709350c3fe6a85f757b473b2f06cbdf72..7be4b6086920e05e55f1c3aa7463e5c859c11bd2 100644 (file)
@@ -1073,7 +1073,7 @@ static int vdec_av1_slice_setup_lat_from_src_buf(struct vdec_av1_slice_instance
 
        lat_buf->src_buf_req = src->vb2_buf.req_obj.req;
        dst = &lat_buf->ts_info;
-       v4l2_m2m_buf_copy_metadata(src, dst, true);
+       v4l2_m2m_buf_copy_metadata(src, dst);
        vsi->frame.cur_ts = dst->vb2_buf.timestamp;
 
        return 0;
@@ -1780,7 +1780,7 @@ static int vdec_av1_slice_setup_core_to_dst_buf(struct vdec_av1_slice_instance *
        if (!dst)
                return -EINVAL;
 
-       v4l2_m2m_buf_copy_metadata(&lat_buf->ts_info, dst, true);
+       v4l2_m2m_buf_copy_metadata(&lat_buf->ts_info, dst);
 
        return 0;
 }
index 1e1b32faac77bc8b0dfdfbd0f0f06a4e8fa11fc0..b9a5ea7887d3ad0330ee1b397184f12da7941f1b 100644 (file)
@@ -367,7 +367,7 @@ static int vdec_h264_slice_decode(void *h_vdec, struct mtk_vcodec_mem *bs,
        inst->vsi_ctx.dec.vdec_fb_va = (u64)(uintptr_t)fb;
 
        v4l2_m2m_buf_copy_metadata(&src_buf_info->m2m_buf.vb,
-                                  &dst_buf_info->m2m_buf.vb, true);
+                                  &dst_buf_info->m2m_buf.vb);
        err = get_vdec_decode_parameters(inst);
        if (err)
                goto err_free_fb_out;
index 5b25e1679b512cb39de0c0da2f7b2fb5adc46a94..9a9dc2f88d6e25c140467f5d703985c72b0cf580 100644 (file)
@@ -570,7 +570,7 @@ static int vdec_h264_slice_setup_core_buffer_ext(struct vdec_h264_slice_inst *in
        }
 
        vb2_v4l2 = v4l2_m2m_next_dst_buf(ctx->m2m_ctx);
-       v4l2_m2m_buf_copy_metadata(&lat_buf->ts_info, vb2_v4l2, true);
+       v4l2_m2m_buf_copy_metadata(&lat_buf->ts_info, vb2_v4l2);
 
        return 0;
 }
@@ -674,7 +674,7 @@ static int vdec_h264_slice_core_decode(struct vdec_lat_buf *lat_buf)
        }
 
        vb2_v4l2 = v4l2_m2m_next_dst_buf(ctx->m2m_ctx);
-       v4l2_m2m_buf_copy_metadata(&lat_buf->ts_info, vb2_v4l2, true);
+       v4l2_m2m_buf_copy_metadata(&lat_buf->ts_info, vb2_v4l2);
 
        vdec_h264_slice_fill_decode_reflist(inst, &inst->vsi_core->h264_slice_params,
                                            share_info);
@@ -768,7 +768,8 @@ static int vdec_h264_slice_lat_decode_ext(void *h_vdec, struct mtk_vcodec_mem *b
        src_buf_info = container_of(bs, struct mtk_video_dec_buf, bs_buffer);
 
        lat_buf->src_buf_req = src_buf_info->m2m_buf.vb.vb2_buf.req_obj.req;
-       v4l2_m2m_buf_copy_metadata(&src_buf_info->m2m_buf.vb, &lat_buf->ts_info, true);
+       v4l2_m2m_buf_copy_metadata(&src_buf_info->m2m_buf.vb,
+                                  &lat_buf->ts_info);
 
        err = vdec_h264_slice_fill_decode_parameters(inst, share_info,
                                                     &inst->vsi_ext->h264_slice_params);
@@ -900,7 +901,8 @@ static int vdec_h264_slice_lat_decode(void *h_vdec, struct mtk_vcodec_mem *bs,
 
        inst->vsi->dec.nal_info = buf[nal_start_idx];
        lat_buf->src_buf_req = src_buf_info->m2m_buf.vb.vb2_buf.req_obj.req;
-       v4l2_m2m_buf_copy_metadata(&src_buf_info->m2m_buf.vb, &lat_buf->ts_info, true);
+       v4l2_m2m_buf_copy_metadata(&src_buf_info->m2m_buf.vb,
+                                  &lat_buf->ts_info);
 
        err = vdec_h264_slice_fill_decode_parameters(inst, share_info,
                                                     &inst->vsi->h264_slice_params);
@@ -1039,7 +1041,7 @@ static int vdec_h264_slice_single_decode_ext(void *h_vdec, struct mtk_vcodec_mem
        inst->vsi_ctx_ext.dec.vdec_fb_va = (u64)(uintptr_t)fb;
 
        v4l2_m2m_buf_copy_metadata(&src_buf_info->m2m_buf.vb,
-                                  &dst_buf_info->m2m_buf.vb, true);
+                                  &dst_buf_info->m2m_buf.vb);
        err = get_vdec_sig_decode_parameters(inst);
        if (err)
                goto err_free_fb_out;
@@ -1135,7 +1137,7 @@ static int vdec_h264_slice_single_decode(void *h_vdec, struct mtk_vcodec_mem *bs
        inst->vsi_ctx.dec.vdec_fb_va = (u64)(uintptr_t)fb;
 
        v4l2_m2m_buf_copy_metadata(&src_buf_info->m2m_buf.vb,
-                                  &dst_buf_info->m2m_buf.vb, true);
+                                  &dst_buf_info->m2m_buf.vb);
        err = get_vdec_sig_decode_parameters(inst);
        if (err)
                goto err_free_fb_out;
index 2725db882e5b30ad9febae093ece40f4347f7147..88eca50c20175e6b45fc61e0ef1988f0c4d9cf73 100644 (file)
@@ -742,7 +742,8 @@ static int vdec_hevc_slice_setup_lat_buffer(struct vdec_hevc_slice_inst *inst,
 
        src_buf_info = container_of(bs, struct mtk_video_dec_buf, bs_buffer);
        lat_buf->src_buf_req = src_buf_info->m2m_buf.vb.vb2_buf.req_obj.req;
-       v4l2_m2m_buf_copy_metadata(&src_buf_info->m2m_buf.vb, &lat_buf->ts_info, true);
+       v4l2_m2m_buf_copy_metadata(&src_buf_info->m2m_buf.vb,
+                                  &lat_buf->ts_info);
 
        *res_chg = inst->resolution_changed;
        if (inst->resolution_changed) {
@@ -847,7 +848,7 @@ static int vdec_hevc_slice_setup_core_buffer(struct vdec_hevc_slice_inst *inst,
        }
 
        vb2_v4l2 = v4l2_m2m_next_dst_buf(ctx->m2m_ctx);
-       v4l2_m2m_buf_copy_metadata(&lat_buf->ts_info, vb2_v4l2, true);
+       v4l2_m2m_buf_copy_metadata(&lat_buf->ts_info, vb2_v4l2);
 
        return 0;
 }
index 232ef3bd246a3d7615e0c9931e30bb7fa84dec36..e1d4960553f2077f2a34e8d015781d6dc6c81fe7 100644 (file)
@@ -358,7 +358,7 @@ static int vdec_vp8_slice_decode(void *h_vdec, struct mtk_vcodec_mem *bs,
                       y_fb_dma, c_fb_dma);
 
        v4l2_m2m_buf_copy_metadata(&src_buf_info->m2m_buf.vb,
-                                  &dst_buf_info->m2m_buf.vb, true);
+                                  &dst_buf_info->m2m_buf.vb);
 
        err = vdec_vp8_slice_get_decode_parameters(inst);
        if (err)
index 45cd555a5fb51775af829cead754492e01f8a987..cd1935014d76c28f490200678e6b93811d5fc52a 100644 (file)
@@ -706,7 +706,7 @@ int vdec_vp9_slice_setup_single_from_src_to_dst(struct vdec_vp9_slice_instance *
        if (!dst)
                return -EINVAL;
 
-       v4l2_m2m_buf_copy_metadata(src, dst, true);
+       v4l2_m2m_buf_copy_metadata(src, dst);
 
        return 0;
 }
@@ -724,7 +724,7 @@ static int vdec_vp9_slice_setup_lat_from_src_buf(struct vdec_vp9_slice_instance
        lat_buf->src_buf_req = src->vb2_buf.req_obj.req;
 
        dst = &lat_buf->ts_info;
-       v4l2_m2m_buf_copy_metadata(src, dst, true);
+       v4l2_m2m_buf_copy_metadata(src, dst);
        return 0;
 }
 
@@ -1652,7 +1652,7 @@ static int vdec_vp9_slice_setup_core_to_dst_buf(struct vdec_vp9_slice_instance *
        if (!dst)
                return -EINVAL;
 
-       v4l2_m2m_buf_copy_metadata(&lat_buf->ts_info, dst, true);
+       v4l2_m2m_buf_copy_metadata(&lat_buf->ts_info, dst);
        return 0;
 }
 
index 45f8f69048679fba515a3ad0ba8b8142a5e62d16..2a2211671fd964dca8bda57ef9ca8a855d51293f 100644 (file)
@@ -776,7 +776,7 @@ static int tegra_vde_h264_setup_frames(struct tegra_ctx *ctx,
         * If userspace doesn't tell us frame's type, then we will try decode
         * as-is.
         */
-       v4l2_m2m_buf_copy_metadata(src, dst, true);
+       v4l2_m2m_buf_copy_metadata(src, dst);
 
        if (h->decode_params->flags & V4L2_H264_DECODE_PARAM_FLAG_BFRAME)
                tb->b_frame = true;
index 035081c4223be7d5bd7a52be24171c6eb760a3f1..4aaf9c3fff5397f0441944ee926f2c8ba6fc864a 100644 (file)
@@ -1430,7 +1430,7 @@ static void dw100_start(struct dw100_ctx *ctx, struct vb2_v4l2_buffer *in_vb,
                                V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE),
                in_vb->sequence, out_vb->sequence);
 
-       v4l2_m2m_buf_copy_metadata(in_vb, out_vb, true);
+       v4l2_m2m_buf_copy_metadata(in_vb, out_vb);
 
        /* Now, let's deal with hardware ... */
        dw100_hw_master_bus_disable(dw_dev);
index d41fa4c3139b62a41cbb0f8187b303e0fe58f42a..9e4a813489c009dc6d663d12b30572b89cc2ea0f 100644 (file)
@@ -1537,7 +1537,7 @@ static void mxc_jpeg_device_run(void *priv)
        src_buf->sequence = q_data_out->sequence++;
        dst_buf->sequence = q_data_cap->sequence++;
 
-       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf, true);
+       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf);
 
        jpeg_src_buf = vb2_to_mxc_buf(&src_buf->vb2_buf);
        if (q_data_cap->fmt->mem_planes != dst_buf->vb2_buf.num_planes) {
index df14f12b3ad286f1670123c54efb36b06f691c3e..f425ac7868547da401e86ce5a9b70a9890e72541 100644 (file)
@@ -107,7 +107,7 @@ static void mxc_isi_m2m_frame_write_done(struct mxc_isi_pipe *pipe, u32 status)
        src_vbuf = v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx);
        dst_vbuf = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
 
-       v4l2_m2m_buf_copy_metadata(src_vbuf, dst_vbuf, false);
+       v4l2_m2m_buf_copy_metadata(src_vbuf, dst_vbuf);
 
        src_vbuf->sequence = ctx->queues.out.sequence++;
        dst_vbuf->sequence = ctx->queues.cap.sequence++;
index eb9c556a105caca834892c7792fafdc1e196f00c..43f6a8d9938111de88f9f5c31185cda742d4cfb3 100644 (file)
@@ -75,7 +75,7 @@ static irqreturn_t rga_isr(int irq, void *prv)
                WARN_ON(!src);
                WARN_ON(!dst);
 
-               v4l2_m2m_buf_copy_metadata(src, dst, true);
+               v4l2_m2m_buf_copy_metadata(src, dst);
 
                dst->sequence = ctx->csequence++;
 
index 6e606d73ff5194c854b279d3c476cb0ed94c5c0c..cb02c6988602119e9aa1e129cec0437e08f75502 100644 (file)
@@ -783,7 +783,7 @@ void rkvdec_run_preamble(struct rkvdec_ctx *ctx, struct rkvdec_run *run)
        if (src_req)
                v4l2_ctrl_request_setup(src_req, &ctx->ctrl_hdl);
 
-       v4l2_m2m_buf_copy_metadata(run->bufs.src, run->bufs.dst, true);
+       v4l2_m2m_buf_copy_metadata(run->bufs.src, run->bufs.dst);
 }
 
 void rkvdec_run_postamble(struct rkvdec_ctx *ctx, struct rkvdec_run *run)
index 30544ceca42c157506e885e0f22a1ed6216abb3a..72488aa922fcca11628da4b004e1ed3a544037ba 100644 (file)
@@ -485,7 +485,7 @@ static void device_run(void *prv)
 
        src->sequence = frm_out->sequence++;
        dst->sequence = frm_cap->sequence++;
-       v4l2_m2m_buf_copy_metadata(src, dst, true);
+       v4l2_m2m_buf_copy_metadata(src, dst);
 
        if (clk_enable(dev->gate))
                goto end;
index eb519afb30ca10c6f4370626d0dce9e7183b28e5..7c4dd1ac772d9ed877b2fd1157072f71f8fea0e1 100644 (file)
@@ -71,7 +71,7 @@ static void deinterlace_device_run(void *priv)
        src = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx);
        dst = v4l2_m2m_next_dst_buf(ctx->fh.m2m_ctx);
 
-       v4l2_m2m_buf_copy_metadata(src, dst, true);
+       v4l2_m2m_buf_copy_metadata(src, dst);
 
        deinterlace_write(dev, DEINTERLACE_MOD_ENABLE,
                          DEINTERLACE_MOD_ENABLE_EN);
index 89992feaab6082b438eec189c0de93568d09f911..2deab920884a75220f320a4381c02fb7703756b9 100644 (file)
@@ -70,7 +70,7 @@ static void rotate_device_run(void *priv)
        src = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx);
        dst = v4l2_m2m_next_dst_buf(ctx->fh.m2m_ctx);
 
-       v4l2_m2m_buf_copy_metadata(src, dst, true);
+       v4l2_m2m_buf_copy_metadata(src, dst);
 
        val = ROTATE_GLB_CTL_MODE(ROTATE_MODE_COPY_ROTATE);
        if (ctx->hflip)
index e0c11fe8b55cac652e27092093d03e4a9bd496b5..60b95b5d8565fddbd9c3eaa229559fffc1c19afa 100644 (file)
@@ -183,7 +183,7 @@ static void device_run(void *priv)
        if (ret)
                goto err_cancel_job;
 
-       v4l2_m2m_buf_copy_metadata(src, dst, true);
+       v4l2_m2m_buf_copy_metadata(src, dst);
 
        if (ctx->codec_ops->run(ctx))
                goto err_cancel_job;
index 9dc32c593427687ecd80595818bb4913c0e9e670..a7ab668ce70b89423c2cf1440e340961ebc26b9d 100644 (file)
@@ -421,7 +421,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, false);
+       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf);
 
        spin_lock(ctx->lock);
        if (!ctx->comp_has_next_frame &&
@@ -555,7 +555,7 @@ static void set_last_buffer(struct vb2_v4l2_buffer *dst_buf,
        vb2_set_plane_payload(&dst_buf->vb2_buf, 0, 0);
        dst_buf->sequence = q_dst->sequence++;
 
-       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf, !ctx->is_enc);
+       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf);
        dst_buf->flags |= V4L2_BUF_FLAG_LAST;
        v4l2_m2m_buf_done(dst_buf, VB2_BUF_STATE_DONE);
 }
index 9d921feaf8249e73c7e8008c116b2cd8a87d7efd..c33c18ea5210044ea1abc79ccacd49c1f930b61a 100644 (file)
@@ -477,7 +477,7 @@ static int device_process(struct vim2m_ctx *ctx,
 
        out_vb->sequence = q_data_out->sequence++;
        in_vb->sequence = q_data_in->sequence++;
-       v4l2_m2m_buf_copy_metadata(in_vb, out_vb, true);
+       v4l2_m2m_buf_copy_metadata(in_vb, out_vb);
 
        if (ctx->mode & MEM2MEM_VFLIP) {
                start = height - 1;
index 6a9639bd4d61ad6aaf5b636998a506dcbd1f45a8..d90b79de8384ad209779d59a4d320d7a74a774c5 100644 (file)
@@ -572,7 +572,7 @@ void visl_device_run(void *priv)
        if (src_req)
                v4l2_ctrl_request_setup(src_req, &ctx->hdl);
 
-       v4l2_m2m_buf_copy_metadata(run.src, run.dst, true);
+       v4l2_m2m_buf_copy_metadata(run.src, run.dst);
        run.dst->sequence = ctx->q_data[V4L2_M2M_DST].sequence++;
        run.src->sequence = ctx->q_data[V4L2_M2M_SRC].sequence++;
        run.dst->field = ctx->decoded_fmt.fmt.pix.field;
index 9fa8833e445faf1b0d82a3d0d8a29f896f517c3c..fec93c1a9231712467053a1763e56891772b4e3e 100644 (file)
@@ -1288,14 +1288,9 @@ void v4l2_m2m_buf_queue(struct v4l2_m2m_ctx *m2m_ctx,
 EXPORT_SYMBOL_GPL(v4l2_m2m_buf_queue);
 
 void v4l2_m2m_buf_copy_metadata(const struct vb2_v4l2_buffer *out_vb,
-                               struct vb2_v4l2_buffer *cap_vb,
-                               bool copy_frame_flags)
+                               struct vb2_v4l2_buffer *cap_vb)
 {
-       u32 mask = V4L2_BUF_FLAG_TIMECODE | V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
-
-       if (copy_frame_flags)
-               mask |= V4L2_BUF_FLAG_KEYFRAME | V4L2_BUF_FLAG_PFRAME |
-                       V4L2_BUF_FLAG_BFRAME;
+       const u32 mask = V4L2_BUF_FLAG_TIMECODE | V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
 
        cap_vb->vb2_buf.timestamp = out_vb->vb2_buf.timestamp;
 
index 1869c5792ecb46682491ecbf33674c6044915261..0a27330f9790283e2bf646d7dfefa5c7306fe234 100644 (file)
@@ -99,7 +99,7 @@ static void ipu_ic_pp_complete(struct ipu_image_convert_run *run, void *_ctx)
        src_buf = v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx);
        dst_buf = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
 
-       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf, true);
+       v4l2_m2m_buf_copy_metadata(src_buf, dst_buf);
 
        src_buf->sequence = ctx->sequence++;
        dst_buf->sequence = src_buf->sequence;
index fbbf9e6f0f50c294e8a002945824486ccce27371..9f8b0555b7dc5be2cb261734d08ef88827039d94 100644 (file)
@@ -90,7 +90,7 @@ void cedrus_device_run(void *priv)
                break;
        }
 
-       v4l2_m2m_buf_copy_metadata(run.src, run.dst, true);
+       v4l2_m2m_buf_copy_metadata(run.src, run.dst);
 
        cedrus_dst_format_set(dev, &ctx->dst_fmt);
 
index c82445929c68d82219a3ad557f7d1ca889ac555b..bf6a09a04dcf8407ba770bf6d960aa70a909b07e 100644 (file)
@@ -845,19 +845,13 @@ v4l2_m2m_dst_buf_remove_by_idx(struct v4l2_m2m_ctx *m2m_ctx, unsigned int idx)
  *
  * @out_vb: the output buffer that is the source of the metadata.
  * @cap_vb: the capture buffer that will receive the metadata.
- * @copy_frame_flags: copy the KEY/B/PFRAME flags as well.
  *
  * This helper function copies the timestamp, timecode (if the TIMECODE
- * buffer flag was set), field and the TIMECODE, KEYFRAME, BFRAME, PFRAME
- * and TSTAMP_SRC_MASK flags from @out_vb to @cap_vb.
- *
- * If @copy_frame_flags is false, then the KEYFRAME, BFRAME and PFRAME
- * flags are not copied. This is typically needed for encoders that
- * set this bits explicitly.
+ * buffer flag was set), field, and the TIMECODE and TSTAMP_SRC_MASK flags from
+ * @out_vb to @cap_vb.
  */
 void v4l2_m2m_buf_copy_metadata(const struct vb2_v4l2_buffer *out_vb,
-                               struct vb2_v4l2_buffer *cap_vb,
-                               bool copy_frame_flags);
+                               struct vb2_v4l2_buffer *cap_vb);
 
 /* v4l2 request helper */