[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <YSVAfbC93/PzPuuZ@google.com>
Date: Wed, 25 Aug 2021 02:54:53 +0800
From: Tzung-Bi Shih <tzungbi@...gle.com>
To: Irui Wang <irui.wang@...iatek.com>
Cc: Hans Verkuil <hverkuil-cisco@...all.nl>,
Tzung-Bi Shih <tzungbi@...omium.org>,
Alexandre Courbot <acourbot@...omium.org>,
Tiffany Lin <tiffany.lin@...iatek.com>,
Andrew-CT Chen <andrew-ct.chen@...iatek.com>,
Mauro Carvalho Chehab <mchehab@...nel.org>,
Rob Herring <robh+dt@...nel.org>,
Matthias Brugger <matthias.bgg@...il.com>,
Tomasz Figa <tfiga@...gle.com>, Yong Wu <yong.wu@...iatek.com>,
Hsin-Yi Wang <hsinyi@...omium.org>,
Maoguang Meng <maoguang.meng@...iatek.com>,
Longfei Wang <longfei.wang@...iatek.com>,
Yunfei Dong <yunfei.dong@...iatek.com>,
Fritz Koenig <frkoenig@...omium.org>,
linux-media@...r.kernel.org, devicetree@...r.kernel.org,
linux-kernel@...r.kernel.org, linux-arm-kernel@...ts.infradead.org,
srv_heupstream@...iatek.com, linux-mediatek@...ts.infradead.org,
Project_Global_Chrome_Upstream_Group@...iatek.com
Subject: Re: [PATCH 6/9] media: mtk-vcodec: Add new venc drv interface for
frame_racing mode
On Mon, Aug 16, 2021 at 06:59:31PM +0800, Irui Wang wrote:
> Frame-racing mode encoding need more venc working buffers, it
> will break the compatibility if we just add venc_vsi in AP-Kernel
> but not in firmware, so add a new venc driver interface to
> distinguish the sigle_core_mode and frame_racing mode.
>
> The new driver interface can be used for different codecs in
> the future.
The patch contains more code than the commit message explains that I couldn't understand. Only find some nits.
> --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_util.c
> +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_util.c
> @@ -9,6 +9,7 @@
>
> #include "mtk_vcodec_drv.h"
> #include "mtk_vcodec_util.h"
> +#include "mtk_vcodec_enc_hw.h"
Please try to maintain the order.
> +void __iomem *mtk_get_venc_comp_reg_addr(struct mtk_vcodec_ctx *data,
> + unsigned int hw_id)
> +{
> + struct mtk_vcodec_ctx *ctx = (struct mtk_vcodec_ctx *)data;
typeof(ctx) == typeof(data), rename the function argument 'data' to 'ctx'.
> +static int venc_alloc_work_buf(struct venc_common_inst *inst)
> +{
> + int i;
> + int ret = 0;
It doesn't need to be initialized. See comment below.
> + mtk_vcodec_debug_leave(inst);
> +
> + return ret;
It is more clear if just return 0 here. In the meantime, ret doesn't need to be initialized.
> +static unsigned int venc_wait_comp_done(struct venc_common_inst *inst,
> + unsigned int hw_id)
> +{
> + unsigned int irq_status = 0;
> + struct mtk_vcodec_ctx *ctx = (struct mtk_vcodec_ctx *)inst->ctx;
No need to cast.
> +static int venc_encode_sps(struct venc_common_inst *inst,
> + struct mtk_vcodec_mem *bs_buf,
> + unsigned int *bs_size)
> +{
> + int ret = 0;
Same.
> + *bs_size = venc_read_reg(inst, VENC_PIC_BITSTREAM_BYTE_CNT,
> + MTK_VENC_CORE0);
> + mtk_vcodec_debug(inst, "bs size %d <-", *bs_size);
> +
> + return ret;
Same.
> +static int venc_encode_pps(struct venc_common_inst *inst,
> + struct mtk_vcodec_mem *bs_buf,
> + unsigned int *bs_size)
> +{
> + int ret = 0;
Same.
> + *bs_size = venc_read_reg(inst, VENC_PIC_BITSTREAM_BYTE_CNT,
> + MTK_VENC_CORE0);
> + mtk_vcodec_debug(inst, "bs size %d <-", *bs_size);
> +
> + return ret;
Same.
> +static int venc_encode_header(struct venc_common_inst *inst,
> + struct mtk_vcodec_mem *bs_buf,
> + unsigned int *bs_size)
> +{
> + int ret = 0;
Same.
> + memcpy(bs_buf->va + bs_size_sps, inst->pps_buf.va, bs_size_pps);
> + *bs_size = bs_size_sps + bs_size_pps;
> +
> + return ret;
Same.
> +static int venc_encode_frame(struct venc_common_inst *inst,
> + struct venc_frm_buf *frm_buf,
> + struct mtk_vcodec_mem *bs_buf,
> + unsigned int *bs_size,
> + int hw_id)
> +{
> + int ret = 0;
Same.
> + ++inst->frm_cnt;
> + mtk_vcodec_debug(inst, "frm %d bs_size %d key_frm %d <-",
> + inst->frm_cnt, *bs_size, inst->vpu_inst.is_key_frm);
> +
> + return ret;
Same.
> +static void h264_encode_filler(struct venc_common_inst *inst, void *buf,
> + int size)
> +{
> + unsigned char *p = buf;
> +
> + if (size < H264_FILLER_MARKER_SIZE) {
> + mtk_vcodec_err(inst, "filler size too small %d", size);
> + return;
> + }
> +
> + memcpy(p, h264_filler_marker, ARRAY_SIZE(h264_filler_marker));
Replace ARRAY_SIZE(h264_filler_marker) to H264_FILLER_MARKER_SIZE.
> +static int venc_init(struct mtk_vcodec_ctx *ctx)
> +{
> + int i;
> + int ret = 0;
> + struct venc_common_inst *inst;
> +
> + inst = kzalloc(sizeof(*inst), GFP_KERNEL);
> + if (!inst)
> + return -ENOMEM;
> +
> + inst->ctx = ctx;
> + inst->vpu_inst.ctx = ctx;
> + inst->vpu_inst.id = SCP_IPI_VENC_H264;
> +
> + mtk_vcodec_debug_enter(inst);
> +
> + ret = vpu_enc_init(&inst->vpu_inst);
> +
> + inst->vsi = (struct venc_vsi *)inst->vpu_inst.vsi;
No need to cast.
> +static int venc_encode(void *handle,
> + enum venc_start_opt opt,
> + struct venc_frm_buf *frm_buf,
> + struct mtk_vcodec_mem *bs_buf,
> + struct venc_done_result *result)
> +{
> + int ret;
> + struct venc_common_inst *inst = (struct venc_common_inst *)handle;
No need to cast.
> + default:
> + mtk_vcodec_err(inst, "venc_start_opt %d not supported", opt);
> + return -EINVAL;
> + }
> +
> + return ret;
It is more clear if just return 0 here.
> +static int venc_set_param(void *handle,
> + enum venc_set_param_type type,
> + struct venc_enc_param *enc_prm)
> +{
> + int ret = 0;
> + struct venc_common_inst *inst = (struct venc_common_inst *)handle;
No need to cast.
> +static int venc_deinit(void *handle)
> +{
> + int ret = 0;
Same.
> + struct venc_common_inst *inst = (struct venc_common_inst *)handle;
No need to cast.
> + mtk_vcodec_debug_leave(inst);
> + kfree(inst);
> +
> + return ret;
Same.
Powered by blists - more mailing lists