msm_vidc: vidc: Add support for GOB in driver and v4l2 framework.

GOB control was missing in v4l2 framework, so GOB settings could not
be conveyed to firmware. This change adds the GOB support in v4l2
framework and driver.

CRs-fixed: 433888
Change-Id: Ia276782042ba1b275ec4350b64183c14ada000be
Signed-off-by: Ashray Kulkarni <ashrayk@codeaurora.org>
This commit is contained in:
Ashray Kulkarni
2013-01-17 18:20:47 -08:00
parent fc4f11a134
commit 70e05eb7d3
3 changed files with 28 additions and 3 deletions
+24 -2
View File
@@ -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 =
+1
View File
@@ -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[] = {
+3 -1
View File
@@ -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)