Skip to content

Commit

Permalink
media: mediatek: vcodec: support stateless hevc decoder
Browse files Browse the repository at this point in the history
Add mediatek hevc decoder linux driver which use the stateless API in MT8195.

Signed-off-by: Yunfei Dong <yunfei.dong@mediatek.com>
  • Loading branch information
yunfei-mtk authored and intel-lab-lkp committed Apr 28, 2023
1 parent 20af6be commit 193b8e8
Show file tree
Hide file tree
Showing 6 changed files with 1,166 additions and 1 deletion.
1 change: 1 addition & 0 deletions drivers/media/platform/mediatek/vcodec/Makefile
Expand Up @@ -13,6 +13,7 @@ mtk-vcodec-dec-y := vdec/vdec_h264_if.o \
vdec/vdec_h264_req_if.o \
vdec/vdec_h264_req_common.o \
vdec/vdec_h264_req_multi_if.o \
vdec/vdec_hevc_req_multi_if.o \
mtk_vcodec_dec_drv.o \
vdec_drv_if.o \
vdec_vpu_if.o \
Expand Down
Expand Up @@ -107,11 +107,63 @@ static const struct mtk_stateless_control mtk_stateless_controls[] = {
},
.codec_type = V4L2_PIX_FMT_VP9_FRAME,
},
{
.cfg = {
.id = V4L2_CID_STATELESS_HEVC_SPS,
},
.codec_type = V4L2_PIX_FMT_HEVC_SLICE,
},
{
.cfg = {
.id = V4L2_CID_STATELESS_HEVC_PPS,
},
.codec_type = V4L2_PIX_FMT_HEVC_SLICE,
},
{
.cfg = {
.id = V4L2_CID_STATELESS_HEVC_SCALING_MATRIX,
},
.codec_type = V4L2_PIX_FMT_HEVC_SLICE,
},
{
.cfg = {
.id = V4L2_CID_STATELESS_HEVC_DECODE_PARAMS,
},
.codec_type = V4L2_PIX_FMT_HEVC_SLICE,
},
{
.cfg = {
.id = V4L2_CID_MPEG_VIDEO_HEVC_PROFILE,
.def = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN,
.max = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10,
.menu_skip_mask =
BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE),
},
.codec_type = V4L2_PIX_FMT_HEVC_SLICE,
},
{
.cfg = {
.id = V4L2_CID_STATELESS_HEVC_DECODE_MODE,
.min = V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
.def = V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
.max = V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
},
.codec_type = V4L2_PIX_FMT_HEVC_SLICE,
},
{
.cfg = {
.id = V4L2_CID_STATELESS_HEVC_START_CODE,
.min = V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
.def = V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
.max = V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
},
.codec_type = V4L2_PIX_FMT_HEVC_SLICE,
},
};

#define NUM_CTRLS ARRAY_SIZE(mtk_stateless_controls)

static struct mtk_video_fmt mtk_video_formats[5];
static struct mtk_video_fmt mtk_video_formats[6];

static struct mtk_video_fmt default_out_format;
static struct mtk_video_fmt default_cap_format;
Expand Down Expand Up @@ -356,6 +408,7 @@ static void mtk_vcodec_add_formats(unsigned int fourcc,
case V4L2_PIX_FMT_H264_SLICE:
case V4L2_PIX_FMT_VP8_FRAME:
case V4L2_PIX_FMT_VP9_FRAME:
case V4L2_PIX_FMT_HEVC_SLICE:
mtk_video_formats[count_formats].fourcc = fourcc;
mtk_video_formats[count_formats].type = MTK_FMT_DEC;
mtk_video_formats[count_formats].num_planes = 1;
Expand Down Expand Up @@ -412,6 +465,10 @@ static void mtk_vcodec_get_supported_formats(struct mtk_vcodec_ctx *ctx)
mtk_vcodec_add_formats(V4L2_PIX_FMT_VP9_FRAME, ctx);
out_format_count++;
}
if (ctx->dev->dec_capability & MTK_VDEC_FORMAT_HEVC_FRAME) {
mtk_vcodec_add_formats(V4L2_PIX_FMT_HEVC_SLICE, ctx);
out_format_count++;
}

if (cap_format_count)
default_cap_format = mtk_video_formats[cap_format_count - 1];
Expand Down
1 change: 1 addition & 0 deletions drivers/media/platform/mediatek/vcodec/mtk_vcodec_drv.h
Expand Up @@ -347,6 +347,7 @@ enum mtk_vdec_format_types {
MTK_VDEC_FORMAT_H264_SLICE = 0x100,
MTK_VDEC_FORMAT_VP8_FRAME = 0x200,
MTK_VDEC_FORMAT_VP9_FRAME = 0x400,
MTK_VDEC_FORMAT_HEVC_FRAME = 0x1000,
MTK_VCODEC_INNER_RACING = 0x20000,
};

Expand Down

0 comments on commit 193b8e8

Please sign in to comment.