diff options
author | Philipp Zabel <p.zabel@pengutronix.de> | 2012-08-08 10:59:38 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2012-09-26 15:56:07 -0400 |
commit | c566c78900acf38d6f2d004674b9cb062bbe3671 (patch) | |
tree | e8277ac97cb55f5d51ca66422563c6fe41f0843a /drivers | |
parent | 8f35c7bc265c99fadb5b4057f623e2e242043736 (diff) |
[media] media: coda: add byte size slice limit control
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Tested-by: Javier Martin <javier.martin@vista-silicon.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/media/platform/coda.c | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/drivers/media/platform/coda.c b/drivers/media/platform/coda.c index 23985b3447ac..bf8cb0a317bd 100644 --- a/drivers/media/platform/coda.c +++ b/drivers/media/platform/coda.c | |||
@@ -151,6 +151,7 @@ struct coda_params { | |||
151 | enum v4l2_mpeg_video_multi_slice_mode slice_mode; | 151 | enum v4l2_mpeg_video_multi_slice_mode slice_mode; |
152 | u32 framerate; | 152 | u32 framerate; |
153 | u16 bitrate; | 153 | u16 bitrate; |
154 | u32 slice_max_bits; | ||
154 | u32 slice_max_mb; | 155 | u32 slice_max_mb; |
155 | }; | 156 | }; |
156 | 157 | ||
@@ -1061,12 +1062,23 @@ static int coda_start_streaming(struct vb2_queue *q, unsigned int count) | |||
1061 | return -EINVAL; | 1062 | return -EINVAL; |
1062 | } | 1063 | } |
1063 | 1064 | ||
1064 | value = (ctx->params.slice_max_mb & CODA_SLICING_SIZE_MASK) << CODA_SLICING_SIZE_OFFSET; | 1065 | switch (ctx->params.slice_mode) { |
1065 | value |= (1 & CODA_SLICING_UNIT_MASK) << CODA_SLICING_UNIT_OFFSET; | 1066 | case V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE: |
1066 | if (ctx->params.slice_mode == V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_MB) | 1067 | value = 0; |
1068 | break; | ||
1069 | case V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_MB: | ||
1070 | value = (ctx->params.slice_max_mb & CODA_SLICING_SIZE_MASK) << CODA_SLICING_SIZE_OFFSET; | ||
1071 | value |= (1 & CODA_SLICING_UNIT_MASK) << CODA_SLICING_UNIT_OFFSET; | ||
1072 | value |= 1 & CODA_SLICING_MODE_MASK; | ||
1073 | break; | ||
1074 | case V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_BYTES: | ||
1075 | value = (ctx->params.slice_max_bits & CODA_SLICING_SIZE_MASK) << CODA_SLICING_SIZE_OFFSET; | ||
1076 | value |= (0 & CODA_SLICING_UNIT_MASK) << CODA_SLICING_UNIT_OFFSET; | ||
1067 | value |= 1 & CODA_SLICING_MODE_MASK; | 1077 | value |= 1 & CODA_SLICING_MODE_MASK; |
1078 | break; | ||
1079 | } | ||
1068 | coda_write(dev, value, CODA_CMD_ENC_SEQ_SLICE_MODE); | 1080 | coda_write(dev, value, CODA_CMD_ENC_SEQ_SLICE_MODE); |
1069 | value = ctx->params.gop_size & CODA_GOP_SIZE_MASK; | 1081 | value = ctx->params.gop_size & CODA_GOP_SIZE_MASK; |
1070 | coda_write(dev, value, CODA_CMD_ENC_SEQ_GOP_SIZE); | 1082 | coda_write(dev, value, CODA_CMD_ENC_SEQ_GOP_SIZE); |
1071 | 1083 | ||
1072 | if (ctx->params.bitrate) { | 1084 | if (ctx->params.bitrate) { |
@@ -1313,6 +1325,9 @@ static int coda_s_ctrl(struct v4l2_ctrl *ctrl) | |||
1313 | case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB: | 1325 | case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB: |
1314 | ctx->params.slice_max_mb = ctrl->val; | 1326 | ctx->params.slice_max_mb = ctrl->val; |
1315 | break; | 1327 | break; |
1328 | case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES: | ||
1329 | ctx->params.slice_max_bits = ctrl->val * 8; | ||
1330 | break; | ||
1316 | case V4L2_CID_MPEG_VIDEO_HEADER_MODE: | 1331 | case V4L2_CID_MPEG_VIDEO_HEADER_MODE: |
1317 | break; | 1332 | break; |
1318 | default: | 1333 | default: |
@@ -1351,10 +1366,12 @@ static int coda_ctrls_setup(struct coda_ctx *ctx) | |||
1351 | V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP, 1, 31, 1, 2); | 1366 | V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP, 1, 31, 1, 2); |
1352 | v4l2_ctrl_new_std_menu(&ctx->ctrls, &coda_ctrl_ops, | 1367 | v4l2_ctrl_new_std_menu(&ctx->ctrls, &coda_ctrl_ops, |
1353 | V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE, | 1368 | V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE, |
1354 | V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_MB, 0, | 1369 | V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_BYTES, 0x0, |
1355 | V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_MB); | 1370 | V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE); |
1356 | v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, | 1371 | v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, |
1357 | V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB, 1, 0x3fffffff, 1, 1); | 1372 | V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB, 1, 0x3fffffff, 1, 1); |
1373 | v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, | ||
1374 | V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES, 1, 0x3fffffff, 1, 500); | ||
1358 | v4l2_ctrl_new_std_menu(&ctx->ctrls, &coda_ctrl_ops, | 1375 | v4l2_ctrl_new_std_menu(&ctx->ctrls, &coda_ctrl_ops, |
1359 | V4L2_CID_MPEG_VIDEO_HEADER_MODE, | 1376 | V4L2_CID_MPEG_VIDEO_HEADER_MODE, |
1360 | V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME, | 1377 | V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME, |