aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/saa7164
diff options
context:
space:
mode:
authorSteven Toth <stoth@kernellabs.com>2010-07-31 13:59:38 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2010-10-21 05:54:46 -0400
commit968b11b20143036098a7013817a15615a54383d3 (patch)
tree8b0f946481d9ceeb2a8bee47aae5b6d8355c687b /drivers/media/video/saa7164
parent3ed43cf96aa9fc565d74855649d8cee0def67f38 (diff)
[media] saa7164: implement encoder peak bitrate feature
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.c17
-rw-r--r--drivers/media/video/saa7164/saa7164.h1
3 files changed, 19 insertions, 1 deletions
diff --git a/drivers/media/video/saa7164/saa7164-api.c b/drivers/media/video/saa7164/saa7164-api.c
index 34ac6483c735..54568cfe933d 100644
--- a/drivers/media/video/saa7164/saa7164-api.c
+++ b/drivers/media/video/saa7164/saa7164-api.c
@@ -64,7 +64,7 @@ int saa7164_api_set_encoder(struct saa7164_port *port)
64 else 64 else
65 vb.ucVideoBitRateMode = EU_VIDEO_BIT_RATE_MODE_VARIABLE_PEAK; 65 vb.ucVideoBitRateMode = EU_VIDEO_BIT_RATE_MODE_VARIABLE_PEAK;
66 vb.dwVideoBitRate = port->encoder_params.bitrate; 66 vb.dwVideoBitRate = port->encoder_params.bitrate;
67 vb.dwVideoBitRatePeak = vb.dwVideoBitRate; 67 vb.dwVideoBitRatePeak = port->encoder_params.bitrate_peak;
68 ret = saa7164_cmd_send(port->dev, port->hwcfg.sourceid, SET_CUR, 68 ret = saa7164_cmd_send(port->dev, port->hwcfg.sourceid, SET_CUR,
69 EU_VIDEO_BIT_RATE_CONTROL, sizeof(tmComResEncVideoBitRate_t), &vb); 69 EU_VIDEO_BIT_RATE_CONTROL, sizeof(tmComResEncVideoBitRate_t), &vb);
70 if (ret != SAA_OK) 70 if (ret != SAA_OK)
diff --git a/drivers/media/video/saa7164/saa7164-encoder.c b/drivers/media/video/saa7164/saa7164-encoder.c
index 5cab46654157..c1265b821b2b 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_BITRATE_PEAK,
50 V4L2_CID_MPEG_VIDEO_B_FRAMES, 51 V4L2_CID_MPEG_VIDEO_B_FRAMES,
51 0 52 0
52}; 53};
@@ -387,6 +388,9 @@ static int saa7164_get_ctrl(struct saa7164_port *port,
387 case V4L2_CID_MPEG_VIDEO_B_FRAMES: 388 case V4L2_CID_MPEG_VIDEO_B_FRAMES:
388 ctrl->value = params->refdist; 389 ctrl->value = params->refdist;
389 break; 390 break;
391 case V4L2_CID_MPEG_VIDEO_BITRATE_PEAK:
392 ctrl->value = params->bitrate_peak;
393 break;
390 default: 394 default:
391 return -EINVAL; 395 return -EINVAL;
392 } 396 }
@@ -456,6 +460,11 @@ static int saa7164_try_ctrl(struct v4l2_ext_control *ctrl, int ac3)
456 (ctrl->value <= 3)) 460 (ctrl->value <= 3))
457 ret = 0; 461 ret = 0;
458 break; 462 break;
463 case V4L2_CID_MPEG_VIDEO_BITRATE_PEAK:
464 if ((ctrl->value >= ENCODER_MIN_BITRATE) &&
465 (ctrl->value <= ENCODER_MAX_BITRATE))
466 ret = 0;
467 break;
459 default: 468 default:
460 ret = -EINVAL; 469 ret = -EINVAL;
461 } 470 }
@@ -521,6 +530,9 @@ static int saa7164_set_ctrl(struct saa7164_port *port,
521 case V4L2_CID_MPEG_VIDEO_B_FRAMES: 530 case V4L2_CID_MPEG_VIDEO_B_FRAMES:
522 params->refdist = ctrl->value; 531 params->refdist = ctrl->value;
523 break; 532 break;
533 case V4L2_CID_MPEG_VIDEO_BITRATE_PEAK:
534 params->bitrate_peak = ctrl->value;
535 break;
524 default: 536 default:
525 return -EINVAL; 537 return -EINVAL;
526 } 538 }
@@ -698,6 +710,10 @@ static int fill_queryctrl(struct saa7164_encoder_params *params,
698 case V4L2_CID_MPEG_VIDEO_B_FRAMES: 710 case V4L2_CID_MPEG_VIDEO_B_FRAMES:
699 return v4l2_ctrl_query_fill(c, 711 return v4l2_ctrl_query_fill(c,
700 1, 3, 1, 1); 712 1, 3, 1, 1);
713 case V4L2_CID_MPEG_VIDEO_BITRATE_PEAK:
714 return v4l2_ctrl_query_fill(c,
715 ENCODER_MIN_BITRATE, ENCODER_MAX_BITRATE,
716 100000, ENCODER_DEF_BITRATE);
701 default: 717 default:
702 return -EINVAL; 718 return -EINVAL;
703 } 719 }
@@ -1318,6 +1334,7 @@ int saa7164_encoder_register(struct saa7164_port *port)
1318 port->ctl_saturation = 62; 1334 port->ctl_saturation = 62;
1319 port->ctl_sharpness = 8; 1335 port->ctl_sharpness = 8;
1320 port->encoder_params.bitrate = ENCODER_DEF_BITRATE; 1336 port->encoder_params.bitrate = ENCODER_DEF_BITRATE;
1337 port->encoder_params.bitrate_peak = ENCODER_DEF_BITRATE;
1321 port->encoder_params.bitrate_mode = V4L2_MPEG_VIDEO_BITRATE_MODE_VBR; 1338 port->encoder_params.bitrate_mode = V4L2_MPEG_VIDEO_BITRATE_MODE_VBR;
1322 port->encoder_params.stream_type = V4L2_MPEG_STREAM_TYPE_MPEG2_PS; 1339 port->encoder_params.stream_type = V4L2_MPEG_STREAM_TYPE_MPEG2_PS;
1323 port->encoder_params.ctl_mute = 0; 1340 port->encoder_params.ctl_mute = 0;
diff --git a/drivers/media/video/saa7164/saa7164.h b/drivers/media/video/saa7164/saa7164.h
index 1d9c4e358e72..dade968af0cd 100644
--- a/drivers/media/video/saa7164/saa7164.h
+++ b/drivers/media/video/saa7164/saa7164.h
@@ -255,6 +255,7 @@ struct saa7164_encoder_params {
255 u32 width; 255 u32 width;
256 u32 is_50hz; 256 u32 is_50hz;
257 u32 bitrate; /* bps */ 257 u32 bitrate; /* bps */
258 u32 bitrate_peak; /* bps */
258 u32 bitrate_mode; 259 u32 bitrate_mode;
259 u32 stream_type; /* V4L2_MPEG_STREAM_TYPE_MPEG2_TS */ 260 u32 stream_type; /* V4L2_MPEG_STREAM_TYPE_MPEG2_TS */
260 261