video: driver: Add support to handle GOP and its dependencies

Add support to below mentioned properties:
- HFI_PROP_LAYER_ENCODING_TYPE
- HFI_PROP_LAYER_COUNT
- HFI_PROP_MAX_GOP_FRAMES
- HFI_PROP_MAX_B_FRAMES.

Change-Id: I3be975a48dc668d0ec83f6ff13837488fc570b78
Signed-off-by: Akshata Sahukar <asahukar@codeaurora.org>
Cette révision appartient à :
Akshata Sahukar
2021-03-11 13:21:21 -08:00
Parent 5d45f82cbb
révision 98e799da29
8 fichiers modifiés avec 423 ajouts et 64 suppressions

Voir le fichier

@@ -60,6 +60,7 @@ static struct msm_platform_core_capability core_data_waipio[] = {
{MAX_MBPS_HQ, 489600}, /* ((1920x1088)/256)@60fps */
{MAX_MBPF_B_FRAME, 32640}, /* 3840x2176/256 */
{MAX_MBPS_B_FRAME, 1958400}, /* 3840x2176/256 MBs@60fps */
{MAX_ENH_LAYER_COUNT, 5},
{NUM_VPP_PIPE, 4},
{SW_PC, 1},
{SW_PC_DELAY, 20000}, /* 20000 ms (>HW_RESPONSE_TIMEOUT)*/
@@ -193,12 +194,6 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
{SCALE_X, DEC, H264|HEVC|VP9, 65536, 65536, 1, 65536},
{SCALE_Y, ENC, H264|HEVC, 8192, 65536, 1, 8192},
{SCALE_Y, DEC, H264|HEVC|VP9, 65536, 65536, 1, 65536},
{B_FRAME, ENC, H264|HEVC,
V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
1, V4L2_MPEG_MSM_VIDC_DISABLE,
V4L2_CID_MPEG_VIDEO_B_FRAMES,
HFI_PROP_MAX_B_FRAMES,
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
{MB_CYCLES_VSP, ENC, CODECS_ALL, 25, 25, 1, 25},
{MB_CYCLES_VSP, DEC, CODECS_ALL, 25, 25, 1, 25},
@@ -328,7 +323,8 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
HFI_PROP_RATE_CONTROL,
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
{0},
{LTR_COUNT, IR_RANDOM, TIME_DELTA_BASED_RC, I_FRAME_QP},
{LTR_COUNT, IR_RANDOM, TIME_DELTA_BASED_RC, I_FRAME_QP,
ENH_LAYER_COUNT},
msm_vidc_adjust_bitrate_mode, msm_vidc_set_u32_enum},
{BITRATE_MODE, ENC, HEVC,
@@ -343,7 +339,7 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
{0},
{LTR_COUNT, IR_RANDOM, TIME_DELTA_BASED_RC,
I_FRAME_QP, CONSTANT_QUALITY},
I_FRAME_QP, CONSTANT_QUALITY, ENH_LAYER_COUNT},
msm_vidc_adjust_bitrate_mode, msm_vidc_set_u32_enum},
{LOSSLESS, ENC, HEVC|HEIC,
@@ -375,14 +371,14 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
{BITRATE_MODE}, {0},
NULL, msm_vidc_set_constant_quality},
// TODO: GOP dependencies
{GOP_SIZE, ENC, CODECS_ALL,
0, INT_MAX, 1, 2 * DEFAULT_FPS - 1,
V4L2_CID_MPEG_VIDEO_GOP_SIZE,
HFI_PROP_MAX_GOP_FRAMES,
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
{0}, {0},
NULL, msm_vidc_set_u32},
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
{ENH_LAYER_COUNT},
{0},
msm_vidc_adjust_gop_size, msm_vidc_set_gop_size},
{GOP_CLOSURE, ENC, H264|HEVC,
V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
@@ -390,6 +386,15 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
V4L2_CID_MPEG_VIDEO_GOP_CLOSURE,
0},
{B_FRAME, ENC, H264|HEVC,
0, 7, 1, 0,
V4L2_CID_MPEG_VIDEO_B_FRAMES,
HFI_PROP_MAX_B_FRAMES,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
{ENH_LAYER_COUNT},
{0},
msm_vidc_adjust_b_frame, msm_vidc_set_u32},
{BLUR_TYPES, ENC, CODECS_ALL,
VIDC_BLUR_NONE, VIDC_BLUR_ADAPTIVE, 1, VIDC_BLUR_NONE,
V4L2_CID_MPEG_VIDC_VIDEO_BLUR_TYPES,
@@ -662,8 +667,7 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
HFI_PROP_QP_PACKED,
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
// TODO: Enable while reveiwing support for layer encoding
{HIER_CODING_TYPE, ENC, HEVC,
{LAYER_TYPE, ENC, HEVC,
V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_B,
V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P,
BIT(V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_B) |
@@ -671,12 +675,9 @@ 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_OUTPUT_PORT | CAP_FLAG_MENU,
{0}, {0},
NULL, NULL},
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
/* TODO(AS) - ctrl init failing. Need to fix
{HIER_CODING_TYPE, ENC, H264,
{LAYER_TYPE, ENC, H264,
V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_B,
V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P,
BIT(V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_B) |
@@ -684,29 +685,32 @@ 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_OUTPUT_PORT | CAP_FLAG_MENU},
*/
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
//TODO (AS)
{HIER_CODING, ENC, H264,
{LAYER_ENABLE, 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_OUTPUT_PORT},
CAP_FLAG_OUTPUT_PORT},
// TODO: add relationship with GOP_SIZE in caps
{HIER_CODING_LAYER, ENC, HEVC,
{ENH_LAYER_COUNT, ENC, HEVC,
0, 5, 1, 0,
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER,
HFI_PROP_LAYER_COUNT,
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
{BITRATE_MODE},
{GOP_SIZE, B_FRAME},
msm_vidc_adjust_layer_count, msm_vidc_set_layer_count_and_type},
{HIER_CODING_LAYER, ENC, H264,
0, 6, 1, 0,
{ENH_LAYER_COUNT, ENC, H264,
0, 5, 1, 0,
V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER,
HFI_PROP_LAYER_COUNT,
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
{BITRATE_MODE},
{GOP_SIZE, B_FRAME},
msm_vidc_adjust_layer_count, msm_vidc_set_layer_count_and_type},
{L0_BR, ENC, HEVC,
1, 220000000, 1, 20000000,