aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorPhilipp Zabel <p.zabel@pengutronix.de>2012-08-08 10:59:38 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2012-09-26 15:56:07 -0400
commitc566c78900acf38d6f2d004674b9cb062bbe3671 (patch)
treee8277ac97cb55f5d51ca66422563c6fe41f0843a /drivers
parent8f35c7bc265c99fadb5b4057f623e2e242043736 (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.c29
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,