summaryrefslogtreecommitdiffstats
path: root/libao2/ao_oss.c
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-03-19 19:16:01 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-03-19 19:16:01 +0000
commit3027484518862a88dd6ac0b52ca1afde2673ed68 (patch)
treef3b317f8f7735c334d0fedd72a9f1d3f6e208fbb /libao2/ao_oss.c
parentdbfd7500d40e5f8d15e706e6d7898a02ee0467d1 (diff)
downloadmpv-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/ao_oss.c')
-rw-r--r--libao2/ao_oss.c18
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;
}