Hardware can parse the slice synatx to get nal information in
scp, needn't to parse it in kernel again.
Signed-off-by: Yunfei Dong <yunfei.dong@mediatek.com>
---
.../vcodec/decoder/vdec/vdec_h264_req_multi_if.c | 13 ++-----------
1 file changed, 2 insertions(+), 11 deletions(-)
diff --git a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_req_multi_if.c b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_req_multi_if.c
index d3f8d62238c0..76b96924a2a7 100644
--- a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_req_multi_if.c
+++ b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_req_multi_if.c
@@ -634,11 +634,10 @@ static int vdec_h264_slice_lat_decode(void *h_vdec, struct mtk_vcodec_mem *bs,
struct vdec_h264_slice_inst *inst = h_vdec;
struct vdec_vpu_inst *vpu = &inst->vpu;
struct mtk_video_dec_buf *src_buf_info;
- int nal_start_idx, err, timeout = 0;
+ int err, timeout = 0;
unsigned int data[2];
struct vdec_lat_buf *lat_buf;
struct vdec_h264_slice_share_info *share_info;
- unsigned char *buf;
if (vdec_msg_queue_init(&inst->ctx->msg_queue, inst->ctx,
vdec_h264_slice_core_decode,
@@ -662,14 +661,6 @@ static int vdec_h264_slice_lat_decode(void *h_vdec, struct mtk_vcodec_mem *bs,
share_info = lat_buf->private_data;
src_buf_info = container_of(bs, struct mtk_video_dec_buf, bs_buffer);
- buf = (unsigned char *)bs->va;
- nal_start_idx = mtk_vdec_h264_find_start_code(buf, bs->size);
- if (nal_start_idx < 0) {
- err = -EINVAL;
- goto err_free_fb_out;
- }
-
- inst->vsi->dec.nal_info = buf[nal_start_idx];
lat_buf->vb2_v4l2_src = &src_buf_info->m2m_buf.vb;
v4l2_m2m_buf_copy_metadata(&src_buf_info->m2m_buf.vb, &lat_buf->ts_info, true);
@@ -677,7 +668,7 @@ static int vdec_h264_slice_lat_decode(void *h_vdec, struct mtk_vcodec_mem *bs,
if (err)
goto err_free_fb_out;
- vdec_h264_insert_startcode(inst->ctx->dev, buf, &bs->size,
+ vdec_h264_insert_startcode(inst->ctx->dev, bs->va, &bs->size,
&share_info->h264_slice_params.pps);
*res_chg = inst->resolution_changed;
--
2.46.0
On Mon, Oct 14, 2024 at 3:33 PM Yunfei Dong <yunfei.dong@mediatek.com> wrote: > > Hardware can parse the slice synatx to get nal information in > scp, needn't to parse it in kernel again. Does this apply to all existing shipped SCP firmware? If not, please put this behind a vdec firmware flag. ChenYu > Signed-off-by: Yunfei Dong <yunfei.dong@mediatek.com> > --- > .../vcodec/decoder/vdec/vdec_h264_req_multi_if.c | 13 ++----------- > 1 file changed, 2 insertions(+), 11 deletions(-) > > diff --git a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_req_multi_if.c b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_req_multi_if.c > index d3f8d62238c0..76b96924a2a7 100644 > --- a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_req_multi_if.c > +++ b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_req_multi_if.c > @@ -634,11 +634,10 @@ static int vdec_h264_slice_lat_decode(void *h_vdec, struct mtk_vcodec_mem *bs, > struct vdec_h264_slice_inst *inst = h_vdec; > struct vdec_vpu_inst *vpu = &inst->vpu; > struct mtk_video_dec_buf *src_buf_info; > - int nal_start_idx, err, timeout = 0; > + int err, timeout = 0; > unsigned int data[2]; > struct vdec_lat_buf *lat_buf; > struct vdec_h264_slice_share_info *share_info; > - unsigned char *buf; > > if (vdec_msg_queue_init(&inst->ctx->msg_queue, inst->ctx, > vdec_h264_slice_core_decode, > @@ -662,14 +661,6 @@ static int vdec_h264_slice_lat_decode(void *h_vdec, struct mtk_vcodec_mem *bs, > share_info = lat_buf->private_data; > src_buf_info = container_of(bs, struct mtk_video_dec_buf, bs_buffer); > > - buf = (unsigned char *)bs->va; > - nal_start_idx = mtk_vdec_h264_find_start_code(buf, bs->size); > - if (nal_start_idx < 0) { > - err = -EINVAL; > - goto err_free_fb_out; > - } > - > - inst->vsi->dec.nal_info = buf[nal_start_idx]; > lat_buf->vb2_v4l2_src = &src_buf_info->m2m_buf.vb; > v4l2_m2m_buf_copy_metadata(&src_buf_info->m2m_buf.vb, &lat_buf->ts_info, true); > > @@ -677,7 +668,7 @@ static int vdec_h264_slice_lat_decode(void *h_vdec, struct mtk_vcodec_mem *bs, > if (err) > goto err_free_fb_out; > > - vdec_h264_insert_startcode(inst->ctx->dev, buf, &bs->size, > + vdec_h264_insert_startcode(inst->ctx->dev, bs->va, &bs->size, > &share_info->h264_slice_params.pps); > > *res_chg = inst->resolution_changed; > -- > 2.46.0 > >
Hi Chen-Yu, Thanks for your help to review the patch. On Tue, 2024-10-15 at 15:58 +0800, Chen-Yu Tsai wrote: > > External email : Please do not click links or open attachments until > you have verified the sender or the content. > On Mon, Oct 14, 2024 at 3:33 PM Yunfei Dong < > yunfei.dong@mediatek.com> wrote: > > > > Hardware can parse the slice synatx to get nal information in > > scp, needn't to parse it in kernel again. > > Does this apply to all existing shipped SCP firmware? If not, please > put this behind a vdec firmware flag. > Need to remove the parse driver for extend driver, keep the logic for non extend architecture. > ChenYu > Best Regards, Yunfei Dong > > > Signed-off-by: Yunfei Dong <yunfei.dong@mediatek.com> > > --- > > .../vcodec/decoder/vdec/vdec_h264_req_multi_if.c | 13 ++------- > ---- > > 1 file changed, 2 insertions(+), 11 deletions(-) > > > > diff --git > a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_req_m > ulti_if.c > b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_req_m > ulti_if.c > > index d3f8d62238c0..76b96924a2a7 100644 > > --- > a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_req_m > ulti_if.c > > +++ > b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_req_m > ulti_if.c > > @@ -634,11 +634,10 @@ static int vdec_h264_slice_lat_decode(void > *h_vdec, struct mtk_vcodec_mem *bs, > > struct vdec_h264_slice_inst *inst = h_vdec; > > struct vdec_vpu_inst *vpu = &inst->vpu; > > struct mtk_video_dec_buf *src_buf_info; > > - int nal_start_idx, err, timeout = 0; > > + int err, timeout = 0; > > unsigned int data[2]; > > struct vdec_lat_buf *lat_buf; > > struct vdec_h264_slice_share_info *share_info; > > - unsigned char *buf; > > > > if (vdec_msg_queue_init(&inst->ctx->msg_queue, inst->ctx, > > vdec_h264_slice_core_decode, > > @@ -662,14 +661,6 @@ static int vdec_h264_slice_lat_decode(void > *h_vdec, struct mtk_vcodec_mem *bs, > > share_info = lat_buf->private_data; > > src_buf_info = container_of(bs, struct mtk_video_dec_buf, > bs_buffer); > > > > - buf = (unsigned char *)bs->va; > > - nal_start_idx = mtk_vdec_h264_find_start_code(buf, bs- > >size); > > - if (nal_start_idx < 0) { > > - err = -EINVAL; > > - goto err_free_fb_out; > > - } > > - > > - inst->vsi->dec.nal_info = buf[nal_start_idx]; > > lat_buf->vb2_v4l2_src = &src_buf_info->m2m_buf.vb; > > v4l2_m2m_buf_copy_metadata(&src_buf_info->m2m_buf.vb, > &lat_buf->ts_info, true); > > > > @@ -677,7 +668,7 @@ static int vdec_h264_slice_lat_decode(void > *h_vdec, struct mtk_vcodec_mem *bs, > > if (err) > > goto err_free_fb_out; > > > > - vdec_h264_insert_startcode(inst->ctx->dev, buf, &bs->size, > > + vdec_h264_insert_startcode(inst->ctx->dev, bs->va, &bs- > >size, > > &share_info- > >h264_slice_params.pps); > > > > *res_chg = inst->resolution_changed; > > -- > > 2.46.0 > > > >
© 2016 - 2024 Red Hat, Inc.