diff options
| -rw-r--r-- | drivers/media/platform/msm/vidc/hfi_packetization.c | 12 | ||||
| -rw-r--r-- | drivers/media/platform/msm/vidc/msm_venc.c | 38 | ||||
| -rw-r--r-- | drivers/media/platform/msm/vidc/vidc_hfi_api.h | 3 | ||||
| -rw-r--r-- | drivers/media/platform/msm/vidc/vidc_hfi_helper.h | 6 |
4 files changed, 53 insertions, 6 deletions
diff --git a/drivers/media/platform/msm/vidc/hfi_packetization.c b/drivers/media/platform/msm/vidc/hfi_packetization.c index df322c670fd..dd7bbf507cd 100644 --- a/drivers/media/platform/msm/vidc/hfi_packetization.c +++ b/drivers/media/platform/msm/vidc/hfi_packetization.c @@ -1698,10 +1698,18 @@ int create_pkt_cmd_session_set_property( pkt->size += sizeof(u32) + sizeof(struct hfi_ltrmark); break; } - case HAL_PARAM_VENC_HIER_P_NUM_FRAMES: + case HAL_PARAM_VENC_HIER_P_MAX_ENH_LAYERS: { pkt->rg_property_data[0] = - HFI_PROPERTY_PARAM_VENC_HIER_P_NUM_ENH_LAYER; + HFI_PROPERTY_PARAM_VENC_HIER_P_MAX_NUM_ENH_LAYER; + pkt->rg_property_data[1] = *(u32 *)pdata; + pkt->size += sizeof(u32) * 2; + break; + } + case HAL_CONFIG_VENC_HIER_P_NUM_FRAMES: + { + pkt->rg_property_data[0] = + HFI_PROPERTY_CONFIG_VENC_HIER_P_ENH_LAYER; pkt->rg_property_data[1] = *(u32 *)pdata; pkt->size += sizeof(u32) * 2; break; diff --git a/drivers/media/platform/msm/vidc/msm_venc.c b/drivers/media/platform/msm/vidc/msm_venc.c index 094360f9e00..840d3d99218 100644 --- a/drivers/media/platform/msm/vidc/msm_venc.c +++ b/drivers/media/platform/msm/vidc/msm_venc.c @@ -1086,6 +1086,38 @@ static int msm_venc_queue_setup(struct vb2_queue *q, return rc; } +static int msm_venc_enable_hier_p(struct msm_vidc_inst *inst) +{ + int num_enh_layers = 0; + u32 property_id = 0; + struct hfi_device *hdev = NULL; + int rc = 0; + + if (!inst || !inst->core || !inst->core->device) { + dprintk(VIDC_ERR, "%s invalid parameters\n", __func__); + return -EINVAL; + } + + if (inst->fmts[CAPTURE_PORT]->fourcc != V4L2_PIX_FMT_VP8) + return 0; + + num_enh_layers = inst->capability.hier_p.max - 1; + if (!num_enh_layers) + return 0; + + hdev = inst->core->device; + property_id = HAL_PARAM_VENC_HIER_P_MAX_ENH_LAYERS; + + rc = call_hfi_op(hdev, session_set_property, + (void *)inst->session, property_id, + (void *)&num_enh_layers); + if (rc) { + dprintk(VIDC_ERR, + "%s: failed with error = %d\n", __func__, rc); + } + return rc; +} + static inline int start_streaming(struct msm_vidc_inst *inst) { int rc = 0; @@ -1097,6 +1129,10 @@ static inline int start_streaming(struct msm_vidc_inst *inst) return -EINVAL; } + rc = msm_venc_enable_hier_p(inst); + if (rc) + return rc; + if (inst->capability.pixelprocess_capabilities & HAL_VIDEO_ENCODER_SCALING_CAPABILITY) rc = msm_vidc_check_scaling_supported(inst); @@ -2217,7 +2253,7 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) pdata = &markltr; break; case V4L2_CID_MPEG_VIDC_VIDEO_HIER_P_NUM_LAYERS: - property_id = HAL_PARAM_VENC_HIER_P_NUM_FRAMES; + property_id = HAL_CONFIG_VENC_HIER_P_NUM_FRAMES; hier_p_layers = ctrl->val; if (hier_p_layers > (inst->capability.hier_p.max - 1)) { dprintk(VIDC_ERR, diff --git a/drivers/media/platform/msm/vidc/vidc_hfi_api.h b/drivers/media/platform/msm/vidc/vidc_hfi_api.h index 22248e1dd10..bf4bcb2696f 100644 --- a/drivers/media/platform/msm/vidc/vidc_hfi_api.h +++ b/drivers/media/platform/msm/vidc/vidc_hfi_api.h @@ -197,7 +197,8 @@ enum hal_property { HAL_CONFIG_VENC_MARKLTRFRAME, HAL_CONFIG_VENC_USELTRFRAME, HAL_CONFIG_VENC_LTRPERIOD, - HAL_PARAM_VENC_HIER_P_NUM_FRAMES, + HAL_CONFIG_VENC_HIER_P_NUM_FRAMES, + HAL_PARAM_VENC_HIER_P_MAX_ENH_LAYERS, HAL_PARAM_VENC_DISABLE_RC_TIMESTAMP, }; diff --git a/drivers/media/platform/msm/vidc/vidc_hfi_helper.h b/drivers/media/platform/msm/vidc/vidc_hfi_helper.h index c12e67f9058..92111eeebfd 100644 --- a/drivers/media/platform/msm/vidc/vidc_hfi_helper.h +++ b/drivers/media/platform/msm/vidc/vidc_hfi_helper.h @@ -307,8 +307,6 @@ struct hfi_buffer_info { (HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x018) #define HFI_PROPERTY_PARAM_VENC_MULTIREF_P \ (HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x019) -#define HFI_PROPERTY_PARAM_VENC_HIER_P_NUM_ENH_LAYER \ - (HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x01A) #define HFI_PROPERTY_PARAM_VENC_H264_NAL_SVC_EXT \ (HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x01B) #define HFI_PROPERTY_PARAM_VENC_LTRMODE \ @@ -325,6 +323,8 @@ struct hfi_buffer_info { (HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x021) #define HFI_PROPERTY_PARAM_VENC_PRESERVE_TEXT_QUALITY \ (HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x023) +#define HFI_PROPERTY_PARAM_VENC_HIER_P_MAX_NUM_ENH_LAYER \ + (HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x026) #define HFI_PROPERTY_PARAM_VENC_DISABLE_RC_TIMESTAMP \ (HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x027) @@ -352,6 +352,8 @@ struct hfi_buffer_info { (HFI_PROPERTY_CONFIG_VENC_COMMON_START + 0x009) #define HFI_PROPERTY_CONFIG_VENC_USELTRFRAME \ (HFI_PROPERTY_CONFIG_VENC_COMMON_START + 0x00A) +#define HFI_PROPERTY_CONFIG_VENC_HIER_P_ENH_LAYER \ + (HFI_PROPERTY_CONFIG_VENC_COMMON_START + 0x00B) #define HFI_PROPERTY_CONFIG_VENC_LTRPERIOD \ (HFI_PROPERTY_CONFIG_VENC_COMMON_START + 0x00C) #define HFI_PROPERTY_CONFIG_VPE_COMMON_START \ |
