diff options
author | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-03-19 19:16:01 +0000 |
---|---|---|
committer | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-03-19 19:16:01 +0000 |
commit | 3027484518862a88dd6ac0b52ca1afde2673ed68 (patch) | |
tree | f3b317f8f7735c334d0fedd72a9f1d3f6e208fbb /libao2 | |
parent | dbfd7500d40e5f8d15e706e6d7898a02ee0467d1 (diff) | |
download | mpv-3027484518862a88dd6ac0b52ca1afde2673ed68.tar.bz2 mpv-3027484518862a88dd6ac0b52ca1afde2673ed68.tar.xz |
non-blocking open - patch by Fredrik Kuivinen <freku045@student.liu.se>
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@5205 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libao2')
-rw-r--r-- | libao2/ao_oss.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/libao2/ao_oss.c b/libao2/ao_oss.c index fdd388f9be..1ac3b79a5c 100644 --- a/libao2/ao_oss.c +++ b/libao2/ao_oss.c @@ -7,6 +7,8 @@ #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> +#include <errno.h> +#include <string.h> //#include <sys/soundcard.h> #include "../config.h" @@ -101,12 +103,18 @@ static int init(int rate,int channels,int format,int flags){ if (verbose) printf("audio_setup: using '%s' dsp device\n", dsp); - audio_fd=open(dsp, O_WRONLY); + audio_fd=open(dsp, O_WRONLY | O_NONBLOCK); if(audio_fd<0){ - printf("Can't open audio device %s -> nosound\n",dsp); + printf("Can't open audio device %s: %s -> no sound\n", dsp, strerror(errno)); return 0; } + /* Remove the non-blocking flag */ + if(fcntl(audio_fd, F_SETFL, 0) < 0) { + printf("Can't make filedescriptor non-blocking: %s -> no sound\n", strerror(errno)); + return 0; + } + ao_data.bps=channels*rate; if(format != AFMT_U8 && format != AFMT_S8) ao_data.bps*=2; @@ -203,9 +211,9 @@ static void uninit(){ // stop playing and empty buffers (for seeking/pause) static void reset(){ uninit(); - audio_fd=open(dsp, O_WRONLY); - if(audio_fd<0){ - printf("\nFatal error: *** CANNOT RE-OPEN / RESET AUDIO DEVICE ***\n"); + audio_fd=open(dsp, O_WRONLY | O_NONBLOCK); + if(audio_fd < 0 || fcntl(audio_fd, F_SETFL, 0) < 0){ + printf("\nFatal error: *** CANNOT RE-OPEN / RESET AUDIO DEVICE *** %s\n", strerror(errno)); return; } |