changeset 23334:f665e123e6f9

Implement flushing of audio data. Fixes bug #754. Based on patch by Sergey Svishchev (svs ropnet ru).
author reimar
date Sun, 20 May 2007 12:05:16 +0000
parents c51b95236413
children 69696caa0b1b
files libao2/ao_sun.c
diffstat 1 files changed, 9 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/libao2/ao_sun.c	Sun May 20 11:36:50 2007 +0000
+++ b/libao2/ao_sun.c	Sun May 20 12:05:16 2007 +0000
@@ -65,6 +65,13 @@
 } enable_sample_timing;
 
 
+static void flush_audio(int fd) {
+#ifdef AUDIO_FLUSH
+  ioctl(fd, AUDIO_FLUSH, 0);
+#elif defined(__svr4__)
+  ioctl(fd, I_FLUSH, FLUSHW);
+#endif
+}
 
 // convert an OSS audio format specification into a sun audio encoding
 static int af2sunfmt(int format)
@@ -203,12 +210,9 @@
 error:
     if (silence != NULL) free(silence);
     if (fd >= 0) {
-#ifdef	__svr4__
 	// remove the 0 bytes from the above measurement from the
 	// audio driver's STREAMS queue
-	ioctl(fd, I_FLUSH, FLUSHW);
-#endif
-	//ioctl(fd, AUDIO_DRAIN, 0);
+        flush_audio(fd);
 	close(fd);
     }
 
@@ -576,11 +580,9 @@
 
 // close audio device
 static void uninit(int immed){
-#ifdef	__svr4__
     // throw away buffered data in the audio driver's STREAMS queue
     if (immed)
-	ioctl(audio_fd, I_FLUSH, FLUSHW);
-#endif
+	flush_audio(audio_fd);
     close(audio_fd);
 }