summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorZaheer Abbas Merali <zaheerabbas@merali.org>2004-10-25 18:42:47 +0000
committerZaheer Abbas Merali <zaheerabbas@merali.org>2004-10-25 18:42:47 +0000
commit3e6dfe29558bc74907e4a43f2f7952b2d2c033f1 (patch)
treec4172c952814bcb9014a7cf1f9c61b79ebeb558c /sys
parent64f5768c355b0c5d9f312657b0dfa782a7531e6b (diff)
sys/v4l/v4l_calls.c: Fix for some v4l cards which hang in v4lsrc
Original commit message from CVS: 2004-10-25 Zaheer Abbas Merali <zaheerabbas at merali dot org> reviewed by: Ronald Bultje <rbultje at gnome dot org> * sys/v4l/v4l_calls.c: (gst_v4l_get_chan_names): Fix for some v4l cards which hang in v4lsrc
Diffstat (limited to 'sys')
-rw-r--r--sys/v4l/v4l_calls.c32
1 files changed, 19 insertions, 13 deletions
diff --git a/sys/v4l/v4l_calls.c b/sys/v4l/v4l_calls.c
index ee0832cea..000cc79e3 100644
--- a/sys/v4l/v4l_calls.c
+++ b/sys/v4l/v4l_calls.c
@@ -316,21 +316,27 @@ gst_v4l_get_chan_names (GstV4lElement * v4lelement)
gint n;
for (n = 0;; n++) {
- vtun.tuner = n;
- if (ioctl (v4lelement->video_fd, VIDIOCGTUNER, &vtun) < 0)
- break; /* no more tuners */
- if (!strcmp (vtun.name, vchan.name)) {
- v4lchannel->tuner = n;
- channel->flags |= GST_TUNER_CHANNEL_FREQUENCY;
- channel->freq_multiplicator =
- 62.5 * ((vtun.flags & VIDEO_TUNER_LOW) ? 1 : 1000);
- channel->min_frequency = vtun.rangelow;
- channel->max_frequency = vtun.rangehigh;
- channel->min_signal = 0;
- channel->max_signal = 0xffff;
- break;
+ if (n >= vchan.tuners) {
+ vtun.tuner = 0;
+ } else {
+ vtun.tuner = n;
+ if (ioctl (v4lelement->video_fd, VIDIOCGTUNER, &vtun) >= 0)
+ continue; /* no more tuners */
+ if (strcmp (vtun.name, vchan.name) != 0) {
+ continue;
+ }
}
+ v4lchannel->tuner = n;
+ channel->flags |= GST_TUNER_CHANNEL_FREQUENCY;
+ channel->freq_multiplicator =
+ 62.5 * ((vtun.flags & VIDEO_TUNER_LOW) ? 1 : 1000);
+ channel->min_frequency = vtun.rangelow;
+ channel->max_frequency = vtun.rangehigh;
+ channel->min_signal = 0;
+ channel->max_signal = 0xffff;
+ break;
}
+
}
if (vchan.flags & VIDEO_VC_AUDIO) {
struct video_audio vaud;