Loading drivers/media/platform/msm/vidc/hfi_packetization.c +30 −1 Original line number Diff line number Diff line /* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved. /* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -1396,6 +1396,35 @@ int create_pkt_cmd_session_set_property( sizeof(struct hfi_quantization_range); break; } case HAL_CONFIG_VENC_FRAME_QP_RANGE: { struct hfi_quantization_range *hfi; struct hal_quantization_range *hal_range = (struct hal_quantization_range *) pdata; pkt->rg_property_data[0] = HFI_PROPERTY_CONFIG_VENC_FRAME_QP_RANGE; hfi = (struct hfi_quantization_range *) &pkt->rg_property_data[1]; /* * When creating the packet, pack the qp value as * 0xbbppii, where ii = qp range for I-frames, * pp = qp range for P-frames, etc. */ 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; hfi->min_qp.layer_id = hal_range->layer_id; pkt->size += sizeof(u32) + sizeof(struct hfi_quantization_range); break; } case HAL_CONFIG_VENC_INTRA_PERIOD: { struct hfi_intra_period *hfi; Loading drivers/media/platform/msm/vidc/msm_venc.c +60 −1 Original line number Diff line number Diff line /* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved. /* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -903,6 +903,16 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = { .step = 1, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_FRAME_QP, .name = "Dynamic Frame QP", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 0, .maximum = MSM_VIDC_ALL_LAYER_ID, .default_value = 0, .step = 1, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDC_VENC_PARAM_SAR_WIDTH, .name = "SAR Width", Loading Loading @@ -2301,6 +2311,7 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) case V4L2_CID_MPEG_VIDC_VIDEO_BLUR_WIDTH: case V4L2_CID_MPEG_VIDC_VIDEO_BLUR_HEIGHT: case V4L2_CID_MPEG_VIDC_VIDEO_LAYER_ID: case V4L2_CID_MPEG_VIDC_VIDEO_FRAME_QP: case V4L2_CID_MPEG_VIDC_VENC_PARAM_LAYER_BITRATE: case V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP_MIN: case V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP_MIN: Loading Loading @@ -2512,6 +2523,54 @@ int msm_venc_s_ext_ctrl(struct msm_vidc_inst *inst, i++; } break; case V4L2_CID_MPEG_VIDC_VIDEO_FRAME_QP: qp.layer_id = control[i].value; /* Enable QP for all frame types by default */ qp.enable = 7; qp_range.layer_id = control[i].value; i++; while (i < ctrl->count) { switch (control[i].id) { case V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP_MIN: qp_range.qpi_min = control[i].value; property_id = HAL_CONFIG_VENC_FRAME_QP_RANGE; pdata = &qp_range; break; case V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP_MIN: qp_range.qpp_min = control[i].value; property_id = HAL_CONFIG_VENC_FRAME_QP_RANGE; pdata = &qp_range; break; case V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP_MIN: qp_range.qpb_min = control[i].value; property_id = HAL_CONFIG_VENC_FRAME_QP_RANGE; pdata = &qp_range; break; case V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP_MAX: qp_range.qpi_max = control[i].value; property_id = HAL_CONFIG_VENC_FRAME_QP_RANGE; pdata = &qp_range; break; case V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP_MAX: qp_range.qpp_max = control[i].value; property_id = HAL_CONFIG_VENC_FRAME_QP_RANGE; pdata = &qp_range; break; case V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP_MAX: qp_range.qpb_max = control[i].value; property_id = HAL_CONFIG_VENC_FRAME_QP_RANGE; pdata = &qp_range; break; } i++; } break; case V4L2_CID_MPEG_VIDC_VENC_HDR_INFO: if (control[i].value == V4L2_MPEG_VIDC_VENC_HDR_INFO_DISABLED || Loading drivers/media/platform/msm/vidc/vidc_hfi_api.h +1 −0 Original line number Diff line number Diff line Loading @@ -235,6 +235,7 @@ enum hal_property { HAL_CONFIG_HEIC_FRAME_CROP_INFO, HAL_CONFIG_HEIC_FRAME_QUALITY, HAL_CONFIG_HEIC_GRID_ENABLE, HAL_CONFIG_VENC_FRAME_QP_RANGE, }; enum hal_domain { Loading drivers/media/platform/msm/vidc/vidc_hfi_helper.h +3 −1 Original line number Diff line number Diff line /* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved. /* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -362,6 +362,8 @@ struct hfi_buffer_info { (HFI_PROPERTY_CONFIG_VENC_COMMON_START + 0x014) #define HFI_PROPERTY_CONFIG_HEIC_GRID_ENABLE \ (HFI_PROPERTY_CONFIG_VENC_COMMON_START + 0x015) #define HFI_PROPERTY_CONFIG_VENC_FRAME_QP_RANGE \ (HFI_PROPERTY_CONFIG_VENC_COMMON_START + 0x016) #define HFI_PROPERTY_PARAM_VPE_COMMON_START \ (HFI_DOMAIN_BASE_VPE + HFI_ARCH_COMMON_OFFSET + 0x7000) Loading include/uapi/linux/v4l2-controls.h +3 −0 Original line number Diff line number Diff line Loading @@ -1350,6 +1350,9 @@ enum v4l2_mpeg_vidc_video_divx_format_type { #define V4L2_CID_MPEG_VIDC_IMG_GRID_DIMENSION \ (V4L2_CID_MPEG_MSM_VIDC_BASE+161) #define V4L2_CID_MPEG_VIDC_VIDEO_FRAME_QP \ (V4L2_CID_MPEG_MSM_VIDC_BASE+162) enum v4l2_mpeg_vidc_video_mbi_statistics_mode { V4L2_CID_MPEG_VIDC_VIDEO_MBI_MODE_DEFAULT = 0, V4L2_CID_MPEG_VIDC_VIDEO_MBI_MODE_1 = 1, Loading Loading
drivers/media/platform/msm/vidc/hfi_packetization.c +30 −1 Original line number Diff line number Diff line /* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved. /* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -1396,6 +1396,35 @@ int create_pkt_cmd_session_set_property( sizeof(struct hfi_quantization_range); break; } case HAL_CONFIG_VENC_FRAME_QP_RANGE: { struct hfi_quantization_range *hfi; struct hal_quantization_range *hal_range = (struct hal_quantization_range *) pdata; pkt->rg_property_data[0] = HFI_PROPERTY_CONFIG_VENC_FRAME_QP_RANGE; hfi = (struct hfi_quantization_range *) &pkt->rg_property_data[1]; /* * When creating the packet, pack the qp value as * 0xbbppii, where ii = qp range for I-frames, * pp = qp range for P-frames, etc. */ 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; hfi->min_qp.layer_id = hal_range->layer_id; pkt->size += sizeof(u32) + sizeof(struct hfi_quantization_range); break; } case HAL_CONFIG_VENC_INTRA_PERIOD: { struct hfi_intra_period *hfi; Loading
drivers/media/platform/msm/vidc/msm_venc.c +60 −1 Original line number Diff line number Diff line /* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved. /* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -903,6 +903,16 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = { .step = 1, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_FRAME_QP, .name = "Dynamic Frame QP", .type = V4L2_CTRL_TYPE_INTEGER, .minimum = 0, .maximum = MSM_VIDC_ALL_LAYER_ID, .default_value = 0, .step = 1, .qmenu = NULL, }, { .id = V4L2_CID_MPEG_VIDC_VENC_PARAM_SAR_WIDTH, .name = "SAR Width", Loading Loading @@ -2301,6 +2311,7 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) case V4L2_CID_MPEG_VIDC_VIDEO_BLUR_WIDTH: case V4L2_CID_MPEG_VIDC_VIDEO_BLUR_HEIGHT: case V4L2_CID_MPEG_VIDC_VIDEO_LAYER_ID: case V4L2_CID_MPEG_VIDC_VIDEO_FRAME_QP: case V4L2_CID_MPEG_VIDC_VENC_PARAM_LAYER_BITRATE: case V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP_MIN: case V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP_MIN: Loading Loading @@ -2512,6 +2523,54 @@ int msm_venc_s_ext_ctrl(struct msm_vidc_inst *inst, i++; } break; case V4L2_CID_MPEG_VIDC_VIDEO_FRAME_QP: qp.layer_id = control[i].value; /* Enable QP for all frame types by default */ qp.enable = 7; qp_range.layer_id = control[i].value; i++; while (i < ctrl->count) { switch (control[i].id) { case V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP_MIN: qp_range.qpi_min = control[i].value; property_id = HAL_CONFIG_VENC_FRAME_QP_RANGE; pdata = &qp_range; break; case V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP_MIN: qp_range.qpp_min = control[i].value; property_id = HAL_CONFIG_VENC_FRAME_QP_RANGE; pdata = &qp_range; break; case V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP_MIN: qp_range.qpb_min = control[i].value; property_id = HAL_CONFIG_VENC_FRAME_QP_RANGE; pdata = &qp_range; break; case V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP_MAX: qp_range.qpi_max = control[i].value; property_id = HAL_CONFIG_VENC_FRAME_QP_RANGE; pdata = &qp_range; break; case V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP_MAX: qp_range.qpp_max = control[i].value; property_id = HAL_CONFIG_VENC_FRAME_QP_RANGE; pdata = &qp_range; break; case V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP_MAX: qp_range.qpb_max = control[i].value; property_id = HAL_CONFIG_VENC_FRAME_QP_RANGE; pdata = &qp_range; break; } i++; } break; case V4L2_CID_MPEG_VIDC_VENC_HDR_INFO: if (control[i].value == V4L2_MPEG_VIDC_VENC_HDR_INFO_DISABLED || Loading
drivers/media/platform/msm/vidc/vidc_hfi_api.h +1 −0 Original line number Diff line number Diff line Loading @@ -235,6 +235,7 @@ enum hal_property { HAL_CONFIG_HEIC_FRAME_CROP_INFO, HAL_CONFIG_HEIC_FRAME_QUALITY, HAL_CONFIG_HEIC_GRID_ENABLE, HAL_CONFIG_VENC_FRAME_QP_RANGE, }; enum hal_domain { Loading
drivers/media/platform/msm/vidc/vidc_hfi_helper.h +3 −1 Original line number Diff line number Diff line /* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved. /* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -362,6 +362,8 @@ struct hfi_buffer_info { (HFI_PROPERTY_CONFIG_VENC_COMMON_START + 0x014) #define HFI_PROPERTY_CONFIG_HEIC_GRID_ENABLE \ (HFI_PROPERTY_CONFIG_VENC_COMMON_START + 0x015) #define HFI_PROPERTY_CONFIG_VENC_FRAME_QP_RANGE \ (HFI_PROPERTY_CONFIG_VENC_COMMON_START + 0x016) #define HFI_PROPERTY_PARAM_VPE_COMMON_START \ (HFI_DOMAIN_BASE_VPE + HFI_ARCH_COMMON_OFFSET + 0x7000) Loading
include/uapi/linux/v4l2-controls.h +3 −0 Original line number Diff line number Diff line Loading @@ -1350,6 +1350,9 @@ enum v4l2_mpeg_vidc_video_divx_format_type { #define V4L2_CID_MPEG_VIDC_IMG_GRID_DIMENSION \ (V4L2_CID_MPEG_MSM_VIDC_BASE+161) #define V4L2_CID_MPEG_VIDC_VIDEO_FRAME_QP \ (V4L2_CID_MPEG_MSM_VIDC_BASE+162) enum v4l2_mpeg_vidc_video_mbi_statistics_mode { V4L2_CID_MPEG_VIDC_VIDEO_MBI_MODE_DEFAULT = 0, V4L2_CID_MPEG_VIDC_VIDEO_MBI_MODE_1 = 1, Loading