Loading drivers/media/platform/msm/vidc/hfi_packetization.c +3 −0 Original line number Diff line number Diff line Loading @@ -371,6 +371,9 @@ static u32 get_hfi_buf_mode(enum buffer_mode_type hal_buf_mode) case HAL_BUFFER_MODE_RING: buf_mode = HFI_BUFFER_MODE_RING; break; case HAL_BUFFER_MODE_DYNAMIC: buf_mode = HFI_BUFFER_MODE_DYNAMIC; break; default: dprintk(VIDC_ERR, "Invalid buffer mode :0x%x\n", hal_buf_mode); Loading drivers/media/platform/msm/vidc/msm_vdec.c +66 −12 Original line number Diff line number Diff line Loading @@ -72,6 +72,7 @@ static const char *const mpeg_video_vidc_extradata[] = { static const char *const mpeg_vidc_video_alloc_mode_type[] = { "Buffer Allocation Static", "Buffer Allocation Ring Buffer", "Buffer Allocation Dynamic Buffer" }; static const char *const perf_level[] = { Loading Loading @@ -256,15 +257,32 @@ static struct msm_vidc_ctrl msm_vdec_ctrls[] = { .step = 0, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE, .name = "Buffer allocation mode", .id = V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE_INPUT, .name = "Buffer allocation mode for input", .type = V4L2_CTRL_TYPE_MENU, .minimum = V4L2_MPEG_VIDC_VIDEO_STATIC, .maximum = V4L2_MPEG_VIDC_VIDEO_RING, .maximum = V4L2_MPEG_VIDC_VIDEO_DYNAMIC, .default_value = V4L2_MPEG_VIDC_VIDEO_STATIC, .menu_skip_mask = ~( (1 << V4L2_MPEG_VIDC_VIDEO_STATIC) | (1 << V4L2_MPEG_VIDC_VIDEO_RING) (1 << V4L2_MPEG_VIDC_VIDEO_RING) | (1 << V4L2_MPEG_VIDC_VIDEO_DYNAMIC) ), .qmenu = mpeg_vidc_video_alloc_mode_type, .step = 0, .cluster = 0, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE_OUTPUT, .name = "Buffer allocation mode for output", .type = V4L2_CTRL_TYPE_MENU, .minimum = V4L2_MPEG_VIDC_VIDEO_STATIC, .maximum = V4L2_MPEG_VIDC_VIDEO_DYNAMIC, .default_value = V4L2_MPEG_VIDC_VIDEO_STATIC, .menu_skip_mask = ~( (1 << V4L2_MPEG_VIDC_VIDEO_STATIC) | (1 << V4L2_MPEG_VIDC_VIDEO_RING) | (1 << V4L2_MPEG_VIDC_VIDEO_DYNAMIC) ), .qmenu = mpeg_vidc_video_alloc_mode_type, .step = 0, Loading Loading @@ -1320,22 +1338,39 @@ int msm_vdec_inst_init(struct msm_vidc_inst *inst) inst->capability.width.max = DEFAULT_WIDTH; inst->capability.buffer_mode[OUTPUT_PORT] = HAL_BUFFER_MODE_STATIC; inst->capability.buffer_mode[CAPTURE_PORT] = HAL_BUFFER_MODE_STATIC; inst->buffer_mode_set[OUTPUT_PORT] = HAL_BUFFER_MODE_STATIC; inst->buffer_mode_set[CAPTURE_PORT] = HAL_BUFFER_MODE_STATIC; inst->prop.fps = 30; return rc; } static inline enum buffer_mode_type get_buf_type(int val) { switch (val) { case V4L2_MPEG_VIDC_VIDEO_STATIC: return HAL_BUFFER_MODE_STATIC; case V4L2_MPEG_VIDC_VIDEO_RING: return HAL_BUFFER_MODE_RING; case V4L2_MPEG_VIDC_VIDEO_DYNAMIC: return HAL_BUFFER_MODE_DYNAMIC; default: dprintk(VIDC_ERR, "%s: invalid buf type: %d", __func__, val); } return 0; } static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) { int rc = 0; struct hal_nal_stream_format_supported stream_format; struct hal_enable_picture enable_picture; struct hal_enable hal_property;/*, prop;*/ struct hal_buffer_alloc_mode mode; struct hal_enable hal_property; enum hal_property property_id = 0; u32 property_val = 0; void *pdata = NULL; struct hfi_device *hdev; struct hal_extradata_enable extra; struct hal_buffer_alloc_mode alloc_mode; if (!inst || !inst->core || !inst->core->device) { dprintk(VIDC_ERR, "%s invalid parameters", __func__); Loading Loading @@ -1424,14 +1459,17 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) } break; case V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE: { property_id = HAL_PARAM_BUFFER_ALLOC_MODE; mode.buffer_mode = ctrl->val; mode.buffer_type = HAL_BUFFER_INPUT; pdata = &mode; case V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE_INPUT: if (ctrl->val == V4L2_MPEG_VIDC_VIDEO_DYNAMIC) { rc = -ENOTSUPP; break; } property_id = HAL_PARAM_BUFFER_ALLOC_MODE; alloc_mode.buffer_mode = get_buf_type(ctrl->val); alloc_mode.buffer_type = HAL_BUFFER_INPUT; inst->buffer_mode_set[OUTPUT_PORT] = alloc_mode.buffer_mode; pdata = &alloc_mode; break; case V4L2_CID_MPEG_VIDC_VIDEO_FRAME_ASSEMBLY: { property_id = HAL_PARAM_VDEC_FRAME_ASSEMBLY; Loading @@ -1439,6 +1477,22 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) pdata = &hal_property; break; } case V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE_OUTPUT: property_id = HAL_PARAM_BUFFER_ALLOC_MODE; alloc_mode.buffer_mode = get_buf_type(ctrl->val); if (!(alloc_mode.buffer_mode & inst->capability.buffer_mode[CAPTURE_PORT])) { dprintk(VIDC_DBG, "buffer mode[%d] not supported for Capture Port\n", ctrl->val); rc = -ENOTSUPP; break; } alloc_mode.buffer_type = HAL_BUFFER_OUTPUT; pdata = &alloc_mode; inst->buffer_mode_set[CAPTURE_PORT] = alloc_mode.buffer_mode; break; default: break; } Loading drivers/media/platform/msm/vidc/msm_venc.c +2 −0 Original line number Diff line number Diff line Loading @@ -2095,6 +2095,8 @@ int msm_venc_inst_init(struct msm_vidc_inst *inst) inst->prop.width[OUTPUT_PORT] = DEFAULT_WIDTH; inst->prop.fps = 15; inst->capability.pixelprocess_capabilities = 0; inst->buffer_mode_set[OUTPUT_PORT] = HAL_BUFFER_MODE_STATIC; inst->buffer_mode_set[CAPTURE_PORT] = HAL_BUFFER_MODE_STATIC; return rc; } Loading drivers/media/platform/msm/vidc/msm_vidc_internal.h +1 −0 Original line number Diff line number Diff line Loading @@ -229,6 +229,7 @@ struct msm_vidc_inst { struct buf_count count; enum msm_vidc_modes flags; struct msm_vidc_core_capability capability; enum buffer_mode_type buffer_mode_set[MAX_PORT_NUM]; }; extern struct msm_vidc_drv *vidc_driver; Loading include/uapi/linux/v4l2-controls.h +9 −6 Original line number Diff line number Diff line Loading @@ -756,22 +756,25 @@ enum v4l2_mpeg_vidc_video_h264_vui_timing_info { V4L2_MPEG_VIDC_VIDEO_H264_VUI_TIMING_INFO_ENABLED = 1 }; #define V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE \ #define V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE_INPUT \ (V4L2_CID_MPEG_MSM_VIDC_BASE + 30) #define V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE_OUTPUT \ (V4L2_CID_MPEG_MSM_VIDC_BASE + 31) enum v4l2_mpeg_vidc_video_alloc_mode_type { V4L2_MPEG_VIDC_VIDEO_STATIC = 0, V4L2_MPEG_VIDC_VIDEO_RING = 1, V4L2_MPEG_VIDC_VIDEO_DYNAMIC = 2, }; #define V4L2_CID_MPEG_VIDC_VIDEO_FRAME_ASSEMBLY \ (V4L2_CID_MPEG_MSM_VIDC_BASE + 31) (V4L2_CID_MPEG_MSM_VIDC_BASE + 32) enum v4l2_mpeg_vidc_video_assembly { V4L2_MPEG_VIDC_FRAME_ASSEMBLY_DISABLE = 0, V4L2_MPEG_VIDC_FRAME_ASSEMBLY_ENABLE = 1, }; #define V4L2_CID_MPEG_VIDC_VIDEO_VP8_PROFILE_LEVEL \ (V4L2_CID_MPEG_MSM_VIDC_BASE + 32) (V4L2_CID_MPEG_MSM_VIDC_BASE + 33) enum v4l2_mpeg_vidc_video_vp8_profile_level { V4L2_MPEG_VIDC_VIDEO_VP8_UNUSED, V4L2_MPEG_VIDC_VIDEO_VP8_VERSION_0, Loading @@ -781,21 +784,21 @@ enum v4l2_mpeg_vidc_video_vp8_profile_level { }; #define V4L2_CID_MPEG_VIDC_VIDEO_H264_VUI_BITSTREAM_RESTRICT \ (V4L2_CID_MPEG_MSM_VIDC_BASE + 33) (V4L2_CID_MPEG_MSM_VIDC_BASE + 34) enum v4l2_mpeg_vidc_video_h264_vui_bitstream_restrict { V4L2_MPEG_VIDC_VIDEO_H264_VUI_BITSTREAM_RESTRICT_DISABLED = 0, V4L2_MPEG_VIDC_VIDEO_H264_VUI_BITSTREAM_RESTRICT_ENABLED = 1 }; #define V4L2_CID_MPEG_VIDC_VIDEO_PRESERVE_TEXT_QUALITY \ (V4L2_CID_MPEG_MSM_VIDC_BASE + 34) (V4L2_CID_MPEG_MSM_VIDC_BASE + 35) enum v4l2_mpeg_vidc_video_preserve_text_quality { V4L2_MPEG_VIDC_VIDEO_PRESERVE_TEXT_QUALITY_DISABLED = 0, V4L2_MPEG_VIDC_VIDEO_PRESERVE_TEXT_QUALITY_ENABLED = 1 }; #define V4L2_CID_MPEG_VIDC_VIDEO_DEINTERLACE \ (V4L2_CID_MPEG_MSM_VIDC_BASE + 35) (V4L2_CID_MPEG_MSM_VIDC_BASE + 36) enum v4l2_mpeg_vidc_video_deinterlace { V4L2_CID_MPEG_VIDC_VIDEO_DEINTERLACE_DISABLED = 0, V4L2_CID_MPEG_VIDC_VIDEO_DEINTERLACE_ENABLED = 1 Loading Loading
drivers/media/platform/msm/vidc/hfi_packetization.c +3 −0 Original line number Diff line number Diff line Loading @@ -371,6 +371,9 @@ static u32 get_hfi_buf_mode(enum buffer_mode_type hal_buf_mode) case HAL_BUFFER_MODE_RING: buf_mode = HFI_BUFFER_MODE_RING; break; case HAL_BUFFER_MODE_DYNAMIC: buf_mode = HFI_BUFFER_MODE_DYNAMIC; break; default: dprintk(VIDC_ERR, "Invalid buffer mode :0x%x\n", hal_buf_mode); Loading
drivers/media/platform/msm/vidc/msm_vdec.c +66 −12 Original line number Diff line number Diff line Loading @@ -72,6 +72,7 @@ static const char *const mpeg_video_vidc_extradata[] = { static const char *const mpeg_vidc_video_alloc_mode_type[] = { "Buffer Allocation Static", "Buffer Allocation Ring Buffer", "Buffer Allocation Dynamic Buffer" }; static const char *const perf_level[] = { Loading Loading @@ -256,15 +257,32 @@ static struct msm_vidc_ctrl msm_vdec_ctrls[] = { .step = 0, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE, .name = "Buffer allocation mode", .id = V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE_INPUT, .name = "Buffer allocation mode for input", .type = V4L2_CTRL_TYPE_MENU, .minimum = V4L2_MPEG_VIDC_VIDEO_STATIC, .maximum = V4L2_MPEG_VIDC_VIDEO_RING, .maximum = V4L2_MPEG_VIDC_VIDEO_DYNAMIC, .default_value = V4L2_MPEG_VIDC_VIDEO_STATIC, .menu_skip_mask = ~( (1 << V4L2_MPEG_VIDC_VIDEO_STATIC) | (1 << V4L2_MPEG_VIDC_VIDEO_RING) (1 << V4L2_MPEG_VIDC_VIDEO_RING) | (1 << V4L2_MPEG_VIDC_VIDEO_DYNAMIC) ), .qmenu = mpeg_vidc_video_alloc_mode_type, .step = 0, .cluster = 0, }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE_OUTPUT, .name = "Buffer allocation mode for output", .type = V4L2_CTRL_TYPE_MENU, .minimum = V4L2_MPEG_VIDC_VIDEO_STATIC, .maximum = V4L2_MPEG_VIDC_VIDEO_DYNAMIC, .default_value = V4L2_MPEG_VIDC_VIDEO_STATIC, .menu_skip_mask = ~( (1 << V4L2_MPEG_VIDC_VIDEO_STATIC) | (1 << V4L2_MPEG_VIDC_VIDEO_RING) | (1 << V4L2_MPEG_VIDC_VIDEO_DYNAMIC) ), .qmenu = mpeg_vidc_video_alloc_mode_type, .step = 0, Loading Loading @@ -1320,22 +1338,39 @@ int msm_vdec_inst_init(struct msm_vidc_inst *inst) inst->capability.width.max = DEFAULT_WIDTH; inst->capability.buffer_mode[OUTPUT_PORT] = HAL_BUFFER_MODE_STATIC; inst->capability.buffer_mode[CAPTURE_PORT] = HAL_BUFFER_MODE_STATIC; inst->buffer_mode_set[OUTPUT_PORT] = HAL_BUFFER_MODE_STATIC; inst->buffer_mode_set[CAPTURE_PORT] = HAL_BUFFER_MODE_STATIC; inst->prop.fps = 30; return rc; } static inline enum buffer_mode_type get_buf_type(int val) { switch (val) { case V4L2_MPEG_VIDC_VIDEO_STATIC: return HAL_BUFFER_MODE_STATIC; case V4L2_MPEG_VIDC_VIDEO_RING: return HAL_BUFFER_MODE_RING; case V4L2_MPEG_VIDC_VIDEO_DYNAMIC: return HAL_BUFFER_MODE_DYNAMIC; default: dprintk(VIDC_ERR, "%s: invalid buf type: %d", __func__, val); } return 0; } static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) { int rc = 0; struct hal_nal_stream_format_supported stream_format; struct hal_enable_picture enable_picture; struct hal_enable hal_property;/*, prop;*/ struct hal_buffer_alloc_mode mode; struct hal_enable hal_property; enum hal_property property_id = 0; u32 property_val = 0; void *pdata = NULL; struct hfi_device *hdev; struct hal_extradata_enable extra; struct hal_buffer_alloc_mode alloc_mode; if (!inst || !inst->core || !inst->core->device) { dprintk(VIDC_ERR, "%s invalid parameters", __func__); Loading Loading @@ -1424,14 +1459,17 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) } break; case V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE: { property_id = HAL_PARAM_BUFFER_ALLOC_MODE; mode.buffer_mode = ctrl->val; mode.buffer_type = HAL_BUFFER_INPUT; pdata = &mode; case V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE_INPUT: if (ctrl->val == V4L2_MPEG_VIDC_VIDEO_DYNAMIC) { rc = -ENOTSUPP; break; } property_id = HAL_PARAM_BUFFER_ALLOC_MODE; alloc_mode.buffer_mode = get_buf_type(ctrl->val); alloc_mode.buffer_type = HAL_BUFFER_INPUT; inst->buffer_mode_set[OUTPUT_PORT] = alloc_mode.buffer_mode; pdata = &alloc_mode; break; case V4L2_CID_MPEG_VIDC_VIDEO_FRAME_ASSEMBLY: { property_id = HAL_PARAM_VDEC_FRAME_ASSEMBLY; Loading @@ -1439,6 +1477,22 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) pdata = &hal_property; break; } case V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE_OUTPUT: property_id = HAL_PARAM_BUFFER_ALLOC_MODE; alloc_mode.buffer_mode = get_buf_type(ctrl->val); if (!(alloc_mode.buffer_mode & inst->capability.buffer_mode[CAPTURE_PORT])) { dprintk(VIDC_DBG, "buffer mode[%d] not supported for Capture Port\n", ctrl->val); rc = -ENOTSUPP; break; } alloc_mode.buffer_type = HAL_BUFFER_OUTPUT; pdata = &alloc_mode; inst->buffer_mode_set[CAPTURE_PORT] = alloc_mode.buffer_mode; break; default: break; } Loading
drivers/media/platform/msm/vidc/msm_venc.c +2 −0 Original line number Diff line number Diff line Loading @@ -2095,6 +2095,8 @@ int msm_venc_inst_init(struct msm_vidc_inst *inst) inst->prop.width[OUTPUT_PORT] = DEFAULT_WIDTH; inst->prop.fps = 15; inst->capability.pixelprocess_capabilities = 0; inst->buffer_mode_set[OUTPUT_PORT] = HAL_BUFFER_MODE_STATIC; inst->buffer_mode_set[CAPTURE_PORT] = HAL_BUFFER_MODE_STATIC; return rc; } Loading
drivers/media/platform/msm/vidc/msm_vidc_internal.h +1 −0 Original line number Diff line number Diff line Loading @@ -229,6 +229,7 @@ struct msm_vidc_inst { struct buf_count count; enum msm_vidc_modes flags; struct msm_vidc_core_capability capability; enum buffer_mode_type buffer_mode_set[MAX_PORT_NUM]; }; extern struct msm_vidc_drv *vidc_driver; Loading
include/uapi/linux/v4l2-controls.h +9 −6 Original line number Diff line number Diff line Loading @@ -756,22 +756,25 @@ enum v4l2_mpeg_vidc_video_h264_vui_timing_info { V4L2_MPEG_VIDC_VIDEO_H264_VUI_TIMING_INFO_ENABLED = 1 }; #define V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE \ #define V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE_INPUT \ (V4L2_CID_MPEG_MSM_VIDC_BASE + 30) #define V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE_OUTPUT \ (V4L2_CID_MPEG_MSM_VIDC_BASE + 31) enum v4l2_mpeg_vidc_video_alloc_mode_type { V4L2_MPEG_VIDC_VIDEO_STATIC = 0, V4L2_MPEG_VIDC_VIDEO_RING = 1, V4L2_MPEG_VIDC_VIDEO_DYNAMIC = 2, }; #define V4L2_CID_MPEG_VIDC_VIDEO_FRAME_ASSEMBLY \ (V4L2_CID_MPEG_MSM_VIDC_BASE + 31) (V4L2_CID_MPEG_MSM_VIDC_BASE + 32) enum v4l2_mpeg_vidc_video_assembly { V4L2_MPEG_VIDC_FRAME_ASSEMBLY_DISABLE = 0, V4L2_MPEG_VIDC_FRAME_ASSEMBLY_ENABLE = 1, }; #define V4L2_CID_MPEG_VIDC_VIDEO_VP8_PROFILE_LEVEL \ (V4L2_CID_MPEG_MSM_VIDC_BASE + 32) (V4L2_CID_MPEG_MSM_VIDC_BASE + 33) enum v4l2_mpeg_vidc_video_vp8_profile_level { V4L2_MPEG_VIDC_VIDEO_VP8_UNUSED, V4L2_MPEG_VIDC_VIDEO_VP8_VERSION_0, Loading @@ -781,21 +784,21 @@ enum v4l2_mpeg_vidc_video_vp8_profile_level { }; #define V4L2_CID_MPEG_VIDC_VIDEO_H264_VUI_BITSTREAM_RESTRICT \ (V4L2_CID_MPEG_MSM_VIDC_BASE + 33) (V4L2_CID_MPEG_MSM_VIDC_BASE + 34) enum v4l2_mpeg_vidc_video_h264_vui_bitstream_restrict { V4L2_MPEG_VIDC_VIDEO_H264_VUI_BITSTREAM_RESTRICT_DISABLED = 0, V4L2_MPEG_VIDC_VIDEO_H264_VUI_BITSTREAM_RESTRICT_ENABLED = 1 }; #define V4L2_CID_MPEG_VIDC_VIDEO_PRESERVE_TEXT_QUALITY \ (V4L2_CID_MPEG_MSM_VIDC_BASE + 34) (V4L2_CID_MPEG_MSM_VIDC_BASE + 35) enum v4l2_mpeg_vidc_video_preserve_text_quality { V4L2_MPEG_VIDC_VIDEO_PRESERVE_TEXT_QUALITY_DISABLED = 0, V4L2_MPEG_VIDC_VIDEO_PRESERVE_TEXT_QUALITY_ENABLED = 1 }; #define V4L2_CID_MPEG_VIDC_VIDEO_DEINTERLACE \ (V4L2_CID_MPEG_MSM_VIDC_BASE + 35) (V4L2_CID_MPEG_MSM_VIDC_BASE + 36) enum v4l2_mpeg_vidc_video_deinterlace { V4L2_CID_MPEG_VIDC_VIDEO_DEINTERLACE_DISABLED = 0, V4L2_CID_MPEG_VIDC_VIDEO_DEINTERLACE_ENABLED = 1 Loading