Message ID | 20241014073314.18409-3-yunfei.dong@mediatek.com |
---|---|
State | New |
Headers | show |
Series | media: mediatek: vcodec: support h264 extend vsi | expand |
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 > > > >
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;
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(-)