diff options
author | Steven Toth <stoth@kernellabs.com> | 2010-07-31 13:58:35 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-10-21 05:54:45 -0400 |
commit | 3ed43cf96aa9fc565d74855649d8cee0def67f38 (patch) | |
tree | 52d4a9d03c1ef4456574e373eab56ce3d74e646b /drivers/media/video/saa7164 | |
parent | 2600d71cc535907e5d95cd31751c587afc370065 (diff) |
[media] saa7164: allow the IBP reference distance to be configurable
Signed-off-by: Steven Toth <stoth@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/saa7164')
-rw-r--r-- | drivers/media/video/saa7164/saa7164-api.c | 2 | ||||
-rw-r--r-- | drivers/media/video/saa7164/saa7164-encoder.c | 16 | ||||
-rw-r--r-- | drivers/media/video/saa7164/saa7164.h | 1 |
3 files changed, 18 insertions, 1 deletions
diff --git a/drivers/media/video/saa7164/saa7164-api.c b/drivers/media/video/saa7164/saa7164-api.c index fec5138737e0..34ac6483c735 100644 --- a/drivers/media/video/saa7164/saa7164-api.c +++ b/drivers/media/video/saa7164/saa7164-api.c | |||
@@ -32,7 +32,7 @@ int saa7164_api_set_gop_size(struct saa7164_port *port) | |||
32 | 32 | ||
33 | dprintk(DBGLVL_ENC, "%s()\n", __func__); | 33 | dprintk(DBGLVL_ENC, "%s()\n", __func__); |
34 | 34 | ||
35 | gs.ucRefFrameDist = SAA7164_ENCODER_DEFAULT_GOP_DIST; | 35 | gs.ucRefFrameDist = port->encoder_params.refdist; |
36 | gs.ucGOPSize = SAA7164_ENCODER_DEFAULT_GOP_SIZE; | 36 | gs.ucGOPSize = SAA7164_ENCODER_DEFAULT_GOP_SIZE; |
37 | ret = saa7164_cmd_send(port->dev, port->hwcfg.sourceid, SET_CUR, | 37 | ret = saa7164_cmd_send(port->dev, port->hwcfg.sourceid, SET_CUR, |
38 | EU_VIDEO_GOP_STRUCTURE_CONTROL, | 38 | EU_VIDEO_GOP_STRUCTURE_CONTROL, |
diff --git a/drivers/media/video/saa7164/saa7164-encoder.c b/drivers/media/video/saa7164/saa7164-encoder.c index d7d2fe009ff9..5cab46654157 100644 --- a/drivers/media/video/saa7164/saa7164-encoder.c +++ b/drivers/media/video/saa7164/saa7164-encoder.c | |||
@@ -47,6 +47,7 @@ static const u32 saa7164_v4l2_ctrls[] = { | |||
47 | V4L2_CID_MPEG_AUDIO_MUTE, | 47 | V4L2_CID_MPEG_AUDIO_MUTE, |
48 | V4L2_CID_MPEG_VIDEO_BITRATE_MODE, | 48 | V4L2_CID_MPEG_VIDEO_BITRATE_MODE, |
49 | V4L2_CID_MPEG_VIDEO_BITRATE, | 49 | V4L2_CID_MPEG_VIDEO_BITRATE, |
50 | V4L2_CID_MPEG_VIDEO_B_FRAMES, | ||
50 | 0 | 51 | 0 |
51 | }; | 52 | }; |
52 | 53 | ||
@@ -383,6 +384,9 @@ static int saa7164_get_ctrl(struct saa7164_port *port, | |||
383 | case V4L2_CID_MPEG_VIDEO_BITRATE_MODE: | 384 | case V4L2_CID_MPEG_VIDEO_BITRATE_MODE: |
384 | ctrl->value = params->bitrate_mode; | 385 | ctrl->value = params->bitrate_mode; |
385 | break; | 386 | break; |
387 | case V4L2_CID_MPEG_VIDEO_B_FRAMES: | ||
388 | ctrl->value = params->refdist; | ||
389 | break; | ||
386 | default: | 390 | default: |
387 | return -EINVAL; | 391 | return -EINVAL; |
388 | } | 392 | } |
@@ -447,6 +451,11 @@ static int saa7164_try_ctrl(struct v4l2_ext_control *ctrl, int ac3) | |||
447 | (ctrl->value == V4L2_MPEG_VIDEO_BITRATE_MODE_CBR)) | 451 | (ctrl->value == V4L2_MPEG_VIDEO_BITRATE_MODE_CBR)) |
448 | ret = 0; | 452 | ret = 0; |
449 | break; | 453 | break; |
454 | case V4L2_CID_MPEG_VIDEO_B_FRAMES: | ||
455 | if ((ctrl->value >= 1) && | ||
456 | (ctrl->value <= 3)) | ||
457 | ret = 0; | ||
458 | break; | ||
450 | default: | 459 | default: |
451 | ret = -EINVAL; | 460 | ret = -EINVAL; |
452 | } | 461 | } |
@@ -509,6 +518,9 @@ static int saa7164_set_ctrl(struct saa7164_port *port, | |||
509 | case V4L2_CID_MPEG_VIDEO_BITRATE_MODE: | 518 | case V4L2_CID_MPEG_VIDEO_BITRATE_MODE: |
510 | params->bitrate_mode = ctrl->value; | 519 | params->bitrate_mode = ctrl->value; |
511 | break; | 520 | break; |
521 | case V4L2_CID_MPEG_VIDEO_B_FRAMES: | ||
522 | params->refdist = ctrl->value; | ||
523 | break; | ||
512 | default: | 524 | default: |
513 | return -EINVAL; | 525 | return -EINVAL; |
514 | } | 526 | } |
@@ -683,6 +695,9 @@ static int fill_queryctrl(struct saa7164_encoder_params *params, | |||
683 | return v4l2_ctrl_query_fill(c, | 695 | return v4l2_ctrl_query_fill(c, |
684 | V4L2_MPEG_VIDEO_BITRATE_MODE_VBR, V4L2_MPEG_VIDEO_BITRATE_MODE_CBR, | 696 | V4L2_MPEG_VIDEO_BITRATE_MODE_VBR, V4L2_MPEG_VIDEO_BITRATE_MODE_CBR, |
685 | 1, V4L2_MPEG_VIDEO_BITRATE_MODE_VBR); | 697 | 1, V4L2_MPEG_VIDEO_BITRATE_MODE_VBR); |
698 | case V4L2_CID_MPEG_VIDEO_B_FRAMES: | ||
699 | return v4l2_ctrl_query_fill(c, | ||
700 | 1, 3, 1, 1); | ||
686 | default: | 701 | default: |
687 | return -EINVAL; | 702 | return -EINVAL; |
688 | } | 703 | } |
@@ -1307,6 +1322,7 @@ int saa7164_encoder_register(struct saa7164_port *port) | |||
1307 | port->encoder_params.stream_type = V4L2_MPEG_STREAM_TYPE_MPEG2_PS; | 1322 | port->encoder_params.stream_type = V4L2_MPEG_STREAM_TYPE_MPEG2_PS; |
1308 | port->encoder_params.ctl_mute = 0; | 1323 | port->encoder_params.ctl_mute = 0; |
1309 | port->encoder_params.ctl_aspect = V4L2_MPEG_VIDEO_ASPECT_4x3; | 1324 | port->encoder_params.ctl_aspect = V4L2_MPEG_VIDEO_ASPECT_4x3; |
1325 | port->encoder_params.refdist = 1; | ||
1310 | 1326 | ||
1311 | if (port->encodernorm.id & V4L2_STD_525_60) | 1327 | if (port->encodernorm.id & V4L2_STD_525_60) |
1312 | port->height = 480; | 1328 | port->height = 480; |
diff --git a/drivers/media/video/saa7164/saa7164.h b/drivers/media/video/saa7164/saa7164.h index 712f762d9f73..1d9c4e358e72 100644 --- a/drivers/media/video/saa7164/saa7164.h +++ b/drivers/media/video/saa7164/saa7164.h | |||
@@ -261,6 +261,7 @@ struct saa7164_encoder_params { | |||
261 | u32 audio_sampling_freq; | 261 | u32 audio_sampling_freq; |
262 | u32 ctl_mute; | 262 | u32 ctl_mute; |
263 | u32 ctl_aspect; | 263 | u32 ctl_aspect; |
264 | u32 refdist; | ||
264 | }; | 265 | }; |
265 | 266 | ||
266 | struct saa7164_port; | 267 | struct saa7164_port; |