Loading drivers/media/platform/msm/vidc/hfi_packetization.c +27 −0 Original line number Diff line number Diff line Loading @@ -2153,6 +2153,33 @@ int create_pkt_cmd_session_set_property( pkt->size += sizeof(u32) + sizeof(struct hfi_enable); break; } case HAL_PARAM_VENC_IFRAMESIZE_TYPE: { enum hal_iframesize_type hal = *(enum hal_iframesize_type *)pdata; struct hfi_iframe_size *hfi = (struct hfi_iframe_size *) &pkt->rg_property_data[1]; switch (hal) { case HAL_IFRAMESIZE_TYPE_DEFAULT: hfi->type = HFI_IFRAME_SIZE_DEFAULT; break; case HAL_IFRAMESIZE_TYPE_MEDIUM: hfi->type = HFI_IFRAME_SIZE_MEDIUM; break; case HAL_IFRAMESIZE_TYPE_HUGE: hfi->type = HFI_IFRAME_SIZE_HIGH; break; case HAL_IFRAMESIZE_TYPE_UNLIMITED: hfi->type = HFI_IFRAME_SIZE_UNLIMITED; break; default: return -ENOTSUPP; } pkt->rg_property_data[0] = HFI_PROPERTY_PARAM_VENC_IFRAMESIZE; pkt->size += sizeof(u32) + sizeof(struct hfi_iframe_size); break; } /* FOLLOWING PROPERTIES ARE NOT IMPLEMENTED IN CORE YET */ case HAL_CONFIG_BUFFER_REQUIREMENTS: case HAL_CONFIG_PRIORITY: Loading drivers/media/platform/msm/vidc/msm_venc.c +42 −0 Original line number Diff line number Diff line Loading @@ -185,6 +185,13 @@ static const char *const timestamp_mode[] = { "Ignore", }; static const char *const iframe_sizes[] = { "Default", "Medium", "Huge", "Unlimited" }; static struct msm_vidc_ctrl msm_venc_ctrls[] = { { .id = V4L2_CID_MPEG_VIDC_VIDEO_IDR_PERIOD, Loading Loading @@ -1300,6 +1307,20 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = { .default_value = V4L2_MPEG_VIDC_VIDEO_H264_TRANSFORM_8x8_ENABLE, .step = 1, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_TYPE, .name = "Bounds of I-frame size", .type = V4L2_CTRL_TYPE_MENU, .minimum = V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_DEFAULT, .maximum = V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_UNLIMITED, .default_value = V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_DEFAULT, .menu_skip_mask = ~( (1 << V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_DEFAULT) | (1 << V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_MEDIUM) | (1 << V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_HUGE) | (1 << V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_UNLIMITED)), .qmenu = iframe_sizes, }, }; static struct v4l2_ctrl *get_ctrl_from_cluster(int id, Loading Loading @@ -2143,6 +2164,19 @@ static inline int venc_v4l2_to_hal(int id, int value) default: goto unknown_value; } case V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_TYPE: switch (value) { case V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_DEFAULT: return HAL_IFRAMESIZE_TYPE_DEFAULT; case V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_MEDIUM: return HAL_IFRAMESIZE_TYPE_MEDIUM; case V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_HUGE: return HAL_IFRAMESIZE_TYPE_HUGE; case V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_UNLIMITED: return HAL_IFRAMESIZE_TYPE_UNLIMITED; default: goto unknown_value; } } unknown_value: Loading Loading @@ -2231,6 +2265,7 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) int frameqp = 0; int pic_order_cnt = 0; struct hal_video_signal_info signal_info = {0}; enum hal_iframesize_type iframesize_type = HAL_IFRAMESIZE_TYPE_DEFAULT; if (!inst || !inst->core || !inst->core->device) { dprintk(VIDC_ERR, "%s invalid parameters\n", __func__); Loading Loading @@ -3319,6 +3354,13 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) } pdata = &enable; break; case V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_TYPE: property_id = HAL_PARAM_VENC_IFRAMESIZE_TYPE; iframesize_type = venc_v4l2_to_hal( V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_TYPE, ctrl->val); pdata = &iframesize_type; break; default: dprintk(VIDC_ERR, "Unsupported index: %x\n", ctrl->id); rc = -ENOTSUPP; Loading drivers/media/platform/msm/vidc/vidc_hfi_api.h +8 −0 Original line number Diff line number Diff line Loading @@ -242,6 +242,7 @@ enum hal_property { HAL_PARAM_VENC_VIDEO_SIGNAL_INFO, HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED, HAL_PARAM_VENC_H264_TRANSFORM_8x8, HAL_PARAM_VENC_IFRAMESIZE_TYPE, }; enum hal_domain { Loading Loading @@ -1002,6 +1003,13 @@ struct hal_video_signal_info { bool full_range; }; enum hal_iframesize_type { HAL_IFRAMESIZE_TYPE_DEFAULT, HAL_IFRAMESIZE_TYPE_MEDIUM, HAL_IFRAMESIZE_TYPE_HUGE, HAL_IFRAMESIZE_TYPE_UNLIMITED, }; enum vidc_resource_id { VIDC_RESOURCE_NONE, VIDC_RESOURCE_OCMEM, Loading drivers/media/platform/msm/vidc/vidc_hfi_helper.h +10 −0 Original line number Diff line number Diff line Loading @@ -386,6 +386,8 @@ struct hfi_buffer_info { (HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x031) #define HFI_PROPERTY_PARAM_VENC_VQZIP_SEI_TYPE \ (HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x033) #define HFI_PROPERTY_PARAM_VENC_IFRAMESIZE \ (HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x034) #define HFI_PROPERTY_CONFIG_VENC_COMMON_START \ (HFI_DOMAIN_BASE_VENC + HFI_ARCH_COMMON_OFFSET + 0x6000) Loading Loading @@ -888,6 +890,14 @@ struct hfi_aspect_ratio { u32 aspect_height; }; #define HFI_IFRAME_SIZE_DEFAULT (HFI_COMMON_BASE + 0x1) #define HFI_IFRAME_SIZE_MEDIUM (HFI_COMMON_BASE + 0x2) #define HFI_IFRAME_SIZE_HIGH (HFI_COMMON_BASE + 0x3) #define HFI_IFRAME_SIZE_UNLIMITED (HFI_COMMON_BASE + 0x4) struct hfi_iframe_size { u32 type; }; #define HFI_MVC_BUFFER_LAYOUT_TOP_BOTTOM (0) #define HFI_MVC_BUFFER_LAYOUT_SIDEBYSIDE (1) #define HFI_MVC_BUFFER_LAYOUT_SEQ (2) Loading include/uapi/linux/v4l2-controls.h +9 −0 Original line number Diff line number Diff line Loading @@ -1200,6 +1200,15 @@ enum v4l2_mpeg_vidc_video_h264_transform_8x8 { V4L2_MPEG_VIDC_VIDEO_H264_TRANSFORM_8x8_ENABLE = 1, }; #define V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_TYPE \ (V4L2_CID_MPEG_MSM_VIDC_BASE + 100) enum v4l2_mpeg_vidc_video_venc_iframesize_type { V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_DEFAULT, V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_MEDIUM, V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_HUGE, V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_UNLIMITED, }; /* 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 +27 −0 Original line number Diff line number Diff line Loading @@ -2153,6 +2153,33 @@ int create_pkt_cmd_session_set_property( pkt->size += sizeof(u32) + sizeof(struct hfi_enable); break; } case HAL_PARAM_VENC_IFRAMESIZE_TYPE: { enum hal_iframesize_type hal = *(enum hal_iframesize_type *)pdata; struct hfi_iframe_size *hfi = (struct hfi_iframe_size *) &pkt->rg_property_data[1]; switch (hal) { case HAL_IFRAMESIZE_TYPE_DEFAULT: hfi->type = HFI_IFRAME_SIZE_DEFAULT; break; case HAL_IFRAMESIZE_TYPE_MEDIUM: hfi->type = HFI_IFRAME_SIZE_MEDIUM; break; case HAL_IFRAMESIZE_TYPE_HUGE: hfi->type = HFI_IFRAME_SIZE_HIGH; break; case HAL_IFRAMESIZE_TYPE_UNLIMITED: hfi->type = HFI_IFRAME_SIZE_UNLIMITED; break; default: return -ENOTSUPP; } pkt->rg_property_data[0] = HFI_PROPERTY_PARAM_VENC_IFRAMESIZE; pkt->size += sizeof(u32) + sizeof(struct hfi_iframe_size); break; } /* FOLLOWING PROPERTIES ARE NOT IMPLEMENTED IN CORE YET */ case HAL_CONFIG_BUFFER_REQUIREMENTS: case HAL_CONFIG_PRIORITY: Loading
drivers/media/platform/msm/vidc/msm_venc.c +42 −0 Original line number Diff line number Diff line Loading @@ -185,6 +185,13 @@ static const char *const timestamp_mode[] = { "Ignore", }; static const char *const iframe_sizes[] = { "Default", "Medium", "Huge", "Unlimited" }; static struct msm_vidc_ctrl msm_venc_ctrls[] = { { .id = V4L2_CID_MPEG_VIDC_VIDEO_IDR_PERIOD, Loading Loading @@ -1300,6 +1307,20 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = { .default_value = V4L2_MPEG_VIDC_VIDEO_H264_TRANSFORM_8x8_ENABLE, .step = 1, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_TYPE, .name = "Bounds of I-frame size", .type = V4L2_CTRL_TYPE_MENU, .minimum = V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_DEFAULT, .maximum = V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_UNLIMITED, .default_value = V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_DEFAULT, .menu_skip_mask = ~( (1 << V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_DEFAULT) | (1 << V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_MEDIUM) | (1 << V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_HUGE) | (1 << V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_UNLIMITED)), .qmenu = iframe_sizes, }, }; static struct v4l2_ctrl *get_ctrl_from_cluster(int id, Loading Loading @@ -2143,6 +2164,19 @@ static inline int venc_v4l2_to_hal(int id, int value) default: goto unknown_value; } case V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_TYPE: switch (value) { case V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_DEFAULT: return HAL_IFRAMESIZE_TYPE_DEFAULT; case V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_MEDIUM: return HAL_IFRAMESIZE_TYPE_MEDIUM; case V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_HUGE: return HAL_IFRAMESIZE_TYPE_HUGE; case V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_UNLIMITED: return HAL_IFRAMESIZE_TYPE_UNLIMITED; default: goto unknown_value; } } unknown_value: Loading Loading @@ -2231,6 +2265,7 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) int frameqp = 0; int pic_order_cnt = 0; struct hal_video_signal_info signal_info = {0}; enum hal_iframesize_type iframesize_type = HAL_IFRAMESIZE_TYPE_DEFAULT; if (!inst || !inst->core || !inst->core->device) { dprintk(VIDC_ERR, "%s invalid parameters\n", __func__); Loading Loading @@ -3319,6 +3354,13 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) } pdata = &enable; break; case V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_TYPE: property_id = HAL_PARAM_VENC_IFRAMESIZE_TYPE; iframesize_type = venc_v4l2_to_hal( V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_TYPE, ctrl->val); pdata = &iframesize_type; break; default: dprintk(VIDC_ERR, "Unsupported index: %x\n", ctrl->id); rc = -ENOTSUPP; Loading
drivers/media/platform/msm/vidc/vidc_hfi_api.h +8 −0 Original line number Diff line number Diff line Loading @@ -242,6 +242,7 @@ enum hal_property { HAL_PARAM_VENC_VIDEO_SIGNAL_INFO, HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED, HAL_PARAM_VENC_H264_TRANSFORM_8x8, HAL_PARAM_VENC_IFRAMESIZE_TYPE, }; enum hal_domain { Loading Loading @@ -1002,6 +1003,13 @@ struct hal_video_signal_info { bool full_range; }; enum hal_iframesize_type { HAL_IFRAMESIZE_TYPE_DEFAULT, HAL_IFRAMESIZE_TYPE_MEDIUM, HAL_IFRAMESIZE_TYPE_HUGE, HAL_IFRAMESIZE_TYPE_UNLIMITED, }; enum vidc_resource_id { VIDC_RESOURCE_NONE, VIDC_RESOURCE_OCMEM, Loading
drivers/media/platform/msm/vidc/vidc_hfi_helper.h +10 −0 Original line number Diff line number Diff line Loading @@ -386,6 +386,8 @@ struct hfi_buffer_info { (HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x031) #define HFI_PROPERTY_PARAM_VENC_VQZIP_SEI_TYPE \ (HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x033) #define HFI_PROPERTY_PARAM_VENC_IFRAMESIZE \ (HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x034) #define HFI_PROPERTY_CONFIG_VENC_COMMON_START \ (HFI_DOMAIN_BASE_VENC + HFI_ARCH_COMMON_OFFSET + 0x6000) Loading Loading @@ -888,6 +890,14 @@ struct hfi_aspect_ratio { u32 aspect_height; }; #define HFI_IFRAME_SIZE_DEFAULT (HFI_COMMON_BASE + 0x1) #define HFI_IFRAME_SIZE_MEDIUM (HFI_COMMON_BASE + 0x2) #define HFI_IFRAME_SIZE_HIGH (HFI_COMMON_BASE + 0x3) #define HFI_IFRAME_SIZE_UNLIMITED (HFI_COMMON_BASE + 0x4) struct hfi_iframe_size { u32 type; }; #define HFI_MVC_BUFFER_LAYOUT_TOP_BOTTOM (0) #define HFI_MVC_BUFFER_LAYOUT_SIDEBYSIDE (1) #define HFI_MVC_BUFFER_LAYOUT_SEQ (2) Loading
include/uapi/linux/v4l2-controls.h +9 −0 Original line number Diff line number Diff line Loading @@ -1200,6 +1200,15 @@ enum v4l2_mpeg_vidc_video_h264_transform_8x8 { V4L2_MPEG_VIDC_VIDEO_H264_TRANSFORM_8x8_ENABLE = 1, }; #define V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_TYPE \ (V4L2_CID_MPEG_MSM_VIDC_BASE + 100) enum v4l2_mpeg_vidc_video_venc_iframesize_type { V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_DEFAULT, V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_MEDIUM, V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_HUGE, V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_UNLIMITED, }; /* Camera class control IDs */ #define V4L2_CID_CAMERA_CLASS_BASE (V4L2_CTRL_CLASS_CAMERA | 0x900) Loading