summaryrefslogtreecommitdiff
path: root/linux/drivers/media/video
diff options
context:
space:
mode:
authorMike Isely <isely@pobox.com>2008-06-29 22:35:52 -0500
committerMike Isely <isely@pobox.com>2008-06-29 22:35:52 -0500
commit2ad4308d0841f8adae53a2d3d3cdb5d756383794 (patch)
tree3e0c58746326af33cb9754881423fe4333bf3487 /linux/drivers/media/video
parent8d7e0f68d005f2a0137230a742adc574e09ada78 (diff)
downloadmediapointer-dvb-s2-2ad4308d0841f8adae53a2d3d3cdb5d756383794.tar.gz
mediapointer-dvb-s2-2ad4308d0841f8adae53a2d3d3cdb5d756383794.tar.bz2
pvrusb2: Update video_gop_size
From: Mike Isely <isely@pobox.com> When switching video standard, ensure that video GOP size remains appropriately configured. Signed-off-by: Mike Isely <isely@pobox.com>
Diffstat (limited to 'linux/drivers/media/video')
-rw-r--r--linux/drivers/media/video/pvrusb2/pvrusb2-hdw.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/linux/drivers/media/video/pvrusb2/pvrusb2-hdw.c b/linux/drivers/media/video/pvrusb2/pvrusb2-hdw.c
index 4b7b9226e..cf56b10d9 100644
--- a/linux/drivers/media/video/pvrusb2/pvrusb2-hdw.c
+++ b/linux/drivers/media/video/pvrusb2/pvrusb2-hdw.c
@@ -2480,18 +2480,35 @@ static int pvr2_hdw_commit_execute(struct pvr2_hdw *hdw)
/* Handle some required side effects when the video standard is
changed.... */
if (hdw->std_dirty) {
- /* Rewrite the vertical resolution to be appropriate to the
- video standard that has been selected. */
int nvres;
+ int gop_size;
if (hdw->std_mask_cur & V4L2_STD_525_60) {
nvres = 480;
+ gop_size = 15;
} else {
nvres = 576;
+ gop_size = 12;
}
+ /* Rewrite the vertical resolution to be appropriate to the
+ video standard that has been selected. */
if (nvres != hdw->res_ver_val) {
hdw->res_ver_val = nvres;
hdw->res_ver_dirty = !0;
}
+ /* Rewrite the GOP size to be appropriate to the video
+ standard that has been selected. */
+ if (gop_size != hdw->enc_ctl_state.video_gop_size) {
+ struct v4l2_ext_controls cs;
+ struct v4l2_ext_control c1;
+ memset(&cs, 0, sizeof(cs));
+ memset(&c1, 0, sizeof(c1));
+ cs.controls = &c1;
+ cs.count = 1;
+ c1.id = V4L2_CID_MPEG_VIDEO_GOP_SIZE;
+ c1.value = gop_size;
+ cx2341x_ext_ctrls(&hdw->enc_ctl_state, 0, &cs,
+ VIDIOC_S_EXT_CTRLS);
+ }
}
if (hdw->input_dirty && hdw->state_pathway_ok &&