video: driver: update instance database with controls
Update instance database with v4l2 controls. Change-Id: I0715edfcbf46a82c8e2f67ec298185e2cf4eb5d0 Signed-off-by: Akshata Sahukar <asahukar@codeaurora.org>
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

parent
7fe61f51d3
commit
10e2017aa8
@@ -87,13 +87,13 @@ static struct msm_platform_core_capability core_data_waipio[] = {
|
|||||||
static struct msm_platform_inst_capability instance_data_waipio[] = {
|
static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||||
/* {cap, domain, codec,
|
/* {cap, domain, codec,
|
||||||
* min, max, step_or_mask, value,
|
* min, max, step_or_mask, value,
|
||||||
* v4l2_id, hfi_id,
|
* v4l2_id,
|
||||||
|
* hfi_id,
|
||||||
* flags,
|
* flags,
|
||||||
* parents,
|
* parents,
|
||||||
* children,
|
* children,
|
||||||
* adjust, set}
|
* adjust, set}
|
||||||
*/
|
*/
|
||||||
{CODEC},
|
|
||||||
{FRAME_WIDTH, ENC|DEC, CODECS_ALL, 128, 8192, 1, 1920},
|
{FRAME_WIDTH, ENC|DEC, CODECS_ALL, 128, 8192, 1, 1920},
|
||||||
{FRAME_HEIGHT, ENC|DEC, CODECS_ALL, 128, 8192, 1, 1080},
|
{FRAME_HEIGHT, ENC|DEC, CODECS_ALL, 128, 8192, 1, 1080},
|
||||||
{PIX_FMTS, ENC, CODECS_ALL,
|
{PIX_FMTS, ENC, CODECS_ALL,
|
||||||
@@ -110,24 +110,11 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
|||||||
MSM_VIDC_FMT_NV12_UBWC},
|
MSM_VIDC_FMT_NV12_UBWC},
|
||||||
{MIN_BUFFERS_INPUT, ENC|DEC, CODECS_ALL, 0, 64, 1, 4,
|
{MIN_BUFFERS_INPUT, ENC|DEC, CODECS_ALL, 0, 64, 1, 4,
|
||||||
V4L2_CID_MIN_BUFFERS_FOR_OUTPUT},
|
V4L2_CID_MIN_BUFFERS_FOR_OUTPUT},
|
||||||
{MIN_BUFFERS_OUTPUT, ENC|DEC, CODECS_ALL, 0, 64, 1, 4,
|
{MIN_BUFFERS_OUTPUT, ENC|DEC, CODECS_ALL,
|
||||||
V4L2_CID_MIN_BUFFERS_FOR_CAPTURE},
|
0, 64, 1, 4,
|
||||||
{DECODE_ORDER, DEC, CODECS_ALL, 0, 1, 1, 0,
|
V4L2_CID_MIN_BUFFERS_FOR_CAPTURE,
|
||||||
V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE,
|
HFI_PROP_BUFFER_FW_MIN_OUTPUT_COUNT,
|
||||||
HFI_PROP_DECODE_ORDER_OUTPUT},
|
CAP_FLAG_ROOT},
|
||||||
{THUMBNAIL_MODE, DEC, CODECS_ALL, 0, 1, 1, 0,
|
|
||||||
V4L2_CID_MPEG_VIDC_THUMBNAIL_MODE,
|
|
||||||
HFI_PROP_THUMBNAIL_MODE},
|
|
||||||
{SECURE_MODE, ENC|DEC, CODECS_ALL, 0, 1, 1, 0,
|
|
||||||
V4L2_CID_MPEG_VIDC_SECURE,
|
|
||||||
HFI_PROP_SECURE},
|
|
||||||
{LOWLATENCY_MODE, ENC|DEC, CODECS_ALL, 0, 1, 1, 0,
|
|
||||||
V4L2_CID_MPEG_VIDC_LOWLATENCY_REQUEST},
|
|
||||||
/* {LOWLATENCY_HINT, DEC, CODECS_ALL, 0, 1, 1, 0,
|
|
||||||
V4L2_CID_MPEG_VIDC_VIDEO_LOWLATENCY_HINT},
|
|
||||||
{BUF_SIZE_LIMIT, ENC|DEC, CODECS_ALL, 0, 0x0fffffff, 1, 0,
|
|
||||||
V4L2_CID_MPEG_VIDC_VIDEO_BUFFER_SIZE_LIMIT},
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* (8192 * 4320) / 256 */
|
/* (8192 * 4320) / 256 */
|
||||||
{MBPF, ENC|DEC, CODECS_ALL, 64, 138240, 1, 138240},
|
{MBPF, ENC|DEC, CODECS_ALL, 64, 138240, 1, 138240},
|
||||||
@@ -135,121 +122,20 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
|||||||
{MBPS, ENC|DEC, CODECS_ALL, 64, 7833600, 1, 7833600},
|
{MBPS, ENC|DEC, CODECS_ALL, 64, 7833600, 1, 7833600},
|
||||||
{FRAME_RATE, ENC|DEC, CODECS_ALL, 1, 960, 1, 30},
|
{FRAME_RATE, ENC|DEC, CODECS_ALL, 1, 960, 1, 30},
|
||||||
|
|
||||||
{BIT_RATE, ENC|DEC, CODECS_ALL,
|
|
||||||
1, 220000000, 1, 20000000,
|
|
||||||
V4L2_CID_MPEG_VIDEO_BITRATE, HFI_PROP_TOTAL_BITRATE,
|
|
||||||
CAP_FLAG_DYNAMIC_ALLOWED,
|
|
||||||
/* TO DO parents */ {0},
|
|
||||||
{LAYER_BITRATE, SLICE_BYTE},
|
|
||||||
msm_vidc_adjust_bitrate, msm_vidc_set_s32},
|
|
||||||
|
|
||||||
{BIT_RATE, ENC, HEVC,
|
|
||||||
1, 160000000, 1, 20000000,
|
|
||||||
V4L2_CID_MPEG_VIDEO_BITRATE, HFI_PROP_TOTAL_BITRATE,
|
|
||||||
CAP_FLAG_DYNAMIC_ALLOWED,
|
|
||||||
/* TO DO parents */{0},
|
|
||||||
{LAYER_BITRATE, SLICE_BYTE},
|
|
||||||
msm_vidc_adjust_bitrate, msm_vidc_set_s32},
|
|
||||||
|
|
||||||
{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_MENU,
|
|
||||||
{CODEC, PROFILE},
|
|
||||||
{BIT_RATE},
|
|
||||||
msm_vidc_adjust_entropy_mode, msm_vidc_set_u32},
|
|
||||||
|
|
||||||
{PROFILE, ENC|DEC, H264,
|
|
||||||
V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE,
|
|
||||||
V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10,
|
|
||||||
BIT(V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE) |
|
|
||||||
BIT(V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE) |
|
|
||||||
BIT(V4L2_MPEG_VIDEO_H264_PROFILE_MAIN) |
|
|
||||||
BIT(V4L2_MPEG_VIDEO_H264_PROFILE_HIGH) |
|
|
||||||
BIT(V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10),
|
|
||||||
V4L2_MPEG_VIDEO_H264_PROFILE_HIGH,
|
|
||||||
V4L2_CID_MPEG_VIDEO_H264_PROFILE, HFI_PROP_PROFILE,
|
|
||||||
CAP_FLAG_ROOT | CAP_FLAG_MENU,
|
|
||||||
{0},
|
|
||||||
{ENTROPY_MODE},
|
|
||||||
NULL, msm_vidc_set_u32},
|
|
||||||
|
|
||||||
{LEVEL, ENC|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_2,
|
|
||||||
V4L2_CID_MPEG_VIDEO_H264_LEVEL, HFI_PROP_LEVEL,
|
|
||||||
/* TO DO(AS) */
|
|
||||||
CAP_FLAG_ROOT | CAP_FLAG_MENU,
|
|
||||||
{0},
|
|
||||||
{0},
|
|
||||||
NULL, msm_vidc_set_u32},
|
|
||||||
|
|
||||||
{CABAC_BITRATE, ENC, H264, 1, 160000000, 1, 20000000},
|
|
||||||
{VBV_DELAY, ENC, CODECS_ALL,
|
|
||||||
0, 1000, 500, 0,
|
|
||||||
V4L2_CID_MPEG_VIDEO_VBV_DELAY},
|
|
||||||
|
|
||||||
{SCALE_X, ENC, CODECS_ALL, 8192, 65536, 1, 8192},
|
{SCALE_X, ENC, CODECS_ALL, 8192, 65536, 1, 8192},
|
||||||
{SCALE_Y, ENC, CODECS_ALL, 8192, 65536, 1, 8192},
|
{SCALE_Y, ENC, CODECS_ALL, 8192, 65536, 1, 8192},
|
||||||
{SCALE_X, DEC, CODECS_ALL, 65536, 65536, 1, 65536},
|
{SCALE_X, DEC, CODECS_ALL, 65536, 65536, 1, 65536},
|
||||||
{SCALE_Y, DEC, CODECS_ALL, 65536, 65536, 1, 65536},
|
{SCALE_Y, DEC, CODECS_ALL, 65536, 65536, 1, 65536},
|
||||||
{B_FRAME, ENC, H264|HEVC, 0, 1, 1, 0},
|
{B_FRAME, ENC, H264|HEVC,
|
||||||
{HIER_P_LAYERS, ENC, H264|HEVC, 0, 6, 1, 0},
|
V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
{LTR_COUNT, ENC, H264|HEVC, 0, 2, 1, 0},
|
1, V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||||
|
V4L2_CID_MPEG_VIDEO_B_FRAMES,
|
||||||
|
HFI_PROP_MAX_B_FRAMES,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
/* ((4096 * 2304) / 256) * 60 fps */
|
/* ((4096 * 2304) / 256) * 60 fps */
|
||||||
{POWER_SAVE_MBPS, ENC, CODECS_ALL,
|
{POWER_SAVE_MBPS, ENC, CODECS_ALL,
|
||||||
0, 2211840, 1, 2211840},
|
0, 2211840, 1, 2211840},
|
||||||
{I_FRAME_QP, ENC, H264|HEVC, 0, 51, 1, 10},
|
|
||||||
{P_FRAME_QP, ENC, H264|HEVC, 0, 51, 1, 20},
|
|
||||||
{B_FRAME_QP, ENC, H264|HEVC, 0, 51, 1, 20},
|
|
||||||
{I_FRAME_QP, ENC, VP9, 0, 127, 1, 20},
|
|
||||||
{P_FRAME_QP, ENC, VP9, 0, 127, 1, 40},
|
|
||||||
{B_FRAME_QP, ENC, VP9, 0, 127, 1, 40},
|
|
||||||
/* 10 slices */
|
|
||||||
{SLICE_BYTE, ENC, H264|HEVC, 1, 10, 1, 10},
|
|
||||||
{SLICE_MB, ENC, H264|HEVC, 1, 10, 1, 10},
|
|
||||||
|
|
||||||
/* Mpeg2 decoder specific */
|
|
||||||
{FRAME_WIDTH, DEC, MPEG2, 128, 1920, 1, 1920},
|
|
||||||
{FRAME_HEIGHT, DEC, MPEG2, 128, 1920, 1, 1080},
|
|
||||||
/* (1920 * 1088) / 256 */
|
|
||||||
{MBPF, DEC, MPEG2, 64, 8160, 1, 8160},
|
|
||||||
/* ((1920 * 1088) / 256) * 30*/
|
|
||||||
{MBPS, DEC, MPEG2, 64, 244800, 1, 244800},
|
|
||||||
{FRAME_RATE, DEC, MPEG2, 1, 30, 1, 30},
|
|
||||||
{BIT_RATE, DEC, MPEG2, 1, 40000000, 1, 20000000},
|
|
||||||
|
|
||||||
/* Secure usecase specific */
|
|
||||||
{SECURE_FRAME_WIDTH, ENC|DEC, CODECS_ALL, 128, 4096, 1, 1920},
|
|
||||||
{SECURE_FRAME_HEIGHT, ENC|DEC, CODECS_ALL, 128, 4096, 1, 1080},
|
|
||||||
/* (4096 * 2304) / 256 */
|
|
||||||
{SECURE_MBPF, ENC|DEC, CODECS_ALL, 64, 36864, 1, 36864},
|
|
||||||
{SECURE_BIT_RATE, ENC|DEC, CODECS_ALL, 1, 40000000, 1, 20000000},
|
|
||||||
|
|
||||||
/* Batch Mode Decode */
|
/* Batch Mode Decode */
|
||||||
{BATCH_MBPF, DEC, CODECS_ALL, 64, 34816, 1, 34816},
|
{BATCH_MBPF, DEC, CODECS_ALL, 64, 34816, 1, 34816},
|
||||||
@@ -280,6 +166,734 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
|||||||
{MB_CYCLES_LP, DEC, CODECS_ALL, 200, 200, 1, 200},
|
{MB_CYCLES_LP, DEC, CODECS_ALL, 200, 200, 1, 200},
|
||||||
{MB_CYCLES_FW, ENC|DEC, CODECS_ALL, 326389, 326389, 1, 326389},
|
{MB_CYCLES_FW, ENC|DEC, CODECS_ALL, 326389, 326389, 1, 326389},
|
||||||
{MB_CYCLES_FW_VPP, ENC|DEC, CODECS_ALL, 44156, 44156, 1, 44156},
|
{MB_CYCLES_FW_VPP, ENC|DEC, CODECS_ALL, 44156, 44156, 1, 44156},
|
||||||
|
|
||||||
|
// confirm codec
|
||||||
|
{B_FRAME_MIN_QP, ENC, HEVC|H264,
|
||||||
|
0, 51, 1, 20,
|
||||||
|
V4L2_CID_MPEG_VIDC_B_FRAME_MIN_QP,
|
||||||
|
HFI_PROP_MIN_QP_PACKED,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{B_FRAME_MAX_QP, ENC, HEVC|H264,
|
||||||
|
0, 51, 1, 20,
|
||||||
|
V4L2_CID_MPEG_VIDC_B_FRAME_MAX_QP,
|
||||||
|
HFI_PROP_MAX_QP_PACKED,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{HFLIP, ENC, CODECS_ALL,
|
||||||
|
V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||||
|
V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
|
1, V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||||
|
V4L2_CID_HFLIP,
|
||||||
|
HFI_PROP_FLIP,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{VFLIP, ENC, CODECS_ALL,
|
||||||
|
V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||||
|
V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
|
1, V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||||
|
V4L2_CID_VFLIP,
|
||||||
|
HFI_PROP_FLIP,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{PREPEND_SPSPPS_TO_IDR, ENC, CODECS_ALL,
|
||||||
|
V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||||
|
V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
|
1, V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||||
|
V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR,
|
||||||
|
HFI_PROP_SEQ_HEADER_MODE,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{REQUEST_I_FRAME, ENC, CODECS_ALL,
|
||||||
|
0, 0, 0, 0,
|
||||||
|
V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME,
|
||||||
|
HFI_PROP_REQUEST_SYNC_FRAME,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{SLICE_INTERFACE, DEC, CODECS_ALL,
|
||||||
|
0, 0, 0, 0,
|
||||||
|
V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE,
|
||||||
|
0},
|
||||||
|
|
||||||
|
{FRAME_RC, ENC, CODECS_ALL,
|
||||||
|
V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
|
1, V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
|
V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE,
|
||||||
|
0},
|
||||||
|
|
||||||
|
{BITRATE_MODE, ENC, CODECS_ALL,
|
||||||
|
V4L2_MPEG_VIDEO_BITRATE_MODE_VBR,
|
||||||
|
V4L2_MPEG_VIDEO_BITRATE_MODE_CBR,
|
||||||
|
/* TODO: MBR, CBR_VFR, MBR_VFR, CQ */
|
||||||
|
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_ROOT | CAP_FLAG_MENU},
|
||||||
|
|
||||||
|
{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_ROOT | CAP_FLAG_MENU},
|
||||||
|
|
||||||
|
// confirm codec
|
||||||
|
{GOP_SIZE, ENC, CODECS_ALL,
|
||||||
|
0, MAX_GOP, 1, 2 * DEFAULT_FPS - 1,
|
||||||
|
V4L2_CID_MPEG_VIDEO_GOP_SIZE,
|
||||||
|
HFI_PROP_MAX_GOP_FRAMES,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{GOP_CLOSURE, ENC, CODECS_ALL,
|
||||||
|
V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
|
1, V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
|
V4L2_CID_MPEG_VIDEO_GOP_CLOSURE,
|
||||||
|
0},
|
||||||
|
|
||||||
|
{BIT_RATE, ENC, CODECS_ALL,
|
||||||
|
1, 220000000, 1, 20000000,
|
||||||
|
V4L2_CID_MPEG_VIDEO_BITRATE,
|
||||||
|
HFI_PROP_TOTAL_BITRATE,
|
||||||
|
CAP_FLAG_DYNAMIC_ALLOWED,
|
||||||
|
/* TO DO parents */ {0},
|
||||||
|
{SLICE_MAX_BYTES},
|
||||||
|
msm_vidc_adjust_bitrate, msm_vidc_set_s32},
|
||||||
|
|
||||||
|
{BIT_RATE, DEC, CODECS_ALL, 1, 220000000, 1, 220000000},
|
||||||
|
|
||||||
|
/* Secure usecase specific */
|
||||||
|
{SECURE_FRAME_WIDTH, ENC|DEC, CODECS_ALL, 128, 4096, 1, 1920},
|
||||||
|
|
||||||
|
{SECURE_FRAME_HEIGHT, ENC|DEC, CODECS_ALL, 128, 4096, 1, 1080},
|
||||||
|
|
||||||
|
/* (4096 * 2304) / 256 */
|
||||||
|
{SECURE_MBPF, ENC|DEC, CODECS_ALL, 64, 36864, 1, 36864},
|
||||||
|
|
||||||
|
{SECURE_MODE, ENC|DEC, CODECS_ALL,
|
||||||
|
V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
|
1, V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||||
|
V4L2_CID_MPEG_VIDC_SECURE,
|
||||||
|
HFI_PROP_SECURE,
|
||||||
|
CAP_FLAG_ROOT,
|
||||||
|
{0},
|
||||||
|
{0}},
|
||||||
|
|
||||||
|
{BLUR_TYPES, ENC, CODECS_ALL,
|
||||||
|
VIDC_BLUR_NONE, VIDC_BLUR_ADAPTIVE, 1, VIDC_BLUR_NONE,
|
||||||
|
V4L2_CID_MPEG_VIDC_VIDEO_BLUR_TYPES,
|
||||||
|
HFI_PROP_BLUR_TYPES,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{BLUR_RESOLUTION, ENC, CODECS_ALL,
|
||||||
|
0, S32_MAX, 1, 0,
|
||||||
|
V4L2_CID_MPEG_VIDC_VIDEO_BLUR_RESOLUTION,
|
||||||
|
HFI_PROP_BLUR_RESOLUTION,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
/* Needed for control initialization. TODO */
|
||||||
|
/* {CSC_CUSTOM_MATRIX, ENC, CODECS_ALL,
|
||||||
|
V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||||
|
V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
|
1, V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||||
|
V4L2_CID_MPEG_VIDC_VIDEO_VPE_CSC_CUSTOM_MATRIX,
|
||||||
|
HFI_PROP_CSC_MATRIX,
|
||||||
|
CAP_FLAG_ROOT}, */
|
||||||
|
|
||||||
|
{HEIC, ENC, HEVC,
|
||||||
|
V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
|
1, V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||||
|
V4L2_CID_MPEG_VIDC_HEIC,
|
||||||
|
HFI_PROP_HEIC_GRID_ENABLE,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{LOWLATENCY_MODE, ENC|DEC, CODECS_ALL,
|
||||||
|
V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
|
1, V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||||
|
V4L2_CID_MPEG_VIDC_LOWLATENCY_REQUEST,
|
||||||
|
HFI_PROP_STAGE,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{LTR_COUNT, ENC, H264|HEVC,
|
||||||
|
0, 2, 1, 0,
|
||||||
|
V4L2_CID_MPEG_VIDC_LTRCOUNT,
|
||||||
|
HFI_PROP_LTR_COUNT,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{USE_LTR, ENC, H264|HEVC,
|
||||||
|
0, ((1 << MAX_LTR_FRAME_COUNT) - 1), 1, 0,
|
||||||
|
V4L2_CID_MPEG_VIDC_USELTRFRAME,
|
||||||
|
HFI_PROP_LTR_USE,
|
||||||
|
CAP_FLAG_ROOT,
|
||||||
|
{LTR_COUNT},
|
||||||
|
{0}},
|
||||||
|
|
||||||
|
{MARK_LTR, ENC, H264|HEVC,
|
||||||
|
0, (MAX_LTR_FRAME_COUNT - 1), 1, 0,
|
||||||
|
V4L2_CID_MPEG_VIDC_MARKLTRFRAME,
|
||||||
|
HFI_PROP_LTR_MARK,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{BASELAYER_PRIORITY, ENC, H264|HEVC,
|
||||||
|
0, MAX_BASE_LAYER_PRIORITY_ID, 1, 0,
|
||||||
|
V4L2_CID_MPEG_VIDC_BASELAYER_PRIORITY,
|
||||||
|
HFI_PROP_BASELAYER_PRIORITYID,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{IR_RANDOM, ENC, CODECS_ALL,
|
||||||
|
0, MAX_INTRA_REFRESH_MBS, 1, 0,
|
||||||
|
V4L2_CID_MPEG_VIDC_INTRA_REFRESH_PERIOD,
|
||||||
|
HFI_PROP_IR_RANDOM_PERIOD,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{AU_DELIMITER, ENC, H264|HEVC,
|
||||||
|
V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||||
|
V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
|
1, V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||||
|
V4L2_CID_MPEG_VIDC_AU_DELIMITER,
|
||||||
|
HFI_PROP_AUD,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
// confirm codec
|
||||||
|
{TIME_DELTA_BASED_RC, ENC, CODECS_ALL,
|
||||||
|
V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
|
1, V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
|
V4L2_CID_MPEG_VIDC_TIME_DELTA_BASED_RC,
|
||||||
|
HFI_PROP_TIME_DELTA_BASED_RATE_CONTROL,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
// confirm codec
|
||||||
|
{CONTENT_ADAPTIVE_CODING, ENC, CODECS_ALL,
|
||||||
|
V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
|
1, V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
|
V4L2_CID_MPEG_VIDC_CONTENT_ADAPTIVE_CODING,
|
||||||
|
HFI_PROP_CONTENT_ADAPTIVE_CODING,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{BITRATE_BOOST, ENC, CODECS_ALL,
|
||||||
|
0, 100, 25, 25,
|
||||||
|
V4L2_CID_MPEG_VIDC_QUALITY_BITRATE_BOOST,
|
||||||
|
HFI_PROP_CONST_QUALITY_BITRATE_BOOST,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{ROTATION, ENC, CODECS_ALL,
|
||||||
|
0, 270, 90, 0,
|
||||||
|
V4L2_CID_ROTATE,
|
||||||
|
HFI_PROP_ROTATION,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{VBV_DELAY, ENC, CODECS_ALL,
|
||||||
|
0, 1000, 500, 0,
|
||||||
|
V4L2_CID_MPEG_VIDEO_VBV_DELAY},
|
||||||
|
|
||||||
|
/* HEVC specific */
|
||||||
|
{MIN_FRAME_QP, ENC, HEVC,
|
||||||
|
0, 51, 1, 20,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP,
|
||||||
|
HFI_PROP_MIN_QP_PACKED,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{MAX_FRAME_QP, ENC, HEVC,
|
||||||
|
0, 51, 1, 20,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP,
|
||||||
|
HFI_PROP_MAX_QP_PACKED,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{HEVC_HIER_QP, ENC, HEVC,
|
||||||
|
V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
|
1, V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_HIER_QP,
|
||||||
|
HFI_PROP_QP_PACKED,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
/*
|
||||||
|
* HEVC I_MIN_QP, I_MAX_QP, P_MIN_QP, P_MAX_QP, B_MIN_QP, B_MAX_QP are missing
|
||||||
|
*/
|
||||||
|
{I_FRAME_QP, ENC, HEVC,
|
||||||
|
0, 51, 1, 10,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP,
|
||||||
|
HFI_PROP_QP_PACKED,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{P_FRAME_QP, ENC, HEVC,
|
||||||
|
0, 51, 1, 20,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QP,
|
||||||
|
HFI_PROP_QP_PACKED,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{B_FRAME_QP, ENC, HEVC,
|
||||||
|
0, 51, 1, 20,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP,
|
||||||
|
HFI_PROP_QP_PACKED,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{HIER_CODING_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_ROOT | CAP_FLAG_MENU},
|
||||||
|
|
||||||
|
{HIER_CODING_LAYER, ENC, HEVC,
|
||||||
|
0, 5, 1, 0,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER,
|
||||||
|
HFI_PROP_LAYER_COUNT,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{L0_QP, ENC, HEVC,
|
||||||
|
0, 51, 1, 20,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_QP,
|
||||||
|
HFI_PROP_QP_PACKED,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{L1_QP, ENC, HEVC,
|
||||||
|
0, 51, 1, 20,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_QP,
|
||||||
|
HFI_PROP_QP_PACKED,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{L2_QP, ENC, HEVC,
|
||||||
|
0, 51, 1, 20,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_QP,
|
||||||
|
HFI_PROP_QP_PACKED,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{L3_QP, ENC, HEVC,
|
||||||
|
0, 51, 1, 20,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_QP,
|
||||||
|
HFI_PROP_QP_PACKED,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{L4_QP, ENC, HEVC,
|
||||||
|
0, 51, 1, 20,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_QP,
|
||||||
|
HFI_PROP_QP_PACKED,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{L5_QP, ENC, HEVC,
|
||||||
|
0, 51, 1, 20,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_QP,
|
||||||
|
HFI_PROP_QP_PACKED,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{PROFILE, ENC|DEC, HEVC,
|
||||||
|
V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN,
|
||||||
|
V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10,
|
||||||
|
BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN) |
|
||||||
|
BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE) |
|
||||||
|
BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10),
|
||||||
|
V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_PROFILE,
|
||||||
|
HFI_PROP_PROFILE,
|
||||||
|
CAP_FLAG_ROOT | CAP_FLAG_MENU,
|
||||||
|
{0},
|
||||||
|
{ENTROPY_MODE},
|
||||||
|
NULL, msm_vidc_set_u32},
|
||||||
|
|
||||||
|
{LEVEL, ENC|DEC, HEVC,
|
||||||
|
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_2,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_LEVEL,
|
||||||
|
HFI_PROP_LEVEL,
|
||||||
|
CAP_FLAG_ROOT | CAP_FLAG_MENU,
|
||||||
|
{0},
|
||||||
|
{0},
|
||||||
|
NULL, msm_vidc_set_u32},
|
||||||
|
|
||||||
|
{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_ROOT | CAP_FLAG_MENU,
|
||||||
|
{0},
|
||||||
|
{0},
|
||||||
|
NULL, msm_vidc_set_u32},
|
||||||
|
|
||||||
|
{LF_MODE, ENC, HEVC,
|
||||||
|
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_ROOT | CAP_FLAG_MENU},
|
||||||
|
|
||||||
|
{LF_BETA, ENC, HEVC,
|
||||||
|
-6, 6, 1, 0,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_LF_BETA_OFFSET_DIV2,
|
||||||
|
HFI_PROP_DEBLOCKING_MODE,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{LF_TC, ENC, HEVC,
|
||||||
|
-6, 6, 1, 0,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_LF_TC_OFFSET_DIV2,
|
||||||
|
HFI_PROP_DEBLOCKING_MODE,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{LOSSLESS, ENC, HEVC,
|
||||||
|
V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
|
1, V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_LOSSLESS_CU,
|
||||||
|
HFI_PROP_RATE_CONTROL,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{L0_BR, ENC, HEVC,
|
||||||
|
1, 220000000, 1, 20000000,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BR,
|
||||||
|
HFI_PROP_BITRATE_LAYER1,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{L1_BR, ENC, HEVC,
|
||||||
|
1, 220000000, 1, 20000000,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BR,
|
||||||
|
HFI_PROP_BITRATE_LAYER2,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{L2_BR, ENC, HEVC,
|
||||||
|
1, 220000000, 1, 20000000,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BR,
|
||||||
|
HFI_PROP_BITRATE_LAYER3,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{L3_BR, ENC, HEVC,
|
||||||
|
1, 220000000, 1, 20000000,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BR,
|
||||||
|
HFI_PROP_BITRATE_LAYER4,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{L4_BR, ENC, HEVC,
|
||||||
|
1, 220000000, 1, 20000000,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BR,
|
||||||
|
HFI_PROP_BITRATE_LAYER5,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{L5_BR, ENC, HEVC,
|
||||||
|
1, 220000000, 1, 20000000,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR,
|
||||||
|
HFI_PROP_BITRATE_LAYER6,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{BIT_RATE, ENC, HEVC,
|
||||||
|
1, 160000000, 1, 20000000,
|
||||||
|
V4L2_CID_MPEG_VIDEO_BITRATE,
|
||||||
|
HFI_PROP_TOTAL_BITRATE,
|
||||||
|
CAP_FLAG_DYNAMIC_ALLOWED,
|
||||||
|
/* TODO parents */{0},
|
||||||
|
{SLICE_MAX_BYTES},
|
||||||
|
msm_vidc_adjust_bitrate, msm_vidc_set_s32},
|
||||||
|
|
||||||
|
{SLICE_MAX_BYTES, ENC, H264|HEVC,
|
||||||
|
1, MAX_BITRATE / DEFAULT_FPS / 8 / 10,
|
||||||
|
1, MAX_BITRATE / DEFAULT_FPS / 8 / 10,
|
||||||
|
V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES,
|
||||||
|
HFI_PROP_MULTI_SLICE_BYTES_COUNT,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{SLICE_MAX_MB, ENC, H264|HEVC,
|
||||||
|
1, (MAX_WIDTH * MAX_HEIGHT) / 256 / DEFAULT_FPS / 10,
|
||||||
|
1, (MAX_WIDTH * MAX_HEIGHT) / 256 / DEFAULT_FPS / 10,
|
||||||
|
V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB,
|
||||||
|
HFI_PROP_MULTI_SLICE_MB_COUNT,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{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_ROOT | CAP_FLAG_MENU},
|
||||||
|
|
||||||
|
/* Mpeg2 decoder specific */
|
||||||
|
{BIT_RATE, DEC, MPEG2,
|
||||||
|
1, 40000000, 1, 20000000,
|
||||||
|
V4L2_CID_MPEG_VIDEO_BITRATE,
|
||||||
|
HFI_PROP_TOTAL_BITRATE,
|
||||||
|
CAP_FLAG_DYNAMIC_ALLOWED,
|
||||||
|
{0}, {0},
|
||||||
|
msm_vidc_adjust_bitrate, msm_vidc_set_s32},
|
||||||
|
|
||||||
|
{LEVEL, DEC, MPEG2,
|
||||||
|
V4L2_MPEG_VIDEO_MPEG2_LEVEL_LOW,
|
||||||
|
V4L2_MPEG_VIDEO_MPEG2_LEVEL_HIGH,
|
||||||
|
BIT(V4L2_MPEG_VIDEO_MPEG2_LEVEL_LOW) |
|
||||||
|
BIT(V4L2_MPEG_VIDEO_MPEG2_LEVEL_MAIN) |
|
||||||
|
BIT(V4L2_MPEG_VIDEO_MPEG2_LEVEL_HIGH_1440) |
|
||||||
|
BIT(V4L2_MPEG_VIDEO_MPEG2_LEVEL_HIGH),
|
||||||
|
V4L2_MPEG_VIDEO_MPEG2_LEVEL_HIGH,
|
||||||
|
V4L2_CID_MPEG_VIDEO_MPEG2_LEVEL,
|
||||||
|
HFI_PROP_LEVEL,
|
||||||
|
CAP_FLAG_ROOT | CAP_FLAG_MENU},
|
||||||
|
|
||||||
|
{PROFILE, DEC, MPEG2,
|
||||||
|
V4L2_MPEG_VIDEO_MPEG2_PROFILE_SIMPLE,
|
||||||
|
V4L2_MPEG_VIDEO_MPEG2_PROFILE_MAIN,
|
||||||
|
BIT(V4L2_MPEG_VIDEO_MPEG2_PROFILE_SIMPLE) |
|
||||||
|
BIT(V4L2_MPEG_VIDEO_MPEG2_PROFILE_MAIN),
|
||||||
|
V4L2_MPEG_VIDEO_MPEG2_PROFILE_MAIN,
|
||||||
|
V4L2_CID_MPEG_VIDEO_MPEG2_PROFILE,
|
||||||
|
HFI_PROP_PROFILE,
|
||||||
|
CAP_FLAG_ROOT | CAP_FLAG_MENU},
|
||||||
|
|
||||||
|
{FRAME_WIDTH, DEC, MPEG2, 128, 1920, 1, 1920},
|
||||||
|
{FRAME_HEIGHT, DEC, MPEG2, 128, 1920, 1, 1080},
|
||||||
|
/* (1920 * 1088) / 256 */
|
||||||
|
{MBPF, DEC, MPEG2, 64, 8160, 1, 8160},
|
||||||
|
/* ((1920 * 1088) / 256) * 30*/
|
||||||
|
{MBPS, DEC, MPEG2, 64, 244800, 1, 244800},
|
||||||
|
{FRAME_RATE, DEC, MPEG2, 1, 30, 1, 30},
|
||||||
|
|
||||||
|
/* H264 specific */
|
||||||
|
{CABAC_BITRATE, ENC, H264, 1, 160000000, 1, 20000000},
|
||||||
|
|
||||||
|
{I_FRAME_QP, ENC, H264,
|
||||||
|
0, 51, 1, 10,
|
||||||
|
V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP,
|
||||||
|
HFI_PROP_QP_PACKED,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{P_FRAME_QP, ENC, H264,
|
||||||
|
0, 51, 1, 20,
|
||||||
|
V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP,
|
||||||
|
HFI_PROP_QP_PACKED,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{B_FRAME_QP, ENC, H264,
|
||||||
|
0, 51, 1, 20,
|
||||||
|
V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP,
|
||||||
|
HFI_PROP_QP_PACKED,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{MIN_FRAME_QP, ENC, H264,
|
||||||
|
0, 51, 1, 20,
|
||||||
|
V4L2_CID_MPEG_VIDEO_H264_MIN_QP,
|
||||||
|
HFI_PROP_MIN_QP_PACKED,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{MAX_FRAME_QP, ENC, H264,
|
||||||
|
0, 51, 1, 20,
|
||||||
|
V4L2_CID_MPEG_VIDEO_H264_MAX_QP,
|
||||||
|
HFI_PROP_MAX_QP_PACKED,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{LF_BETA, ENC, H264,
|
||||||
|
-6, 6, 1, 0,
|
||||||
|
V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA,
|
||||||
|
HFI_PROP_DEBLOCKING_MODE,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{LF_ALPHA, ENC, H264,
|
||||||
|
-6, 6, 1, 0,
|
||||||
|
V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA,
|
||||||
|
HFI_PROP_DEBLOCKING_MODE,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{MB_RC, ENC, CODECS_ALL,
|
||||||
|
V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
|
1, V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
|
V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE,
|
||||||
|
0,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{TRANSFORM_8X8, ENC, H264,
|
||||||
|
V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
|
1, V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
|
V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM,
|
||||||
|
HFI_PROP_8X8_TRANSFORM,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{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_ROOT | CAP_FLAG_MENU,
|
||||||
|
{PROFILE},
|
||||||
|
{BIT_RATE},
|
||||||
|
msm_vidc_adjust_entropy_mode, msm_vidc_set_u32},
|
||||||
|
|
||||||
|
{PROFILE, ENC|DEC, H264,
|
||||||
|
V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE,
|
||||||
|
V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10,
|
||||||
|
BIT(V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE) |
|
||||||
|
BIT(V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE) |
|
||||||
|
BIT(V4L2_MPEG_VIDEO_H264_PROFILE_MAIN) |
|
||||||
|
BIT(V4L2_MPEG_VIDEO_H264_PROFILE_HIGH) |
|
||||||
|
BIT(V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10),
|
||||||
|
V4L2_MPEG_VIDEO_H264_PROFILE_HIGH,
|
||||||
|
V4L2_CID_MPEG_VIDEO_H264_PROFILE,
|
||||||
|
HFI_PROP_PROFILE,
|
||||||
|
CAP_FLAG_ROOT | CAP_FLAG_MENU,
|
||||||
|
{0},
|
||||||
|
{ENTROPY_MODE},
|
||||||
|
NULL, msm_vidc_set_u32},
|
||||||
|
|
||||||
|
{LEVEL, ENC|DEC, H264,
|
||||||
|
V4L2_MPEG_VIDEO_H264_LEVEL_1_0,
|
||||||
|
V4L2_MPEG_VIDEO_H264_LEVEL_5_1,
|
||||||
|
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),
|
||||||
|
V4L2_MPEG_VIDEO_H264_LEVEL_5_1,
|
||||||
|
V4L2_CID_MPEG_VIDEO_H264_LEVEL,
|
||||||
|
HFI_PROP_LEVEL,
|
||||||
|
CAP_FLAG_ROOT | CAP_FLAG_MENU,
|
||||||
|
{0},
|
||||||
|
{0},
|
||||||
|
NULL, msm_vidc_set_u32},
|
||||||
|
|
||||||
|
{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_ROOT | CAP_FLAG_MENU},
|
||||||
|
|
||||||
|
{HIER_CODING, ENC, H264,
|
||||||
|
V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
|
1, V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||||
|
V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING,
|
||||||
|
HFI_PROP_LAYER_ENCODING_TYPE,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
/* TODO(AS) - ctrl init failing. Need to fix
|
||||||
|
{HIER_CODING_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_ROOT | CAP_FLAG_MENU},
|
||||||
|
*/
|
||||||
|
|
||||||
|
{HIER_CODING_LAYER, ENC, H264,
|
||||||
|
0, 6, 1, 0,
|
||||||
|
V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER,
|
||||||
|
HFI_PROP_LAYER_COUNT,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{HIER_LAYER_QP, ENC, H264,
|
||||||
|
0, 0x0060033, 1, 20,
|
||||||
|
V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP,
|
||||||
|
HFI_PROP_QP_PACKED,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
/* TODO: CHROMA_QP_INDEX_OFFSET is applicable to HEVC as well */
|
||||||
|
{CHROMA_QP_INDEX_OFFSET, ENC, H264,
|
||||||
|
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_ROOT},
|
||||||
|
|
||||||
|
{I_FRAME_MIN_QP, ENC, H264,
|
||||||
|
0, 51, 1, 20,
|
||||||
|
V4L2_CID_MPEG_VIDEO_H264_I_FRAME_MIN_QP,
|
||||||
|
HFI_PROP_MIN_QP_PACKED,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{I_FRAME_MAX_QP, ENC, H264,
|
||||||
|
0, 51, 1, 20,
|
||||||
|
V4L2_CID_MPEG_VIDEO_H264_I_FRAME_MAX_QP,
|
||||||
|
HFI_PROP_MIN_QP_PACKED,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{P_FRAME_MIN_QP, ENC, H264,
|
||||||
|
0, 51, 1, 20,
|
||||||
|
V4L2_CID_MPEG_VIDEO_H264_P_FRAME_MIN_QP,
|
||||||
|
HFI_PROP_MIN_QP_PACKED,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{P_FRAME_MAX_QP, ENC, H264,
|
||||||
|
0, 51, 1, 20,
|
||||||
|
V4L2_CID_MPEG_VIDEO_H264_P_FRAME_MAX_QP,
|
||||||
|
HFI_PROP_MIN_QP_PACKED,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{DISPLAY_DELAY, DEC, CODECS_ALL,
|
||||||
|
0, 1, 1, 0,
|
||||||
|
V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY,
|
||||||
|
HFI_PROP_DECODE_ORDER_OUTPUT,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
{DISPLAY_DELAY_ENABLE, DEC, CODECS_ALL,
|
||||||
|
V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
|
1, V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||||
|
V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE,
|
||||||
|
HFI_PROP_DECODE_ORDER_OUTPUT,
|
||||||
|
CAP_FLAG_ROOT},
|
||||||
|
|
||||||
|
/* VP9 specific */
|
||||||
|
{I_FRAME_QP, ENC, VP9, 0, 127, 1, 20},
|
||||||
|
|
||||||
|
{P_FRAME_QP, ENC, VP9, 0, 127, 1, 40},
|
||||||
|
|
||||||
|
{B_FRAME_QP, ENC, VP9, 0, 127, 1, 40},
|
||||||
|
|
||||||
|
{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_ROOT | CAP_FLAG_MENU,
|
||||||
|
{0},
|
||||||
|
{ENTROPY_MODE},
|
||||||
|
NULL, msm_vidc_set_u32},
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -233,7 +233,7 @@ enum hfi_rate_control {
|
|||||||
};
|
};
|
||||||
#define HFI_PROP_RATE_CONTROL 0x0300012a
|
#define HFI_PROP_RATE_CONTROL 0x0300012a
|
||||||
|
|
||||||
#define HFI_PROP_FRAMERATE_BASED_RATE_CONTROL 0x0300012b
|
#define HFI_PROP_TIME_DELTA_BASED_RATE_CONTROL 0x0300012b
|
||||||
|
|
||||||
#define HFI_PROP_CONTENT_ADAPTIVE_CODING 0x0300012c
|
#define HFI_PROP_CONTENT_ADAPTIVE_CODING 0x0300012c
|
||||||
|
|
||||||
|
@@ -10,15 +10,25 @@
|
|||||||
#include "msm_vidc_inst.h"
|
#include "msm_vidc_inst.h"
|
||||||
#include "msm_vidc_internal.h"
|
#include "msm_vidc_internal.h"
|
||||||
|
|
||||||
|
#define MAX_GOP 0xFFFFFFF
|
||||||
|
#define MAX_INTRA_REFRESH_MBS ((7680 * 4320) >> 8)
|
||||||
|
#define MAX_BASE_LAYER_PRIORITY_ID 63
|
||||||
|
#define MIN_CHROMA_QP_OFFSET -12
|
||||||
|
#define MAX_CHROMA_QP_OFFSET 12
|
||||||
|
#define MAX_LTR_FRAME_COUNT 10
|
||||||
|
#define MAX_BITRATE 220000000
|
||||||
|
|
||||||
enum msm_vidc_ctrl_list_type {
|
enum msm_vidc_ctrl_list_type {
|
||||||
CHILD_LIST = BIT(0),
|
CHILD_LIST = BIT(0),
|
||||||
FW_LIST = BIT(1),
|
FW_LIST = BIT(1),
|
||||||
};
|
};
|
||||||
|
|
||||||
int msm_vidc_ctrl_init(struct msm_vidc_inst *inst);
|
int msm_vidc_ctrl_init(struct msm_vidc_inst *inst);
|
||||||
|
int msm_vidc_ctrl_deinit(struct msm_vidc_inst *inst);
|
||||||
int msm_v4l2_op_s_ctrl(struct v4l2_ctrl *ctrl);
|
int msm_v4l2_op_s_ctrl(struct v4l2_ctrl *ctrl);
|
||||||
int msm_vidc_adjust_bitrate(void *instance, struct v4l2_ctrl *ctrl);
|
int msm_vidc_adjust_bitrate(void *instance, struct v4l2_ctrl *ctrl);
|
||||||
int msm_vidc_adjust_entropy_mode(void *instance, struct v4l2_ctrl *ctrl);
|
int msm_vidc_adjust_entropy_mode(void *instance, struct v4l2_ctrl *ctrl);
|
||||||
|
int msm_vidc_adjust_ltr_count(void *instance, struct v4l2_ctrl *ctrl);
|
||||||
int msm_vidc_adjust_properties(struct msm_vidc_inst *inst);
|
int msm_vidc_adjust_properties(struct msm_vidc_inst *inst);
|
||||||
int msm_vidc_set_u32(void *instance,
|
int msm_vidc_set_u32(void *instance,
|
||||||
enum msm_vidc_inst_capability_type cap_id);
|
enum msm_vidc_inst_capability_type cap_id);
|
||||||
|
@@ -24,6 +24,8 @@
|
|||||||
#define DEFAULT_TIMEOUT 3
|
#define DEFAULT_TIMEOUT 3
|
||||||
#define DEFAULT_HEIGHT 240
|
#define DEFAULT_HEIGHT 240
|
||||||
#define DEFAULT_WIDTH 320
|
#define DEFAULT_WIDTH 320
|
||||||
|
#define MAX_HEIGHT 4320
|
||||||
|
#define MAX_WIDTH 8192
|
||||||
#define MIN_SUPPORTED_WIDTH 32
|
#define MIN_SUPPORTED_WIDTH 32
|
||||||
#define MIN_SUPPORTED_HEIGHT 32
|
#define MIN_SUPPORTED_HEIGHT 32
|
||||||
#define DEFAULT_FPS 30
|
#define DEFAULT_FPS 30
|
||||||
@@ -38,6 +40,9 @@
|
|||||||
#define DEFAULT_BSE_VPP_DELAY 2
|
#define DEFAULT_BSE_VPP_DELAY 2
|
||||||
#define MAX_CAP_PARENTS 16
|
#define MAX_CAP_PARENTS 16
|
||||||
#define MAX_CAP_CHILDREN 16
|
#define MAX_CAP_CHILDREN 16
|
||||||
|
/* TODO
|
||||||
|
* #define MAX_SUPERFRAME_COUNT 32
|
||||||
|
*/
|
||||||
|
|
||||||
/* Maintains the number of FTB's between each FBD over a window */
|
/* Maintains the number of FTB's between each FBD over a window */
|
||||||
#define DCVS_FTB_WINDOW 16
|
#define DCVS_FTB_WINDOW 16
|
||||||
@@ -72,6 +77,12 @@
|
|||||||
#define NUM_MBS_720P (((1280 + 15) >> 4) * ((720 + 15) >> 4))
|
#define NUM_MBS_720P (((1280 + 15) >> 4) * ((720 + 15) >> 4))
|
||||||
#define NUM_MBS_4k (((4096 + 15) >> 4) * ((2304 + 15) >> 4))
|
#define NUM_MBS_4k (((4096 + 15) >> 4) * ((2304 + 15) >> 4))
|
||||||
|
|
||||||
|
#define DB_H264_DISABLE_SLICE_BOUNDARY \
|
||||||
|
V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED_AT_SLICE_BOUNDARY
|
||||||
|
|
||||||
|
#define DB_HEVC_DISABLE_SLICE_BOUNDARY \
|
||||||
|
V4L2_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE_DISABLED_AT_SLICE_BOUNDARY
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Convert Q16 number into Integer and Fractional part upto 2 places.
|
* Convert Q16 number into Integer and Fractional part upto 2 places.
|
||||||
* Ex : 105752 / 65536 = 1.61; 1.61 in Q16 = 105752;
|
* Ex : 105752 / 65536 = 1.61; 1.61 in Q16 = 105752;
|
||||||
@@ -206,48 +217,18 @@ enum msm_vidc_core_capability_type {
|
|||||||
|
|
||||||
enum msm_vidc_inst_capability_type {
|
enum msm_vidc_inst_capability_type {
|
||||||
INST_CAP_NONE = 0,
|
INST_CAP_NONE = 0,
|
||||||
CODEC,
|
|
||||||
FRAME_WIDTH,
|
FRAME_WIDTH,
|
||||||
FRAME_HEIGHT,
|
FRAME_HEIGHT,
|
||||||
PIX_FMTS,
|
PIX_FMTS,
|
||||||
MIN_BUFFERS_INPUT,
|
MIN_BUFFERS_INPUT,
|
||||||
MIN_BUFFERS_OUTPUT,
|
MIN_BUFFERS_OUTPUT,
|
||||||
DECODE_ORDER,
|
|
||||||
THUMBNAIL_MODE,
|
|
||||||
SECURE_MODE,
|
|
||||||
LOWLATENCY_MODE,
|
|
||||||
LOWLATENCY_HINT,
|
|
||||||
BUF_SIZE_LIMIT,
|
|
||||||
MBPF,
|
MBPF,
|
||||||
MBPS,
|
MBPS,
|
||||||
FRAME_RATE,
|
FRAME_RATE,
|
||||||
BIT_RATE,
|
|
||||||
BITRATE_MODE,
|
|
||||||
LAYER_BITRATE,
|
|
||||||
ENTROPY_MODE,
|
|
||||||
CABAC_BITRATE,
|
|
||||||
VBV_DELAY,
|
|
||||||
LTR_COUNT,
|
|
||||||
LCU_SIZE,
|
|
||||||
POWER_SAVE_MBPS,
|
|
||||||
SCALE_X,
|
SCALE_X,
|
||||||
SCALE_Y,
|
SCALE_Y,
|
||||||
PROFILE,
|
|
||||||
LEVEL,
|
|
||||||
I_FRAME_QP,
|
|
||||||
P_FRAME_QP,
|
|
||||||
B_FRAME_QP,
|
|
||||||
B_FRAME,
|
B_FRAME,
|
||||||
HIER_P_LAYERS,
|
POWER_SAVE_MBPS,
|
||||||
BLUR_WIDTH,
|
|
||||||
BLUR_HEIGHT,
|
|
||||||
SLICE_BYTE,
|
|
||||||
SLICE_MB,
|
|
||||||
SECURE,
|
|
||||||
SECURE_FRAME_WIDTH,
|
|
||||||
SECURE_FRAME_HEIGHT,
|
|
||||||
SECURE_MBPF,
|
|
||||||
SECURE_BIT_RATE,
|
|
||||||
BATCH_MBPF,
|
BATCH_MBPF,
|
||||||
BATCH_FRAME_RATE,
|
BATCH_FRAME_RATE,
|
||||||
LOSSLESS_FRAME_WIDTH,
|
LOSSLESS_FRAME_WIDTH,
|
||||||
@@ -263,6 +244,83 @@ enum msm_vidc_inst_capability_type {
|
|||||||
MB_CYCLES_LP,
|
MB_CYCLES_LP,
|
||||||
MB_CYCLES_FW,
|
MB_CYCLES_FW,
|
||||||
MB_CYCLES_FW_VPP,
|
MB_CYCLES_FW_VPP,
|
||||||
|
HFLIP,
|
||||||
|
VFLIP,
|
||||||
|
PREPEND_SPSPPS_TO_IDR,
|
||||||
|
REQUEST_I_FRAME,
|
||||||
|
SLICE_INTERFACE,
|
||||||
|
FRAME_RC,
|
||||||
|
BITRATE_MODE,
|
||||||
|
HEADER_MODE,
|
||||||
|
GOP_SIZE,
|
||||||
|
GOP_CLOSURE,
|
||||||
|
BIT_RATE,
|
||||||
|
SECURE_FRAME_WIDTH,
|
||||||
|
SECURE_FRAME_HEIGHT,
|
||||||
|
SECURE_MBPF,
|
||||||
|
SECURE_MODE,
|
||||||
|
BLUR_TYPES,
|
||||||
|
BLUR_RESOLUTION,
|
||||||
|
CSC_CUSTOM_MATRIX,
|
||||||
|
HEIC,
|
||||||
|
LOWLATENCY_MODE,
|
||||||
|
LTR_COUNT,
|
||||||
|
USE_LTR,
|
||||||
|
MARK_LTR,
|
||||||
|
BASELAYER_PRIORITY,
|
||||||
|
IR_RANDOM,
|
||||||
|
AU_DELIMITER,
|
||||||
|
TIME_DELTA_BASED_RC,
|
||||||
|
CONTENT_ADAPTIVE_CODING,
|
||||||
|
BITRATE_BOOST,
|
||||||
|
ROTATION,
|
||||||
|
VBV_DELAY,
|
||||||
|
MIN_FRAME_QP,
|
||||||
|
MAX_FRAME_QP,
|
||||||
|
HEVC_HIER_QP,
|
||||||
|
I_FRAME_QP,
|
||||||
|
P_FRAME_QP,
|
||||||
|
I_FRAME_MIN_QP,
|
||||||
|
I_FRAME_MAX_QP,
|
||||||
|
P_FRAME_MIN_QP,
|
||||||
|
P_FRAME_MAX_QP,
|
||||||
|
B_FRAME_QP,
|
||||||
|
B_FRAME_MIN_QP,
|
||||||
|
B_FRAME_MAX_QP,
|
||||||
|
HIER_CODING_TYPE,
|
||||||
|
HIER_CODING_LAYER,
|
||||||
|
L0_QP,
|
||||||
|
L1_QP,
|
||||||
|
L2_QP,
|
||||||
|
L3_QP,
|
||||||
|
L4_QP,
|
||||||
|
L5_QP,
|
||||||
|
PROFILE,
|
||||||
|
LEVEL,
|
||||||
|
HEVC_TIER,
|
||||||
|
LF_MODE,
|
||||||
|
LF_ALPHA,
|
||||||
|
LF_BETA,
|
||||||
|
LF_TC,
|
||||||
|
LOSSLESS,
|
||||||
|
L0_BR,
|
||||||
|
L1_BR,
|
||||||
|
L2_BR,
|
||||||
|
L3_BR,
|
||||||
|
L4_BR,
|
||||||
|
L5_BR,
|
||||||
|
SLICE_MAX_BYTES,
|
||||||
|
SLICE_MAX_MB,
|
||||||
|
SLICE_MODE,
|
||||||
|
CABAC_BITRATE,
|
||||||
|
MB_RC,
|
||||||
|
TRANSFORM_8X8,
|
||||||
|
ENTROPY_MODE,
|
||||||
|
HIER_CODING,
|
||||||
|
HIER_LAYER_QP,
|
||||||
|
CHROMA_QP_INDEX_OFFSET,
|
||||||
|
DISPLAY_DELAY_ENABLE,
|
||||||
|
DISPLAY_DELAY,
|
||||||
INST_CAP_MAX,
|
INST_CAP_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -12,6 +12,7 @@
|
|||||||
#include "msm_vidc_driver.h"
|
#include "msm_vidc_driver.h"
|
||||||
#include "msm_vidc_internal.h"
|
#include "msm_vidc_internal.h"
|
||||||
#include "msm_vidc_platform.h"
|
#include "msm_vidc_platform.h"
|
||||||
|
#include "msm_vidc_control.h"
|
||||||
#include "msm_vidc_debug.h"
|
#include "msm_vidc_debug.h"
|
||||||
#include "venus_hfi.h"
|
#include "venus_hfi.h"
|
||||||
#include "hfi_packet.h"
|
#include "hfi_packet.h"
|
||||||
@@ -40,17 +41,31 @@ u32 msm_vdec_deliver_as_metadata[] = {
|
|||||||
HFI_PROP_BUFFER_TAG,
|
HFI_PROP_BUFFER_TAG,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int msm_vdec_codec_change(struct msm_vidc_inst *inst, u32 codec)
|
static int msm_vdec_codec_change(struct msm_vidc_inst *inst, u32 v4l2_codec)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
d_vpr_h("%s()\n", __func__);
|
if (inst->codec && inst->fmts[INPUT_PORT].fmt.pix_mp.pixelformat == v4l2_codec)
|
||||||
|
return 0;
|
||||||
|
|
||||||
inst->codec = v4l2_codec_to_driver(codec, __func__);
|
s_vpr_h(inst->sid, "%s: codec changed from %#x to %#x\n",
|
||||||
|
__func__, inst->fmts[INPUT_PORT].fmt.pix_mp.pixelformat, v4l2_codec);
|
||||||
|
|
||||||
|
inst->codec = v4l2_codec_to_driver(v4l2_codec, __func__);
|
||||||
rc = msm_vidc_get_inst_capability(inst);
|
rc = msm_vidc_get_inst_capability(inst);
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
goto exit;
|
||||||
return 0;
|
|
||||||
|
rc = msm_vidc_ctrl_deinit(inst);
|
||||||
|
if (rc)
|
||||||
|
goto exit;
|
||||||
|
|
||||||
|
rc = msm_vidc_ctrl_init(inst);
|
||||||
|
if(rc)
|
||||||
|
goto exit;
|
||||||
|
|
||||||
|
exit:
|
||||||
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int msm_vdec_set_resolution(struct msm_vidc_inst *inst,
|
static int msm_vdec_set_resolution(struct msm_vidc_inst *inst,
|
||||||
|
@@ -12,6 +12,7 @@
|
|||||||
#include "msm_vidc_driver.h"
|
#include "msm_vidc_driver.h"
|
||||||
#include "msm_vidc_internal.h"
|
#include "msm_vidc_internal.h"
|
||||||
#include "msm_vidc_platform.h"
|
#include "msm_vidc_platform.h"
|
||||||
|
#include "msm_vidc_control.h"
|
||||||
#include "msm_vidc_debug.h"
|
#include "msm_vidc_debug.h"
|
||||||
#include "venus_hfi.h"
|
#include "venus_hfi.h"
|
||||||
#include "hfi_packet.h"
|
#include "hfi_packet.h"
|
||||||
@@ -55,14 +56,30 @@ u32 msm_venc_output_subscribe_for_properties[] = {
|
|||||||
HFI_PROP_BUFFER_MARK,
|
HFI_PROP_BUFFER_MARK,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int msm_venc_codec_change(struct msm_vidc_inst *inst, u32 codec)
|
static int msm_venc_codec_change(struct msm_vidc_inst *inst, u32 v4l2_codec)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
d_vpr_h("%s()\n", __func__);
|
if (inst->codec && inst->fmts[OUTPUT_PORT].fmt.pix_mp.pixelformat == v4l2_codec)
|
||||||
|
return 0;
|
||||||
|
|
||||||
inst->codec = v4l2_codec_to_driver(codec, __func__);
|
s_vpr_h(inst->sid, "%s: codec changed from %#x to %#x\n",
|
||||||
|
__func__, inst->fmts[OUTPUT_PORT].fmt.pix_mp.pixelformat, v4l2_codec);
|
||||||
|
|
||||||
|
inst->codec = v4l2_codec_to_driver(v4l2_codec, __func__);
|
||||||
rc = msm_vidc_get_inst_capability(inst);
|
rc = msm_vidc_get_inst_capability(inst);
|
||||||
|
if (rc)
|
||||||
|
goto exit;
|
||||||
|
|
||||||
|
rc = msm_vidc_ctrl_deinit(inst);
|
||||||
|
if (rc)
|
||||||
|
goto exit;
|
||||||
|
|
||||||
|
rc = msm_vidc_ctrl_init(inst);
|
||||||
|
if (rc)
|
||||||
|
goto exit;
|
||||||
|
|
||||||
|
exit:
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -804,9 +804,6 @@ void *msm_vidc_open(void *vidc_core, u32 session_type)
|
|||||||
if (rc)
|
if (rc)
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
rc = msm_vidc_ctrl_init(inst);
|
|
||||||
if (rc)
|
|
||||||
goto error;
|
|
||||||
|
|
||||||
rc = msm_vidc_vb2_queue_init(inst);
|
rc = msm_vidc_vb2_queue_init(inst);
|
||||||
if (rc)
|
if (rc)
|
||||||
|
@@ -20,10 +20,6 @@ static bool is_priv_ctrl(u32 id)
|
|||||||
* Treat below standard controls as private because
|
* Treat below standard controls as private because
|
||||||
* we have added custom values to the controls
|
* we have added custom values to the controls
|
||||||
*/
|
*/
|
||||||
switch (id) {
|
|
||||||
case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -47,6 +43,13 @@ static const char *const mpeg_video_stream_format[] = {
|
|||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const char *const mpeg_video_blur_types[] = {
|
||||||
|
"Blur None",
|
||||||
|
"Blur External",
|
||||||
|
"Blur Adaptive",
|
||||||
|
NULL,
|
||||||
|
};
|
||||||
|
|
||||||
static const char *const roi_map_type[] = {
|
static const char *const roi_map_type[] = {
|
||||||
"None",
|
"None",
|
||||||
"2-bit",
|
"2-bit",
|
||||||
@@ -62,6 +65,8 @@ static const char * const * msm_vidc_get_qmenu_type(
|
|||||||
return mpeg_video_rate_control;
|
return mpeg_video_rate_control;
|
||||||
case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD:
|
case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD:
|
||||||
return mpeg_video_stream_format;
|
return mpeg_video_stream_format;
|
||||||
|
case V4L2_CID_MPEG_VIDC_VIDEO_BLUR_TYPES:
|
||||||
|
return mpeg_video_blur_types;
|
||||||
default:
|
default:
|
||||||
s_vpr_e(inst->sid, "%s: No available qmenu for ctrl %#x\n",
|
s_vpr_e(inst->sid, "%s: No available qmenu for ctrl %#x\n",
|
||||||
__func__, control_id);
|
__func__, control_id);
|
||||||
@@ -72,18 +77,50 @@ static const char * const * msm_vidc_get_qmenu_type(
|
|||||||
static const char *msm_vidc_get_priv_ctrl_name(u32 sid, u32 control_id)
|
static const char *msm_vidc_get_priv_ctrl_name(u32 sid, u32 control_id)
|
||||||
{
|
{
|
||||||
switch (control_id) {
|
switch (control_id) {
|
||||||
case V4L2_CID_MPEG_VIDC_THUMBNAIL_MODE:
|
|
||||||
return "Sync Frame Decode";
|
|
||||||
case V4L2_CID_MPEG_VIDC_SECURE:
|
case V4L2_CID_MPEG_VIDC_SECURE:
|
||||||
return "Secure Mode";
|
return "Secure Mode";
|
||||||
|
case V4L2_CID_MPEG_VIDC_HEIC:
|
||||||
|
return "HEIC";
|
||||||
case V4L2_CID_MPEG_VIDC_LOWLATENCY_REQUEST:
|
case V4L2_CID_MPEG_VIDC_LOWLATENCY_REQUEST:
|
||||||
return "Low Latency Mode";
|
return "Low Latency Mode";
|
||||||
/* TODO(AS)
|
case V4L2_CID_MPEG_VIDC_CODEC_CONFIG:
|
||||||
case V4L2_CID_MPEG_VIDC_VIDEO_LOWLATENCY_HINT:
|
return "Codec Config";
|
||||||
return "Low Latency Hint";
|
case V4L2_CID_MPEG_VIDC_B_FRAME_MIN_QP:
|
||||||
case V4L2_CID_MPEG_VIDC_VIDEO_BUFFER_SIZE_LIMIT:
|
return "B frame Min QP";
|
||||||
return "Buffer Size Limit";
|
case V4L2_CID_MPEG_VIDC_B_FRAME_MAX_QP:
|
||||||
*/
|
return "B frame Max QP";
|
||||||
|
case V4L2_CID_MPEG_VIDC_LTRCOUNT:
|
||||||
|
return "LTR count";
|
||||||
|
case V4L2_CID_MPEG_VIDC_USELTRFRAME:
|
||||||
|
return "Use LTR Frame";
|
||||||
|
case V4L2_CID_MPEG_VIDC_MARKLTRFRAME:
|
||||||
|
return "Mark LTR Frame";
|
||||||
|
case V4L2_CID_MPEG_VIDC_BASELAYER_PRIORITY:
|
||||||
|
return "Baselayer Priority";
|
||||||
|
case V4L2_CID_MPEG_VIDC_INTRA_REFRESH_PERIOD:
|
||||||
|
return "Intra Refresh Period";
|
||||||
|
case V4L2_CID_MPEG_VIDC_AU_DELIMITER:
|
||||||
|
return "AU Delimiter";
|
||||||
|
case V4L2_CID_MPEG_VIDC_TIME_DELTA_BASED_RC:
|
||||||
|
return "Time Delta Based RC";
|
||||||
|
case V4L2_CID_MPEG_VIDC_CONTENT_ADAPTIVE_CODING:
|
||||||
|
return "Content Adaptive Coding";
|
||||||
|
case V4L2_CID_MPEG_VIDC_QUALITY_BITRATE_BOOST:
|
||||||
|
return "Quality Bitrate Boost";
|
||||||
|
case V4L2_CID_MPEG_VIDC_VIDEO_BLUR_TYPES:
|
||||||
|
return "Blur Types";
|
||||||
|
case V4L2_CID_MPEG_VIDC_VIDEO_BLUR_RESOLUTION:
|
||||||
|
return "Blur Resolution";
|
||||||
|
case V4L2_CID_MPEG_VIDC_VIDEO_VPE_CSC_CUSTOM_MATRIX:
|
||||||
|
return "CSC Custom Matrix";
|
||||||
|
case V4L2_CID_MPEG_VIDC_METADATA_ENABLE:
|
||||||
|
return "Metadata Enable";
|
||||||
|
case V4L2_CID_MPEG_VIDC_METADATA_DISABLE:
|
||||||
|
return "Metadata Disable";
|
||||||
|
case V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY:
|
||||||
|
return "H264 Display Delay";
|
||||||
|
case V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE:
|
||||||
|
return "H264 Display Delay Enable";
|
||||||
default:
|
default:
|
||||||
s_vpr_e(sid, "%s: ctrl name not available for ctrl id %#x\n",
|
s_vpr_e(sid, "%s: ctrl name not available for ctrl id %#x\n",
|
||||||
__func__, control_id);
|
__func__, control_id);
|
||||||
@@ -169,6 +206,13 @@ static int msm_vidc_adjust_property(struct msm_vidc_inst *inst,
|
|||||||
|
|
||||||
capability = inst->capabilities;
|
capability = inst->capabilities;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* skip for uninitialized cap properties.
|
||||||
|
* Eg: Skip Tramform 8x8 cap that is uninitialized for HEVC codec
|
||||||
|
*/
|
||||||
|
if (!capability->cap[cap_id].cap)
|
||||||
|
return 0;
|
||||||
|
|
||||||
if (capability->cap[cap_id].adjust) {
|
if (capability->cap[cap_id].adjust) {
|
||||||
rc = capability->cap[cap_id].adjust(inst, NULL);
|
rc = capability->cap[cap_id].adjust(inst, NULL);
|
||||||
if (rc)
|
if (rc)
|
||||||
@@ -180,7 +224,7 @@ static int msm_vidc_adjust_property(struct msm_vidc_inst *inst,
|
|||||||
if (rc)
|
if (rc)
|
||||||
goto exit;
|
goto exit;
|
||||||
|
|
||||||
/* add cap_id to firmware list always */
|
/* add cap_id to firmware list */
|
||||||
rc = msm_vidc_add_capid_to_list(inst, cap_id, FW_LIST);
|
rc = msm_vidc_add_capid_to_list(inst, cap_id, FW_LIST);
|
||||||
if (rc)
|
if (rc)
|
||||||
goto exit;
|
goto exit;
|
||||||
@@ -252,6 +296,19 @@ exit:
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int msm_vidc_ctrl_deinit(struct msm_vidc_inst *inst)
|
||||||
|
{
|
||||||
|
if (!inst) {
|
||||||
|
d_vpr_e("%s: invalid parameters\n", __func__);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
v4l2_ctrl_handler_free(&inst->ctrl_handler);
|
||||||
|
kfree(inst->ctrls);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int msm_vidc_ctrl_init(struct msm_vidc_inst *inst)
|
int msm_vidc_ctrl_init(struct msm_vidc_inst *inst)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
@@ -279,7 +336,8 @@ int msm_vidc_ctrl_init(struct msm_vidc_inst *inst)
|
|||||||
num_ctrls++;
|
num_ctrls++;
|
||||||
}
|
}
|
||||||
if (!num_ctrls) {
|
if (!num_ctrls) {
|
||||||
s_vpr_e(inst->sid, "%s: failed to allocate ctrl\n", __func__);
|
s_vpr_e(inst->sid, "%s: no ctrls available in cap database\n",
|
||||||
|
__func__);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
inst->ctrls = kcalloc(num_ctrls,
|
inst->ctrls = kcalloc(num_ctrls,
|
||||||
@@ -346,7 +404,7 @@ int msm_vidc_ctrl_init(struct msm_vidc_inst *inst)
|
|||||||
ctrl_cfg.name = msm_vidc_get_priv_ctrl_name(inst->sid,
|
ctrl_cfg.name = msm_vidc_get_priv_ctrl_name(inst->sid,
|
||||||
capability->cap[idx].v4l2_id);
|
capability->cap[idx].v4l2_id);
|
||||||
if (!ctrl_cfg.name) {
|
if (!ctrl_cfg.name) {
|
||||||
s_vpr_e(inst->sid, "%s: invalid control, %#x\n",
|
s_vpr_e(inst->sid, "%s: %#x ctrl name is null\n",
|
||||||
__func__, ctrl_cfg.id);
|
__func__, ctrl_cfg.id);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
@@ -492,7 +550,7 @@ int msm_vidc_adjust_entropy_mode(void *instance, struct v4l2_ctrl *ctrl)
|
|||||||
s32 adjusted_value;
|
s32 adjusted_value;
|
||||||
enum msm_vidc_inst_capability_type parent_id;
|
enum msm_vidc_inst_capability_type parent_id;
|
||||||
struct msm_vidc_inst *inst = (struct msm_vidc_inst *) instance;
|
struct msm_vidc_inst *inst = (struct msm_vidc_inst *) instance;
|
||||||
s32 codec = -1, profile = -1;
|
s32 profile = -1;
|
||||||
|
|
||||||
if (!inst || !inst->capabilities) {
|
if (!inst || !inst->capabilities) {
|
||||||
d_vpr_e("%s: invalid params\n", __func__);
|
d_vpr_e("%s: invalid params\n", __func__);
|
||||||
@@ -511,31 +569,29 @@ int msm_vidc_adjust_entropy_mode(void *instance, struct v4l2_ctrl *ctrl)
|
|||||||
while (i < MAX_CAP_PARENTS &&
|
while (i < MAX_CAP_PARENTS &&
|
||||||
capability->cap[ENTROPY_MODE].parents[i]) {
|
capability->cap[ENTROPY_MODE].parents[i]) {
|
||||||
parent_id = capability->cap[ENTROPY_MODE].parents[i];
|
parent_id = capability->cap[ENTROPY_MODE].parents[i];
|
||||||
if (parent_id == CODEC)
|
if (parent_id == PROFILE)
|
||||||
codec = inst->codec;
|
|
||||||
else if (parent_id == profile)
|
|
||||||
profile = capability->cap[PROFILE].value;
|
profile = capability->cap[PROFILE].value;
|
||||||
else
|
else
|
||||||
s_vpr_e(inst->sid,
|
s_vpr_e(inst->sid,
|
||||||
"%s: invalid parent %d\n",
|
"%s: invalid parent %d\n",
|
||||||
__func__, parent_id);
|
__func__, parent_id);
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (codec == -1 || profile == -1) {
|
if (profile == -1) {
|
||||||
s_vpr_e(inst->sid,
|
s_vpr_e(inst->sid,
|
||||||
"%s: missing parents %d %d\n",
|
"%s: missing parents %d %d\n",
|
||||||
__func__, codec, profile);
|
__func__, profile);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (codec == MSM_VIDC_H264 &&
|
if ((profile == V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE ||
|
||||||
(profile == V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE ||
|
|
||||||
profile == V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE) &&
|
profile == V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE) &&
|
||||||
adjusted_value == V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC)
|
adjusted_value == V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC)
|
||||||
adjusted_value = V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC;
|
adjusted_value = V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC;
|
||||||
|
|
||||||
if (capability->cap[ENTROPY_MODE].value != adjusted_value) {
|
if (capability->cap[ENTROPY_MODE].value != adjusted_value) {
|
||||||
s_vpr_h(inst->sid, "%s: adjusted from %#x to %#x\n", __func__,
|
s_vpr_h(inst->sid, "%s: updated from %#x to adjusted %#x\n", __func__,
|
||||||
capability->cap[ENTROPY_MODE].value, adjusted_value);
|
capability->cap[ENTROPY_MODE].value, adjusted_value);
|
||||||
capability->cap[ENTROPY_MODE].value = adjusted_value;
|
capability->cap[ENTROPY_MODE].value = adjusted_value;
|
||||||
}
|
}
|
||||||
@@ -543,6 +599,50 @@ int msm_vidc_adjust_entropy_mode(void *instance, struct v4l2_ctrl *ctrl)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int msm_vidc_adjust_ltr_count(void *instance, struct v4l2_ctrl *ctrl)
|
||||||
|
{
|
||||||
|
int rc = 0;
|
||||||
|
int i = 0;
|
||||||
|
struct msm_vidc_inst_capability *capability;
|
||||||
|
s32 adjusted_value;
|
||||||
|
enum msm_vidc_inst_capability_type parent_id;
|
||||||
|
struct msm_vidc_inst *inst = (struct msm_vidc_inst *) instance;
|
||||||
|
s32 rc_type = -1;
|
||||||
|
|
||||||
|
if (!inst || !inst->capabilities) {
|
||||||
|
d_vpr_e("%s: invalid params\n", __func__);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
capability = inst->capabilities;
|
||||||
|
|
||||||
|
if (ctrl)
|
||||||
|
adjusted_value = ctrl->val;
|
||||||
|
else
|
||||||
|
adjusted_value = capability->cap[LTR_COUNT].value;
|
||||||
|
|
||||||
|
/* check parents and adjust cabac session value */
|
||||||
|
while (i < MAX_CAP_PARENTS &&
|
||||||
|
capability->cap[LTR_COUNT].parents[i]) {
|
||||||
|
parent_id = capability->cap[LTR_COUNT].parents[i];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(rc_type == V4L2_MPEG_VIDEO_BITRATE_MODE_CBR
|
||||||
|
/* TODO(AS): remove comment after below rc modes are upstreamed
|
||||||
|
|| rc_type == RATE_CONTROL_OFF ||
|
||||||
|
|| rc_tpe == V4L2_MPEG_VIDEO_BITRATE_MODE_CBR_VFR
|
||||||
|
*/))
|
||||||
|
adjusted_value = 0;
|
||||||
|
|
||||||
|
if (capability->cap[LTR_COUNT].value != adjusted_value) {
|
||||||
|
s_vpr_h(inst->sid, "%s: adjusted from %#x to %#x\n", __func__,
|
||||||
|
capability->cap[LTR_COUNT].value, adjusted_value);
|
||||||
|
capability->cap[LTR_COUNT].value = adjusted_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
int msm_vidc_adjust_bitrate(void *instance, struct v4l2_ctrl *ctrl)
|
int msm_vidc_adjust_bitrate(void *instance, struct v4l2_ctrl *ctrl)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
@@ -1280,8 +1280,8 @@ int msm_vidc_get_inst_capability(struct msm_vidc_inst *inst)
|
|||||||
if (core->inst_caps[i].domain == inst->domain &&
|
if (core->inst_caps[i].domain == inst->domain &&
|
||||||
core->inst_caps[i].codec == inst->codec) {
|
core->inst_caps[i].codec == inst->codec) {
|
||||||
s_vpr_h(inst->sid,
|
s_vpr_h(inst->sid,
|
||||||
"%s: copied capabilities with %#x codec\n",
|
"%s: copied capabilities with %#x codec, %#x domain\n",
|
||||||
__func__, inst->codec);
|
__func__, inst->codec, inst->domain);
|
||||||
memcpy(inst->capabilities, &core->inst_caps[i],
|
memcpy(inst->capabilities, &core->inst_caps[i],
|
||||||
sizeof(struct msm_vidc_inst_capability));
|
sizeof(struct msm_vidc_inst_capability));
|
||||||
}
|
}
|
||||||
|
@@ -29,14 +29,15 @@
|
|||||||
/* vendor controls start */
|
/* vendor controls start */
|
||||||
#define V4L2_CID_MPEG_VIDC_BASE (V4L2_CTRL_CLASS_MPEG | 0x2000)
|
#define V4L2_CID_MPEG_VIDC_BASE (V4L2_CTRL_CLASS_MPEG | 0x2000)
|
||||||
|
|
||||||
|
#define V4L2_MPEG_MSM_VIDC_DISABLE 0
|
||||||
|
#define V4L2_MPEG_MSM_VIDC_ENABLE 1
|
||||||
|
|
||||||
#define V4L2_CID_MPEG_VIDC_SECURE (V4L2_CID_MPEG_VIDC_BASE + 0x1)
|
#define V4L2_CID_MPEG_VIDC_SECURE (V4L2_CID_MPEG_VIDC_BASE + 0x1)
|
||||||
/* HEIC encoder and decoder */
|
/* HEIC encoder and decoder */
|
||||||
#define V4L2_CID_MPEG_VIDC_HEIC (V4L2_CID_MPEG_VIDC_BASE + 0x2)
|
#define V4L2_CID_MPEG_VIDC_HEIC (V4L2_CID_MPEG_VIDC_BASE + 0x2)
|
||||||
#define V4L2_CID_MPEG_VIDC_LOWLATENCY_REQUEST (V4L2_CID_MPEG_VIDC_BASE + 0x3)
|
#define V4L2_CID_MPEG_VIDC_LOWLATENCY_REQUEST (V4L2_CID_MPEG_VIDC_BASE + 0x3)
|
||||||
/* FIXme: */
|
/* FIXme: */
|
||||||
#define V4L2_CID_MPEG_VIDC_CODEC_CONFIG (V4L2_CID_MPEG_VIDC_BASE + 0x4)
|
#define V4L2_CID_MPEG_VIDC_CODEC_CONFIG (V4L2_CID_MPEG_VIDC_BASE + 0x4)
|
||||||
/* thumbnail decoding */
|
|
||||||
#define V4L2_CID_MPEG_VIDC_THUMBNAIL_MODE (V4L2_CID_MPEG_VIDC_BASE + 0x4)
|
|
||||||
/* B frame min/max qp */
|
/* B frame min/max qp */
|
||||||
#define V4L2_CID_MPEG_VIDC_B_FRAME_MIN_QP (V4L2_CID_MPEG_VIDC_BASE + 0x5)
|
#define V4L2_CID_MPEG_VIDC_B_FRAME_MIN_QP (V4L2_CID_MPEG_VIDC_BASE + 0x5)
|
||||||
#define V4L2_CID_MPEG_VIDC_B_FRAME_MAX_QP (V4L2_CID_MPEG_VIDC_BASE + 0x6)
|
#define V4L2_CID_MPEG_VIDC_B_FRAME_MAX_QP (V4L2_CID_MPEG_VIDC_BASE + 0x6)
|
||||||
|
Reference in New Issue
Block a user