Files
android_kernel_samsung_sm86…/driver/platform/pineapple/src/pineapple.c
Deepa Guthyappa Madivalara 3d9c6f17f9 video: driver: Add support for lanai/iris3.3 platform
Add the required config and platform files to enable
lanai platform with iris3.3 VPU.

Change-Id: I441d631b9876705342e34097feff3e5d355d6b71
Signed-off-by: Deepa Guthyappa Madivalara <quic_dmadival@quicinc.com>
2022-09-28 14:36:08 -07:00

1977 lines
49 KiB
C

// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
*/
#include <soc/qcom/of_common.h>
#include "msm_vidc_control.h"
#include "msm_vidc_pineapple.h"
#include "msm_vidc_platform.h"
#include "msm_vidc_debug.h"
#include "hfi_property.h"
#include "msm_vidc_iris33.h"
#include "hfi_command.h"
#define DEFAULT_VIDEO_CONCEAL_COLOR_BLACK 0x8020010
#define MAX_LTR_FRAME_COUNT 2
#define MAX_BASE_LAYER_PRIORITY_ID 63
#define MAX_OP_POINT 31
#define MAX_BITRATE 245000000
#define DEFAULT_BITRATE 20000000
#define MINIMUM_FPS 1
#define MAXIMUM_FPS 480
#define MAX_QP 51
#define DEFAULT_QP 20
#define MAX_CONSTANT_QUALITY 100
#define MIN_SLICE_BYTE_SIZE 512
#define MAX_SLICE_BYTE_SIZE \
((MAX_BITRATE) >> 3)
#define MAX_SLICE_MB_SIZE \
(((4096 + 15) >> 4) * ((2304 + 15) >> 4))
#define ENC MSM_VIDC_ENCODER
#define DEC MSM_VIDC_DECODER
#define H264 MSM_VIDC_H264
#define HEVC MSM_VIDC_HEVC
#define VP9 MSM_VIDC_VP9
#define AV1 MSM_VIDC_AV1
#define HEIC MSM_VIDC_HEIC
#define CODECS_ALL (H264 | HEVC | VP9 | HEIC | AV1)
#define MAXIMUM_OVERRIDE_VP9_FPS 180
static struct codec_info codec_data_pineapple[] = {
{
.v4l2_codec = V4L2_PIX_FMT_H264,
.vidc_codec = MSM_VIDC_H264,
.pixfmt_name = "AVC",
},
{
.v4l2_codec = V4L2_PIX_FMT_HEVC,
.vidc_codec = MSM_VIDC_HEVC,
.pixfmt_name = "HEVC",
},
{
.v4l2_codec = V4L2_PIX_FMT_VP9,
.vidc_codec = MSM_VIDC_VP9,
.pixfmt_name = "VP9",
},
};
static struct color_format_info color_format_data_pineapple[] = {
{
.v4l2_color_format = V4L2_PIX_FMT_NV12,
.vidc_color_format = MSM_VIDC_FMT_NV12,
.pixfmt_name = "NV12",
},
{
.v4l2_color_format = V4L2_PIX_FMT_NV21,
.vidc_color_format = MSM_VIDC_FMT_NV21,
.pixfmt_name = "NV21",
},
{
.v4l2_color_format = V4L2_PIX_FMT_RGBA32,
.vidc_color_format = MSM_VIDC_FMT_RGBA8888,
.pixfmt_name = "RGBA",
},
};
static struct color_primaries_info color_primaries_data_pineapple[] = {
{
.v4l2_color_primaries = V4L2_COLORSPACE_DEFAULT,
.vidc_color_primaries = MSM_VIDC_PRIMARIES_RESERVED,
},
{
.v4l2_color_primaries = V4L2_COLORSPACE_REC709,
.vidc_color_primaries = MSM_VIDC_PRIMARIES_BT709,
},
{
.v4l2_color_primaries = V4L2_COLORSPACE_470_SYSTEM_M,
.vidc_color_primaries = MSM_VIDC_PRIMARIES_BT470_SYSTEM_M,
},
{
.v4l2_color_primaries = V4L2_COLORSPACE_470_SYSTEM_BG,
.vidc_color_primaries = MSM_VIDC_PRIMARIES_BT470_SYSTEM_BG,
},
{
.v4l2_color_primaries = V4L2_COLORSPACE_SMPTE170M,
.vidc_color_primaries = MSM_VIDC_PRIMARIES_BT601_525,
},
{
.v4l2_color_primaries = V4L2_COLORSPACE_SMPTE240M,
.vidc_color_primaries = MSM_VIDC_PRIMARIES_SMPTE_ST240M,
},
{
.v4l2_color_primaries = V4L2_COLORSPACE_BT2020,
.vidc_color_primaries = MSM_VIDC_PRIMARIES_BT2020,
},
{
.v4l2_color_primaries = V4L2_COLORSPACE_DCI_P3,
.vidc_color_primaries = MSM_VIDC_PRIMARIES_SMPTE_RP431_2,
},
};
static struct transfer_char_info transfer_char_data_pineapple[] = {
{
.v4l2_transfer_char = V4L2_XFER_FUNC_DEFAULT,
.vidc_transfer_char = MSM_VIDC_TRANSFER_RESERVED,
},
{
.v4l2_transfer_char = V4L2_XFER_FUNC_709,
.vidc_transfer_char = MSM_VIDC_TRANSFER_BT709,
},
{
.v4l2_transfer_char = V4L2_XFER_FUNC_SMPTE240M,
.vidc_transfer_char = MSM_VIDC_TRANSFER_SMPTE_ST240M,
},
{
.v4l2_transfer_char = V4L2_XFER_FUNC_SRGB,
.vidc_transfer_char = MSM_VIDC_TRANSFER_SRGB_SYCC,
},
{
.v4l2_transfer_char = V4L2_XFER_FUNC_SMPTE2084,
.vidc_transfer_char = MSM_VIDC_TRANSFER_SMPTE_ST2084_PQ,
},
};
static struct matrix_coeff_info matrix_coeff_data_pineapple[] = {
{
.v4l2_matrix_coeff = V4L2_YCBCR_ENC_DEFAULT,
.vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_RESERVED,
},
{
.v4l2_matrix_coeff = V4L2_YCBCR_ENC_709,
.vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_BT709,
},
{
.v4l2_matrix_coeff = V4L2_YCBCR_ENC_XV709,
.vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_BT709,
},
{
.v4l2_matrix_coeff = V4L2_YCBCR_ENC_XV601,
.vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_BT470_SYS_BG_OR_BT601_625,
},
{
.v4l2_matrix_coeff = V4L2_YCBCR_ENC_601,
.vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_BT601_525_BT1358_525_OR_625,
},
{
.v4l2_matrix_coeff = V4L2_YCBCR_ENC_SMPTE240M,
.vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_SMPTE_ST240,
},
{
.v4l2_matrix_coeff = V4L2_YCBCR_ENC_BT2020,
.vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_BT2020_NON_CONSTANT,
},
{
.v4l2_matrix_coeff = V4L2_YCBCR_ENC_BT2020_CONST_LUM,
.vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_BT2020_CONSTANT,
},
};
static struct msm_platform_core_capability core_data_pineapple[] = {
/* {type, value} */
{ENC_CODECS, H264|HEVC|HEIC},
{DEC_CODECS, H264|HEVC|VP9|AV1|HEIC},
{MAX_SESSION_COUNT, 16},
{MAX_NUM_720P_SESSIONS, 16},
{MAX_NUM_1080P_SESSIONS, 16},
{MAX_NUM_4K_SESSIONS, 8},
{MAX_NUM_8K_SESSIONS, 2},
{MAX_RT_MBPF, 174080}, /* (8192x4352)/256 + (4096x2176)/256*/
{MAX_MBPF, 278528}, /* ((8192x4352)/256) * 2 */
{MAX_MBPS, 7833600}, /* max_load
* 7680x4320@60fps or 3840x2176@240fps
* which is greater than 4096x2176@120fps,
* 8192x4320@48fps
*/
{MAX_MBPF_HQ, 8160}, /* ((1920x1088)/256) */
{MAX_MBPS_HQ, 489600}, /* ((1920x1088)/256)@60fps */
{MAX_MBPF_B_FRAME, 32640}, /* 3840x2176/256 */
{MAX_MBPS_B_FRAME, 1958400}, /* 3840x2176/256 MBs@60fps */
{MAX_MBPS_ALL_INTRA, 2088960}, /* 4096x2176/256 MBs@60fps */
{MAX_ENH_LAYER_COUNT, 5},
{NUM_VPP_PIPE, 4},
{SW_PC, 1},
{FW_UNLOAD, 0},
{HW_RESPONSE_TIMEOUT, HW_RESPONSE_TIMEOUT_VALUE}, /* 1000 ms */
{SW_PC_DELAY, SW_PC_DELAY_VALUE }, /* 1500 ms (>HW_RESPONSE_TIMEOUT)*/
{FW_UNLOAD_DELAY, FW_UNLOAD_DELAY_VALUE }, /* 3000 ms (>SW_PC_DELAY)*/
{DCVS, 1},
{DECODE_BATCH, 1},
{DECODE_BATCH_TIMEOUT, 200},
{STATS_TIMEOUT_MS, 2000},
{NON_FATAL_FAULTS, 1},
{ENC_AUTO_FRAMERATE, 1},
};
static struct msm_platform_inst_capability instance_cap_data_pineapple[] = {
/* {cap, domain, codec,
* min, max, step_or_mask, value,
* v4l2_id,
* hfi_id,
* flags}
*/
{FRAME_WIDTH, DEC, CODECS_ALL, 96, 8192, 1, 1920},
{FRAME_WIDTH, DEC, VP9, 96, 4096, 1, 1920},
{FRAME_WIDTH, ENC, CODECS_ALL, 128, 8192, 1, 1920},
{FRAME_WIDTH, ENC, HEVC, 96, 8192, 1, 1920},
{FRAME_WIDTH, ENC, HEIC, 128, 16384, 1, 16384},
{LOSSLESS_FRAME_WIDTH, ENC, CODECS_ALL, 128, 4096, 1, 1920},
{LOSSLESS_FRAME_WIDTH, ENC, HEVC, 96, 4096, 1, 1920},
{FRAME_HEIGHT, DEC, CODECS_ALL, 96, 8192, 1, 1080},
{FRAME_HEIGHT, DEC, VP9, 96, 4096, 1, 1080},
{FRAME_HEIGHT, ENC, CODECS_ALL, 128, 8192, 1, 1080},
{FRAME_HEIGHT, ENC, HEVC, 96, 8192, 1, 1080},
{FRAME_HEIGHT, ENC, HEIC, 128, 16384, 1, 16384},
{LOSSLESS_FRAME_HEIGHT, ENC, CODECS_ALL, 128, 4096, 1, 1080},
{LOSSLESS_FRAME_HEIGHT, ENC, HEVC, 96, 4096, 1, 1080},
{PIX_FMTS, ENC|DEC, H264,
MSM_VIDC_FMT_NV12,
MSM_VIDC_FMT_NV12C,
MSM_VIDC_FMT_NV12 | MSM_VIDC_FMT_NV21 | MSM_VIDC_FMT_NV12C,
MSM_VIDC_FMT_NV12C},
{PIX_FMTS, ENC|DEC, HEVC|VP9|AV1,
MSM_VIDC_FMT_NV12,
MSM_VIDC_FMT_TP10C,
MSM_VIDC_FMT_NV12 | MSM_VIDC_FMT_NV21 | MSM_VIDC_FMT_NV12C |
MSM_VIDC_FMT_P010 | MSM_VIDC_FMT_TP10C,
MSM_VIDC_FMT_NV12C},
{PIX_FMTS, ENC, HEIC,
MSM_VIDC_FMT_NV12,
MSM_VIDC_FMT_P010,
MSM_VIDC_FMT_NV12 | MSM_VIDC_FMT_NV21 | MSM_VIDC_FMT_P010,
MSM_VIDC_FMT_NV12},
{PIX_FMTS, DEC, HEIC,
MSM_VIDC_FMT_NV12,
MSM_VIDC_FMT_TP10C,
MSM_VIDC_FMT_NV12 | MSM_VIDC_FMT_NV21 | MSM_VIDC_FMT_NV12C |
MSM_VIDC_FMT_P010 | MSM_VIDC_FMT_TP10C,
MSM_VIDC_FMT_NV12C},
{MIN_BUFFERS_INPUT, ENC|DEC, CODECS_ALL, 0, 64, 1, 4,
V4L2_CID_MIN_BUFFERS_FOR_OUTPUT,
0,
CAP_FLAG_VOLATILE},
{MIN_BUFFERS_INPUT, ENC|DEC, HEIC, 0, 64, 1, 1,
V4L2_CID_MIN_BUFFERS_FOR_OUTPUT,
0,
CAP_FLAG_VOLATILE},
{MIN_BUFFERS_OUTPUT, ENC|DEC, CODECS_ALL,
0, 64, 1, 4,
V4L2_CID_MIN_BUFFERS_FOR_CAPTURE,
HFI_PROP_BUFFER_FW_MIN_OUTPUT_COUNT,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_VOLATILE},
/* (8192 * 4320) / 256 */
{MBPF, ENC, CODECS_ALL, 64, 138240, 1, 138240},
{MBPF, ENC, HEVC, 36, 138240, 1, 138240},
/* ((16384x16384)/256) */
{MBPF, ENC, HEIC, 36, 1048576, 1, 1048576},
{MBPF, DEC, CODECS_ALL, 36, 138240, 1, 138240},
/* (4096 * 2304) / 256 */
{MBPF, DEC, VP9, 36, 36864, 1, 36864},
/* ((8192x8192)/256) */
{MBPF, DEC, HEIC, 64, 262144, 1, 262144 },
/* (4096 * 2304) / 256 */
{LOSSLESS_MBPF, ENC, H264|HEVC, 64, 36864, 1, 36864},
/* Batch Mode Decode */
/* TODO: update with new values based on updated voltage corner */
{BATCH_MBPF, DEC, H264|HEVC|VP9|AV1, 64, 34816, 1, 34816},
/* (4096 * 2304) / 256 */
{BATCH_FPS, DEC, H264|HEVC|VP9|AV1, 1, 120, 1, 120},
/* ((1920 * 1088) / 256) * 480 fps */
{MBPS, ENC, CODECS_ALL, 64, 3916800, 1, 3916800},
{MBPS, ENC, HEVC, 36, 3916800, 1, 3916800},
/* ((16384x16384)/256)@1fps */
{MBPS, ENC, HEIC, 36, 1048576, 1, 1048576},
/* ((1920 * 1088) / 256) * 960 fps */
{MBPS, DEC, CODECS_ALL, 64, 7833600, 1, 7833600},
/* ((4096 * 2304) / 256) * 120 */
{MBPS, DEC, VP9, 36, 4423680, 1, 4423680},
/* ((8192x8192)/256)@1fps */
{MBPS, DEC, HEIC, 64, 262144, 1, 262144 },
/* Enable check mbps for encoder */
{CHECK_MBPS, ENC, CODECS_ALL, 0, 1, 1, 1},
/* Disable check mbps for encoder */
{CHECK_MBPS, DEC, CODECS_ALL, 0, 1, 1, 0},
{FRAME_RATE, ENC, CODECS_ALL,
(MINIMUM_FPS << 16), (MAXIMUM_FPS << 16),
1, (DEFAULT_FPS << 16),
0,
HFI_PROP_FRAME_RATE,
CAP_FLAG_OUTPUT_PORT},
{FRAME_RATE, ENC, HEIC,
(MINIMUM_FPS << 16), (MAXIMUM_FPS << 16),
1, (MINIMUM_FPS << 16),
0,
HFI_PROP_FRAME_RATE,
CAP_FLAG_OUTPUT_PORT},
{OPERATING_RATE, ENC, CODECS_ALL,
(MINIMUM_FPS << 16), (MAXIMUM_FPS << 16),
1, (DEFAULT_FPS << 16)},
{INPUT_RATE, ENC|DEC, CODECS_ALL,
(MINIMUM_FPS << 16), INT_MAX,
1, (DEFAULT_FPS << 16)},
{TIMESTAMP_RATE, ENC|DEC, CODECS_ALL,
(MINIMUM_FPS << 16), INT_MAX,
1, (DEFAULT_FPS << 16)},
{SCALE_FACTOR, ENC, H264|HEVC, 1, 8, 1, 8},
{MB_CYCLES_VSP, ENC, CODECS_ALL, 25, 25, 1, 25},
{MB_CYCLES_VSP, DEC, CODECS_ALL, 25, 25, 1, 25},
{MB_CYCLES_VSP, DEC, VP9|AV1, 60, 60, 1, 60},
{MB_CYCLES_VPP, ENC, CODECS_ALL, 675, 675, 1, 675},
{MB_CYCLES_VPP, DEC, CODECS_ALL, 200, 200, 1, 200},
{MB_CYCLES_LP, ENC, CODECS_ALL, 320, 320, 1, 320},
{MB_CYCLES_LP, DEC, CODECS_ALL, 200, 200, 1, 200},
{MB_CYCLES_FW, ENC|DEC, CODECS_ALL, 489583, 489583, 1, 489583},
{MB_CYCLES_FW_VPP, ENC, CODECS_ALL, 48405, 48405, 1, 48405},
{MB_CYCLES_FW_VPP, DEC, CODECS_ALL, 66234, 66234, 1, 66234},
{CLIENT_ID, ENC|DEC, CODECS_ALL,
INVALID_CLIENT_ID, INT_MAX, 1, INVALID_CLIENT_ID,
0},
{HFLIP, ENC, CODECS_ALL,
0, 1, 1, 0,
V4L2_CID_HFLIP,
HFI_PROP_FLIP,
CAP_FLAG_OUTPUT_PORT |
CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED},
{VFLIP, ENC, CODECS_ALL,
0, 1, 1, 0,
V4L2_CID_VFLIP,
HFI_PROP_FLIP,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
CAP_FLAG_DYNAMIC_ALLOWED},
{ROTATION, ENC, CODECS_ALL,
0, 270, 90, 0,
V4L2_CID_ROTATE,
HFI_PROP_ROTATION,
CAP_FLAG_OUTPUT_PORT},
{SUPER_FRAME, ENC, H264|HEVC,
0, 32, 1, 0,
0, 0,
CAP_FLAG_NONE},
{SLICE_DECODE, DEC, CODECS_ALL,
0, 0, 0, 0,
V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE,
0},
{HEADER_MODE, ENC, CODECS_ALL,
V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE,
V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME,
BIT(V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE) |
BIT(V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME),
V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE,
V4L2_CID_MPEG_VIDEO_HEADER_MODE,
HFI_PROP_SEQ_HEADER_MODE,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{PREPEND_SPSPPS_TO_IDR, ENC, CODECS_ALL,
0, 1, 1, 0,
V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR},
{WITHOUT_STARTCODE, ENC, CODECS_ALL,
0, 1, 1, 0,
V4L2_CID_MPEG_VIDEO_HEVC_WITHOUT_STARTCODE,
HFI_PROP_NAL_LENGTH_FIELD,
CAP_FLAG_OUTPUT_PORT},
{WITHOUT_STARTCODE, DEC, AV1,
0, 1, 1, 0,
V4L2_CID_MPEG_VIDEO_HEVC_WITHOUT_STARTCODE,
HFI_PROP_NAL_LENGTH_FIELD,
CAP_FLAG_INPUT_PORT},
{NAL_LENGTH_FIELD, ENC, CODECS_ALL,
V4L2_MPEG_VIDEO_HEVC_SIZE_0,
V4L2_MPEG_VIDEO_HEVC_SIZE_4,
BIT(V4L2_MPEG_VIDEO_HEVC_SIZE_0) |
BIT(V4L2_MPEG_VIDEO_HEVC_SIZE_4),
V4L2_MPEG_VIDEO_HEVC_SIZE_0,
V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD,
HFI_PROP_NAL_LENGTH_FIELD,
CAP_FLAG_MENU | CAP_FLAG_OUTPUT_PORT},
/* TODO: Firmware introduced enumeration type for this
* with and without seq header.
*/
{REQUEST_I_FRAME, ENC, H264|HEVC,
0, 0, 0, 0,
V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME,
HFI_PROP_REQUEST_SYNC_FRAME,
CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED},
/* Enc: Keeping CABAC and CAVLC as same bitrate.
* Dec: there's no use of Bitrate cap
*/
{BIT_RATE, ENC, H264|HEVC,
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
V4L2_CID_MPEG_VIDEO_BITRATE,
HFI_PROP_TOTAL_BITRATE,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
CAP_FLAG_DYNAMIC_ALLOWED},
{BITRATE_MODE, ENC, H264,
V4L2_MPEG_VIDEO_BITRATE_MODE_VBR,
V4L2_MPEG_VIDEO_BITRATE_MODE_CBR,
BIT(V4L2_MPEG_VIDEO_BITRATE_MODE_VBR) |
BIT(V4L2_MPEG_VIDEO_BITRATE_MODE_CBR),
V4L2_MPEG_VIDEO_BITRATE_MODE_VBR,
V4L2_CID_MPEG_VIDEO_BITRATE_MODE,
HFI_PROP_RATE_CONTROL,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{BITRATE_MODE, ENC, HEVC,
V4L2_MPEG_VIDEO_BITRATE_MODE_VBR,
V4L2_MPEG_VIDEO_BITRATE_MODE_CQ,
BIT(V4L2_MPEG_VIDEO_BITRATE_MODE_VBR) |
BIT(V4L2_MPEG_VIDEO_BITRATE_MODE_CBR) |
BIT(V4L2_MPEG_VIDEO_BITRATE_MODE_CQ),
V4L2_MPEG_VIDEO_BITRATE_MODE_VBR,
V4L2_CID_MPEG_VIDEO_BITRATE_MODE,
HFI_PROP_RATE_CONTROL,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{BITRATE_MODE, ENC, HEIC,
V4L2_MPEG_VIDEO_BITRATE_MODE_CQ,
V4L2_MPEG_VIDEO_BITRATE_MODE_CQ,
BIT(V4L2_MPEG_VIDEO_BITRATE_MODE_CQ),
V4L2_MPEG_VIDEO_BITRATE_MODE_CQ,
V4L2_CID_MPEG_VIDEO_BITRATE_MODE,
HFI_PROP_RATE_CONTROL,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{CABAC_MAX_BITRATE, ENC, H264|HEVC, 0,
160000000, 1, 160000000},
{CAVLC_MAX_BITRATE, ENC, H264, 0,
220000000, 1, 220000000},
{ALLINTRA_MAX_BITRATE, ENC, H264|HEVC, 0,
245000000, 1, 245000000},
{LOWLATENCY_MAX_BITRATE, ENC, H264|HEVC, 0,
70000000, 1, 70000000},
{LOSSLESS, ENC, HEVC,
0, 1, 1, 0,
V4L2_CID_MPEG_VIDEO_HEVC_LOSSLESS_CU},
{FRAME_SKIP_MODE, ENC, H264|HEVC|HEIC,
V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED,
V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT,
BIT(V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED) |
BIT(V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_LEVEL_LIMIT) |
BIT(V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT),
V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED,
V4L2_CID_MPEG_VIDEO_FRAME_SKIP_MODE,
0,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{FRAME_RC_ENABLE, ENC, H264|HEVC|HEIC,
0, 1, 1, 1,
V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE},
{CONSTANT_QUALITY, ENC, HEVC,
1, MAX_CONSTANT_QUALITY, 1, 90,
V4L2_CID_MPEG_VIDEO_CONSTANT_QUALITY,
HFI_PROP_CONSTANT_QUALITY,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
CAP_FLAG_DYNAMIC_ALLOWED},
{CONSTANT_QUALITY, ENC, HEIC,
1, MAX_CONSTANT_QUALITY, 1, 100,
V4L2_CID_MPEG_VIDEO_CONSTANT_QUALITY,
HFI_PROP_CONSTANT_QUALITY,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
CAP_FLAG_DYNAMIC_ALLOWED},
{GOP_SIZE, ENC, CODECS_ALL,
0, INT_MAX, 1, 2 * DEFAULT_FPS - 1,
V4L2_CID_MPEG_VIDEO_GOP_SIZE,
HFI_PROP_MAX_GOP_FRAMES,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
CAP_FLAG_DYNAMIC_ALLOWED},
{GOP_SIZE, ENC, HEIC,
0, INT_MAX, 1, 0 /* all intra */,
V4L2_CID_MPEG_VIDEO_GOP_SIZE,
HFI_PROP_MAX_GOP_FRAMES,
CAP_FLAG_OUTPUT_PORT |
CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED},
{GOP_CLOSURE, ENC, H264|HEVC,
0, 1, 1, 1,
V4L2_CID_MPEG_VIDEO_GOP_CLOSURE,
0},
{B_FRAME, ENC, H264|HEVC,
0, 7, 1, 0,
V4L2_CID_MPEG_VIDEO_B_FRAMES,
HFI_PROP_MAX_B_FRAMES,
CAP_FLAG_OUTPUT_PORT},
{B_FRAME, ENC, HEIC,
0, 1, 1, 0,
V4L2_CID_MPEG_VIDEO_B_FRAMES,
HFI_PROP_MAX_B_FRAMES,
CAP_FLAG_OUTPUT_PORT},
{BLUR_TYPES, ENC, H264|HEVC,
MSM_VIDC_BLUR_NONE, MSM_VIDC_BLUR_EXTERNAL,
BIT(MSM_VIDC_BLUR_NONE) | BIT(MSM_VIDC_BLUR_EXTERNAL),
MSM_VIDC_BLUR_NONE,
0,
HFI_PROP_BLUR_TYPES,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{CSC, ENC, CODECS_ALL,
0, 1, 1, 0,
0,
HFI_PROP_CSC},
{LOWLATENCY_MODE, ENC, H264|HEVC,
0, 1, 1, 0,
0,
0,
CAP_FLAG_NONE},
{LOWLATENCY_MODE, DEC, H264|HEVC|VP9|AV1,
0, 1, 1, 0,
0,
HFI_PROP_SEQ_CHANGE_AT_SYNC_FRAME,
CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED},
{LTR_COUNT, ENC, H264|HEVC,
0, 2, 1, 0,
V4L2_CID_MPEG_VIDEO_LTR_COUNT,
HFI_PROP_LTR_COUNT,
CAP_FLAG_OUTPUT_PORT},
{USE_LTR, ENC, H264|HEVC,
0,
((1 << MAX_LTR_FRAME_COUNT) - 1),
0, 0,
V4L2_CID_MPEG_VIDEO_USE_LTR_FRAMES,
HFI_PROP_LTR_USE,
CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED},
{MARK_LTR, ENC, H264|HEVC,
INVALID_DEFAULT_MARK_OR_USE_LTR,
(MAX_LTR_FRAME_COUNT - 1),
1, INVALID_DEFAULT_MARK_OR_USE_LTR,
V4L2_CID_MPEG_VIDEO_FRAME_LTR_INDEX,
HFI_PROP_LTR_MARK,
CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED},
{BASELAYER_PRIORITY, ENC, H264,
0, MAX_BASE_LAYER_PRIORITY_ID, 1, 0,
V4L2_CID_MPEG_VIDEO_BASELAYER_PRIORITY_ID,
HFI_PROP_BASELAYER_PRIORITYID,
CAP_FLAG_OUTPUT_PORT},
{AU_DELIMITER, ENC, H264|HEVC,
0, 1, 1, 0,
V4L2_CID_MPEG_VIDEO_AU_DELIMITER,
HFI_PROP_AUD,
CAP_FLAG_OUTPUT_PORT},
{CONTENT_ADAPTIVE_CODING, ENC, H264|HEVC,
0, 1, 1, 1,
0,
HFI_PROP_CONTENT_ADAPTIVE_CODING,
CAP_FLAG_OUTPUT_PORT},
{REQUEST_PREPROCESS, ENC, H264|HEVC,
MSM_VIDC_PREPROCESS_NONE,
MSM_VIDC_PREPROCESS_TYPE0,
BIT(MSM_VIDC_PREPROCESS_NONE) |
BIT(MSM_VIDC_PREPROCESS_TYPE0),
MSM_VIDC_PREPROCESS_NONE,
0, HFI_PROP_REQUEST_PREPROCESS,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{MIN_QUALITY, ENC, H264|HEVC,
0, MAX_SUPPORTED_MIN_QUALITY, 70, MAX_SUPPORTED_MIN_QUALITY,
0,
HFI_PROP_MAINTAIN_MIN_QUALITY,
CAP_FLAG_OUTPUT_PORT},
{VBV_DELAY, ENC, H264|HEVC,
200, 300, 100, 300,
V4L2_CID_MPEG_VIDEO_VBV_DELAY,
HFI_PROP_VBV_DELAY,
CAP_FLAG_OUTPUT_PORT},
{PEAK_BITRATE, ENC, H264|HEVC,
/* default peak bitrate is 10% larger than avg bitrate */
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
V4L2_CID_MPEG_VIDEO_BITRATE_PEAK,
HFI_PROP_TOTAL_PEAK_BITRATE,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
CAP_FLAG_DYNAMIC_ALLOWED},
{MIN_FRAME_QP, ENC, H264,
MIN_QP_8BIT, MAX_QP, 1, MIN_QP_8BIT,
V4L2_CID_MPEG_VIDEO_H264_MIN_QP,
HFI_PROP_MIN_QP_PACKED,
CAP_FLAG_OUTPUT_PORT},
{MIN_FRAME_QP, ENC, HEVC|HEIC,
MIN_QP_10BIT, MAX_QP, 1, MIN_QP_10BIT,
V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP,
HFI_PROP_MIN_QP_PACKED,
CAP_FLAG_OUTPUT_PORT},
{I_FRAME_MIN_QP, ENC, H264,
MIN_QP_8BIT, MAX_QP, 1, MIN_QP_8BIT,
V4L2_CID_MPEG_VIDEO_H264_I_FRAME_MIN_QP},
{I_FRAME_MIN_QP, ENC, HEVC|HEIC,
MIN_QP_10BIT, MAX_QP, 1, MIN_QP_10BIT,
V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_MIN_QP},
{P_FRAME_MIN_QP, ENC, H264,
MIN_QP_8BIT, MAX_QP, 1, MIN_QP_8BIT,
V4L2_CID_MPEG_VIDEO_H264_P_FRAME_MIN_QP},
{P_FRAME_MIN_QP, ENC, HEVC|HEIC,
MIN_QP_10BIT, MAX_QP, 1, MIN_QP_10BIT,
V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_MIN_QP},
{B_FRAME_MIN_QP, ENC, H264,
MIN_QP_8BIT, MAX_QP, 1, MIN_QP_8BIT,
V4L2_CID_MPEG_VIDEO_H264_B_FRAME_MIN_QP},
{B_FRAME_MIN_QP, ENC, HEVC|HEIC,
MIN_QP_10BIT, MAX_QP, 1, MIN_QP_10BIT,
V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_MIN_QP},
{MAX_FRAME_QP, ENC, H264,
MIN_QP_8BIT, MAX_QP, 1, MAX_QP,
V4L2_CID_MPEG_VIDEO_H264_MAX_QP,
HFI_PROP_MAX_QP_PACKED,
CAP_FLAG_OUTPUT_PORT},
{MAX_FRAME_QP, ENC, HEVC|HEIC,
MIN_QP_10BIT, MAX_QP, 1, MAX_QP,
V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP,
HFI_PROP_MAX_QP_PACKED,
CAP_FLAG_OUTPUT_PORT},
{I_FRAME_MAX_QP, ENC, H264,
MIN_QP_8BIT, MAX_QP, 1, MAX_QP,
V4L2_CID_MPEG_VIDEO_H264_I_FRAME_MAX_QP},
{I_FRAME_MAX_QP, ENC, HEVC|HEIC,
MIN_QP_10BIT, MAX_QP, 1, MAX_QP,
V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_MAX_QP},
{P_FRAME_MAX_QP, ENC, H264,
MIN_QP_8BIT, MAX_QP, 1, MAX_QP,
V4L2_CID_MPEG_VIDEO_H264_P_FRAME_MAX_QP},
{P_FRAME_MAX_QP, ENC, HEVC|HEIC,
MIN_QP_10BIT, MAX_QP, 1, MAX_QP,
V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_MAX_QP},
{B_FRAME_MAX_QP, ENC, H264,
MIN_QP_8BIT, MAX_QP, 1, MAX_QP,
V4L2_CID_MPEG_VIDEO_H264_B_FRAME_MAX_QP},
{B_FRAME_MAX_QP, ENC, HEVC|HEIC,
MIN_QP_10BIT, MAX_QP, 1, MAX_QP,
V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_MAX_QP},
{I_FRAME_QP, ENC, HEVC,
MIN_QP_10BIT, MAX_QP, 1, DEFAULT_QP,
V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP,
HFI_PROP_QP_PACKED,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
CAP_FLAG_DYNAMIC_ALLOWED},
{I_FRAME_QP, ENC, H264,
MIN_QP_8BIT, MAX_QP, 1, DEFAULT_QP,
V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP,
HFI_PROP_QP_PACKED,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
CAP_FLAG_DYNAMIC_ALLOWED},
{P_FRAME_QP, ENC, HEVC,
MIN_QP_10BIT, MAX_QP, 1, DEFAULT_QP,
V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QP,
HFI_PROP_QP_PACKED,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
CAP_FLAG_DYNAMIC_ALLOWED},
{P_FRAME_QP, ENC, H264,
MIN_QP_8BIT, MAX_QP, 1, DEFAULT_QP,
V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP,
HFI_PROP_QP_PACKED,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
CAP_FLAG_DYNAMIC_ALLOWED},
{B_FRAME_QP, ENC, HEVC,
MIN_QP_10BIT, MAX_QP, 1, DEFAULT_QP,
V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP,
HFI_PROP_QP_PACKED,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
CAP_FLAG_DYNAMIC_ALLOWED},
{B_FRAME_QP, ENC, H264,
MIN_QP_8BIT, MAX_QP, 1, DEFAULT_QP,
V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP,
HFI_PROP_QP_PACKED,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
CAP_FLAG_DYNAMIC_ALLOWED},
{LAYER_TYPE, ENC, HEVC,
V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_B,
V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P,
BIT(V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_B) |
BIT(V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P),
V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P,
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE,
HFI_PROP_LAYER_ENCODING_TYPE,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{LAYER_TYPE, ENC, H264,
V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_B,
V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P,
BIT(V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_B) |
BIT(V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P),
V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P,
V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE,
HFI_PROP_LAYER_ENCODING_TYPE,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{LAYER_ENABLE, ENC, H264,
0, 1, 1, 0,
V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING,
HFI_PROP_LAYER_ENCODING_TYPE,
CAP_FLAG_OUTPUT_PORT},
{LAYER_ENABLE, ENC, HEVC,
0, 1, 1, 0,
0,
0,
CAP_FLAG_OUTPUT_PORT},
{ENH_LAYER_COUNT, ENC, HEVC,
0, 5, 1, 0,
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER,
HFI_PROP_LAYER_COUNT,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
CAP_FLAG_DYNAMIC_ALLOWED},
{ENH_LAYER_COUNT, ENC, H264,
0, 5, 1, 0,
V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER,
HFI_PROP_LAYER_COUNT,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
CAP_FLAG_DYNAMIC_ALLOWED},
{ENH_LAYER_COUNT, DEC, AV1,
0, MAX_OP_POINT, 1, 0,
0,
HFI_PROP_AV1_OP_POINT,
CAP_FLAG_INPUT_PORT},
{L0_BR, ENC, H264,
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L0_BR,
HFI_PROP_BITRATE_LAYER1,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
CAP_FLAG_DYNAMIC_ALLOWED},
{L0_BR, ENC, HEVC,
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BR,
HFI_PROP_BITRATE_LAYER1,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
CAP_FLAG_DYNAMIC_ALLOWED},
{L1_BR, ENC, H264,
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L1_BR,
HFI_PROP_BITRATE_LAYER2,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
CAP_FLAG_DYNAMIC_ALLOWED},
{L1_BR, ENC, HEVC,
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BR,
HFI_PROP_BITRATE_LAYER2,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
CAP_FLAG_DYNAMIC_ALLOWED},
{L2_BR, ENC, H264,
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L2_BR,
HFI_PROP_BITRATE_LAYER3,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
CAP_FLAG_DYNAMIC_ALLOWED},
{L2_BR, ENC, HEVC,
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BR,
HFI_PROP_BITRATE_LAYER3,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
CAP_FLAG_DYNAMIC_ALLOWED},
{L3_BR, ENC, H264,
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L3_BR,
HFI_PROP_BITRATE_LAYER4,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
CAP_FLAG_DYNAMIC_ALLOWED},
{L3_BR, ENC, HEVC,
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BR,
HFI_PROP_BITRATE_LAYER4,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
CAP_FLAG_DYNAMIC_ALLOWED},
{L4_BR, ENC, H264,
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L4_BR,
HFI_PROP_BITRATE_LAYER5,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
CAP_FLAG_DYNAMIC_ALLOWED},
{L4_BR, ENC, HEVC,
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BR,
HFI_PROP_BITRATE_LAYER5,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
CAP_FLAG_DYNAMIC_ALLOWED},
{L5_BR, ENC, H264,
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L5_BR,
HFI_PROP_BITRATE_LAYER6,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
CAP_FLAG_DYNAMIC_ALLOWED},
{L5_BR, ENC, HEVC,
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR,
HFI_PROP_BITRATE_LAYER6,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
CAP_FLAG_DYNAMIC_ALLOWED},
{ENTROPY_MODE, ENC, H264,
V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC,
V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC,
BIT(V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC) |
BIT(V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC),
V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC,
V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE,
HFI_PROP_CABAC_SESSION,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{ENTROPY_MODE, DEC, H264|HEVC|VP9|AV1,
V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC,
V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC,
BIT(V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC) |
BIT(V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC),
V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC,
0,
HFI_PROP_CABAC_SESSION},
{PROFILE, ENC|DEC, H264,
V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE,
V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH,
BIT(V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE) |
BIT(V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH) |
BIT(V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE) |
BIT(V4L2_MPEG_VIDEO_H264_PROFILE_MAIN) |
BIT(V4L2_MPEG_VIDEO_H264_PROFILE_HIGH),
V4L2_MPEG_VIDEO_H264_PROFILE_HIGH,
V4L2_CID_MPEG_VIDEO_H264_PROFILE,
HFI_PROP_PROFILE,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{PROFILE, ENC|DEC, HEVC|HEIC,
V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN,
V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10_STILL_PICTURE,
BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN) |
BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE) |
BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10) |
BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10_STILL_PICTURE),
V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN,
V4L2_CID_MPEG_VIDEO_HEVC_PROFILE,
HFI_PROP_PROFILE,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{PROFILE, DEC, VP9,
V4L2_MPEG_VIDEO_VP9_PROFILE_0,
V4L2_MPEG_VIDEO_VP9_PROFILE_2,
BIT(V4L2_MPEG_VIDEO_VP9_PROFILE_0) |
BIT(V4L2_MPEG_VIDEO_VP9_PROFILE_2),
V4L2_MPEG_VIDEO_VP9_PROFILE_0,
V4L2_CID_MPEG_VIDEO_VP9_PROFILE,
HFI_PROP_PROFILE,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{LEVEL, ENC, H264,
V4L2_MPEG_VIDEO_H264_LEVEL_1_0,
V4L2_MPEG_VIDEO_H264_LEVEL_6_0,
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_0) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1B) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_1) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_2) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_3) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_0) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_1) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_2) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_0) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_1) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_2) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_0) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_1) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_2) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_0) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_1) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_2) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_6_0),
V4L2_MPEG_VIDEO_H264_LEVEL_5_0,
V4L2_CID_MPEG_VIDEO_H264_LEVEL,
HFI_PROP_LEVEL,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{LEVEL, ENC, HEVC|HEIC,
V4L2_MPEG_VIDEO_HEVC_LEVEL_1,
V4L2_MPEG_VIDEO_HEVC_LEVEL_6,
BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_1) |
BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_2) |
BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_2_1) |
BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_3) |
BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_3_1) |
BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_4) |
BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1) |
BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5) |
BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1) |
BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_2) |
BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6),
V4L2_MPEG_VIDEO_HEVC_LEVEL_5,
V4L2_CID_MPEG_VIDEO_HEVC_LEVEL,
HFI_PROP_LEVEL,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{LEVEL, DEC, H264,
V4L2_MPEG_VIDEO_H264_LEVEL_1_0,
V4L2_MPEG_VIDEO_H264_LEVEL_6_2,
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_0) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1B) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_1) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_2) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_3) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_0) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_1) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_2) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_0) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_1) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_2) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_0) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_1) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_2) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_0) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_1) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_2) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_6_0) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_6_1) |
BIT(V4L2_MPEG_VIDEO_H264_LEVEL_6_2),
V4L2_MPEG_VIDEO_H264_LEVEL_6_1,
V4L2_CID_MPEG_VIDEO_H264_LEVEL,
HFI_PROP_LEVEL,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{LEVEL, DEC, HEVC|HEIC,
V4L2_MPEG_VIDEO_HEVC_LEVEL_1,
V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2,
BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_1) |
BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_2) |
BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_2_1) |
BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_3) |
BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_3_1) |
BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_4) |
BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1) |
BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5) |
BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1) |
BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_2) |
BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6) |
BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6_1)|
BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2),
V4L2_MPEG_VIDEO_HEVC_LEVEL_6_1,
V4L2_CID_MPEG_VIDEO_HEVC_LEVEL,
HFI_PROP_LEVEL,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{LEVEL, DEC, VP9,
V4L2_MPEG_VIDEO_VP9_LEVEL_1_0,
V4L2_MPEG_VIDEO_VP9_LEVEL_6_0,
BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_1_0) |
BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_1_1) |
BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_2_0) |
BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_2_1) |
BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_3_0) |
BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_3_1) |
BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_4_0) |
BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_4_1) |
BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_5_0) |
BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_5_1) |
BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_5_2) |
BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_6_0),
V4L2_MPEG_VIDEO_VP9_LEVEL_6_0,
V4L2_CID_MPEG_VIDEO_VP9_LEVEL,
HFI_PROP_LEVEL,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{HEVC_TIER, ENC|DEC, HEVC,
V4L2_MPEG_VIDEO_HEVC_TIER_MAIN,
V4L2_MPEG_VIDEO_HEVC_TIER_HIGH,
BIT(V4L2_MPEG_VIDEO_HEVC_TIER_MAIN) |
BIT(V4L2_MPEG_VIDEO_HEVC_TIER_HIGH),
V4L2_MPEG_VIDEO_HEVC_TIER_HIGH,
V4L2_CID_MPEG_VIDEO_HEVC_TIER,
HFI_PROP_TIER,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{HEVC_TIER, ENC|DEC, HEIC,
V4L2_MPEG_VIDEO_HEVC_TIER_MAIN,
V4L2_MPEG_VIDEO_HEVC_TIER_MAIN,
BIT(V4L2_MPEG_VIDEO_HEVC_TIER_MAIN),
V4L2_MPEG_VIDEO_HEVC_TIER_MAIN,
V4L2_CID_MPEG_VIDEO_HEVC_TIER,
HFI_PROP_TIER,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{LF_MODE, ENC, H264,
V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED,
DB_H264_DISABLE_SLICE_BOUNDARY,
BIT(V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED) |
BIT(V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED) |
BIT(DB_H264_DISABLE_SLICE_BOUNDARY),
V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED,
V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE,
HFI_PROP_DEBLOCKING_MODE,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{LF_MODE, ENC, HEVC|HEIC,
V4L2_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE_DISABLED,
DB_HEVC_DISABLE_SLICE_BOUNDARY,
BIT(V4L2_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE_DISABLED) |
BIT(V4L2_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE_ENABLED) |
BIT(DB_HEVC_DISABLE_SLICE_BOUNDARY),
V4L2_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE_ENABLED,
V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE,
HFI_PROP_DEBLOCKING_MODE,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{LF_ALPHA, ENC, H264,
-6, 6, 1, 0,
V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA},
{LF_ALPHA, ENC, HEVC|HEIC,
-6, 6, 1, 0,
V4L2_CID_MPEG_VIDEO_HEVC_LF_TC_OFFSET_DIV2},
{LF_BETA, ENC, H264,
-6, 6, 1, 0,
V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA},
{LF_BETA, ENC, HEVC|HEIC,
-6, 6, 1, 0,
V4L2_CID_MPEG_VIDEO_HEVC_LF_BETA_OFFSET_DIV2},
{SLICE_MODE, ENC, H264|HEVC,
V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE,
V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_BYTES,
BIT(V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE) |
BIT(V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_MB) |
BIT(V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_BYTES),
V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE,
V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE,
0,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{SLICE_MODE, ENC, HEIC,
V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE,
V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE,
BIT(V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE),
V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE,
V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE,
0,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{SLICE_MAX_BYTES, ENC, H264|HEVC,
MIN_SLICE_BYTE_SIZE, MAX_SLICE_BYTE_SIZE,
1, MIN_SLICE_BYTE_SIZE,
V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES,
HFI_PROP_MULTI_SLICE_BYTES_COUNT,
CAP_FLAG_OUTPUT_PORT},
{SLICE_MAX_MB, ENC, H264|HEVC,
1, MAX_SLICE_MB_SIZE, 1, 1,
V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB,
HFI_PROP_MULTI_SLICE_MB_COUNT,
CAP_FLAG_OUTPUT_PORT},
{MB_RC, ENC, H264|HEVC,
0, 1, 1, 1,
V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE,
0,
CAP_FLAG_OUTPUT_PORT},
{TRANSFORM_8X8, ENC, H264,
0, 1, 1, 1,
V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM,
HFI_PROP_8X8_TRANSFORM,
CAP_FLAG_OUTPUT_PORT},
{CHROMA_QP_INDEX_OFFSET, ENC, HEVC,
MIN_CHROMA_QP_OFFSET, MAX_CHROMA_QP_OFFSET,
1, MAX_CHROMA_QP_OFFSET,
V4L2_CID_MPEG_VIDEO_H264_CHROMA_QP_INDEX_OFFSET,
HFI_PROP_CHROMA_QP_OFFSET,
CAP_FLAG_OUTPUT_PORT},
{DISPLAY_DELAY_ENABLE, DEC, H264|HEVC|VP9|AV1,
0, 1, 1, 0,
V4L2_CID_MPEG_VIDEO_DEC_DISPLAY_DELAY_ENABLE,
HFI_PROP_DECODE_ORDER_OUTPUT,
CAP_FLAG_INPUT_PORT},
{DISPLAY_DELAY, DEC, H264|HEVC|VP9|AV1,
0, 1, 1, 0,
V4L2_CID_MPEG_VIDEO_DEC_DISPLAY_DELAY,
HFI_PROP_DECODE_ORDER_OUTPUT,
CAP_FLAG_INPUT_PORT},
{OUTPUT_ORDER, DEC, H264|HEVC|VP9|AV1,
0, 1, 1, 0,
0,
HFI_PROP_DECODE_ORDER_OUTPUT,
CAP_FLAG_INPUT_PORT},
{INPUT_BUF_HOST_MAX_COUNT, ENC|DEC, CODECS_ALL,
DEFAULT_MAX_HOST_BUF_COUNT, DEFAULT_MAX_HOST_BURST_BUF_COUNT,
1, DEFAULT_MAX_HOST_BUF_COUNT,
0,
HFI_PROP_BUFFER_HOST_MAX_COUNT,
CAP_FLAG_INPUT_PORT},
{OUTPUT_BUF_HOST_MAX_COUNT, ENC|DEC, CODECS_ALL,
DEFAULT_MAX_HOST_BUF_COUNT, DEFAULT_MAX_HOST_BURST_BUF_COUNT,
1, DEFAULT_MAX_HOST_BUF_COUNT,
0,
HFI_PROP_BUFFER_HOST_MAX_COUNT,
CAP_FLAG_OUTPUT_PORT},
{CONCEAL_COLOR_8BIT, DEC, CODECS_ALL, 0x0, 0xff3fcff, 1,
DEFAULT_VIDEO_CONCEAL_COLOR_BLACK,
V4L2_CID_MPEG_VIDEO_MUTE_YUV,
HFI_PROP_CONCEAL_COLOR_8BIT,
CAP_FLAG_INPUT_PORT},
{CONCEAL_COLOR_10BIT, DEC, CODECS_ALL, 0x0, 0x3fffffff, 1,
DEFAULT_VIDEO_CONCEAL_COLOR_BLACK,
V4L2_CID_MPEG_VIDEO_MUTE_YUV,
HFI_PROP_CONCEAL_COLOR_10BIT,
CAP_FLAG_INPUT_PORT},
{STAGE, DEC|ENC, CODECS_ALL,
MSM_VIDC_STAGE_1,
MSM_VIDC_STAGE_2, 1,
MSM_VIDC_STAGE_2,
0,
HFI_PROP_STAGE},
{PIPE, DEC|ENC, CODECS_ALL,
MSM_VIDC_PIPE_1,
MSM_VIDC_PIPE_4, 1,
MSM_VIDC_PIPE_4,
0,
HFI_PROP_PIPE},
{POC, DEC, H264, 0, 2, 1, 1,
0,
HFI_PROP_PIC_ORDER_CNT_TYPE},
{QUALITY_MODE, ENC, CODECS_ALL,
MSM_VIDC_MAX_QUALITY_MODE,
MSM_VIDC_POWER_SAVE_MODE, 1,
MSM_VIDC_POWER_SAVE_MODE},
{CODED_FRAMES, DEC, H264|HEVC|HEIC,
CODED_FRAMES_PROGRESSIVE, CODED_FRAMES_INTERLACE,
1, CODED_FRAMES_PROGRESSIVE,
0,
HFI_PROP_CODED_FRAMES},
{BIT_DEPTH, DEC, CODECS_ALL, BIT_DEPTH_8, BIT_DEPTH_10, 1, BIT_DEPTH_8,
0,
HFI_PROP_LUMA_CHROMA_BIT_DEPTH},
{CODEC_CONFIG, DEC, H264|HEVC|HEIC|AV1, 0, 1, 1, 0,
0, 0,
CAP_FLAG_DYNAMIC_ALLOWED},
{BITSTREAM_SIZE_OVERWRITE, DEC, CODECS_ALL, 0, INT_MAX, 1, 0,
0},
{THUMBNAIL_MODE, DEC, CODECS_ALL,
0, 1, 1, 0,
0,
HFI_PROP_THUMBNAIL_MODE,
CAP_FLAG_INPUT_PORT},
{DEFAULT_HEADER, DEC, CODECS_ALL,
0, 1, 1, 0,
0,
HFI_PROP_DEC_DEFAULT_HEADER},
{RAP_FRAME, DEC, CODECS_ALL,
0, 1, 1, 1,
0,
HFI_PROP_DEC_START_FROM_RAP_FRAME,
CAP_FLAG_INPUT_PORT},
{SEQ_CHANGE_AT_SYNC_FRAME, DEC, CODECS_ALL,
0, 1, 1, 1,
0,
HFI_PROP_SEQ_CHANGE_AT_SYNC_FRAME,
CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED},
{FIRMWARE_PRIORITY_OFFSET, DEC | ENC, CODECS_ALL,
1, 1, 1, 1},
{DPB_LIST, DEC, CODECS_ALL,
0, 1, 1, 0,
0,
HFI_PROP_DPB_LIST,
CAP_FLAG_OUTPUT_PORT},
{FILM_GRAIN, DEC, AV1,
0, 1, 1, 0,
0,
HFI_PROP_AV1_FILM_GRAIN_PRESENT,
CAP_FLAG_VOLATILE},
{SUPER_BLOCK, DEC, AV1,
0, 1, 1, 0,
0,
HFI_PROP_AV1_SUPER_BLOCK_ENABLED},
{DRAP, DEC, AV1,
0, S32_MAX, 1, 0,
0,
HFI_PROP_AV1_DRAP_CONFIG,
CAP_FLAG_INPUT_PORT},
{ALL_INTRA, ENC, H264|HEVC,
0, 1, 1, 0,
0,
0,
CAP_FLAG_OUTPUT_PORT},
{GRID, ENC, HEIC,
0, 1, 1, 1,
0,
HFI_PROP_HEIC_GRID_ENABLE,
CAP_FLAG_OUTPUT_PORT},
{COMPLEXITY, ENC, H264|HEVC,
0, 100,
1, DEFAULT_COMPLEXITY,
0},
};
static struct msm_platform_inst_cap_dependency instance_cap_dependency_data_pineapple[] = {
/* {cap, domain, codec,
* parents,
* children,
* adjust, set}
*/
{PIX_FMTS, ENC, H264,
{0},
{0}},
{PIX_FMTS, ENC, HEVC,
{0},
{PROFILE, MIN_FRAME_QP, MAX_FRAME_QP, I_FRAME_QP, P_FRAME_QP,
B_FRAME_QP, MIN_QUALITY, BLUR_TYPES}},
{PIX_FMTS, ENC, HEIC,
{0},
{PROFILE}},
{PIX_FMTS, DEC, HEVC|HEIC,
{0},
{PROFILE}},
{FRAME_RATE, ENC, CODECS_ALL,
{0},
{0},
NULL,
msm_vidc_set_q16},
{HFLIP, ENC, CODECS_ALL,
{0},
{0},
NULL,
msm_vidc_set_flip},
{VFLIP, ENC, CODECS_ALL,
{0},
{0},
NULL,
msm_vidc_set_flip},
{ROTATION, ENC, CODECS_ALL,
{0},
{0},
NULL,
msm_vidc_set_rotation},
{SUPER_FRAME, ENC, H264|HEVC,
{0},
{INPUT_BUF_HOST_MAX_COUNT, OUTPUT_BUF_HOST_MAX_COUNT},
NULL,
NULL},
{HEADER_MODE, ENC, CODECS_ALL,
{0},
{0},
NULL,
msm_vidc_set_header_mode},
{WITHOUT_STARTCODE, ENC, CODECS_ALL,
{0},
{0},
NULL,
msm_vidc_set_nal_length},
{WITHOUT_STARTCODE, DEC, AV1,
{0},
{0},
NULL,
msm_vidc_set_u32},
{REQUEST_I_FRAME, ENC, H264|HEVC,
{0},
{0},
NULL,
msm_vidc_set_req_sync_frame},
{BIT_RATE, ENC, H264,
{ENH_LAYER_COUNT, BITRATE_MODE, ENTROPY_MODE,
ALL_INTRA, LOWLATENCY_MODE},
{PEAK_BITRATE},
msm_vidc_adjust_bitrate,
msm_vidc_set_bitrate},
{BIT_RATE, ENC, HEVC,
{ENH_LAYER_COUNT, BITRATE_MODE, ALL_INTRA, LOWLATENCY_MODE},
{PEAK_BITRATE},
msm_vidc_adjust_bitrate,
msm_vidc_set_bitrate},
{BITRATE_MODE, ENC, H264,
{0},
{LTR_COUNT, I_FRAME_QP, P_FRAME_QP,
B_FRAME_QP, ENH_LAYER_COUNT, BIT_RATE,
MIN_QUALITY, VBV_DELAY,
PEAK_BITRATE, SLICE_MODE, CONTENT_ADAPTIVE_CODING,
BLUR_TYPES, LOWLATENCY_MODE},
msm_vidc_adjust_bitrate_mode,
msm_vidc_set_u32_enum},
{BITRATE_MODE, ENC, HEVC,
{0},
{LTR_COUNT, I_FRAME_QP, P_FRAME_QP,
B_FRAME_QP, CONSTANT_QUALITY, ENH_LAYER_COUNT,
BIT_RATE, MIN_QUALITY, VBV_DELAY,
PEAK_BITRATE, SLICE_MODE, CONTENT_ADAPTIVE_CODING,
BLUR_TYPES, LOWLATENCY_MODE},
msm_vidc_adjust_bitrate_mode,
msm_vidc_set_u32_enum},
{BITRATE_MODE, ENC, HEIC,
{0},
{CONSTANT_QUALITY},
msm_vidc_adjust_bitrate_mode,
msm_vidc_set_u32_enum},
{CONSTANT_QUALITY, ENC, HEVC|HEIC,
{BITRATE_MODE},
{0},
NULL,
msm_vidc_set_constant_quality},
{GOP_SIZE, ENC, CODECS_ALL,
{ENH_LAYER_COUNT},
{ALL_INTRA},
msm_vidc_adjust_gop_size,
msm_vidc_set_gop_size},
{GOP_SIZE, ENC, HEIC,
{0},
{0},
NULL,
msm_vidc_set_u32},
{B_FRAME, ENC, H264|HEVC,
{ENH_LAYER_COUNT},
{ALL_INTRA},
msm_vidc_adjust_b_frame,
msm_vidc_set_u32},
{B_FRAME, ENC, HEIC,
{0},
{0},
NULL,
msm_vidc_set_u32},
{BLUR_TYPES, ENC, H264|HEVC,
{PIX_FMTS, BITRATE_MODE, MIN_QUALITY},
{0},
msm_vidc_adjust_blur_type,
msm_vidc_set_u32_enum},
{LOWLATENCY_MODE, ENC, H264 | HEVC,
{BITRATE_MODE, DELIVERY_MODE},
{STAGE, BIT_RATE},
msm_vidc_adjust_enc_lowlatency_mode,
NULL},
{LOWLATENCY_MODE, DEC, H264|HEVC|VP9|AV1,
{0},
{STAGE},
msm_vidc_adjust_dec_lowlatency_mode,
NULL},
{LTR_COUNT, ENC, H264|HEVC,
{BITRATE_MODE, ALL_INTRA},
{0},
msm_vidc_adjust_ltr_count,
msm_vidc_set_u32},
{USE_LTR, ENC, H264|HEVC,
{0},
{0},
msm_vidc_adjust_use_ltr,
msm_vidc_set_use_and_mark_ltr},
{MARK_LTR, ENC, H264|HEVC,
{0},
{0},
msm_vidc_adjust_mark_ltr,
msm_vidc_set_use_and_mark_ltr},
{AU_DELIMITER, ENC, H264|HEVC,
{0},
{0},
NULL,
msm_vidc_set_u32},
{CONTENT_ADAPTIVE_CODING, ENC, H264|HEVC,
{BITRATE_MODE, LAYER_ENABLE, LAYER_TYPE},
{REQUEST_PREPROCESS},
msm_vidc_adjust_brs,
msm_vidc_set_vbr_related_properties},
{REQUEST_PREPROCESS, ENC, H264|HEVC,
{CONTENT_ADAPTIVE_CODING},
{0},
msm_vidc_adjust_preprocess,
msm_vidc_set_preprocess},
{MIN_QUALITY, ENC, H264,
{BITRATE_MODE, ENH_LAYER_COUNT},
{BLUR_TYPES},
msm_vidc_adjust_min_quality,
msm_vidc_set_u32},
{MIN_QUALITY, ENC, HEVC,
{BITRATE_MODE, PIX_FMTS, ENH_LAYER_COUNT},
{BLUR_TYPES},
msm_vidc_adjust_min_quality,
msm_vidc_set_u32},
{VBV_DELAY, ENC, H264|HEVC,
{BITRATE_MODE},
{0},
NULL,
msm_vidc_set_cbr_related_properties},
{PEAK_BITRATE, ENC, H264|HEVC,
{BITRATE_MODE, BIT_RATE},
{0},
msm_vidc_adjust_peak_bitrate,
msm_vidc_set_cbr_related_properties},
{MIN_FRAME_QP, ENC, H264,
{0},
{0},
NULL,
msm_vidc_set_min_qp},
{MIN_FRAME_QP, ENC, HEVC|HEIC,
{PIX_FMTS},
{0},
msm_vidc_adjust_hevc_min_qp,
msm_vidc_set_min_qp},
{MAX_FRAME_QP, ENC, H264,
{0},
{0},
NULL,
msm_vidc_set_max_qp},
{MAX_FRAME_QP, ENC, HEVC|HEIC,
{PIX_FMTS},
{0},
msm_vidc_adjust_hevc_max_qp,
msm_vidc_set_max_qp},
{I_FRAME_QP, ENC, HEVC,
{PIX_FMTS, BITRATE_MODE},
{0},
msm_vidc_adjust_hevc_i_frame_qp,
msm_vidc_set_frame_qp},
{I_FRAME_QP, ENC, H264,
{BITRATE_MODE},
{0},
NULL,
msm_vidc_set_frame_qp},
{P_FRAME_QP, ENC, HEVC,
{PIX_FMTS, BITRATE_MODE},
{0},
msm_vidc_adjust_hevc_p_frame_qp,
msm_vidc_set_frame_qp},
{P_FRAME_QP, ENC, H264,
{BITRATE_MODE},
{0},
NULL,
msm_vidc_set_frame_qp},
{B_FRAME_QP, ENC, HEVC,
{PIX_FMTS, BITRATE_MODE},
{0},
msm_vidc_adjust_hevc_b_frame_qp,
msm_vidc_set_frame_qp},
{B_FRAME_QP, ENC, H264,
{BITRATE_MODE},
{0},
NULL,
msm_vidc_set_frame_qp},
{LAYER_TYPE, ENC, H264,
{0},
{CONTENT_ADAPTIVE_CODING}},
{LAYER_ENABLE, ENC, H264|HEVC,
{0},
{CONTENT_ADAPTIVE_CODING}},
{ENH_LAYER_COUNT, ENC, H264|HEVC,
{BITRATE_MODE},
{GOP_SIZE, B_FRAME, BIT_RATE, MIN_QUALITY},
msm_vidc_adjust_layer_count,
msm_vidc_set_layer_count_and_type},
{ENH_LAYER_COUNT, DEC, AV1,
{0},
{0},
NULL,
msm_vidc_set_u32},
{L0_BR, ENC, H264|HEVC,
{0},
{0},
msm_vidc_adjust_dynamic_layer_bitrate,
msm_vidc_set_dynamic_layer_bitrate},
{L1_BR, ENC, H264|HEVC,
{0},
{0},
msm_vidc_adjust_dynamic_layer_bitrate,
msm_vidc_set_dynamic_layer_bitrate},
{L2_BR, ENC, H264|HEVC,
{0},
{0},
msm_vidc_adjust_dynamic_layer_bitrate,
msm_vidc_set_dynamic_layer_bitrate},
{L3_BR, ENC, H264|HEVC,
{0},
{0},
msm_vidc_adjust_dynamic_layer_bitrate,
msm_vidc_set_dynamic_layer_bitrate},
{L4_BR, ENC, H264|HEVC,
{0},
{0},
msm_vidc_adjust_dynamic_layer_bitrate,
msm_vidc_set_dynamic_layer_bitrate},
{L5_BR, ENC, H264|HEVC,
{0},
{0},
msm_vidc_adjust_dynamic_layer_bitrate,
msm_vidc_set_dynamic_layer_bitrate},
{ENTROPY_MODE, ENC, H264,
{PROFILE},
{BIT_RATE},
msm_vidc_adjust_entropy_mode,
msm_vidc_set_u32},
{PROFILE, ENC, H264,
{0},
{ENTROPY_MODE, TRANSFORM_8X8},
NULL,
msm_vidc_set_u32_enum},
{PROFILE, DEC, H264,
{0},
{ENTROPY_MODE},
NULL,
msm_vidc_set_u32_enum},
{PROFILE, ENC|DEC, HEVC|HEIC,
{PIX_FMTS},
{0},
msm_vidc_adjust_profile,
msm_vidc_set_u32_enum},
{PROFILE, DEC, VP9|AV1,
{0},
{0},
NULL,
msm_vidc_set_u32_enum},
{LEVEL, DEC, CODECS_ALL,
{0},
{0},
NULL,
msm_vidc_set_u32_enum},
{LEVEL, ENC, CODECS_ALL,
{0},
{0},
NULL,
msm_vidc_set_level},
{AV1_TIER, DEC, AV1,
{0},
{0},
NULL,
msm_vidc_set_u32_enum},
{HEVC_TIER, ENC|DEC, HEVC|HEIC,
{0},
{0},
NULL,
msm_vidc_set_u32_enum},
{LF_MODE, ENC, CODECS_ALL,
{0},
{0},
NULL,
msm_vidc_set_deblock_mode},
{SLICE_MODE, ENC, H264|HEVC,
{BITRATE_MODE, ALL_INTRA},
{STAGE, DELIVERY_MODE},
msm_vidc_adjust_slice_count,
msm_vidc_set_slice_count},
{SLICE_MODE, ENC, HEIC,
{0},
{0},
msm_vidc_adjust_slice_count,
msm_vidc_set_slice_count},
{TRANSFORM_8X8, ENC, H264,
{PROFILE},
{0},
msm_vidc_adjust_transform_8x8,
msm_vidc_set_u32},
{CHROMA_QP_INDEX_OFFSET, ENC, HEVC,
{0},
{0},
msm_vidc_adjust_chroma_qp_index_offset,
msm_vidc_set_chroma_qp_index_offset},
{DISPLAY_DELAY_ENABLE, DEC, H264|HEVC|VP9|AV1,
{0},
{OUTPUT_ORDER},
NULL,
NULL},
{DISPLAY_DELAY, DEC, H264|HEVC|VP9|AV1,
{0},
{OUTPUT_ORDER},
NULL,
NULL},
{OUTPUT_ORDER, DEC, H264|HEVC|VP9|AV1,
{THUMBNAIL_MODE, DISPLAY_DELAY, DISPLAY_DELAY_ENABLE},
{0},
msm_vidc_adjust_output_order,
msm_vidc_set_u32},
{INPUT_BUF_HOST_MAX_COUNT, ENC|DEC, CODECS_ALL,
{0},
{0},
msm_vidc_adjust_input_buf_host_max_count,
msm_vidc_set_u32},
{INPUT_BUF_HOST_MAX_COUNT, ENC, H264|HEVC,
{SUPER_FRAME},
{0},
msm_vidc_adjust_input_buf_host_max_count,
msm_vidc_set_u32},
{OUTPUT_BUF_HOST_MAX_COUNT, ENC|DEC, CODECS_ALL,
{0},
{0},
msm_vidc_adjust_output_buf_host_max_count,
msm_vidc_set_u32},
{OUTPUT_BUF_HOST_MAX_COUNT, ENC, H264|HEVC,
{SUPER_FRAME, DELIVERY_MODE},
{0},
msm_vidc_adjust_output_buf_host_max_count,
msm_vidc_set_u32},
{CONCEAL_COLOR_8BIT, DEC, CODECS_ALL,
{0},
{0},
NULL,
msm_vidc_set_u32_packed},
{CONCEAL_COLOR_10BIT, DEC, CODECS_ALL,
{0},
{0},
NULL,
msm_vidc_set_u32_packed},
{STAGE, ENC | DEC, CODECS_ALL,
{0},
{0},
NULL,
msm_vidc_set_stage},
{STAGE, ENC, H264|HEVC,
{LOWLATENCY_MODE, SLICE_MODE},
{0},
NULL,
msm_vidc_set_stage},
{STAGE, DEC, H264|HEVC|VP9|AV1,
{LOWLATENCY_MODE},
{0},
NULL,
msm_vidc_set_stage},
{PIPE, DEC|ENC, CODECS_ALL,
{0},
{0},
NULL,
msm_vidc_set_pipe},
{THUMBNAIL_MODE, DEC, CODECS_ALL,
{0},
{OUTPUT_ORDER},
NULL,
msm_vidc_set_u32},
{RAP_FRAME, DEC, CODECS_ALL,
{0},
{0},
NULL,
msm_vidc_set_u32},
{FIRMWARE_PRIORITY_OFFSET, DEC | ENC, CODECS_ALL,
{0},
{0},
NULL,
NULL},
{DPB_LIST, DEC, CODECS_ALL,
{0},
{0},
NULL,
NULL},
{DRAP, DEC, AV1,
{0},
{0},
NULL,
msm_vidc_set_u32},
{ALL_INTRA, ENC, H264|HEVC,
{GOP_SIZE, B_FRAME},
{LTR_COUNT, SLICE_MODE, BIT_RATE},
msm_vidc_adjust_all_intra,
NULL},
{GRID, ENC, HEIC,
{0},
{0},
NULL,
msm_vidc_set_u32},
};
/* Default UBWC config for LPDDR5 */
static struct msm_vidc_ubwc_config_data ubwc_config_pineapple[] = {
UBWC_CONFIG(8, 32, 16, 0, 1, 1, 1),
};
static struct msm_vidc_format_capability format_data_pineapple = {
.codec_info = codec_data_pineapple,
.codec_info_size = ARRAY_SIZE(codec_data_pineapple),
.color_format_info = color_format_data_pineapple,
.color_format_info_size = ARRAY_SIZE(color_format_data_pineapple),
.color_prim_info = color_primaries_data_pineapple,
.color_prim_info_size = ARRAY_SIZE(color_primaries_data_pineapple),
.transfer_char_info = transfer_char_data_pineapple,
.transfer_char_info_size = ARRAY_SIZE(transfer_char_data_pineapple),
.matrix_coeff_info = matrix_coeff_data_pineapple,
.matrix_coeff_info_size = ARRAY_SIZE(matrix_coeff_data_pineapple),
};
static const struct msm_vidc_platform_data pineapple_data = {
.core_data = core_data_pineapple,
.core_data_size = ARRAY_SIZE(core_data_pineapple),
.inst_cap_data = instance_cap_data_pineapple,
.inst_cap_data_size = ARRAY_SIZE(instance_cap_data_pineapple),
.inst_cap_dependency_data = instance_cap_dependency_data_pineapple,
.inst_cap_dependency_data_size = ARRAY_SIZE(instance_cap_dependency_data_pineapple),
.csc_data.vpe_csc_custom_bias_coeff = vpe_csc_custom_bias_coeff,
.csc_data.vpe_csc_custom_matrix_coeff = vpe_csc_custom_matrix_coeff,
.csc_data.vpe_csc_custom_limit_coeff = vpe_csc_custom_limit_coeff,
.ubwc_config = ubwc_config_pineapple,
.format_data = &format_data_pineapple,
};
int msm_vidc_pineapple_check_ddr_type(void)
{
u32 ddr_type;
ddr_type = of_fdt_get_ddrtype();
if (ddr_type != DDR_TYPE_LPDDR5 &&
ddr_type != DDR_TYPE_LPDDR5X) {
d_vpr_e("%s: wrong ddr type %d\n", __func__, ddr_type);
return -EINVAL;
} else {
d_vpr_h("%s: ddr type %d\n", __func__, ddr_type);
}
return 0;
}
static int msm_vidc_init_data(struct msm_vidc_core *core)
{
int rc = 0;
if (!core || !core->platform) {
d_vpr_e("%s: invalid params\n", __func__);
return -EINVAL;
}
d_vpr_h("%s: initialize pineapple data\n", __func__);
core->platform->data = pineapple_data;
rc = msm_vidc_pineapple_check_ddr_type();
if (rc)
return rc;
return rc;
}
int msm_vidc_init_platform_pineapple(struct msm_vidc_core *core, struct device *dev)
{
int rc = 0;
rc = msm_vidc_init_data(core);
if (rc)
return rc;
return 0;
}
int msm_vidc_deinit_platform_pineapple(struct msm_vidc_core *core, struct device *dev)
{
/* do nothing */
return 0;
}