// SPDX-License-Identifier: GPL-2.0
#include <media/videobuf2-v4l2.h>
#include <media/videobuf2-dma-contig.h>
#include <media/v4l2-event.h>
#include <media/v4l2-mem2mem.h>
#include <linux/module.h>
#include "mtk_vcodec_dec.h"
#include "mtk_vcodec_dec_pm.h"
#include "vdec_drv_if.h"
/**
* struct mtk_stateless_control - CID control type
* @cfg: control configuration
* @codec_type: codec type (V4L2 pixel format) for CID control type
*/
struct mtk_stateless_control {
struct v4l2_ctrl_config cfg;
int codec_type;
};
static const struct mtk_stateless_control mtk_stateless_controls[] = {
{
.cfg = {
.id = V4L2_CID_STATELESS_H264_SPS,
},
.codec_type = V4L2_PIX_FMT_H264_SLICE,
},
{
.cfg = {
.id = V4L2_CID_STATELESS_H264_PPS,
},
.codec_type = V4L2_PIX_FMT_H264_SLICE,
},
{
.cfg = {
.id = V4L2_CID_STATELESS_H264_SCALING_MATRIX,
},
.codec_type = V4L2_PIX_FMT_H264_SLICE,
},
{
.cfg = {
.id = V4L2_CID_STATELESS_H264_DECODE_PARAMS,
},
.codec_type = V4L2_PIX_FMT_H264_SLICE,
},
{
.cfg = {
.id = V4L2_CID_MPEG_VIDEO_H264_PROFILE,
.def = V4L2_MPEG_VIDEO_H264_PROFILE_MAIN,
.max = V4L2_MPEG_VIDEO_H264_PROFILE_HIGH,
.menu_skip_mask =
BIT(V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE) |
BIT(V4L2_MPEG_VIDEO_H264_PROFILE_EXTENDED),
},
.codec_type = V4L2_PIX_FMT_H264_SLICE,
},
{
.cfg = {
.id = V4L2_CID_MPEG_VIDEO_H264_LEVEL,
.min = V4L2_MPEG_VIDEO_H264_LEVEL_1_0,
.def = V4L2_MPEG_VIDEO_H264_LEVEL_4_1,
.max = V4L2_MPEG_VIDEO_H264_LEVEL_4_2,
},
.codec_type = V4L2_PIX_FMT_H264_SLICE,
},
{
.cfg = {
.id = V4L2_CID_STATELESS_H264_DECODE_MODE,
.min = V4L2_STATELESS_H264_DECODE_MODE_FRAME_BASED,
.def = V4L2_STATELESS_H264_DECODE_MODE_FRAME_BASED,
.max = V4L2_STATELESS_H264_DECODE_MODE_FRAME_BASED,
},
.codec_type = V4L2_PIX_FMT_H264_SLICE,
},
{
.cfg = {
.id = V4L2_CID_STATELESS_H264_START_CODE,
.min = V4L2_STATELESS_H264_START_CODE_ANNEX_B,
.def = V4L2_STATELESS_H264_START_CODE_ANNEX_B,
.max = V4L2_STATELESS_H264_START_CODE_ANNEX_B,
},
.codec_type = V4L2_PIX_FMT_H264_SLICE,
},
{
.cfg = {
.id = V4L2_CID_STATELESS_VP8_FRAME,
},
.codec_type = V4L2_PIX_FMT_VP8_FRAME,
},
{
.cfg = {
.id = V4L2_CID_MPEG_VIDEO_VP8_PROFILE,
.min = V4L2_MPEG_VIDEO_VP8_PROFILE_0,
.def = V4L2_MPEG_VIDEO_VP8_PROFILE_0,
.max = V4L2_MPEG_VIDEO_VP8_PROFILE_3,
},
.codec_type = V4L2_PIX_FMT_VP8_FRAME,
},
{
.cfg = {
.id = V4L2_CID_STATELESS_VP9_FRAME,
},
.codec_type = V4L2_PIX_FMT_VP9_FRAME,
},
{
.cfg = {
.id = V4L2_CID_MPEG_VIDEO_VP9_PROFILE,
.min = V4L2_MPEG_VIDEO_VP9_PROFILE_0,
.def = V4L2_MPEG_VIDEO_VP9_PROFILE_0,
.max = V4L2_MPEG_VIDEO_VP9_PROFILE_2,
.menu_skip_mask = BIT(V4L2_MPEG_VIDEO_VP9_PROFILE_1),
},
.codec_type = V4L2_PIX_FMT_VP9_FRAME,
},
{
.cfg = {
.id = V4L2_CID_MPEG_VIDEO_VP9_LEVEL,
.min = V4L2_MPEG_VIDEO_VP9_LEVEL_1_0,
.def = V4L2_MPEG_VIDEO_VP9_LEVEL_4_0,
.max = V4L2_MPEG_VIDEO_VP9_LEVEL_4_1,
},
.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,
},
.codec_type = V4L2_PIX_FMT_HEVC_SLICE,
},
{
.cfg = {
.id = V4L2_CID_MPEG_VIDEO_HEVC_LEVEL,
.min = V4L2_MPEG_VIDEO_HEVC_LEVEL_1,
.def = V4L2_MPEG_VIDEO_HEVC_LEVEL_4,
.max =