From: yunfei.dong <yunfei.dong@mediatek.com>
To: Hans Verkuil <hverkuil@xs4all.nl>
Cc: tiffany.lin@mediatek.com, linux-mediatek@lists.infradead.org,
linux-arm-kernel@lists.infradead.org, linux-firmware@kernel.org,
linux-media@vger.kernel.org
Subject: Re: [PATCH] media: mtk-vcodec: enlarge struct vdec_pic_info fields
Date: Mon, 1 Apr 2019 17:39:23 +0800 [thread overview]
Message-ID: <1554111563.15631.20.camel@mhfsdcap03> (raw)
In-Reply-To: <3e8cbd19-e10e-3647-03e4-aa5786b1b910@xs4all.nl>
Dear Hans,
Thanks for your help.
Just ignore this patch, and v3 is ok.
Best Regards,
Yunfei Dong
On Mon, 2019-04-01 at 11:32 +0200, Hans Verkuil wrote:
> On 4/1/19 11:28 AM, yunfei.dong wrote:
> > Dear Hans,
> >
> > I am very sorry.
> >
> > This is not v4.
> > And I just want to send vpu firmware patch(vpu_d.bin) in github, it
> > looks that I sent a error patch.
> >
> > Sorry to bother you.
>
> Just to be clear: I can ignore this patch?
>
> Regards,
>
> Hans
>
> >
> > Best Regards,
> > Yunfei Dong
> >
> >
> > On Mon, 2019-04-01 at 11:06 +0200, Hans Verkuil wrote:
> >> On 4/1/19 10:18 AM, Yunfei Dong wrote:
> >>> Enlarge the plane number to support more complex case
> >>> and add the support for fmt change case.
> >>
> >> Is this v4 of this patch? What are the changes since v3?
> >>
> >> Regards,
> >>
> >> Hans
> >>
> >>>
> >>> Change-Id: If61f994b8853f370967fb81b92b407e2c2ae94b8
> >>> Signed-off-by: Yunfei Dong <yunfei.dong@mediatek.com>
> >>> ---
> >>> drivers/media/platform/mtk-vcodec/mtk_vcodec_dec.c | 62 +++++++++++++-------
> >>> drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h | 16 ++---
> >>> .../media/platform/mtk-vcodec/vdec/vdec_h264_if.c | 4 +-
> >>> .../media/platform/mtk-vcodec/vdec/vdec_vp8_if.c | 4 +-
> >>> .../media/platform/mtk-vcodec/vdec/vdec_vp9_if.c | 11 ++--
> >>> 5 files changed, 57 insertions(+), 40 deletions(-)
> >>>
> >>> diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec.c
> >>> index d022c65..43587c0 100644
> >>> --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec.c
> >>> +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec.c
> >>> @@ -129,9 +129,9 @@ static struct vb2_buffer *get_display_buffer(struct mtk_vcodec_ctx *ctx)
> >>> mutex_lock(&ctx->lock);
> >>> if (dstbuf->used) {
> >>> vb2_set_plane_payload(&dstbuf->vb.vb2_buf, 0,
> >>> - ctx->picinfo.y_bs_sz);
> >>> + ctx->picinfo.fb_sz[0]);
> >>> vb2_set_plane_payload(&dstbuf->vb.vb2_buf, 1,
> >>> - ctx->picinfo.c_bs_sz);
> >>> + ctx->picinfo.fb_sz[1]);
> >>>
> >>> dstbuf->ready_to_display = true;
> >>>
> >>> @@ -278,6 +278,27 @@ static void mtk_vdec_flush_decoder(struct mtk_vcodec_ctx *ctx)
> >>> clean_free_buffer(ctx);
> >>> }
> >>>
> >>> +static void mtk_vdec_update_fmt(struct mtk_vcodec_ctx *ctx,
> >>> + unsigned int pixelformat)
> >>> +{
> >>> + struct mtk_video_fmt *fmt;
> >>> + struct mtk_q_data *dst_q_data;
> >>> + unsigned int k;
> >>> +
> >>> + dst_q_data = &ctx->q_data[MTK_Q_DATA_DST];
> >>> + for (k = 0; k < NUM_FORMATS; k++) {
> >>> + fmt = &mtk_video_formats[k];
> >>> + if (fmt->fourcc == pixelformat) {
> >>> + mtk_v4l2_debug(1, "Update cap fourcc(%d -> %d)",
> >>> + dst_q_data->fmt.fourcc, pixelformat);
> >>> + dst_q_data->fmt = fmt;
> >>> + return;
> >>> + }
> >>> + }
> >>> +
> >>> + mtk_v4l2_err("Cannot get fourcc(%d), using init value", pixelformat);
> >>> +}
> >>> +
> >>> static int mtk_vdec_pic_info_update(struct mtk_vcodec_ctx *ctx)
> >>> {
> >>> unsigned int dpbsize = 0;
> >>> @@ -299,6 +320,10 @@ static int mtk_vdec_pic_info_update(struct mtk_vcodec_ctx *ctx)
> >>> return -EINVAL;
> >>> }
> >>>
> >>> + if (ctx->last_decoded_picinfo.cap_fourcc != ctx->picinfo.cap_fourcc &&
> >>> + ctx->picinfo.cap_fourcc != 0)
> >>> + mtk_vdec_update_fmt(ctx, ctx->picinfo.cap_fourcc);
> >>> +
> >>> if ((ctx->last_decoded_picinfo.pic_w == ctx->picinfo.pic_w) ||
> >>> (ctx->last_decoded_picinfo.pic_h == ctx->picinfo.pic_h))
> >>> return 0;
> >>> @@ -352,11 +377,11 @@ static void mtk_vdec_worker(struct work_struct *work)
> >>> pfb = &dst_buf_info->frame_buffer;
> >>> pfb->base_y.va = vb2_plane_vaddr(&dst_buf->vb2_buf, 0);
> >>> pfb->base_y.dma_addr = vb2_dma_contig_plane_dma_addr(&dst_buf->vb2_buf, 0);
> >>> - pfb->base_y.size = ctx->picinfo.y_bs_sz + ctx->picinfo.y_len_sz;
> >>> + pfb->base_y.size = ctx->picinfo.fb_sz[0];
> >>>
> >>> pfb->base_c.va = vb2_plane_vaddr(&dst_buf->vb2_buf, 1);
> >>> pfb->base_c.dma_addr = vb2_dma_contig_plane_dma_addr(&dst_buf->vb2_buf, 1);
> >>> - pfb->base_c.size = ctx->picinfo.c_bs_sz + ctx->picinfo.c_len_sz;
> >>> + pfb->base_c.size = ctx->picinfo.fb_sz[1];
> >>> pfb->status = 0;
> >>> mtk_v4l2_debug(3, "===>[%d] vdec_if_decode() ===>", ctx->id);
> >>>
> >>> @@ -976,14 +1001,13 @@ static int vidioc_vdec_g_fmt(struct file *file, void *priv,
> >>> * So we just return picinfo yet, and update picinfo in
> >>> * stop_streaming hook function
> >>> */
> >>> - q_data->sizeimage[0] = ctx->picinfo.y_bs_sz +
> >>> - ctx->picinfo.y_len_sz;
> >>> - q_data->sizeimage[1] = ctx->picinfo.c_bs_sz +
> >>> - ctx->picinfo.c_len_sz;
> >>> + q_data->sizeimage[0] = ctx->picinfo.fb_sz[0];
> >>> + q_data->sizeimage[1] = ctx->picinfo.fb_sz[1];
> >>> q_data->bytesperline[0] = ctx->last_decoded_picinfo.buf_w;
> >>> q_data->bytesperline[1] = ctx->last_decoded_picinfo.buf_w;
> >>> q_data->coded_width = ctx->picinfo.buf_w;
> >>> q_data->coded_height = ctx->picinfo.buf_h;
> >>> + ctx->last_decoded_picinfo.cap_fourcc = q_data->fmt->fourcc;
> >>>
> >>> /*
> >>> * Width and height are set to the dimensions
> >>> @@ -1103,10 +1127,11 @@ static void vb2ops_vdec_buf_queue(struct vb2_buffer *vb)
> >>> struct mtk_vcodec_mem src_mem;
> >>> bool res_chg = false;
> >>> int ret = 0;
> >>> - unsigned int dpbsize = 1;
> >>> + unsigned int dpbsize = 1, i = 0;
> >>> struct mtk_vcodec_ctx *ctx = vb2_get_drv_priv(vb->vb2_queue);
> >>> struct vb2_v4l2_buffer *vb2_v4l2 = NULL;
> >>> struct mtk_video_dec_buf *buf = NULL;
> >>> + struct mtk_q_data *dst_q_data;
> >>>
> >>> mtk_v4l2_debug(3, "[%d] (%d) id=%d, vb=%p",
> >>> ctx->id, vb->vb2_queue->type,
> >>> @@ -1194,21 +1219,18 @@ static void vb2ops_vdec_buf_queue(struct vb2_buffer *vb)
> >>> }
> >>>
> >>> ctx->last_decoded_picinfo = ctx->picinfo;
> >>> - ctx->q_data[MTK_Q_DATA_DST].sizeimage[0] =
> >>> - ctx->picinfo.y_bs_sz +
> >>> - ctx->picinfo.y_len_sz;
> >>> - ctx->q_data[MTK_Q_DATA_DST].bytesperline[0] =
> >>> - ctx->picinfo.buf_w;
> >>> - ctx->q_data[MTK_Q_DATA_DST].sizeimage[1] =
> >>> - ctx->picinfo.c_bs_sz +
> >>> - ctx->picinfo.c_len_sz;
> >>> - ctx->q_data[MTK_Q_DATA_DST].bytesperline[1] = ctx->picinfo.buf_w;
> >>> + dst_q_data = &ctx->q_data[MTK_Q_DATA_DST];
> >>> + for (i = 0; i < dst_q_data->fmt->num_planes; i++) {
> >>> + dst_q_data->sizeimage[i] = ctx->picinfo.fb_sz[i];
> >>> + dst_q_data->bytesperline[i] = ctx->picinfo.buf_w;
> >>> + }
> >>> +
> >>> mtk_v4l2_debug(2, "[%d] vdec_if_init() OK wxh=%dx%d pic wxh=%dx%d sz[0]=0x%x sz[1]=0x%x",
> >>> ctx->id,
> >>> ctx->picinfo.buf_w, ctx->picinfo.buf_h,
> >>> ctx->picinfo.pic_w, ctx->picinfo.pic_h,
> >>> - ctx->q_data[MTK_Q_DATA_DST].sizeimage[0],
> >>> - ctx->q_data[MTK_Q_DATA_DST].sizeimage[1]);
> >>> + dst_q_data->sizeimage[0],
> >>> + dst_q_data->sizeimage[1]);
> >>>
> >>> ret = vdec_if_get_param(ctx, GET_PARAM_DPB_SIZE, &dpbsize);
> >>> if (dpbsize == 0)
> >>> diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h b/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h
> >>> index e7e2a10..662a84b 100644
> >>> --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h
> >>> +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h
> >>> @@ -211,24 +211,20 @@ struct mtk_vcodec_pm {
> >>> * @pic_h: picture height
> >>> * @buf_w: picture buffer width (64 aligned up from pic_w)
> >>> * @buf_h: picture buffer heiht (64 aligned up from pic_h)
> >>> - * @y_bs_sz: Y bitstream size
> >>> - * @c_bs_sz: CbCr bitstream size
> >>> - * @y_len_sz: additional size required to store decompress information for y
> >>> - * plane
> >>> - * @c_len_sz: additional size required to store decompress information for cbcr
> >>> - * plane
> >>> + * @fb_sz: bitstream size of each plane
> >>> * E.g. suppose picture size is 176x144,
> >>> * buffer size will be aligned to 176x160.
> >>> + * @cap_fourcc: fourcc number(may changed when resolution change)
> >>> + * @reserved: align struct to 64-bit in order to adjust 32-bit and 64-bit os.
> >>> */
> >>> struct vdec_pic_info {
> >>> unsigned int pic_w;
> >>> unsigned int pic_h;
> >>> unsigned int buf_w;
> >>> unsigned int buf_h;
> >>> - unsigned int y_bs_sz;
> >>> - unsigned int c_bs_sz;
> >>> - unsigned int y_len_sz;
> >>> - unsigned int c_len_sz;
> >>> + unsigned int fb_sz[VIDEO_MAX_PLANES];
> >>> + unsigned int cap_fourcc;
> >>> + unsigned int reserved;
> >>> };
> >>>
> >>> /**
> >>> diff --git a/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_if.c b/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_if.c
> >>> index 02c960c..cdbcd69 100644
> >>> --- a/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_if.c
> >>> +++ b/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_if.c
> >>> @@ -253,8 +253,8 @@ static void get_pic_info(struct vdec_h264_inst *inst,
> >>> *pic = inst->vsi->pic;
> >>> mtk_vcodec_debug(inst, "pic(%d, %d), buf(%d, %d)",
> >>> pic->pic_w, pic->pic_h, pic->buf_w, pic->buf_h);
> >>> - mtk_vcodec_debug(inst, "Y(%d, %d), C(%d, %d)", pic->y_bs_sz,
> >>> - pic->y_len_sz, pic->c_bs_sz, pic->c_len_sz);
> >>> + mtk_vcodec_debug(inst, "fb size: Y(%d), C(%d)",
> >>> + pic->fb_sz[0], pic->fb_sz[1]);
> >>> }
> >>>
> >>> static void get_crop_info(struct vdec_h264_inst *inst, struct v4l2_rect *cr)
> >>> diff --git a/drivers/media/platform/mtk-vcodec/vdec/vdec_vp8_if.c b/drivers/media/platform/mtk-vcodec/vdec/vdec_vp8_if.c
> >>> index bac3723..ba79136 100644
> >>> --- a/drivers/media/platform/mtk-vcodec/vdec/vdec_vp8_if.c
> >>> +++ b/drivers/media/platform/mtk-vcodec/vdec/vdec_vp8_if.c
> >>> @@ -294,8 +294,8 @@ static void get_pic_info(struct vdec_vp8_inst *inst, struct vdec_pic_info *pic)
> >>>
> >>> mtk_vcodec_debug(inst, "pic(%d, %d), buf(%d, %d)",
> >>> pic->pic_w, pic->pic_h, pic->buf_w, pic->buf_h);
> >>> - mtk_vcodec_debug(inst, "Y(%d, %d), C(%d, %d)", pic->y_bs_sz,
> >>> - pic->y_len_sz, pic->c_bs_sz, pic->c_len_sz);
> >>> + mtk_vcodec_debug(inst, "fb size: Y(%d), C(%d)",
> >>> + pic->fb_sz[0], pic->fb_sz[1]);
> >>> }
> >>>
> >>> static void vp8_dec_finish(struct vdec_vp8_inst *inst)
> >>> diff --git a/drivers/media/platform/mtk-vcodec/vdec/vdec_vp9_if.c b/drivers/media/platform/mtk-vcodec/vdec/vdec_vp9_if.c
> >>> index bc8349b..6fe8320 100644
> >>> --- a/drivers/media/platform/mtk-vcodec/vdec/vdec_vp9_if.c
> >>> +++ b/drivers/media/platform/mtk-vcodec/vdec/vdec_vp9_if.c
> >>> @@ -702,10 +702,8 @@ static void init_all_fb_lists(struct vdec_vp9_inst *inst)
> >>>
> >>> static void get_pic_info(struct vdec_vp9_inst *inst, struct vdec_pic_info *pic)
> >>> {
> >>> - pic->y_bs_sz = inst->vsi->buf_sz_y_bs;
> >>> - pic->c_bs_sz = inst->vsi->buf_sz_c_bs;
> >>> - pic->y_len_sz = inst->vsi->buf_len_sz_y;
> >>> - pic->c_len_sz = inst->vsi->buf_len_sz_c;
> >>> + pic->fb_sz[0] = inst->vsi->buf_sz_y_bs + inst->vsi->buf_len_sz_y;
> >>> + pic->fb_sz[1] = inst->vsi->buf_sz_c_bs + inst->vsi->buf_len_sz_c;
> >>>
> >>> pic->pic_w = inst->vsi->pic_w;
> >>> pic->pic_h = inst->vsi->pic_h;
> >>> @@ -714,8 +712,9 @@ static void get_pic_info(struct vdec_vp9_inst *inst, struct vdec_pic_info *pic)
> >>>
> >>> mtk_vcodec_debug(inst, "pic(%d, %d), buf(%d, %d)",
> >>> pic->pic_w, pic->pic_h, pic->buf_w, pic->buf_h);
> >>> - mtk_vcodec_debug(inst, "Y(%d, %d), C(%d, %d)", pic->y_bs_sz,
> >>> - pic->y_len_sz, pic->c_bs_sz, pic->c_len_sz);
> >>> + mtk_vcodec_debug(inst, "fb size: Y(%d), C(%d)",
> >>> + pic->fb_sz[0],
> >>> + pic->fb_sz[1]);
> >>> }
> >>>
> >>> static void get_disp_fb(struct vdec_vp9_inst *inst, struct vdec_fb **out_fb)
> >>>
> >>
> >
> >
>
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
prev parent reply other threads:[~2019-04-01 9:39 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-01 8:18 pull request: linux-firmware: Update Mediatek MT8173 VPU firmware Yunfei Dong
2019-04-01 8:18 ` [PATCH] media: mtk-vcodec: enlarge struct vdec_pic_info fields Yunfei Dong
2019-04-01 9:06 ` Hans Verkuil
2019-04-01 9:28 ` yunfei.dong
2019-04-01 9:32 ` Hans Verkuil
2019-04-01 9:39 ` yunfei.dong [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1554111563.15631.20.camel@mhfsdcap03 \
--to=yunfei.dong@mediatek.com \
--cc=hverkuil@xs4all.nl \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-firmware@kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=tiffany.lin@mediatek.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).