Commit 7501edef authored by Yunfei Dong's avatar Yunfei Dong Committed by Mauro Carvalho Chehab

media: mediatek: vcodec: Different codec using different capture format

Vp8 need to use MM21, but vp9 and h264 need to use HyFbc mode
for mt8195. Vp8/vp9/h264 use the same MM21 format for mt8192.
Signed-off-by: default avatarYunfei Dong <yunfei.dong@mediatek.com>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
parent 02bbf16a
...@@ -35,6 +35,44 @@ mtk_vdec_find_format(struct v4l2_format *f, ...@@ -35,6 +35,44 @@ mtk_vdec_find_format(struct v4l2_format *f,
return NULL; return NULL;
} }
static bool mtk_vdec_get_cap_fmt(struct mtk_vcodec_ctx *ctx, int format_index)
{
const struct mtk_vcodec_dec_pdata *dec_pdata = ctx->dev->vdec_pdata;
const struct mtk_video_fmt *fmt;
struct mtk_q_data *q_data;
int num_frame_count = 0, i;
bool ret = true;
for (i = 0; i < *dec_pdata->num_formats; i++) {
if (dec_pdata->vdec_formats[i].type != MTK_FMT_FRAME)
continue;
num_frame_count++;
}
if (num_frame_count == 1)
return true;
fmt = &dec_pdata->vdec_formats[format_index];
q_data = &ctx->q_data[MTK_Q_DATA_SRC];
switch (q_data->fmt->fourcc) {
case V4L2_PIX_FMT_VP8_FRAME:
if (fmt->fourcc == V4L2_PIX_FMT_MM21)
ret = true;
break;
case V4L2_PIX_FMT_H264_SLICE:
case V4L2_PIX_FMT_VP9_FRAME:
if (fmt->fourcc == V4L2_PIX_FMT_MM21)
ret = false;
break;
default:
ret = true;
break;
};
return ret;
}
static struct mtk_q_data *mtk_vdec_get_q_data(struct mtk_vcodec_ctx *ctx, static struct mtk_q_data *mtk_vdec_get_q_data(struct mtk_vcodec_ctx *ctx,
enum v4l2_buf_type type) enum v4l2_buf_type type)
{ {
...@@ -566,6 +604,9 @@ static int vidioc_enum_fmt(struct v4l2_fmtdesc *f, void *priv, ...@@ -566,6 +604,9 @@ static int vidioc_enum_fmt(struct v4l2_fmtdesc *f, void *priv,
dec_pdata->vdec_formats[i].type != MTK_FMT_FRAME) dec_pdata->vdec_formats[i].type != MTK_FMT_FRAME)
continue; continue;
if (!output_queue && !mtk_vdec_get_cap_fmt(ctx, i))
continue;
if (j == f->index) if (j == f->index)
break; break;
++j; ++j;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment