From 5fa56ccdacc54f5f694141c1a74f781cf77874bb Mon Sep 17 00:00:00 2001 From: Steven Toth Date: Sat, 31 Jul 2010 15:05:35 -0300 Subject: [PATCH] [media] saa7164: allow variable length GOP sizes and switch encoder default to CBR Signed-off-by: Steven Toth Signed-off-by: Mauro Carvalho Chehab --- drivers/media/video/saa7164/saa7164-api.c | 2 +- drivers/media/video/saa7164/saa7164-encoder.c | 13 ++++++++++--- drivers/media/video/saa7164/saa7164.h | 1 + 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/media/video/saa7164/saa7164-api.c b/drivers/media/video/saa7164/saa7164-api.c index 5f72bb854e60..5630a5d40896 100644 --- a/drivers/media/video/saa7164/saa7164-api.c +++ b/drivers/media/video/saa7164/saa7164-api.c @@ -33,7 +33,7 @@ int saa7164_api_set_gop_size(struct saa7164_port *port) dprintk(DBGLVL_ENC, "%s()\n", __func__); gs.ucRefFrameDist = port->encoder_params.refdist; - gs.ucGOPSize = SAA7164_ENCODER_DEFAULT_GOP_SIZE; + gs.ucGOPSize = port->encoder_params.gop_size; ret = saa7164_cmd_send(port->dev, port->hwcfg.sourceid, SET_CUR, EU_VIDEO_GOP_STRUCTURE_CONTROL, sizeof(gs), &gs); diff --git a/drivers/media/video/saa7164/saa7164-encoder.c b/drivers/media/video/saa7164/saa7164-encoder.c index c357e2db1ac3..cedeeece3c3f 100644 --- a/drivers/media/video/saa7164/saa7164-encoder.c +++ b/drivers/media/video/saa7164/saa7164-encoder.c @@ -42,14 +42,14 @@ static const u32 saa7164_v4l2_ctrls[] = { V4L2_CID_HUE, V4L2_CID_AUDIO_VOLUME, V4L2_CID_SHARPNESS, + V4L2_CID_MPEG_STREAM_TYPE, V4L2_CID_MPEG_VIDEO_ASPECT, + V4L2_CID_MPEG_VIDEO_B_FRAMES, V4L2_CID_MPEG_VIDEO_GOP_SIZE, - V4L2_CID_MPEG_STREAM_TYPE, V4L2_CID_MPEG_AUDIO_MUTE, V4L2_CID_MPEG_VIDEO_BITRATE_MODE, V4L2_CID_MPEG_VIDEO_BITRATE, V4L2_CID_MPEG_VIDEO_BITRATE_PEAK, - V4L2_CID_MPEG_VIDEO_B_FRAMES, 0 }; @@ -392,6 +392,9 @@ static int saa7164_get_ctrl(struct saa7164_port *port, case V4L2_CID_MPEG_VIDEO_BITRATE_PEAK: ctrl->value = params->bitrate_peak; break; + case V4L2_CID_MPEG_VIDEO_GOP_SIZE: + ctrl->value = params->gop_size; + break; default: return -EINVAL; } @@ -535,6 +538,9 @@ static int saa7164_set_ctrl(struct saa7164_port *port, case V4L2_CID_MPEG_VIDEO_BITRATE_PEAK: params->bitrate_peak = ctrl->value; break; + case V4L2_CID_MPEG_VIDEO_GOP_SIZE: + params->gop_size = ctrl->value; + break; default: return -EINVAL; } @@ -1336,11 +1342,12 @@ int saa7164_encoder_register(struct saa7164_port *port) port->ctl_sharpness = 8; port->encoder_params.bitrate = ENCODER_DEF_BITRATE; port->encoder_params.bitrate_peak = ENCODER_DEF_BITRATE; - port->encoder_params.bitrate_mode = V4L2_MPEG_VIDEO_BITRATE_MODE_VBR; + port->encoder_params.bitrate_mode = V4L2_MPEG_VIDEO_BITRATE_MODE_CBR; port->encoder_params.stream_type = V4L2_MPEG_STREAM_TYPE_MPEG2_PS; port->encoder_params.ctl_mute = 0; port->encoder_params.ctl_aspect = V4L2_MPEG_VIDEO_ASPECT_4x3; port->encoder_params.refdist = 1; + port->encoder_params.gop_size = SAA7164_ENCODER_DEFAULT_GOP_SIZE; if (port->encodernorm.id & V4L2_STD_525_60) port->height = 480; diff --git a/drivers/media/video/saa7164/saa7164.h b/drivers/media/video/saa7164/saa7164.h index dade968af0cd..ef98a958b75e 100644 --- a/drivers/media/video/saa7164/saa7164.h +++ b/drivers/media/video/saa7164/saa7164.h @@ -263,6 +263,7 @@ struct saa7164_encoder_params { u32 ctl_mute; u32 ctl_aspect; u32 refdist; + u32 gop_size; }; struct saa7164_port; -- 2.20.1