diff options
Diffstat (limited to 'drivers/media/video')
-rw-r--r-- | drivers/media/video/saa7134/saa6752hs.c | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/drivers/media/video/saa7134/saa6752hs.c b/drivers/media/video/saa7134/saa6752hs.c index e8c65ddd0181..de7b9e6e932a 100644 --- a/drivers/media/video/saa7134/saa6752hs.c +++ b/drivers/media/video/saa7134/saa6752hs.c | |||
@@ -261,45 +261,57 @@ static int saa6752hs_chip_command(struct i2c_client* client, | |||
261 | 261 | ||
262 | 262 | ||
263 | static int saa6752hs_set_bitrate(struct i2c_client* client, | 263 | static int saa6752hs_set_bitrate(struct i2c_client* client, |
264 | struct v4l2_mpeg_compression* params) | 264 | struct saa6752hs_mpeg_params* params) |
265 | { | 265 | { |
266 | u8 buf[3]; | 266 | u8 buf[3]; |
267 | int tot_bitrate; | ||
267 | 268 | ||
268 | /* set the bitrate mode */ | 269 | /* set the bitrate mode */ |
269 | buf[0] = 0x71; | 270 | buf[0] = 0x71; |
270 | buf[1] = (params->vi_bitrate.mode == V4L2_BITRATE_VBR) ? 0 : 1; | 271 | buf[1] = (params->vi_bitrate_mode == V4L2_MPEG_VIDEO_BITRATE_MODE_VBR) ? 0 : 1; |
271 | i2c_master_send(client, buf, 2); | 272 | i2c_master_send(client, buf, 2); |
272 | 273 | ||
273 | /* set the video bitrate */ | 274 | /* set the video bitrate */ |
274 | if (params->vi_bitrate.mode == V4L2_BITRATE_VBR) { | 275 | if (params->vi_bitrate_mode == V4L2_MPEG_VIDEO_BITRATE_MODE_VBR) { |
275 | /* set the target bitrate */ | 276 | /* set the target bitrate */ |
276 | buf[0] = 0x80; | 277 | buf[0] = 0x80; |
277 | buf[1] = params->vi_bitrate.target >> 8; | 278 | buf[1] = params->vi_bitrate >> 8; |
278 | buf[2] = params->vi_bitrate.target & 0xff; | 279 | buf[2] = params->vi_bitrate & 0xff; |
279 | i2c_master_send(client, buf, 3); | 280 | i2c_master_send(client, buf, 3); |
280 | 281 | ||
281 | /* set the max bitrate */ | 282 | /* set the max bitrate */ |
282 | buf[0] = 0x81; | 283 | buf[0] = 0x81; |
283 | buf[1] = params->vi_bitrate.max >> 8; | 284 | buf[1] = params->vi_bitrate_peak >> 8; |
284 | buf[2] = params->vi_bitrate.max & 0xff; | 285 | buf[2] = params->vi_bitrate_peak & 0xff; |
285 | i2c_master_send(client, buf, 3); | 286 | i2c_master_send(client, buf, 3); |
287 | tot_bitrate = params->vi_bitrate_peak; | ||
286 | } else { | 288 | } else { |
287 | /* set the target bitrate (no max bitrate for CBR) */ | 289 | /* set the target bitrate (no max bitrate for CBR) */ |
288 | buf[0] = 0x81; | 290 | buf[0] = 0x81; |
289 | buf[1] = params->vi_bitrate.target >> 8; | 291 | buf[1] = params->vi_bitrate >> 8; |
290 | buf[2] = params->vi_bitrate.target & 0xff; | 292 | buf[2] = params->vi_bitrate & 0xff; |
291 | i2c_master_send(client, buf, 3); | 293 | i2c_master_send(client, buf, 3); |
294 | tot_bitrate = params->vi_bitrate; | ||
292 | } | 295 | } |
293 | 296 | ||
294 | /* set the audio bitrate */ | 297 | /* set the audio bitrate */ |
295 | buf[0] = 0x94; | 298 | buf[0] = 0x94; |
296 | buf[1] = (256 == params->au_bitrate.target) ? 0 : 1; | 299 | buf[1] = (V4L2_MPEG_AUDIO_L2_BITRATE_256K == params->au_l2_bitrate) ? 0 : 1; |
297 | i2c_master_send(client, buf, 2); | 300 | i2c_master_send(client, buf, 2); |
301 | tot_bitrate += (V4L2_MPEG_AUDIO_L2_BITRATE_256K == params->au_l2_bitrate) ? 256 : 384; | ||
302 | |||
303 | /* Note: the total max bitrate is determined by adding the video and audio | ||
304 | bitrates together and also adding an extra 768kbit/s to stay on the | ||
305 | safe side. If more control should be required, then an extra MPEG control | ||
306 | should be added. */ | ||
307 | tot_bitrate += 768; | ||
308 | if (tot_bitrate > MPEG_TOTAL_TARGET_BITRATE_MAX) | ||
309 | tot_bitrate = MPEG_TOTAL_TARGET_BITRATE_MAX; | ||
298 | 310 | ||
299 | /* set the total bitrate */ | 311 | /* set the total bitrate */ |
300 | buf[0] = 0xb1; | 312 | buf[0] = 0xb1; |
301 | buf[1] = params->st_bitrate.target >> 8; | 313 | buf[1] = tot_bitrate >> 8; |
302 | buf[2] = params->st_bitrate.target & 0xff; | 314 | buf[2] = tot_bitrate & 0xff; |
303 | i2c_master_send(client, buf, 3); | 315 | i2c_master_send(client, buf, 3); |
304 | 316 | ||
305 | return 0; | 317 | return 0; |