video: driver: fixes to get enc start/stop working
below are the fixes added to get enc start/stop working along with setting default values to firmware for basic functionality controls. - Create and queue COMV and NON COMV internal buffers - Use HFI_PAYLOAD_64_PACKED as payload_info type instead of HFI_PAYLOAD_32_PACKED HFI_PROP_CROP_OFFSETS - Introduce new control port specifier flags in instance database to help set correct port to controls while packetization - Add support to map basic functionality controls v4l2 enum values to hfi enum values - Enable static adjust and set controls support Change-Id: Idc0dc3e3d07d8f6349c74136327a45d77ced1035 Signed-off-by: Akshata Sahukar <asahukar@codeaurora.org>
This commit is contained in:
@@ -115,7 +115,7 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
0, 64, 1, 4,
|
||||
V4L2_CID_MIN_BUFFERS_FOR_CAPTURE,
|
||||
HFI_PROP_BUFFER_FW_MIN_OUTPUT_COUNT,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
/* (8192 * 4320) / 256 */
|
||||
{MBPF, ENC|DEC, CODECS_ALL, 64, 138240, 1, 138240},
|
||||
@@ -132,7 +132,7 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
1, V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||
V4L2_CID_MPEG_VIDEO_B_FRAMES,
|
||||
HFI_PROP_MAX_B_FRAMES,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
/* ((4096 * 2304) / 256) * 60 fps */
|
||||
{POWER_SAVE_MBPS, ENC, CODECS_ALL,
|
||||
@@ -173,13 +173,13 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
0, 51, 1, 20,
|
||||
V4L2_CID_MPEG_VIDC_B_FRAME_MIN_QP,
|
||||
HFI_PROP_MIN_QP_PACKED,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{HFLIP, ENC, CODECS_ALL,
|
||||
V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||
@@ -187,7 +187,7 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
1, V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||
V4L2_CID_HFLIP,
|
||||
HFI_PROP_FLIP,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{VFLIP, ENC, CODECS_ALL,
|
||||
V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||
@@ -195,7 +195,7 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
1, V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||
V4L2_CID_VFLIP,
|
||||
HFI_PROP_FLIP,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{PREPEND_SPSPPS_TO_IDR, ENC, CODECS_ALL,
|
||||
V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||
@@ -203,13 +203,13 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
1, V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||
V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR,
|
||||
HFI_PROP_SEQ_HEADER_MODE,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{SLICE_INTERFACE, DEC, CODECS_ALL,
|
||||
0, 0, 0, 0,
|
||||
@@ -231,7 +231,9 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
V4L2_MPEG_VIDEO_BITRATE_MODE_VBR,
|
||||
V4L2_CID_MPEG_VIDEO_BITRATE_MODE,
|
||||
HFI_PROP_RATE_CONTROL,
|
||||
CAP_FLAG_ROOT | CAP_FLAG_MENU},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
|
||||
{0}, {0},
|
||||
NULL, msm_vidc_set_u32},
|
||||
|
||||
{HEADER_MODE, ENC, CODECS_ALL,
|
||||
V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE,
|
||||
@@ -241,14 +243,16 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE,
|
||||
V4L2_CID_MPEG_VIDEO_HEADER_MODE,
|
||||
HFI_PROP_SEQ_HEADER_MODE,
|
||||
CAP_FLAG_ROOT | CAP_FLAG_MENU},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
|
||||
{0}, {0},
|
||||
NULL, msm_vidc_set_u32},
|
||||
|
||||
// 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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{GOP_CLOSURE, ENC, CODECS_ALL,
|
||||
V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||
@@ -260,10 +264,10 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
1, 220000000, 1, 20000000,
|
||||
V4L2_CID_MPEG_VIDEO_BITRATE,
|
||||
HFI_PROP_TOTAL_BITRATE,
|
||||
CAP_FLAG_DYNAMIC_ALLOWED,
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
|
||||
/* TO DO parents */ {0},
|
||||
{SLICE_MAX_BYTES},
|
||||
msm_vidc_adjust_bitrate, msm_vidc_set_s32},
|
||||
msm_vidc_adjust_bitrate, msm_vidc_set_u32},
|
||||
|
||||
{BIT_RATE, DEC, CODECS_ALL, 1, 220000000, 1, 220000000},
|
||||
|
||||
@@ -280,7 +284,7 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
1, V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||
V4L2_CID_MPEG_VIDC_SECURE,
|
||||
HFI_PROP_SECURE,
|
||||
CAP_FLAG_ROOT,
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT,
|
||||
{0},
|
||||
{0}},
|
||||
|
||||
@@ -288,13 +292,15 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
VIDC_BLUR_NONE, VIDC_BLUR_ADAPTIVE, 1, VIDC_BLUR_NONE,
|
||||
V4L2_CID_MPEG_VIDC_VIDEO_BLUR_TYPES,
|
||||
HFI_PROP_BLUR_TYPES,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT,
|
||||
{0}, {0},
|
||||
NULL, msm_vidc_set_u32},
|
||||
|
||||
{BLUR_RESOLUTION, ENC, CODECS_ALL,
|
||||
0, S32_MAX, 1, 0,
|
||||
V4L2_CID_MPEG_VIDC_VIDEO_BLUR_RESOLUTION,
|
||||
HFI_PROP_BLUR_RESOLUTION,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
/* Needed for control initialization. TODO */
|
||||
/* {CSC_CUSTOM_MATRIX, ENC, CODECS_ALL,
|
||||
@@ -303,14 +309,14 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
1, V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||
V4L2_CID_MPEG_VIDC_VIDEO_VPE_CSC_CUSTOM_MATRIX,
|
||||
HFI_PROP_CSC_MATRIX,
|
||||
CAP_FLAG_ROOT}, */
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT}, */
|
||||
|
||||
{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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{LOWLATENCY_MODE, ENC|DEC, CODECS_ALL,
|
||||
V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||
@@ -323,13 +329,13 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
0, 2, 1, 0,
|
||||
V4L2_CID_MPEG_VIDC_LTRCOUNT,
|
||||
HFI_PROP_LTR_COUNT,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{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,
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT,
|
||||
{LTR_COUNT},
|
||||
{0}},
|
||||
|
||||
@@ -337,19 +343,19 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
0, (MAX_LTR_FRAME_COUNT - 1), 1, 0,
|
||||
V4L2_CID_MPEG_VIDC_MARKLTRFRAME,
|
||||
HFI_PROP_LTR_MARK,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{AU_DELIMITER, ENC, H264|HEVC,
|
||||
V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||
@@ -357,7 +363,7 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
1, V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||
V4L2_CID_MPEG_VIDC_AU_DELIMITER,
|
||||
HFI_PROP_AUD,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
// confirm codec
|
||||
{TIME_DELTA_BASED_RC, ENC, CODECS_ALL,
|
||||
@@ -365,7 +371,7 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
1, V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||
V4L2_CID_MPEG_VIDC_TIME_DELTA_BASED_RC,
|
||||
HFI_PROP_TIME_DELTA_BASED_RATE_CONTROL,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
// confirm codec
|
||||
{CONTENT_ADAPTIVE_CODING, ENC, CODECS_ALL,
|
||||
@@ -373,19 +379,19 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
1, V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||
V4L2_CID_MPEG_VIDC_CONTENT_ADAPTIVE_CODING,
|
||||
HFI_PROP_CONTENT_ADAPTIVE_CODING,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{ROTATION, ENC, CODECS_ALL,
|
||||
0, 270, 90, 0,
|
||||
V4L2_CID_ROTATE,
|
||||
HFI_PROP_ROTATION,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{VBV_DELAY, ENC, CODECS_ALL,
|
||||
0, 1000, 500, 0,
|
||||
@@ -396,20 +402,20 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
0, 51, 1, 20,
|
||||
V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP,
|
||||
HFI_PROP_MIN_QP_PACKED,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{MAX_FRAME_QP, ENC, HEVC,
|
||||
0, 51, 1, 20,
|
||||
V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP,
|
||||
HFI_PROP_MAX_QP_PACKED,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
/*
|
||||
* HEVC I_MIN_QP, I_MAX_QP, P_MIN_QP, P_MAX_QP, B_MIN_QP, B_MAX_QP are missing
|
||||
@@ -418,19 +424,19 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
0, 51, 1, 10,
|
||||
V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP,
|
||||
HFI_PROP_QP_PACKED,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{P_FRAME_QP, ENC, HEVC,
|
||||
0, 51, 1, 20,
|
||||
V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QP,
|
||||
HFI_PROP_QP_PACKED,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{B_FRAME_QP, ENC, HEVC,
|
||||
0, 51, 1, 20,
|
||||
V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP,
|
||||
HFI_PROP_QP_PACKED,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{HIER_CODING_TYPE, ENC, HEVC,
|
||||
V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_B,
|
||||
@@ -440,49 +446,51 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
|
||||
{0}, {0},
|
||||
NULL, msm_vidc_set_u32},
|
||||
|
||||
{HIER_CODING_LAYER, ENC, HEVC,
|
||||
0, 5, 1, 0,
|
||||
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER,
|
||||
HFI_PROP_LAYER_COUNT,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{L0_QP, ENC, HEVC,
|
||||
0, 51, 1, 20,
|
||||
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_QP,
|
||||
HFI_PROP_QP_PACKED,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{L1_QP, ENC, HEVC,
|
||||
0, 51, 1, 20,
|
||||
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_QP,
|
||||
HFI_PROP_QP_PACKED,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{L2_QP, ENC, HEVC,
|
||||
0, 51, 1, 20,
|
||||
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_QP,
|
||||
HFI_PROP_QP_PACKED,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{L3_QP, ENC, HEVC,
|
||||
0, 51, 1, 20,
|
||||
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_QP,
|
||||
HFI_PROP_QP_PACKED,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{L4_QP, ENC, HEVC,
|
||||
0, 51, 1, 20,
|
||||
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_QP,
|
||||
HFI_PROP_QP_PACKED,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{L5_QP, ENC, HEVC,
|
||||
0, 51, 1, 20,
|
||||
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_QP,
|
||||
HFI_PROP_QP_PACKED,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{PROFILE, ENC|DEC, HEVC,
|
||||
V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN,
|
||||
@@ -493,7 +501,7 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN,
|
||||
V4L2_CID_MPEG_VIDEO_HEVC_PROFILE,
|
||||
HFI_PROP_PROFILE,
|
||||
CAP_FLAG_ROOT | CAP_FLAG_MENU,
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
|
||||
{0},
|
||||
{ENTROPY_MODE},
|
||||
NULL, msm_vidc_set_u32},
|
||||
@@ -517,7 +525,7 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2,
|
||||
V4L2_CID_MPEG_VIDEO_HEVC_LEVEL,
|
||||
HFI_PROP_LEVEL,
|
||||
CAP_FLAG_ROOT | CAP_FLAG_MENU,
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
|
||||
{0},
|
||||
{0},
|
||||
NULL, msm_vidc_set_u32},
|
||||
@@ -530,7 +538,7 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
V4L2_MPEG_VIDEO_HEVC_TIER_HIGH,
|
||||
V4L2_CID_MPEG_VIDEO_HEVC_TIER,
|
||||
HFI_PROP_TIER,
|
||||
CAP_FLAG_ROOT | CAP_FLAG_MENU,
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
|
||||
{0},
|
||||
{0},
|
||||
NULL, msm_vidc_set_u32},
|
||||
@@ -544,85 +552,85 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | 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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{LF_TC, ENC, HEVC,
|
||||
-6, 6, 1, 0,
|
||||
V4L2_CID_MPEG_VIDEO_HEVC_LF_TC_OFFSET_DIV2,
|
||||
HFI_PROP_DEBLOCKING_MODE,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{L0_BR, ENC, HEVC,
|
||||
1, 220000000, 1, 20000000,
|
||||
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BR,
|
||||
HFI_PROP_BITRATE_LAYER1,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{L1_BR, ENC, HEVC,
|
||||
1, 220000000, 1, 20000000,
|
||||
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BR,
|
||||
HFI_PROP_BITRATE_LAYER2,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{L2_BR, ENC, HEVC,
|
||||
1, 220000000, 1, 20000000,
|
||||
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BR,
|
||||
HFI_PROP_BITRATE_LAYER3,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{L3_BR, ENC, HEVC,
|
||||
1, 220000000, 1, 20000000,
|
||||
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BR,
|
||||
HFI_PROP_BITRATE_LAYER4,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{L4_BR, ENC, HEVC,
|
||||
1, 220000000, 1, 20000000,
|
||||
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BR,
|
||||
HFI_PROP_BITRATE_LAYER5,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{L5_BR, ENC, HEVC,
|
||||
1, 220000000, 1, 20000000,
|
||||
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR,
|
||||
HFI_PROP_BITRATE_LAYER6,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{BIT_RATE, ENC, HEVC,
|
||||
1, 160000000, 1, 20000000,
|
||||
V4L2_CID_MPEG_VIDEO_BITRATE,
|
||||
HFI_PROP_TOTAL_BITRATE,
|
||||
CAP_FLAG_DYNAMIC_ALLOWED,
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
|
||||
/* TODO parents */{0},
|
||||
{SLICE_MAX_BYTES},
|
||||
msm_vidc_adjust_bitrate, msm_vidc_set_s32},
|
||||
msm_vidc_adjust_bitrate, msm_vidc_set_u32},
|
||||
|
||||
{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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{SLICE_MODE, ENC, H264|HEVC,
|
||||
V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE,
|
||||
@@ -633,16 +641,16 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE,
|
||||
V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE,
|
||||
0,
|
||||
CAP_FLAG_ROOT | CAP_FLAG_MENU},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | 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,
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
|
||||
{0}, {0},
|
||||
msm_vidc_adjust_bitrate, msm_vidc_set_s32},
|
||||
msm_vidc_adjust_bitrate, msm_vidc_set_u32},
|
||||
|
||||
{LEVEL, DEC, MPEG2,
|
||||
V4L2_MPEG_VIDEO_MPEG2_LEVEL_LOW,
|
||||
@@ -654,7 +662,7 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
V4L2_MPEG_VIDEO_MPEG2_LEVEL_HIGH,
|
||||
V4L2_CID_MPEG_VIDEO_MPEG2_LEVEL,
|
||||
HFI_PROP_LEVEL,
|
||||
CAP_FLAG_ROOT | CAP_FLAG_MENU},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
|
||||
|
||||
{PROFILE, DEC, MPEG2,
|
||||
V4L2_MPEG_VIDEO_MPEG2_PROFILE_SIMPLE,
|
||||
@@ -664,7 +672,7 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
V4L2_MPEG_VIDEO_MPEG2_PROFILE_MAIN,
|
||||
V4L2_CID_MPEG_VIDEO_MPEG2_PROFILE,
|
||||
HFI_PROP_PROFILE,
|
||||
CAP_FLAG_ROOT | CAP_FLAG_MENU},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
|
||||
|
||||
{FRAME_WIDTH, DEC, MPEG2, 128, 1920, 1, 1920},
|
||||
{FRAME_HEIGHT, DEC, MPEG2, 128, 1920, 1, 1080},
|
||||
@@ -681,57 +689,57 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
0, 51, 1, 10,
|
||||
V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP,
|
||||
HFI_PROP_QP_PACKED,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{P_FRAME_QP, ENC, H264,
|
||||
0, 51, 1, 20,
|
||||
V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP,
|
||||
HFI_PROP_QP_PACKED,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{B_FRAME_QP, ENC, H264,
|
||||
0, 51, 1, 20,
|
||||
V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP,
|
||||
HFI_PROP_QP_PACKED,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{MIN_FRAME_QP, ENC, H264,
|
||||
0, 51, 1, 20,
|
||||
V4L2_CID_MPEG_VIDEO_H264_MIN_QP,
|
||||
HFI_PROP_MIN_QP_PACKED,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{MAX_FRAME_QP, ENC, H264,
|
||||
0, 51, 1, 20,
|
||||
V4L2_CID_MPEG_VIDEO_H264_MAX_QP,
|
||||
HFI_PROP_MAX_QP_PACKED,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{LF_BETA, ENC, H264,
|
||||
-6, 6, 1, 0,
|
||||
V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA,
|
||||
HFI_PROP_DEBLOCKING_MODE,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{LF_ALPHA, ENC, H264,
|
||||
-6, 6, 1, 0,
|
||||
V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA,
|
||||
HFI_PROP_DEBLOCKING_MODE,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{ENTROPY_MODE, ENC, H264,
|
||||
V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC,
|
||||
@@ -741,7 +749,7 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC,
|
||||
V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE,
|
||||
HFI_PROP_CABAC_SESSION,
|
||||
CAP_FLAG_ROOT | CAP_FLAG_MENU,
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
|
||||
{PROFILE},
|
||||
{BIT_RATE},
|
||||
msm_vidc_adjust_entropy_mode, msm_vidc_set_u32},
|
||||
@@ -757,7 +765,7 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
V4L2_MPEG_VIDEO_H264_PROFILE_HIGH,
|
||||
V4L2_CID_MPEG_VIDEO_H264_PROFILE,
|
||||
HFI_PROP_PROFILE,
|
||||
CAP_FLAG_ROOT | CAP_FLAG_MENU,
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
|
||||
{0},
|
||||
{ENTROPY_MODE},
|
||||
NULL, msm_vidc_set_u32},
|
||||
@@ -784,7 +792,7 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
V4L2_MPEG_VIDEO_H264_LEVEL_5_1,
|
||||
V4L2_CID_MPEG_VIDEO_H264_LEVEL,
|
||||
HFI_PROP_LEVEL,
|
||||
CAP_FLAG_ROOT | CAP_FLAG_MENU,
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
|
||||
{0},
|
||||
{0},
|
||||
NULL, msm_vidc_set_u32},
|
||||
@@ -798,14 +806,15 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
|
||||
|
||||
//TODO (AS)
|
||||
{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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
/* TODO(AS) - ctrl init failing. Need to fix
|
||||
{HIER_CODING_TYPE, ENC, H264,
|
||||
@@ -816,20 +825,20 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | 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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
/* TODO: CHROMA_QP_INDEX_OFFSET is applicable to HEVC as well */
|
||||
{CHROMA_QP_INDEX_OFFSET, ENC, H264,
|
||||
@@ -837,44 +846,44 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
1, MAX_CHROMA_QP_OFFSET,
|
||||
V4L2_CID_MPEG_VIDEO_H264_CHROMA_QP_INDEX_OFFSET,
|
||||
HFI_PROP_CHROMA_QP_OFFSET,
|
||||
CAP_FLAG_ROOT},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{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},
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
/* VP9 specific */
|
||||
{I_FRAME_QP, ENC, VP9, 0, 127, 1, 20},
|
||||
@@ -891,7 +900,7 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
V4L2_MPEG_VIDEO_VP9_PROFILE_0,
|
||||
V4L2_CID_MPEG_VIDEO_VP9_PROFILE,
|
||||
HFI_PROP_PROFILE,
|
||||
CAP_FLAG_ROOT | CAP_FLAG_MENU,
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
|
||||
{0},
|
||||
{ENTROPY_MODE},
|
||||
NULL, msm_vidc_set_u32},
|
||||
@@ -900,11 +909,13 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
{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},
|
||||
HFI_PROP_CONCEAL_COLOR_8BIT,
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_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},
|
||||
HFI_PROP_CONCEAL_COLOR_10BIT,
|
||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
||||
|
||||
{STAGE, DEC|ENC, CODECS_ALL, 1, 2, 1, 2},
|
||||
{PIPE, DEC|ENC, CODECS_ALL, 1, 4, 1, 4},
|
||||
|
@@ -315,6 +315,8 @@ enum hfi_quality_mode {
|
||||
HFI_MODE_MAX_QUALITY = 0x1,
|
||||
HFI_MODE_POWER_SAVE = 0x2,
|
||||
};
|
||||
|
||||
// TODO (AS): Does not map to any V4l2 control
|
||||
#define HFI_PROP_QUALITY_MODE 0x03000148
|
||||
|
||||
enum hfi_seq_header_mode {
|
||||
|
@@ -55,7 +55,8 @@ static inline is_internal_buffer(enum msm_vidc_buffer_type buffer_type)
|
||||
buffer_type == MSM_VIDC_BUF_NON_COMV ||
|
||||
buffer_type == MSM_VIDC_BUF_LINE ||
|
||||
buffer_type == MSM_VIDC_BUF_DPB ||
|
||||
buffer_type == MSM_VIDC_BUF_PERSIST;
|
||||
buffer_type == MSM_VIDC_BUF_PERSIST ||
|
||||
buffer_type == MSM_VIDC_BUF_VPSS;
|
||||
}
|
||||
|
||||
static inline bool is_secondary_output_mode(struct msm_vidc_inst *inst)
|
||||
|
@@ -335,6 +335,8 @@ enum msm_vidc_inst_capability_flags {
|
||||
CAP_FLAG_ROOT = BIT(0),
|
||||
CAP_FLAG_DYNAMIC_ALLOWED = BIT(1),
|
||||
CAP_FLAG_MENU = BIT(2),
|
||||
CAP_FLAG_INPUT_PORT = BIT(3),
|
||||
CAP_FLAG_OUTPUT_PORT = BIT(4),
|
||||
};
|
||||
|
||||
struct msm_vidc_inst_cap {
|
||||
|
@@ -129,6 +129,9 @@ static int msm_venc_set_resolution(struct msm_vidc_inst *inst,
|
||||
|
||||
resolution = inst->fmts[port].fmt.pix_mp.width << 16 |
|
||||
inst->fmts[port].fmt.pix_mp.height;
|
||||
s_vpr_h(inst->sid, "%s: width: %d height: %d\n", __func__,
|
||||
inst->fmts[port].fmt.pix_mp.width,
|
||||
inst->fmts[port].fmt.pix_mp.height);
|
||||
rc = venus_hfi_session_property(inst,
|
||||
HFI_PROP_BITSTREAM_RESOLUTION,
|
||||
HFI_HOST_FLAGS_NONE,
|
||||
@@ -155,11 +158,14 @@ static int msm_venc_set_crop_offsets(struct msm_vidc_inst *inst,
|
||||
/* TODO: recheck later */
|
||||
crop = inst->fmts[INPUT_PORT].fmt.pix_mp.width << 16 |
|
||||
inst->fmts[INPUT_PORT].fmt.pix_mp.height;
|
||||
s_vpr_h(inst->sid, "%s: width: %d height: %d\n", __func__,
|
||||
inst->fmts[INPUT_PORT].fmt.pix_mp.width,
|
||||
inst->fmts[INPUT_PORT].fmt.pix_mp.height);
|
||||
rc = venus_hfi_session_property(inst,
|
||||
HFI_PROP_CROP_OFFSETS,
|
||||
HFI_HOST_FLAGS_NONE,
|
||||
get_hfi_port(inst, port),
|
||||
HFI_PAYLOAD_32_PACKED,
|
||||
HFI_PAYLOAD_64_PACKED,
|
||||
&crop,
|
||||
sizeof(u32));
|
||||
if (rc)
|
||||
@@ -301,17 +307,21 @@ static int msm_venc_get_input_internal_buffers(struct msm_vidc_inst *inst)
|
||||
core = inst->core;
|
||||
|
||||
inst->buffers.arp.size = call_session_op(core, buffer_size,
|
||||
inst, MSM_VIDC_BUF_ARP);
|
||||
inst, MSM_VIDC_BUF_ARP) + 100000000;
|
||||
inst->buffers.bin.size = call_session_op(core, buffer_size,
|
||||
inst, MSM_VIDC_BUF_BIN);
|
||||
/* inst->buffers.comv.size = call_session_op(core, buffer_size,
|
||||
inst, MSM_VIDC_BUF_COMV);
|
||||
inst, MSM_VIDC_BUF_BIN) + 100000000;
|
||||
inst->buffers.comv.size = call_session_op(core, buffer_size,
|
||||
inst, MSM_VIDC_BUF_COMV) + 100000000;
|
||||
inst->buffers.non_comv.size = call_session_op(core, buffer_size,
|
||||
inst, MSM_VIDC_BUF_NON_COMV); */
|
||||
inst, MSM_VIDC_BUF_NON_COMV) + 100000000;
|
||||
inst->buffers.line.size = call_session_op(core, buffer_size,
|
||||
inst, MSM_VIDC_BUF_LINE);
|
||||
inst, MSM_VIDC_BUF_LINE) + 100000000;
|
||||
inst->buffers.dpb.size = call_session_op(core, buffer_size,
|
||||
inst, MSM_VIDC_BUF_DPB);
|
||||
inst, MSM_VIDC_BUF_DPB) + 100000000;
|
||||
//inst->buffers.vpss.size = call_session_op(core, buffer_size,
|
||||
//inst, MSM_VIDC_BUF_VPSS) + 100000000;
|
||||
//vpss is req - 100 mb
|
||||
|
||||
/* inst->buffers.persist.size = call_session_op(core, buffer_size,
|
||||
inst, MSM_VIDC_BUF_PERSIST); */
|
||||
|
||||
@@ -319,10 +329,10 @@ static int msm_venc_get_input_internal_buffers(struct msm_vidc_inst *inst)
|
||||
inst, MSM_VIDC_BUF_ARP);
|
||||
inst->buffers.bin.min_count = call_session_op(core, min_count,
|
||||
inst, MSM_VIDC_BUF_BIN);
|
||||
/* inst->buffers.comv.min_count = call_session_op(core, min_count,
|
||||
inst->buffers.comv.min_count = call_session_op(core, min_count,
|
||||
inst, MSM_VIDC_BUF_COMV);
|
||||
inst->buffers.non_comv.min_count = call_session_op(core, min_count,
|
||||
inst, MSM_VIDC_BUF_NON_COMV); */
|
||||
inst, MSM_VIDC_BUF_NON_COMV);
|
||||
inst->buffers.line.min_count = call_session_op(core, min_count,
|
||||
inst, MSM_VIDC_BUF_LINE);
|
||||
inst->buffers.dpb.min_count = call_session_op(core, min_count,
|
||||
@@ -337,12 +347,12 @@ static int msm_venc_get_input_internal_buffers(struct msm_vidc_inst *inst)
|
||||
s_vpr_h(inst->sid, "bin buffer: %d %d\n",
|
||||
inst->buffers.bin.min_count,
|
||||
inst->buffers.bin.size);
|
||||
/* s_vpr_h(inst->sid, "comv buffer: %d %d\n",
|
||||
s_vpr_h(inst->sid, "comv buffer: %d %d\n",
|
||||
inst->buffers.comv.min_count,
|
||||
inst->buffers.comv.size);
|
||||
s_vpr_h(inst->sid, "non_comv buffer: %d %d\n",
|
||||
inst->buffers.non_comv.min_count,
|
||||
inst->buffers.non_comv.size); */
|
||||
inst->buffers.non_comv.size);
|
||||
s_vpr_h(inst->sid, "line buffer: %d %d\n",
|
||||
inst->buffers.line.min_count,
|
||||
inst->buffers.line.size);
|
||||
@@ -372,12 +382,12 @@ static int msm_venc_create_input_internal_buffers(struct msm_vidc_inst *inst)
|
||||
rc = msm_vidc_create_internal_buffers(inst, MSM_VIDC_BUF_BIN);
|
||||
if (rc)
|
||||
return rc;
|
||||
/* rc = msm_vidc_create_internal_buffers(inst, MSM_VIDC_BUF_COMV);
|
||||
rc = msm_vidc_create_internal_buffers(inst, MSM_VIDC_BUF_COMV);
|
||||
if (rc)
|
||||
return rc;
|
||||
rc = msm_vidc_create_internal_buffers(inst, MSM_VIDC_BUF_NON_COMV);
|
||||
if (rc)
|
||||
return rc; */
|
||||
return rc;
|
||||
rc = msm_vidc_create_internal_buffers(inst, MSM_VIDC_BUF_LINE);
|
||||
if (rc)
|
||||
return rc;
|
||||
@@ -407,12 +417,12 @@ static int msm_venc_queue_input_internal_buffers(struct msm_vidc_inst *inst)
|
||||
rc = msm_vidc_queue_internal_buffers(inst, MSM_VIDC_BUF_BIN);
|
||||
if (rc)
|
||||
return rc;
|
||||
/* rc = msm_vidc_queue_internal_buffers(inst, MSM_VIDC_BUF_COMV);
|
||||
rc = msm_vidc_queue_internal_buffers(inst, MSM_VIDC_BUF_COMV);
|
||||
if (rc)
|
||||
return rc;
|
||||
rc = msm_vidc_queue_internal_buffers(inst, MSM_VIDC_BUF_NON_COMV);
|
||||
if (rc)
|
||||
return rc; */
|
||||
return rc;
|
||||
rc = msm_vidc_queue_internal_buffers(inst, MSM_VIDC_BUF_LINE);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
@@ -31,7 +31,7 @@ static const char *const mpeg_video_rate_control[] = {
|
||||
"MBR",
|
||||
"MBR VFR",
|
||||
"CQ",
|
||||
NULL
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const char *const mpeg_video_stream_format[] = {
|
||||
@@ -57,6 +57,26 @@ static const char *const roi_map_type[] = {
|
||||
NULL,
|
||||
};
|
||||
|
||||
static u32 msm_vidc_get_port_info(struct msm_vidc_inst *inst,
|
||||
enum msm_vidc_inst_capability_type cap_id)
|
||||
{
|
||||
struct msm_vidc_inst_capability *capability = inst->capabilities;
|
||||
|
||||
if (capability->cap[cap_id].flags & CAP_FLAG_INPUT_PORT &&
|
||||
capability->cap[cap_id].flags & CAP_FLAG_OUTPUT_PORT) {
|
||||
s_vpr_e(inst->sid,
|
||||
"%s: both ports enabled. Default port set: BITSTREAM\n",
|
||||
__func__);
|
||||
return HFI_PORT_BITSTREAM;
|
||||
}
|
||||
if (capability->cap[cap_id].flags & CAP_FLAG_INPUT_PORT)
|
||||
return get_hfi_port(inst, INPUT_PORT);
|
||||
else if (capability->cap[cap_id].flags & CAP_FLAG_OUTPUT_PORT)
|
||||
return get_hfi_port(inst, OUTPUT_PORT);
|
||||
else
|
||||
return HFI_PORT_NONE;
|
||||
}
|
||||
|
||||
static const char * const * msm_vidc_get_qmenu_type(
|
||||
struct msm_vidc_inst *inst, u32 control_id)
|
||||
{
|
||||
@@ -682,11 +702,11 @@ int msm_vidc_adjust_properties(struct msm_vidc_inst *inst)
|
||||
struct msm_vidc_inst_cap_entry *curr_node = NULL, *tmp_node = NULL;
|
||||
struct msm_vidc_inst_capability *capability;
|
||||
|
||||
d_vpr_h("%s()\n", __func__);
|
||||
if (!inst || !inst->capabilities) {
|
||||
d_vpr_e("%s: invalid params\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
capability = inst->capabilities;
|
||||
|
||||
for (i = 0; i < INST_CAP_MAX; i++) {
|
||||
@@ -727,21 +747,28 @@ int msm_vidc_set_u32(void *instance,
|
||||
{
|
||||
int rc = 0;
|
||||
struct msm_vidc_inst *inst = (struct msm_vidc_inst *)instance;
|
||||
u32 hfi_value;
|
||||
u32 hfi_value, hfi_payload;
|
||||
|
||||
if (!inst || !inst->capabilities) {
|
||||
d_vpr_e("%s: invalid params\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
rc = msm_vidc_v4l2_menu_to_hfi(inst, cap_id, &hfi_value);
|
||||
if (rc)
|
||||
return -EINVAL;
|
||||
if (inst->capabilities->cap[cap_id].flags & CAP_FLAG_MENU) {
|
||||
rc = msm_vidc_v4l2_menu_to_hfi(inst, cap_id, &hfi_value);
|
||||
if (rc)
|
||||
return -EINVAL;
|
||||
hfi_payload = HFI_PAYLOAD_U32_ENUM;
|
||||
} else {
|
||||
hfi_value = inst->capabilities->cap[cap_id].value;
|
||||
hfi_payload = HFI_PAYLOAD_U32;
|
||||
}
|
||||
|
||||
rc = venus_hfi_session_property(inst,
|
||||
inst->capabilities->cap[cap_id].hfi_id,
|
||||
HFI_HOST_FLAGS_NONE, HFI_PORT_NONE,
|
||||
HFI_PAYLOAD_U32_ENUM,
|
||||
HFI_HOST_FLAGS_NONE,
|
||||
msm_vidc_get_port_info(inst, cap_id),
|
||||
hfi_payload,
|
||||
&hfi_value,
|
||||
sizeof(u32));
|
||||
if (rc)
|
||||
@@ -830,6 +857,7 @@ int msm_vidc_set_fw_list(struct msm_vidc_inst *inst)
|
||||
struct msm_vidc_inst_capability *capability;
|
||||
struct msm_vidc_inst_cap_entry *curr_node = NULL, *tmp_node = NULL;
|
||||
|
||||
d_vpr_h("%s()\n", __func__);
|
||||
if (!inst || !inst->capabilities) {
|
||||
d_vpr_e("%s: invalid params\n", __func__);
|
||||
return -EINVAL;
|
||||
@@ -862,6 +890,15 @@ int msm_vidc_v4l2_menu_to_hfi(struct msm_vidc_inst *inst,
|
||||
struct msm_vidc_inst_capability *capability = inst->capabilities;
|
||||
|
||||
switch (capability->cap[cap_id].v4l2_id) {
|
||||
case V4L2_CID_MPEG_VIDEO_HEVC_PROFILE:
|
||||
case V4L2_CID_MPEG_VIDEO_H264_PROFILE:
|
||||
case V4L2_CID_MPEG_VIDEO_VP9_PROFILE:
|
||||
case V4L2_CID_MPEG_VIDEO_HEVC_LEVEL:
|
||||
case V4L2_CID_MPEG_VIDEO_H264_LEVEL:
|
||||
case V4L2_CID_MPEG_VIDEO_HEVC_TIER:
|
||||
case V4L2_CID_MPEG_VIDC_VIDEO_BLUR_TYPES:
|
||||
*value = capability->cap[cap_id].value;
|
||||
return 0;
|
||||
case V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE:
|
||||
switch (capability->cap[cap_id].value) {
|
||||
case V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC:
|
||||
@@ -872,16 +909,64 @@ int msm_vidc_v4l2_menu_to_hfi(struct msm_vidc_inst *inst,
|
||||
break;
|
||||
default:
|
||||
*value = 1;
|
||||
s_vpr_e(inst->sid,
|
||||
"%s: invalid ctrl %d value %d, default value %u\n",
|
||||
__func__, capability->cap[cap_id].v4l2_id,
|
||||
capability->cap[cap_id].value, *value);
|
||||
goto set_default;
|
||||
}
|
||||
break;
|
||||
return 0;
|
||||
case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
|
||||
switch (capability->cap[cap_id].value) {
|
||||
case V4L2_MPEG_VIDEO_BITRATE_MODE_VBR:
|
||||
*value = HFI_RC_VBR_CFR;
|
||||
break;
|
||||
case V4L2_MPEG_VIDEO_BITRATE_MODE_CBR:
|
||||
*value = HFI_RC_CBR_CFR;
|
||||
break;
|
||||
default:
|
||||
*value = HFI_RC_VBR_CFR;
|
||||
goto set_default;
|
||||
}
|
||||
return 0;
|
||||
case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE:
|
||||
switch (capability->cap[cap_id].value) {
|
||||
case V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_B:
|
||||
*value = HFI_HIER_B;
|
||||
break;
|
||||
case V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P:
|
||||
//TODO (AS): check if this is right mapping
|
||||
*value = HFI_HIER_P_SLIDING_WINDOW;
|
||||
break;
|
||||
default:
|
||||
*value = HFI_HIER_P_SLIDING_WINDOW;
|
||||
goto set_default;
|
||||
}
|
||||
return 0;
|
||||
case V4L2_CID_MPEG_VIDEO_HEADER_MODE:
|
||||
switch (capability->cap[cap_id].value) {
|
||||
case V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE:
|
||||
*value = BIT(HFI_SEQ_HEADER_SEPERATE_FRAME);
|
||||
break;
|
||||
case V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME:
|
||||
*value = BIT(HFI_SEQ_HEADER_JOINED_WITH_1ST_FRAME);
|
||||
break;
|
||||
/*
|
||||
* TODO (AS): other HFI values are missing corresponding
|
||||
* V4l2 values. Add them once available.
|
||||
*/
|
||||
default:
|
||||
*value = HFI_SEQ_HEADER_SEPERATE_FRAME;
|
||||
goto set_default;
|
||||
}
|
||||
return 0;
|
||||
default:
|
||||
s_vpr_e(inst->sid,
|
||||
"%s: invalid ctrl with cap_id %d\n", __func__, cap_id);
|
||||
"%s: mapping not specified for ctrl_id: %#x\n",
|
||||
__func__, capability->cap[cap_id].v4l2_id);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
set_default:
|
||||
s_vpr_e(inst->sid,
|
||||
"%s: invalid value %d for ctrl id: %#x. Set default: %u\n",
|
||||
__func__, capability->cap[cap_id].value,
|
||||
capability->cap[cap_id].v4l2_id, *value);
|
||||
return 0;
|
||||
}
|
||||
|
@@ -6,11 +6,11 @@
|
||||
#include "msm_vidc_vb2.h"
|
||||
#include "msm_vidc_core.h"
|
||||
#include "msm_vidc_inst.h"
|
||||
#include "msm_vidc_internal.h"
|
||||
#include "msm_vidc_driver.h"
|
||||
#include "msm_vdec.h"
|
||||
#include "msm_venc.h"
|
||||
#include "msm_vidc_debug.h"
|
||||
#include "msm_vidc_control.h"
|
||||
|
||||
void *msm_vb2_get_userptr(struct device *dev, unsigned long vaddr,
|
||||
unsigned long size, enum dma_data_direction dma_dir)
|
||||
@@ -185,6 +185,19 @@ int msm_vidc_start_streaming(struct vb2_queue *q, unsigned int count)
|
||||
}
|
||||
|
||||
/*
|
||||
if ((inst->state == MSM_VIDC_OPEN && q->type == OUTPUT_MPLANE) ||
|
||||
inst->state == MSM_VIDC_START_INPUT) {
|
||||
s_vpr_h(inst->sid, "$s: msm_vidc_adjust_properties\n");
|
||||
rc = msm_vidc_adjust_properties(inst);
|
||||
if (rc)
|
||||
return -EINVAL;
|
||||
|
||||
s_vpr_h(inst->sid, "$s: msm_vidc_set_fw_list\n");
|
||||
rc = msm_vidc_set_fw_list(inst);
|
||||
if (rc)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (inst->state == MSM_VIDC_START_INPUT ||
|
||||
inst->state == MSM_VIDC_START_OUTPUT) {
|
||||
rc = msm_vidc_adjust_properties(inst);
|
||||
@@ -192,8 +205,8 @@ int msm_vidc_start_streaming(struct vb2_queue *q, unsigned int count)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if ((inst->state == MSM_VIDC_START_INPUT) ||
|
||||
(inst->state == MSM_VIDC_START &&
|
||||
if ((inst->state == MSM_VIDC_START_OUTPUT) ||
|
||||
(inst->state == MSM_VIDC_OPEN &&
|
||||
q->type == INPUT_MPLANE)) {
|
||||
rc = msm_vidc_set_fw_list(inst);
|
||||
if (rc)
|
||||
@@ -201,6 +214,17 @@ int msm_vidc_start_streaming(struct vb2_queue *q, unsigned int count)
|
||||
}
|
||||
*/
|
||||
|
||||
if (inst->state == MSM_VIDC_START_INPUT ||
|
||||
inst->state == MSM_VIDC_START_OUTPUT) {
|
||||
rc = msm_vidc_adjust_properties(inst);
|
||||
if (rc)
|
||||
return -EINVAL;
|
||||
|
||||
rc = msm_vidc_set_fw_list(inst);
|
||||
if (rc)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (q->type == INPUT_MPLANE) {
|
||||
if (is_decode_session(inst))
|
||||
rc = msm_vdec_start_input(inst);
|
||||
|
Reference in New Issue
Block a user