Loading drivers/media/platform/msm/vidc/hfi_packetization.c +19 −0 Original line number Diff line number Diff line Loading @@ -1565,6 +1565,25 @@ int create_pkt_cmd_session_set_property( sizeof(struct hfi_quantization_range); break; } case HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED: { struct hfi_quantization_range *hfi; struct hfi_quantization_range *hal_range = (struct hfi_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 = hal_range->min_qp; hfi->max_qp = hal_range->max_qp; hfi->layer_id = hal_range->layer_id; pkt->size += sizeof(u32) + sizeof(struct hfi_quantization_range); break; } case HAL_PARAM_VENC_SEARCH_RANGE: { struct hfi_vc1e_perf_cfg_type *hfi; Loading drivers/media/platform/msm/vidc/msm_venc.c +70 −7 Original line number Diff line number Diff line Loading @@ -492,7 +492,7 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = { .id = V4L2_CID_MPEG_VIDEO_H264_MIN_QP, .name = "H264 Minimum QP", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 0, .minimum = 1, .maximum = 51, .default_value = 1, .step = 1, Loading @@ -503,7 +503,7 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = { .id = V4L2_CID_MPEG_VIDEO_H264_MAX_QP, .name = "H264 Maximum QP", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 0, .minimum = 1, .maximum = 51, .default_value = 51, .step = 1, Loading @@ -514,8 +514,8 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = { .id = V4L2_CID_MPEG_VIDC_VIDEO_VP8_MIN_QP, .name = "VP8 Minimum QP", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 0, .maximum = 127, .minimum = 1, .maximum = 128, .default_value = 1, .step = 1, }, Loading @@ -523,9 +523,10 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = { .id = V4L2_CID_MPEG_VIDC_VIDEO_VP8_MAX_QP, .name = "VP8 Maximum QP", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 0, .maximum = 127, .default_value = 127, .minimum = 0x010101, .maximum = 0x808080, .default_value = 0x808080, .step = 1, }, { Loading @@ -546,6 +547,28 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = { .default_value = 31, .step = 1, }, { .id = V4L2_CID_MPEG_VIDEO_MIN_QP_PACKED, .name = "H264 Minimum QP PACKED", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 0x00010101, .maximum = 0x00333333, .default_value = 0x00010101, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDEO_MAX_QP_PACKED, .name = "H264 Maximum QP PACKED", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 0x00010101, .maximum = 0x00333333, .default_value = 0x00333333, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE, .name = "Slice Mode", Loading Loading @@ -2626,6 +2649,46 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) pdata = &qp_range; break; } case V4L2_CID_MPEG_VIDEO_MIN_QP_PACKED: { struct v4l2_ctrl *qp_max; qp_max = TRY_GET_CTRL(V4L2_CID_MPEG_VIDEO_MAX_QP_PACKED); if (ctrl->val >= qp_max->val) { dprintk(VIDC_ERR, "Bad range: Min QP PACKED (0x%x) > Max QP PACKED (0x%x)\n", ctrl->val, qp_max->val); rc = -ERANGE; break; } property_id = HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED; 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_MAX_QP_PACKED: { struct v4l2_ctrl *qp_min; qp_min = TRY_GET_CTRL(V4L2_CID_MPEG_VIDEO_MIN_QP_PACKED); if (ctrl->val <= qp_min->val) { dprintk(VIDC_ERR, "Bad range: Max QP PACKED (%d) < Min QP PACKED (%d)\n", ctrl->val, qp_min->val); rc = -ERANGE; break; } property_id = HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED; 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 drivers/media/platform/msm/vidc/vidc_hfi_api.h +1 −0 Original line number Diff line number Diff line Loading @@ -239,6 +239,7 @@ enum hal_property { HAL_PARAM_VENC_CONSTRAINED_INTRA_PRED, HAL_CONFIG_VENC_BLUR_RESOLUTION, HAL_PARAM_VENC_VIDEO_SIGNAL_INFO, HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED, }; enum hal_domain { Loading include/uapi/linux/v4l2-controls.h +5 −0 Original line number Diff line number Diff line Loading @@ -1179,6 +1179,11 @@ enum v4l2_cid_mpeg_vidc_video_full_range { #define V4L2_CID_MPEG_VIDC_VIDEO_MATRIX_COEFFS \ (V4L2_CID_MPEG_MSM_VIDC_BASE + 96) #define V4L2_CID_MPEG_VIDEO_MIN_QP_PACKED \ (V4L2_CID_MPEG_MSM_VIDC_BASE + 97) #define V4L2_CID_MPEG_VIDEO_MAX_QP_PACKED \ (V4L2_CID_MPEG_MSM_VIDC_BASE + 98) /* Camera class control IDs */ #define V4L2_CID_CAMERA_CLASS_BASE (V4L2_CTRL_CLASS_CAMERA | 0x900) Loading Loading
drivers/media/platform/msm/vidc/hfi_packetization.c +19 −0 Original line number Diff line number Diff line Loading @@ -1565,6 +1565,25 @@ int create_pkt_cmd_session_set_property( sizeof(struct hfi_quantization_range); break; } case HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED: { struct hfi_quantization_range *hfi; struct hfi_quantization_range *hal_range = (struct hfi_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 = hal_range->min_qp; hfi->max_qp = hal_range->max_qp; hfi->layer_id = hal_range->layer_id; pkt->size += sizeof(u32) + sizeof(struct hfi_quantization_range); break; } case HAL_PARAM_VENC_SEARCH_RANGE: { struct hfi_vc1e_perf_cfg_type *hfi; Loading
drivers/media/platform/msm/vidc/msm_venc.c +70 −7 Original line number Diff line number Diff line Loading @@ -492,7 +492,7 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = { .id = V4L2_CID_MPEG_VIDEO_H264_MIN_QP, .name = "H264 Minimum QP", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 0, .minimum = 1, .maximum = 51, .default_value = 1, .step = 1, Loading @@ -503,7 +503,7 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = { .id = V4L2_CID_MPEG_VIDEO_H264_MAX_QP, .name = "H264 Maximum QP", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 0, .minimum = 1, .maximum = 51, .default_value = 51, .step = 1, Loading @@ -514,8 +514,8 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = { .id = V4L2_CID_MPEG_VIDC_VIDEO_VP8_MIN_QP, .name = "VP8 Minimum QP", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 0, .maximum = 127, .minimum = 1, .maximum = 128, .default_value = 1, .step = 1, }, Loading @@ -523,9 +523,10 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = { .id = V4L2_CID_MPEG_VIDC_VIDEO_VP8_MAX_QP, .name = "VP8 Maximum QP", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 0, .maximum = 127, .default_value = 127, .minimum = 0x010101, .maximum = 0x808080, .default_value = 0x808080, .step = 1, }, { Loading @@ -546,6 +547,28 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = { .default_value = 31, .step = 1, }, { .id = V4L2_CID_MPEG_VIDEO_MIN_QP_PACKED, .name = "H264 Minimum QP PACKED", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 0x00010101, .maximum = 0x00333333, .default_value = 0x00010101, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDEO_MAX_QP_PACKED, .name = "H264 Maximum QP PACKED", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 0x00010101, .maximum = 0x00333333, .default_value = 0x00333333, .step = 1, .menu_skip_mask = 0, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE, .name = "Slice Mode", Loading Loading @@ -2626,6 +2649,46 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) pdata = &qp_range; break; } case V4L2_CID_MPEG_VIDEO_MIN_QP_PACKED: { struct v4l2_ctrl *qp_max; qp_max = TRY_GET_CTRL(V4L2_CID_MPEG_VIDEO_MAX_QP_PACKED); if (ctrl->val >= qp_max->val) { dprintk(VIDC_ERR, "Bad range: Min QP PACKED (0x%x) > Max QP PACKED (0x%x)\n", ctrl->val, qp_max->val); rc = -ERANGE; break; } property_id = HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED; 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_MAX_QP_PACKED: { struct v4l2_ctrl *qp_min; qp_min = TRY_GET_CTRL(V4L2_CID_MPEG_VIDEO_MIN_QP_PACKED); if (ctrl->val <= qp_min->val) { dprintk(VIDC_ERR, "Bad range: Max QP PACKED (%d) < Min QP PACKED (%d)\n", ctrl->val, qp_min->val); rc = -ERANGE; break; } property_id = HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED; 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
drivers/media/platform/msm/vidc/vidc_hfi_api.h +1 −0 Original line number Diff line number Diff line Loading @@ -239,6 +239,7 @@ enum hal_property { HAL_PARAM_VENC_CONSTRAINED_INTRA_PRED, HAL_CONFIG_VENC_BLUR_RESOLUTION, HAL_PARAM_VENC_VIDEO_SIGNAL_INFO, HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED, }; enum hal_domain { Loading
include/uapi/linux/v4l2-controls.h +5 −0 Original line number Diff line number Diff line Loading @@ -1179,6 +1179,11 @@ enum v4l2_cid_mpeg_vidc_video_full_range { #define V4L2_CID_MPEG_VIDC_VIDEO_MATRIX_COEFFS \ (V4L2_CID_MPEG_MSM_VIDC_BASE + 96) #define V4L2_CID_MPEG_VIDEO_MIN_QP_PACKED \ (V4L2_CID_MPEG_MSM_VIDC_BASE + 97) #define V4L2_CID_MPEG_VIDEO_MAX_QP_PACKED \ (V4L2_CID_MPEG_MSM_VIDC_BASE + 98) /* Camera class control IDs */ #define V4L2_CID_CAMERA_CLASS_BASE (V4L2_CTRL_CLASS_CAMERA | 0x900) Loading