diff --git a/driver/platform/waipio/src/msm_vidc_waipio.c b/driver/platform/waipio/src/msm_vidc_waipio.c index 59caab05ea..c168aeded7 100644 --- a/driver/platform/waipio/src/msm_vidc_waipio.c +++ b/driver/platform/waipio/src/msm_vidc_waipio.c @@ -744,7 +744,7 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { HFI_PROP_LAYER_COUNT, CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, - {BITRATE_MODE}, + {BITRATE_MODE, META_EVA_STATS}, {GOP_SIZE, B_FRAME, BIT_RATE}, msm_vidc_adjust_layer_count, msm_vidc_set_layer_count_and_type}, @@ -754,7 +754,7 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { HFI_PROP_LAYER_COUNT, CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, - {BITRATE_MODE}, + {BITRATE_MODE, META_EVA_STATS}, {GOP_SIZE, B_FRAME, BIT_RATE}, msm_vidc_adjust_layer_count, msm_vidc_set_layer_count_and_type}, @@ -1330,7 +1330,10 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE, 1, V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_CID_MPEG_VIDC_METADATA_EVA_STATS, - HFI_PROP_EVA_STAT_INFO}, + HFI_PROP_EVA_STAT_INFO, + CAP_FLAG_ROOT, + {0}, + {ENH_LAYER_COUNT}}, {META_BUF_TAG, DEC | ENC, CODECS_ALL, V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE, diff --git a/driver/vidc/src/msm_vidc_control.c b/driver/vidc/src/msm_vidc_control.c index 435923e8fd..a36de94ad2 100644 --- a/driver/vidc/src/msm_vidc_control.c +++ b/driver/vidc/src/msm_vidc_control.c @@ -1316,6 +1316,14 @@ static int msm_vidc_adjust_static_layer_count_and_type(struct msm_vidc_inst *ins goto exit; } + if (!inst->capabilities->cap[META_EVA_STATS].value && + hb_requested && (layer_count > 1)) { + layer_count = 1; + i_vpr_h(inst, + "%s: cvp disable supports only one enh layer HB\n", + __func__); + } + /* decide hfi layer type */ if (hb_requested) { inst->hfi_layer_type = HFI_HIER_B; @@ -1368,7 +1376,9 @@ int msm_vidc_adjust_layer_count(void *instance, struct v4l2_ctrl *ctrl) capability->cap[ENH_LAYER_COUNT].value; if (!is_parent_available(inst, ENH_LAYER_COUNT, - BITRATE_MODE, __func__)) + BITRATE_MODE, __func__) || + !is_parent_available(inst, ENH_LAYER_COUNT, + META_EVA_STATS, __func__)) return -EINVAL; if (!inst->vb2q[OUTPUT_PORT].streaming) { @@ -1419,7 +1429,7 @@ int msm_vidc_adjust_gop_size(void *instance, struct v4l2_ctrl *ctrl) /* * Layer encoding needs GOP size to be multiple of subgop size * And subgop size is 2 ^ number of enhancement layers. - */ + */ /* v4l2 layer count is the number of enhancement layers */ min_gop_size = 1 << enh_layer_count;