summaryrefslogtreecommitdiffstats
path: root/abs/core-testing/mythtv/trunk/mythtv-svn/hdpvr-v4lchannel-tweak.patch
diff options
context:
space:
mode:
authorJames Meyer <james.meyer@operamail.com>2008-12-09 21:15:29 (GMT)
committerJames Meyer <james.meyer@operamail.com>2008-12-09 21:15:29 (GMT)
commit8203006cf9ee68a8e33e30d48ea6b396d1a7b7e4 (patch)
treee90f032f43f9db0f3d6593ebe79ed2b8a572b64e /abs/core-testing/mythtv/trunk/mythtv-svn/hdpvr-v4lchannel-tweak.patch
parentf7db724accbaa234c839a7147e79e1cef47c6772 (diff)
downloadlinhes_pkgbuild-8203006cf9ee68a8e33e30d48ea6b396d1a7b7e4.zip
linhes_pkgbuild-8203006cf9ee68a8e33e30d48ea6b396d1a7b7e4.tar.gz
linhes_pkgbuild-8203006cf9ee68a8e33e30d48ea6b396d1a7b7e4.tar.bz2
Initial checkin for mythtv-trunk builds
Diffstat (limited to 'abs/core-testing/mythtv/trunk/mythtv-svn/hdpvr-v4lchannel-tweak.patch')
-rw-r--r--abs/core-testing/mythtv/trunk/mythtv-svn/hdpvr-v4lchannel-tweak.patch139
1 files changed, 139 insertions, 0 deletions
diff --git a/abs/core-testing/mythtv/trunk/mythtv-svn/hdpvr-v4lchannel-tweak.patch b/abs/core-testing/mythtv/trunk/mythtv-svn/hdpvr-v4lchannel-tweak.patch
new file mode 100644
index 0000000..3535310
--- /dev/null
+++ b/abs/core-testing/mythtv/trunk/mythtv-svn/hdpvr-v4lchannel-tweak.patch
@@ -0,0 +1,139 @@
+Index: libs/libmythtv/v4lchannel.h
+===================================================================
+--- libs/libmythtv/v4lchannel.h (revision 18874)
++++ libs/libmythtv/v4lchannel.h (working copy)
+@@ -103,6 +103,8 @@
+ VidModV4L2 videomode_v4l2; ///< Current video mode if 'usingv4l2' is true
+
+ int defaultFreqTable;
++ int prev_inputNumV4L;
++ v4l2_std_id prev_vid_mode;
+ };
+
+ #endif
+Index: libs/libmythtv/v4lchannel.cpp
+===================================================================
+--- libs/libmythtv/v4lchannel.cpp (revision 18874)
++++ libs/libmythtv/v4lchannel.cpp (working copy)
+@@ -40,7 +40,8 @@
+ device_name(QString::null), driver_name(QString::null),
+ curList(NULL), totalChannels(0),
+ currentFormat(""), is_dtv(false),
+- usingv4l2(false), defaultFreqTable(1)
++ usingv4l2(false), defaultFreqTable(1),
++ prev_inputNumV4L(-1), prev_vid_mode(-1)
+ {
+ }
+
+@@ -795,62 +796,75 @@
+ {
+ VERBOSE(VB_CHANNEL, LOC + msg + "(v4l v2)");
+
+- int ioctlval = ioctl(videofd, VIDIOC_S_INPUT, &inputNumV4L);
++ int ioctlval;
++ bool streamingDisabled = false;
++ int streamType = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+
+- // ConvertX (wis-go7007) requires streaming to be disabled
+- // before an input switch, do this if initial switch failed.
+- bool streamingDisabled = false;
+- int streamType = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+- if ((ioctlval < 0) && (errno == EBUSY))
++ if (prev_inputNumV4L != inputNumV4L)
+ {
+- ioctlval = ioctl(videofd, VIDIOC_STREAMOFF, &streamType);
++ ioctlval = ioctl(videofd, VIDIOC_S_INPUT, &inputNumV4L);
++
++ // ConvertX (wis-go7007) requires streaming to be disabled
++ // before an input switch, do this if initial switch failed.
++ if ((ioctlval < 0) && (errno == EBUSY))
++ {
++ ioctlval = ioctl(videofd, VIDIOC_STREAMOFF, &streamType);
++ if (ioctlval < 0)
++ {
++ VERBOSE(VB_IMPORTANT, LOC_ERR + msg +
++ "\n\t\t\twhile disabling streaming (v4l v2)" + ENO);
++
++ ok = false;
++ ioctlval = 0;
++ }
++ else
++ {
++ streamingDisabled = true;
++
++ // Resend the input switch ioctl.
++ ioctlval = ioctl(videofd, VIDIOC_S_INPUT, &inputNumV4L);
++ }
++ }
++
+ if (ioctlval < 0)
+ {
+ VERBOSE(VB_IMPORTANT, LOC_ERR + msg +
+- "\n\t\t\twhile disabling streaming (v4l v2)" + ENO);
++ "\n\t\t\twhile setting input (v4l v2)" + ENO);
+
+ ok = false;
+- ioctlval = 0;
+ }
+- else
+- {
+- streamingDisabled = true;
+
+- // Resend the input switch ioctl.
+- ioctlval = ioctl(videofd, VIDIOC_S_INPUT, &inputNumV4L);
+- }
++ prev_inputNumV4L = inputNumV4L;
+ }
+
+- if (ioctlval < 0)
+- {
+- VERBOSE(VB_IMPORTANT, LOC_ERR + msg +
+- "\n\t\t\twhile setting input (v4l v2)" + ENO);
+-
+- ok = false;
+- }
+-
+ v4l2_std_id vid_mode = format_to_mode(newFmt, 2);
+- ioctlval = ioctl(videofd, VIDIOC_S_STD, &vid_mode);
+- if (ioctlval < 0)
+- {
+- VERBOSE(VB_IMPORTANT, LOC_ERR + msg +
+- "\n\t\t\twhile setting format (v4l v2)" + ENO);
+
+- ok = false;
+- }
+-
+- // ConvertX (wis-go7007) requires streaming to be disabled
+- // before an input switch, here we try to re-enable streaming.
+- if (streamingDisabled)
++ if (prev_vid_mode != vid_mode)
+ {
+- ioctlval = ioctl(videofd, VIDIOC_STREAMON, &streamType);
++ ioctlval = ioctl(videofd, VIDIOC_S_STD, &vid_mode);
+ if (ioctlval < 0)
+ {
+ VERBOSE(VB_IMPORTANT, LOC_ERR + msg +
+- "\n\t\t\twhile reenabling streaming (v4l v2)" + ENO);
++ "\n\t\t\twhile setting format (v4l v2)" + ENO);
+
+ ok = false;
+ }
++
++ // ConvertX (wis-go7007) requires streaming to be disabled
++ // before an input switch, here we try to re-enable streaming.
++ if (streamingDisabled)
++ {
++ ioctlval = ioctl(videofd, VIDIOC_STREAMON, &streamType);
++ if (ioctlval < 0)
++ {
++ VERBOSE(VB_IMPORTANT, LOC_ERR + msg +
++ "\n\t\t\twhile reenabling streaming (v4l v2)" +
++ ENO);
++
++ ok = false;
++ }
++ }
++ prev_vid_mode = vid_mode;
+ }
+ }
+