diff --git a/drivers/media/video/msm_vidc/msm_venc.c b/drivers/media/video/msm_vidc/msm_venc.c index 0326c79dcd8..05d3570eeed 100644 --- a/drivers/media/video/msm_vidc/msm_venc.c +++ b/drivers/media/video/msm_vidc/msm_venc.c @@ -390,10 +390,16 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = { .name = "Slice Mode", .type = V4L2_CTRL_TYPE_MENU, .minimum = V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE, - .maximum = V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_BYTES, + .maximum = V4L2_MPEG_VIDEO_MULTI_SLICE_GOB, .default_value = V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE, .step = 1, - .menu_skip_mask = 0, + .menu_skip_mask = ~( + (1 << V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE) | + (1 << V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_MB) | + (1 << V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_BYTES) | + (1 << V4L2_MPEG_VIDEO_MULTI_SLICE_GOB) + ), + .qmenu = NULL, .cluster = MSM_VENC_CTRL_CLUSTER_SLICING, }, { @@ -420,6 +426,18 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = { .qmenu = NULL, .cluster = MSM_VENC_CTRL_CLUSTER_SLICING, }, + { + .id = V4L2_CID_MPEG_VIDEO_MULTI_SLICE_GOB, + .name = "Slice GOB", + .type = V4L2_CTRL_TYPE_INTEGER, + .minimum = 1, + .maximum = MAX_SLICE_MB_SIZE, + .default_value = 1, + .step = 1, + .menu_skip_mask = 0, + .qmenu = NULL, + .cluster = MSM_VENC_CTRL_CLUSTER_SLICING, + }, { .id = V4L2_CID_MPEG_VIDC_VIDEO_INTRA_REFRESH_MODE, .name = "Intra Refresh Mode", @@ -1281,6 +1299,9 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) case V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_BYTES: temp = V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES; break; + case V4L2_MPEG_VIDEO_MULTI_SLICE_GOB: + temp = V4L2_CID_MPEG_VIDEO_MULTI_SLICE_GOB; + break; case V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE: default: temp = 0; @@ -1300,6 +1321,7 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) } case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES: case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB: + case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_GOB: temp_ctrl = TRY_GET_CTRL(V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE); property_id = diff --git a/drivers/media/video/v4l2-ctrls.c b/drivers/media/video/v4l2-ctrls.c index 4012fec5a02..3222ea02a34 100644 --- a/drivers/media/video/v4l2-ctrls.c +++ b/drivers/media/video/v4l2-ctrls.c @@ -259,6 +259,7 @@ const char * const *v4l2_ctrl_get_menu(u32 id) "Single", "Max Macroblocks", "Max Bytes", + "GOB", NULL, }; static const char * const entropy_mode[] = { diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index bc25e24df64..9d38db32ae1 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h @@ -1498,6 +1498,7 @@ enum v4l2_mpeg_video_multi_slice_mode { V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE = 0, V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_MB = 1, V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_BYTES = 2, + V4L2_MPEG_VIDEO_MULTI_SLICE_GOB = 3, }; #define V4L2_CID_MPEG_VIDEO_VBV_SIZE (V4L2_CID_MPEG_BASE+222) #define V4L2_CID_MPEG_VIDEO_DEC_PTS (V4L2_CID_MPEG_BASE+223) @@ -1845,7 +1846,8 @@ enum v4l2_mpeg_vidc_perf_level { V4L2_CID_MPEG_VIDC_PERF_LEVEL_PERFORMANCE = 0, V4L2_CID_MPEG_VIDC_PERF_LEVEL_TURBO = 1, }; - +#define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_GOB \ + (V4L2_CID_MPEG_MSM_VIDC_BASE+27) /* Camera class control IDs */ #define V4L2_CID_CAMERA_CLASS_BASE (V4L2_CTRL_CLASS_CAMERA | 0x900) #define V4L2_CID_CAMERA_CLASS (V4L2_CTRL_CLASS_CAMERA | 1)