mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-25 07:26:29 +00:00
sys/oss/gstosssink.c: Some drivers do not support unsetting the non-blocking flag once the device is opened. In those...
Original commit message from CVS: * sys/oss/gstosssink.c: (gst_oss_sink_prepare): Some drivers do not support unsetting the non-blocking flag once the device is opened. In those cases, close/open the device in non-blocking mode. Fixes #362673.
This commit is contained in:
parent
a2b7998dad
commit
bad39277cf
2 changed files with 16 additions and 3 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2006-10-17 Wim Taymans <wim@fluendo.com>
|
||||||
|
|
||||||
|
* sys/oss/gstosssink.c: (gst_oss_sink_prepare):
|
||||||
|
Some drivers do not support unsetting the non-blocking flag once the
|
||||||
|
device is opened. In those cases, close/open the device in
|
||||||
|
non-blocking mode. Fixes #362673.
|
||||||
|
|
||||||
2006-10-17 Stefan Kost <ensonic@users.sf.net>
|
2006-10-17 Stefan Kost <ensonic@users.sf.net>
|
||||||
|
|
||||||
* sys/v4l2/v4l2_calls.c: (gst_v4l2_fill_lists):
|
* sys/v4l2/v4l2_calls.c: (gst_v4l2_fill_lists):
|
||||||
|
|
|
@ -427,10 +427,17 @@ gst_oss_sink_prepare (GstAudioSink * asink, GstRingBufferSpec * spec)
|
||||||
|
|
||||||
oss = GST_OSSSINK (asink);
|
oss = GST_OSSSINK (asink);
|
||||||
|
|
||||||
|
/* we opened non-blocking so that we can detect if the device is available
|
||||||
|
* without hanging forever. We now want to remove the non-blocking flag. */
|
||||||
mode = fcntl (oss->fd, F_GETFL);
|
mode = fcntl (oss->fd, F_GETFL);
|
||||||
mode &= ~O_NONBLOCK;
|
mode &= ~O_NONBLOCK;
|
||||||
if (fcntl (oss->fd, F_SETFL, mode) == -1)
|
if (fcntl (oss->fd, F_SETFL, mode) == -1) {
|
||||||
|
/* some drivers do no support unsetting the non-blocking flag, try to
|
||||||
|
* close/open the device then. This is racy but we error out properly. */
|
||||||
|
gst_oss_sink_close (asink);
|
||||||
|
if ((oss->fd = open (oss->device, O_WRONLY, 0)) == -1)
|
||||||
goto non_block;
|
goto non_block;
|
||||||
|
}
|
||||||
|
|
||||||
tmp = gst_oss_sink_get_format (spec->format);
|
tmp = gst_oss_sink_get_format (spec->format);
|
||||||
if (tmp == 0)
|
if (tmp == 0)
|
||||||
|
@ -458,7 +465,6 @@ gst_oss_sink_prepare (GstAudioSink * asink, GstRingBufferSpec * spec)
|
||||||
|
|
||||||
spec->bytes_per_sample = (spec->width / 8) * spec->channels;
|
spec->bytes_per_sample = (spec->width / 8) * spec->channels;
|
||||||
oss->bytes_per_sample = (spec->width / 8) * spec->channels;
|
oss->bytes_per_sample = (spec->width / 8) * spec->channels;
|
||||||
memset (spec->silence_sample, 0, spec->bytes_per_sample);
|
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (oss, "got segsize: %d, segtotal: %d, value: %08x",
|
GST_DEBUG_OBJECT (oss, "got segsize: %d, segtotal: %d, value: %08x",
|
||||||
spec->segsize, spec->segtotal, tmp);
|
spec->segsize, spec->segtotal, tmp);
|
||||||
|
|
Loading…
Reference in a new issue