aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/platform/coda
diff options
context:
space:
mode:
authorPhilipp Zabel <p.zabel@pengutronix.de>2015-07-10 09:37:52 -0400
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2015-07-17 10:24:05 -0400
commitda2b3b3e115d2793b5475039ca4d7f364135fcf4 (patch)
tree077fd3984f6cffe1fc6a83efabe58837e1509820 /drivers/media/platform/coda
parent68aa7ee15cd683006ec1ac91ad60c019bf62d978 (diff)
[media] coda: implement VBV delay and buffer size controls
The encoder allows to specify the VBV model reference decoder's initial delay and buffer size. Export the corresponding V4L2 controls. Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers/media/platform/coda')
-rw-r--r--drivers/media/platform/coda/coda-bit.c5
-rw-r--r--drivers/media/platform/coda/coda-common.c14
-rw-r--r--drivers/media/platform/coda/coda.h2
3 files changed, 20 insertions, 1 deletions
diff --git a/drivers/media/platform/coda/coda-bit.c b/drivers/media/platform/coda/coda-bit.c
index bcb9911d5e3f..b14affcf8dc0 100644
--- a/drivers/media/platform/coda/coda-bit.c
+++ b/drivers/media/platform/coda/coda-bit.c
@@ -922,6 +922,9 @@ static int coda_start_encoding(struct coda_ctx *ctx)
922 value = (ctx->params.bitrate & CODA_RATECONTROL_BITRATE_MASK) 922 value = (ctx->params.bitrate & CODA_RATECONTROL_BITRATE_MASK)
923 << CODA_RATECONTROL_BITRATE_OFFSET; 923 << CODA_RATECONTROL_BITRATE_OFFSET;
924 value |= 1 & CODA_RATECONTROL_ENABLE_MASK; 924 value |= 1 & CODA_RATECONTROL_ENABLE_MASK;
925 value |= (ctx->params.vbv_delay &
926 CODA_RATECONTROL_INITIALDELAY_MASK)
927 << CODA_RATECONTROL_INITIALDELAY_OFFSET;
925 if (dev->devtype->product == CODA_960) 928 if (dev->devtype->product == CODA_960)
926 value |= BIT(31); /* disable autoskip */ 929 value |= BIT(31); /* disable autoskip */
927 } else { 930 } else {
@@ -929,7 +932,7 @@ static int coda_start_encoding(struct coda_ctx *ctx)
929 } 932 }
930 coda_write(dev, value, CODA_CMD_ENC_SEQ_RC_PARA); 933 coda_write(dev, value, CODA_CMD_ENC_SEQ_RC_PARA);
931 934
932 coda_write(dev, 0, CODA_CMD_ENC_SEQ_RC_BUF_SIZE); 935 coda_write(dev, ctx->params.vbv_size, CODA_CMD_ENC_SEQ_RC_BUF_SIZE);
933 coda_write(dev, ctx->params.intra_refresh, 936 coda_write(dev, ctx->params.intra_refresh,
934 CODA_CMD_ENC_SEQ_INTRA_REFRESH); 937 CODA_CMD_ENC_SEQ_INTRA_REFRESH);
935 938
diff --git a/drivers/media/platform/coda/coda-common.c b/drivers/media/platform/coda/coda-common.c
index 367b6baa8f31..24737f1a1a1b 100644
--- a/drivers/media/platform/coda/coda-common.c
+++ b/drivers/media/platform/coda/coda-common.c
@@ -1400,6 +1400,12 @@ static int coda_s_ctrl(struct v4l2_ctrl *ctrl)
1400 case V4L2_CID_JPEG_RESTART_INTERVAL: 1400 case V4L2_CID_JPEG_RESTART_INTERVAL:
1401 ctx->params.jpeg_restart_interval = ctrl->val; 1401 ctx->params.jpeg_restart_interval = ctrl->val;
1402 break; 1402 break;
1403 case V4L2_CID_MPEG_VIDEO_VBV_DELAY:
1404 ctx->params.vbv_delay = ctrl->val;
1405 break;
1406 case V4L2_CID_MPEG_VIDEO_VBV_SIZE:
1407 ctx->params.vbv_size = min(ctrl->val * 8192, 0x7fffffff);
1408 break;
1403 default: 1409 default:
1404 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, 1410 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev,
1405 "Invalid control, id=%d, val=%d\n", 1411 "Invalid control, id=%d, val=%d\n",
@@ -1459,6 +1465,14 @@ static void coda_encode_ctrls(struct coda_ctx *ctx)
1459 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops, 1465 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,
1460 V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB, 0, 1466 V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB, 0,
1461 1920 * 1088 / 256, 1, 0); 1467 1920 * 1088 / 256, 1, 0);
1468 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,
1469 V4L2_CID_MPEG_VIDEO_VBV_DELAY, 0, 0x7fff, 1, 0);
1470 /*
1471 * The maximum VBV size value is 0x7fffffff bits,
1472 * one bit less than 262144 KiB
1473 */
1474 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,
1475 V4L2_CID_MPEG_VIDEO_VBV_SIZE, 0, 262144, 1, 0);
1462} 1476}
1463 1477
1464static void coda_jpeg_encode_ctrls(struct coda_ctx *ctx) 1478static void coda_jpeg_encode_ctrls(struct coda_ctx *ctx)
diff --git a/drivers/media/platform/coda/coda.h b/drivers/media/platform/coda/coda.h
index a3d70ccd1020..26c9c4bb6e4a 100644
--- a/drivers/media/platform/coda/coda.h
+++ b/drivers/media/platform/coda/coda.h
@@ -128,6 +128,8 @@ struct coda_params {
128 enum v4l2_mpeg_video_multi_slice_mode slice_mode; 128 enum v4l2_mpeg_video_multi_slice_mode slice_mode;
129 u32 framerate; 129 u32 framerate;
130 u16 bitrate; 130 u16 bitrate;
131 u16 vbv_delay;
132 u32 vbv_size;
131 u32 slice_max_bits; 133 u32 slice_max_bits;
132 u32 slice_max_mb; 134 u32 slice_max_mb;
133}; 135};