aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/saa7164
diff options
context:
space:
mode:
authorSteven Toth <stoth@kernellabs.com>2010-07-31 13:58:35 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2010-10-21 05:54:45 -0400
commit3ed43cf96aa9fc565d74855649d8cee0def67f38 (patch)
tree52d4a9d03c1ef4456574e373eab56ce3d74e646b /drivers/media/video/saa7164
parent2600d71cc535907e5d95cd31751c587afc370065 (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.c2
-rw-r--r--drivers/media/video/saa7164/saa7164-encoder.c16
-rw-r--r--drivers/media/video/saa7164/saa7164.h1
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
266struct saa7164_port; 267struct saa7164_port;