Loading drivers/media/platform/msm/vidc/hfi_packetization.c +21 −37 Original line number Diff line number Diff line Loading @@ -1331,60 +1331,44 @@ int create_pkt_cmd_session_set_property( sizeof(struct hfi_h264_db_control); break; } case HAL_CONFIG_VENC_FRAME_QP: { struct hfi_quantization *hfi; struct hal_quantization *hal_quant = (struct hal_quantization *) pdata; pkt->rg_property_data[0] = HFI_PROPERTY_CONFIG_VENC_SESSION_QP; hfi = (struct hfi_quantization *) &pkt->rg_property_data[1]; hfi->qp_packed = hal_quant->qpi | hal_quant->qpp << 8 | hal_quant->qpb << 16; hfi->layer_id = hal_quant->layer_id; pkt->size += sizeof(u32) + sizeof(struct hfi_quantization); break; } case HAL_PARAM_VENC_SESSION_QP_RANGE: { struct hfi_quantization_range *hfi; struct hal_quantization_range *hal_range = (struct hal_quantization_range *) pdata; u32 min_qp, max_qp; pkt->rg_property_data[0] = HFI_PROPERTY_PARAM_VENC_SESSION_QP_RANGE; hfi = (struct hfi_quantization_range *) &pkt->rg_property_data[1]; min_qp = hal_range->min_qp; max_qp = hal_range->max_qp; /* * We'll be packing in the qp, so make sure we * won't be losing data when masking */ if (min_qp > 0xff || max_qp > 0xff) { dprintk(VIDC_ERR, "qp value out of range\n"); rc = -ERANGE; break; } /* * When creating the packet, pack the qp value as * 0xiippbb, where ii = qp range for I-frames, * 0xbbppii, where ii = qp range for I-frames, * pp = qp range for P-frames, etc. */ hfi->min_qp.qp_packed = min_qp | min_qp << 8 | min_qp << 16; hfi->min_qp.layer_id = hal_range->layer_id; hfi->max_qp.qp_packed = max_qp | max_qp << 8 | max_qp << 16; hfi->min_qp.qp_packed = hal_range->qpi_min | hal_range->qpp_min << 8 | hal_range->qpb_min << 16; hfi->max_qp.qp_packed = hal_range->qpi_max | hal_range->qpp_max << 8 | hal_range->qpb_max << 16; hfi->max_qp.layer_id = hal_range->layer_id; pkt->size += sizeof(u32) + sizeof(struct hfi_quantization_range); break; } case HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED: { struct hfi_quantization_range *hfi; struct hal_quantization_range *hal_range = (struct hal_quantization_range *) pdata; pkt->rg_property_data[0] = HFI_PROPERTY_PARAM_VENC_SESSION_QP_RANGE; hfi = (struct hfi_quantization_range *) &pkt->rg_property_data[1]; hfi->min_qp.qp_packed = hal_range->min_qp; hfi->min_qp.layer_id = hal_range->layer_id; hfi->max_qp.qp_packed = hal_range->max_qp; hfi->max_qp.layer_id = hal_range->layer_id; pkt->size += sizeof(u32) + sizeof(struct hfi_quantization_range); Loading drivers/media/platform/msm/vidc/msm_venc.c +238 −147 Original line number Diff line number Diff line Loading @@ -30,9 +30,9 @@ #define MAX_SLICE_BYTE_SIZE ((MAX_BIT_RATE)>>3) #define MIN_SLICE_BYTE_SIZE 512 #define MAX_SLICE_MB_SIZE ((4096 * 2304) >> 8) #define I_FRAME_QP 26 #define P_FRAME_QP 28 #define B_FRAME_QP 30 #define I_FRAME_QP 127 #define P_FRAME_QP 127 #define B_FRAME_QP 127 #define MAX_INTRA_REFRESH_MBS ((4096 * 2304) >> 8) #define MAX_NUM_B_FRAMES 4 #define MAX_LTR_FRAME_COUNT 10 Loading Loading @@ -215,6 +215,105 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = { .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP, .name = "I Frame Quantization", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 127, .default_value = I_FRAME_QP, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP, .name = "P Frame Quantization", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 127, .default_value = P_FRAME_QP, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP, .name = "B Frame Quantization", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 127, .default_value = B_FRAME_QP, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP_MIN, .name = "I Frame Quantization Range Minimum", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 127, .default_value = I_FRAME_QP, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP_MIN, .name = "P Frame Quantization Range Minimum", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 127, .default_value = P_FRAME_QP, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP_MIN, .name = "B Frame Quantization Range Minimum", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 127, .default_value = B_FRAME_QP, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP_MAX, .name = "I Frame Quantization Range Maximum", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 127, .default_value = I_FRAME_QP, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP_MAX, .name = "P Frame Quantization Range Maximum", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 127, .default_value = P_FRAME_QP, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP_MAX, .name = "B Frame Quantization Range Maximum", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 127, .default_value = B_FRAME_QP, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_NUM_B_FRAMES, .name = "Intra Period for B frames", Loading Loading @@ -410,61 +509,6 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = { ), .qmenu = mpeg_video_rotation, }, { .id = V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP, .name = "I Frame Quantization", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 51, .default_value = I_FRAME_QP, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP, .name = "P Frame Quantization", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 51, .default_value = P_FRAME_QP, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP, .name = "B Frame Quantization", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 51, .default_value = B_FRAME_QP, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDEO_H264_MIN_QP, .name = "H264 Minimum QP", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 51, .default_value = 1, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDEO_H264_MAX_QP, .name = "H264 Maximum QP", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 51, .default_value = 51, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE, .name = "Slice Mode", Loading Loading @@ -1796,7 +1840,6 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) struct hal_bitrate bitrate; struct hal_profile_level profile_level; struct hal_h264_entropy_control h264_entropy_control; struct hal_quantization quantization; struct hal_intra_period intra_period; struct hal_idr_period idr_period; struct hal_operations operations; Loading @@ -1804,7 +1847,7 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) struct hal_multi_slice_control multi_slice_control; struct hal_h264_db_control h264_db_control; struct hal_enable enable; struct hal_quantization_range qp_range; struct hal_quantization quant; struct hal_preserve_text_quality preserve_text_quality; u32 property_id = 0, property_val = 0; void *pdata = NULL; Loading Loading @@ -2126,91 +2169,6 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) pdata = &operations; break; } case V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP: { struct v4l2_ctrl *qpp, *qpb; qpp = TRY_GET_CTRL(V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP); qpb = TRY_GET_CTRL(V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP); property_id = HAL_PARAM_VENC_SESSION_QP; quantization.qpi = ctrl->val; quantization.qpp = qpp->val; quantization.qpb = qpb->val; quantization.layer_id = 0; pdata = &quantization; break; } case V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP: { struct v4l2_ctrl *qpi, *qpb; qpi = TRY_GET_CTRL(V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP); qpb = TRY_GET_CTRL(V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP); property_id = HAL_PARAM_VENC_SESSION_QP; quantization.qpp = ctrl->val; quantization.qpi = qpi->val; quantization.qpb = qpb->val; quantization.layer_id = 0; pdata = &quantization; break; } case V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP: { struct v4l2_ctrl *qpi, *qpp; qpi = TRY_GET_CTRL(V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP); qpp = TRY_GET_CTRL(V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP); property_id = HAL_PARAM_VENC_SESSION_QP; quantization.qpb = ctrl->val; quantization.qpi = qpi->val; quantization.qpp = qpp->val; quantization.layer_id = 0; pdata = &quantization; break; } case V4L2_CID_MPEG_VIDEO_H264_MIN_QP: { struct v4l2_ctrl *qp_max; qp_max = TRY_GET_CTRL(V4L2_CID_MPEG_VIDEO_H264_MAX_QP); if (ctrl->val >= qp_max->val) { dprintk(VIDC_ERR, "Bad range: Min QP (%d) > Max QP(%d)\n", ctrl->val, qp_max->val); rc = -ERANGE; break; } property_id = HAL_PARAM_VENC_SESSION_QP_RANGE; qp_range.layer_id = 0; qp_range.max_qp = qp_max->val; qp_range.min_qp = ctrl->val; pdata = &qp_range; break; } case V4L2_CID_MPEG_VIDEO_H264_MAX_QP: { struct v4l2_ctrl *qp_min; qp_min = TRY_GET_CTRL(V4L2_CID_MPEG_VIDEO_H264_MIN_QP); if (ctrl->val <= qp_min->val) { dprintk(VIDC_ERR, "Bad range: Max QP (%d) < Min QP(%d)\n", ctrl->val, qp_min->val); rc = -ERANGE; break; } property_id = HAL_PARAM_VENC_SESSION_QP_RANGE; qp_range.layer_id = 0; qp_range.max_qp = ctrl->val; qp_range.min_qp = qp_min->val; pdata = &qp_range; break; } case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE: { int temp = 0; Loading Loading @@ -2467,6 +2425,48 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) baselayerid = ctrl->val; pdata = &baselayerid; break; case V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP: { struct v4l2_ctrl *qpp, *qpb; property_id = HAL_CONFIG_VENC_FRAME_QP; qpp = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP); qpb = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP); quant.qpi = ctrl->val; quant.qpp = qpp->val; quant.qpb = qpb->val; quant.layer_id = MSM_VIDC_ALL_LAYER_ID; pdata = &quant; break; } case V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP: { struct v4l2_ctrl *qpi, *qpb; property_id = HAL_CONFIG_VENC_FRAME_QP; qpi = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP); qpb = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP); quant.qpp = ctrl->val; quant.qpi = qpi->val; quant.qpb = qpb->val; quant.layer_id = MSM_VIDC_ALL_LAYER_ID; pdata = &quant; break; } case V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP: { struct v4l2_ctrl *qpp, *qpi; property_id = HAL_CONFIG_VENC_FRAME_QP; qpp = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP); qpi = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP); quant.qpb = ctrl->val; quant.qpp = qpp->val; quant.qpi = qpi->val; quant.layer_id = MSM_VIDC_ALL_LAYER_ID; pdata = &quant; break; } case V4L2_CID_MPEG_VIDC_VIDEO_VQZIP_SEI: property_id = HAL_PARAM_VENC_VQZIP_SEI; enable.enable = ctrl->val; Loading Loading @@ -2630,17 +2630,19 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) int msm_venc_s_ext_ctrl(struct msm_vidc_inst *inst, struct v4l2_ext_controls *ctrl) { int rc = 0, i; int rc = 0, i, j = 0; struct v4l2_ext_control *control; struct hfi_device *hdev; struct hal_ltr_mode ltr_mode; struct hal_vc1e_perf_cfg_type search_range = { {0} }; u32 property_id = 0; u32 property_id = 0, layer_id = MSM_VIDC_ALL_LAYER_ID; void *pdata = NULL; struct msm_vidc_capability *cap = NULL; struct hal_aspect_ratio sar; struct hal_bitrate bitrate; struct hal_frame_size blur_res; struct hal_quantization_range qp_range; struct hal_quantization qp; if (!inst || !inst->core || !inst->core->device || !ctrl) { dprintk(VIDC_ERR, "%s invalid parameters\n", __func__); Loading @@ -2651,6 +2653,7 @@ int msm_venc_s_ext_ctrl(struct msm_vidc_inst *inst, cap = &inst->capability; control = ctrl->controls; for (i = 0; i < ctrl->count; i++) { switch (control[i].id) { case V4L2_CID_MPEG_VIDC_VIDEO_LTRMODE: Loading Loading @@ -2762,6 +2765,94 @@ int msm_venc_s_ext_ctrl(struct msm_vidc_inst *inst, property_id = HAL_CONFIG_VENC_BLUR_RESOLUTION; pdata = &blur_res; break; case V4L2_CID_MPEG_VIDC_VIDEO_LAYER_ID: j = i; layer_id = control[j].value; do { switch (control[j].id) { case V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP: qp.qpi = control[j].value; qp.layer_id = layer_id; property_id = HAL_CONFIG_VENC_FRAME_QP; pdata = &qp; break; case V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP: qp.qpp = control[j].value; qp.layer_id = layer_id; property_id = HAL_CONFIG_VENC_FRAME_QP; pdata = &qp; break; case V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP: qp.qpb = control[j].value; qp.layer_id = layer_id; property_id = HAL_CONFIG_VENC_FRAME_QP; pdata = &qp; break; case V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP_MIN: qp_range.qpi_min = control[j].value; qp_range.layer_id = layer_id; property_id = HAL_PARAM_VENC_SESSION_QP_RANGE; pdata = &qp_range; break; case V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP_MIN: qp_range.qpp_min = control[j].value; qp_range.layer_id = layer_id; property_id = HAL_PARAM_VENC_SESSION_QP_RANGE; pdata = &qp_range; break; case V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP_MIN: qp_range.qpb_min = control[j].value; qp_range.layer_id = layer_id; property_id = HAL_PARAM_VENC_SESSION_QP_RANGE; pdata = &qp_range; break; case V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP_MAX: qp_range.qpi_max = control[j].value; qp_range.layer_id = layer_id; property_id = HAL_PARAM_VENC_SESSION_QP_RANGE; pdata = &qp_range; break; case V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP_MAX: qp_range.qpp_max = control[j].value; qp_range.layer_id = layer_id; property_id = HAL_PARAM_VENC_SESSION_QP_RANGE; pdata = &qp_range; break; case V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP_MAX: qp_range.qpb_max = control[j].value; qp_range.layer_id = layer_id; property_id = HAL_PARAM_VENC_SESSION_QP_RANGE; pdata = &qp_range; break; } j++; } while ((j < ctrl->count) && control[j].id != V4L2_CID_MPEG_VIDC_VIDEO_LAYER_ID); if (!rc && property_id) { dprintk(VIDC_DBG, "Control: HAL property=%x\n", property_id); rc = call_hfi_op(hdev, session_set_property, (void *)inst->session, property_id, pdata); if (rc) { dprintk(VIDC_ERR, "prop %x failed\n", property_id); return rc; } property_id = 0; } i = j - 1; break; default: dprintk(VIDC_ERR, "Invalid id set: %d\n", control[i].id); Loading drivers/media/platform/msm/vidc/msm_vidc_common.c +18 −0 Original line number Diff line number Diff line Loading @@ -991,6 +991,24 @@ static void msm_vidc_comm_update_ctrl_limits(struct msm_vidc_inst *inst) &inst->capability.bitrate); msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDEO_BITRATE_PEAK, &inst->capability.peakbitrate); msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP, &inst->capability.i_qp); msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP, &inst->capability.p_qp); msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP, &inst->capability.b_qp); msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP_MIN, &inst->capability.i_qp); msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP_MIN, &inst->capability.p_qp); msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP_MIN, &inst->capability.b_qp); msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP_MAX, &inst->capability.i_qp); msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP_MAX, &inst->capability.p_qp); msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP_MAX, &inst->capability.b_qp); msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_BLUR_WIDTH, &inst->capability.blur_width); msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_BLUR_HEIGHT, Loading drivers/media/platform/msm/vidc/vidc_hfi_api.h +6 −12 Original line number Diff line number Diff line Loading @@ -162,7 +162,6 @@ enum hal_property { HAL_PARAM_VENC_MPEG4_HEADER_EXTENSION, HAL_PARAM_VENC_H264_DEBLOCK_CONTROL, HAL_PARAM_VENC_TEMPORAL_SPATIAL_TRADEOFF, HAL_PARAM_VENC_SESSION_QP, HAL_PARAM_VENC_SESSION_QP_RANGE, HAL_CONFIG_VENC_INTRA_PERIOD, HAL_CONFIG_VENC_IDR_PERIOD, Loading Loading @@ -218,7 +217,6 @@ enum hal_property { HAL_CONFIG_VENC_HIER_P_NUM_FRAMES, HAL_PARAM_VENC_HIER_P_MAX_ENH_LAYERS, HAL_PARAM_VENC_DISABLE_RC_TIMESTAMP, HAL_PARAM_VENC_ENABLE_INITIAL_QP, HAL_PARAM_VENC_SEARCH_RANGE, HAL_PARAM_VPE_COLOR_SPACE_CONVERSION, HAL_PARAM_VENC_VPX_ERROR_RESILIENCE_MODE, Loading @@ -239,7 +237,6 @@ enum hal_property { HAL_PARAM_VENC_LOW_LATENCY, HAL_PARAM_VENC_CONSTRAINED_INTRA_PRED, HAL_CONFIG_VENC_BLUR_RESOLUTION, HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED, HAL_PARAM_VENC_H264_TRANSFORM_8x8, HAL_PARAM_VENC_VIDEO_SIGNAL_INFO, HAL_PARAM_VENC_IFRAMESIZE_TYPE, Loading Loading @@ -754,16 +751,13 @@ struct hal_quantization { u32 layer_id; }; struct hal_initial_quantization { u32 qpi; u32 qpp; u32 qpb; u32 init_qp_enable; }; struct hal_quantization_range { u32 min_qp; u32 max_qp; u32 qpi_min; u32 qpp_min; u32 qpb_min; u32 qpi_max; u32 qpp_max; u32 qpb_max; u32 layer_id; }; Loading drivers/media/platform/msm/vidc/vidc_hfi_helper.h +3 −0 Original line number Diff line number Diff line Loading @@ -334,6 +334,9 @@ struct hfi_buffer_info { (HFI_PROPERTY_CONFIG_VENC_COMMON_START + 0x00E) #define HFI_PROPERTY_CONFIG_VENC_BASELAYER_PRIORITYID \ (HFI_PROPERTY_CONFIG_VENC_COMMON_START + 0x00F) #define HFI_PROPERTY_CONFIG_VENC_SESSION_QP \ (HFI_PROPERTY_CONFIG_VENC_COMMON_START + 0x012) #define HFI_PROPERTY_CONFIG_VPE_COMMON_START \ (HFI_DOMAIN_BASE_VPE + HFI_ARCH_COMMON_OFFSET + 0x8000) Loading Loading
drivers/media/platform/msm/vidc/hfi_packetization.c +21 −37 Original line number Diff line number Diff line Loading @@ -1331,60 +1331,44 @@ int create_pkt_cmd_session_set_property( sizeof(struct hfi_h264_db_control); break; } case HAL_CONFIG_VENC_FRAME_QP: { struct hfi_quantization *hfi; struct hal_quantization *hal_quant = (struct hal_quantization *) pdata; pkt->rg_property_data[0] = HFI_PROPERTY_CONFIG_VENC_SESSION_QP; hfi = (struct hfi_quantization *) &pkt->rg_property_data[1]; hfi->qp_packed = hal_quant->qpi | hal_quant->qpp << 8 | hal_quant->qpb << 16; hfi->layer_id = hal_quant->layer_id; pkt->size += sizeof(u32) + sizeof(struct hfi_quantization); break; } case HAL_PARAM_VENC_SESSION_QP_RANGE: { struct hfi_quantization_range *hfi; struct hal_quantization_range *hal_range = (struct hal_quantization_range *) pdata; u32 min_qp, max_qp; pkt->rg_property_data[0] = HFI_PROPERTY_PARAM_VENC_SESSION_QP_RANGE; hfi = (struct hfi_quantization_range *) &pkt->rg_property_data[1]; min_qp = hal_range->min_qp; max_qp = hal_range->max_qp; /* * We'll be packing in the qp, so make sure we * won't be losing data when masking */ if (min_qp > 0xff || max_qp > 0xff) { dprintk(VIDC_ERR, "qp value out of range\n"); rc = -ERANGE; break; } /* * When creating the packet, pack the qp value as * 0xiippbb, where ii = qp range for I-frames, * 0xbbppii, where ii = qp range for I-frames, * pp = qp range for P-frames, etc. */ hfi->min_qp.qp_packed = min_qp | min_qp << 8 | min_qp << 16; hfi->min_qp.layer_id = hal_range->layer_id; hfi->max_qp.qp_packed = max_qp | max_qp << 8 | max_qp << 16; hfi->min_qp.qp_packed = hal_range->qpi_min | hal_range->qpp_min << 8 | hal_range->qpb_min << 16; hfi->max_qp.qp_packed = hal_range->qpi_max | hal_range->qpp_max << 8 | hal_range->qpb_max << 16; hfi->max_qp.layer_id = hal_range->layer_id; pkt->size += sizeof(u32) + sizeof(struct hfi_quantization_range); break; } case HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED: { struct hfi_quantization_range *hfi; struct hal_quantization_range *hal_range = (struct hal_quantization_range *) pdata; pkt->rg_property_data[0] = HFI_PROPERTY_PARAM_VENC_SESSION_QP_RANGE; hfi = (struct hfi_quantization_range *) &pkt->rg_property_data[1]; hfi->min_qp.qp_packed = hal_range->min_qp; hfi->min_qp.layer_id = hal_range->layer_id; hfi->max_qp.qp_packed = hal_range->max_qp; hfi->max_qp.layer_id = hal_range->layer_id; pkt->size += sizeof(u32) + sizeof(struct hfi_quantization_range); Loading
drivers/media/platform/msm/vidc/msm_venc.c +238 −147 Original line number Diff line number Diff line Loading @@ -30,9 +30,9 @@ #define MAX_SLICE_BYTE_SIZE ((MAX_BIT_RATE)>>3) #define MIN_SLICE_BYTE_SIZE 512 #define MAX_SLICE_MB_SIZE ((4096 * 2304) >> 8) #define I_FRAME_QP 26 #define P_FRAME_QP 28 #define B_FRAME_QP 30 #define I_FRAME_QP 127 #define P_FRAME_QP 127 #define B_FRAME_QP 127 #define MAX_INTRA_REFRESH_MBS ((4096 * 2304) >> 8) #define MAX_NUM_B_FRAMES 4 #define MAX_LTR_FRAME_COUNT 10 Loading Loading @@ -215,6 +215,105 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = { .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP, .name = "I Frame Quantization", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 127, .default_value = I_FRAME_QP, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP, .name = "P Frame Quantization", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 127, .default_value = P_FRAME_QP, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP, .name = "B Frame Quantization", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 127, .default_value = B_FRAME_QP, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP_MIN, .name = "I Frame Quantization Range Minimum", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 127, .default_value = I_FRAME_QP, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP_MIN, .name = "P Frame Quantization Range Minimum", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 127, .default_value = P_FRAME_QP, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP_MIN, .name = "B Frame Quantization Range Minimum", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 127, .default_value = B_FRAME_QP, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP_MAX, .name = "I Frame Quantization Range Maximum", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 127, .default_value = I_FRAME_QP, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP_MAX, .name = "P Frame Quantization Range Maximum", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 127, .default_value = P_FRAME_QP, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP_MAX, .name = "B Frame Quantization Range Maximum", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 127, .default_value = B_FRAME_QP, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_NUM_B_FRAMES, .name = "Intra Period for B frames", Loading Loading @@ -410,61 +509,6 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = { ), .qmenu = mpeg_video_rotation, }, { .id = V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP, .name = "I Frame Quantization", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 51, .default_value = I_FRAME_QP, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP, .name = "P Frame Quantization", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 51, .default_value = P_FRAME_QP, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP, .name = "B Frame Quantization", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 51, .default_value = B_FRAME_QP, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDEO_H264_MIN_QP, .name = "H264 Minimum QP", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 51, .default_value = 1, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDEO_H264_MAX_QP, .name = "H264 Maximum QP", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 1, .maximum = 51, .default_value = 51, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE, .name = "Slice Mode", Loading Loading @@ -1796,7 +1840,6 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) struct hal_bitrate bitrate; struct hal_profile_level profile_level; struct hal_h264_entropy_control h264_entropy_control; struct hal_quantization quantization; struct hal_intra_period intra_period; struct hal_idr_period idr_period; struct hal_operations operations; Loading @@ -1804,7 +1847,7 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) struct hal_multi_slice_control multi_slice_control; struct hal_h264_db_control h264_db_control; struct hal_enable enable; struct hal_quantization_range qp_range; struct hal_quantization quant; struct hal_preserve_text_quality preserve_text_quality; u32 property_id = 0, property_val = 0; void *pdata = NULL; Loading Loading @@ -2126,91 +2169,6 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) pdata = &operations; break; } case V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP: { struct v4l2_ctrl *qpp, *qpb; qpp = TRY_GET_CTRL(V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP); qpb = TRY_GET_CTRL(V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP); property_id = HAL_PARAM_VENC_SESSION_QP; quantization.qpi = ctrl->val; quantization.qpp = qpp->val; quantization.qpb = qpb->val; quantization.layer_id = 0; pdata = &quantization; break; } case V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP: { struct v4l2_ctrl *qpi, *qpb; qpi = TRY_GET_CTRL(V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP); qpb = TRY_GET_CTRL(V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP); property_id = HAL_PARAM_VENC_SESSION_QP; quantization.qpp = ctrl->val; quantization.qpi = qpi->val; quantization.qpb = qpb->val; quantization.layer_id = 0; pdata = &quantization; break; } case V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP: { struct v4l2_ctrl *qpi, *qpp; qpi = TRY_GET_CTRL(V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP); qpp = TRY_GET_CTRL(V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP); property_id = HAL_PARAM_VENC_SESSION_QP; quantization.qpb = ctrl->val; quantization.qpi = qpi->val; quantization.qpp = qpp->val; quantization.layer_id = 0; pdata = &quantization; break; } case V4L2_CID_MPEG_VIDEO_H264_MIN_QP: { struct v4l2_ctrl *qp_max; qp_max = TRY_GET_CTRL(V4L2_CID_MPEG_VIDEO_H264_MAX_QP); if (ctrl->val >= qp_max->val) { dprintk(VIDC_ERR, "Bad range: Min QP (%d) > Max QP(%d)\n", ctrl->val, qp_max->val); rc = -ERANGE; break; } property_id = HAL_PARAM_VENC_SESSION_QP_RANGE; qp_range.layer_id = 0; qp_range.max_qp = qp_max->val; qp_range.min_qp = ctrl->val; pdata = &qp_range; break; } case V4L2_CID_MPEG_VIDEO_H264_MAX_QP: { struct v4l2_ctrl *qp_min; qp_min = TRY_GET_CTRL(V4L2_CID_MPEG_VIDEO_H264_MIN_QP); if (ctrl->val <= qp_min->val) { dprintk(VIDC_ERR, "Bad range: Max QP (%d) < Min QP(%d)\n", ctrl->val, qp_min->val); rc = -ERANGE; break; } property_id = HAL_PARAM_VENC_SESSION_QP_RANGE; qp_range.layer_id = 0; qp_range.max_qp = ctrl->val; qp_range.min_qp = qp_min->val; pdata = &qp_range; break; } case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE: { int temp = 0; Loading Loading @@ -2467,6 +2425,48 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) baselayerid = ctrl->val; pdata = &baselayerid; break; case V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP: { struct v4l2_ctrl *qpp, *qpb; property_id = HAL_CONFIG_VENC_FRAME_QP; qpp = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP); qpb = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP); quant.qpi = ctrl->val; quant.qpp = qpp->val; quant.qpb = qpb->val; quant.layer_id = MSM_VIDC_ALL_LAYER_ID; pdata = &quant; break; } case V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP: { struct v4l2_ctrl *qpi, *qpb; property_id = HAL_CONFIG_VENC_FRAME_QP; qpi = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP); qpb = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP); quant.qpp = ctrl->val; quant.qpi = qpi->val; quant.qpb = qpb->val; quant.layer_id = MSM_VIDC_ALL_LAYER_ID; pdata = &quant; break; } case V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP: { struct v4l2_ctrl *qpp, *qpi; property_id = HAL_CONFIG_VENC_FRAME_QP; qpp = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP); qpi = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP); quant.qpb = ctrl->val; quant.qpp = qpp->val; quant.qpi = qpi->val; quant.layer_id = MSM_VIDC_ALL_LAYER_ID; pdata = &quant; break; } case V4L2_CID_MPEG_VIDC_VIDEO_VQZIP_SEI: property_id = HAL_PARAM_VENC_VQZIP_SEI; enable.enable = ctrl->val; Loading Loading @@ -2630,17 +2630,19 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) int msm_venc_s_ext_ctrl(struct msm_vidc_inst *inst, struct v4l2_ext_controls *ctrl) { int rc = 0, i; int rc = 0, i, j = 0; struct v4l2_ext_control *control; struct hfi_device *hdev; struct hal_ltr_mode ltr_mode; struct hal_vc1e_perf_cfg_type search_range = { {0} }; u32 property_id = 0; u32 property_id = 0, layer_id = MSM_VIDC_ALL_LAYER_ID; void *pdata = NULL; struct msm_vidc_capability *cap = NULL; struct hal_aspect_ratio sar; struct hal_bitrate bitrate; struct hal_frame_size blur_res; struct hal_quantization_range qp_range; struct hal_quantization qp; if (!inst || !inst->core || !inst->core->device || !ctrl) { dprintk(VIDC_ERR, "%s invalid parameters\n", __func__); Loading @@ -2651,6 +2653,7 @@ int msm_venc_s_ext_ctrl(struct msm_vidc_inst *inst, cap = &inst->capability; control = ctrl->controls; for (i = 0; i < ctrl->count; i++) { switch (control[i].id) { case V4L2_CID_MPEG_VIDC_VIDEO_LTRMODE: Loading Loading @@ -2762,6 +2765,94 @@ int msm_venc_s_ext_ctrl(struct msm_vidc_inst *inst, property_id = HAL_CONFIG_VENC_BLUR_RESOLUTION; pdata = &blur_res; break; case V4L2_CID_MPEG_VIDC_VIDEO_LAYER_ID: j = i; layer_id = control[j].value; do { switch (control[j].id) { case V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP: qp.qpi = control[j].value; qp.layer_id = layer_id; property_id = HAL_CONFIG_VENC_FRAME_QP; pdata = &qp; break; case V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP: qp.qpp = control[j].value; qp.layer_id = layer_id; property_id = HAL_CONFIG_VENC_FRAME_QP; pdata = &qp; break; case V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP: qp.qpb = control[j].value; qp.layer_id = layer_id; property_id = HAL_CONFIG_VENC_FRAME_QP; pdata = &qp; break; case V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP_MIN: qp_range.qpi_min = control[j].value; qp_range.layer_id = layer_id; property_id = HAL_PARAM_VENC_SESSION_QP_RANGE; pdata = &qp_range; break; case V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP_MIN: qp_range.qpp_min = control[j].value; qp_range.layer_id = layer_id; property_id = HAL_PARAM_VENC_SESSION_QP_RANGE; pdata = &qp_range; break; case V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP_MIN: qp_range.qpb_min = control[j].value; qp_range.layer_id = layer_id; property_id = HAL_PARAM_VENC_SESSION_QP_RANGE; pdata = &qp_range; break; case V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP_MAX: qp_range.qpi_max = control[j].value; qp_range.layer_id = layer_id; property_id = HAL_PARAM_VENC_SESSION_QP_RANGE; pdata = &qp_range; break; case V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP_MAX: qp_range.qpp_max = control[j].value; qp_range.layer_id = layer_id; property_id = HAL_PARAM_VENC_SESSION_QP_RANGE; pdata = &qp_range; break; case V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP_MAX: qp_range.qpb_max = control[j].value; qp_range.layer_id = layer_id; property_id = HAL_PARAM_VENC_SESSION_QP_RANGE; pdata = &qp_range; break; } j++; } while ((j < ctrl->count) && control[j].id != V4L2_CID_MPEG_VIDC_VIDEO_LAYER_ID); if (!rc && property_id) { dprintk(VIDC_DBG, "Control: HAL property=%x\n", property_id); rc = call_hfi_op(hdev, session_set_property, (void *)inst->session, property_id, pdata); if (rc) { dprintk(VIDC_ERR, "prop %x failed\n", property_id); return rc; } property_id = 0; } i = j - 1; break; default: dprintk(VIDC_ERR, "Invalid id set: %d\n", control[i].id); Loading
drivers/media/platform/msm/vidc/msm_vidc_common.c +18 −0 Original line number Diff line number Diff line Loading @@ -991,6 +991,24 @@ static void msm_vidc_comm_update_ctrl_limits(struct msm_vidc_inst *inst) &inst->capability.bitrate); msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDEO_BITRATE_PEAK, &inst->capability.peakbitrate); msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP, &inst->capability.i_qp); msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP, &inst->capability.p_qp); msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP, &inst->capability.b_qp); msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP_MIN, &inst->capability.i_qp); msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP_MIN, &inst->capability.p_qp); msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP_MIN, &inst->capability.b_qp); msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP_MAX, &inst->capability.i_qp); msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP_MAX, &inst->capability.p_qp); msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP_MAX, &inst->capability.b_qp); msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_BLUR_WIDTH, &inst->capability.blur_width); msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_BLUR_HEIGHT, Loading
drivers/media/platform/msm/vidc/vidc_hfi_api.h +6 −12 Original line number Diff line number Diff line Loading @@ -162,7 +162,6 @@ enum hal_property { HAL_PARAM_VENC_MPEG4_HEADER_EXTENSION, HAL_PARAM_VENC_H264_DEBLOCK_CONTROL, HAL_PARAM_VENC_TEMPORAL_SPATIAL_TRADEOFF, HAL_PARAM_VENC_SESSION_QP, HAL_PARAM_VENC_SESSION_QP_RANGE, HAL_CONFIG_VENC_INTRA_PERIOD, HAL_CONFIG_VENC_IDR_PERIOD, Loading Loading @@ -218,7 +217,6 @@ enum hal_property { HAL_CONFIG_VENC_HIER_P_NUM_FRAMES, HAL_PARAM_VENC_HIER_P_MAX_ENH_LAYERS, HAL_PARAM_VENC_DISABLE_RC_TIMESTAMP, HAL_PARAM_VENC_ENABLE_INITIAL_QP, HAL_PARAM_VENC_SEARCH_RANGE, HAL_PARAM_VPE_COLOR_SPACE_CONVERSION, HAL_PARAM_VENC_VPX_ERROR_RESILIENCE_MODE, Loading @@ -239,7 +237,6 @@ enum hal_property { HAL_PARAM_VENC_LOW_LATENCY, HAL_PARAM_VENC_CONSTRAINED_INTRA_PRED, HAL_CONFIG_VENC_BLUR_RESOLUTION, HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED, HAL_PARAM_VENC_H264_TRANSFORM_8x8, HAL_PARAM_VENC_VIDEO_SIGNAL_INFO, HAL_PARAM_VENC_IFRAMESIZE_TYPE, Loading Loading @@ -754,16 +751,13 @@ struct hal_quantization { u32 layer_id; }; struct hal_initial_quantization { u32 qpi; u32 qpp; u32 qpb; u32 init_qp_enable; }; struct hal_quantization_range { u32 min_qp; u32 max_qp; u32 qpi_min; u32 qpp_min; u32 qpb_min; u32 qpi_max; u32 qpp_max; u32 qpb_max; u32 layer_id; }; Loading
drivers/media/platform/msm/vidc/vidc_hfi_helper.h +3 −0 Original line number Diff line number Diff line Loading @@ -334,6 +334,9 @@ struct hfi_buffer_info { (HFI_PROPERTY_CONFIG_VENC_COMMON_START + 0x00E) #define HFI_PROPERTY_CONFIG_VENC_BASELAYER_PRIORITYID \ (HFI_PROPERTY_CONFIG_VENC_COMMON_START + 0x00F) #define HFI_PROPERTY_CONFIG_VENC_SESSION_QP \ (HFI_PROPERTY_CONFIG_VENC_COMMON_START + 0x012) #define HFI_PROPERTY_CONFIG_VPE_COMMON_START \ (HFI_DOMAIN_BASE_VPE + HFI_ARCH_COMMON_OFFSET + 0x8000) Loading