diff options
author | Zaheer Abbas Merali <zaheerabbas@merali.org> | 2004-10-25 18:42:47 +0000 |
---|---|---|
committer | Zaheer Abbas Merali <zaheerabbas@merali.org> | 2004-10-25 18:42:47 +0000 |
commit | 3e6dfe29558bc74907e4a43f2f7952b2d2c033f1 (patch) | |
tree | c4172c952814bcb9014a7cf1f9c61b79ebeb558c /sys | |
parent | 64f5768c355b0c5d9f312657b0dfa782a7531e6b (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.c | 32 |
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; |