From 504270e54921864509859049c7b914fdb38f0e5d Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 6 Apr 2004 17:55:36 +0000 Subject: uninit immed flag git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@12146 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libao2/ao_alsa1x.c | 2 +- libao2/ao_alsa5.c | 2 +- libao2/ao_alsa9.c | 2 +- libao2/ao_arts.c | 2 +- libao2/ao_dxr2.c | 2 +- libao2/ao_esd.c | 2 +- libao2/ao_macosx.c | 2 +- libao2/ao_mpegpes.c | 2 +- libao2/ao_nas.c | 2 +- libao2/ao_null.c | 2 +- libao2/ao_oss.c | 14 ++++++++++---- libao2/ao_pcm.c | 2 +- libao2/ao_plugin.c | 4 ++-- libao2/ao_sdl.c | 2 +- libao2/ao_sgi.c | 2 +- libao2/ao_sun.c | 5 +++-- libao2/ao_win32.c | 2 +- libao2/audio_out.h | 2 +- 18 files changed, 30 insertions(+), 23 deletions(-) (limited to 'libao2') diff --git a/libao2/ao_alsa1x.c b/libao2/ao_alsa1x.c index d1ce259c56..bc2040de34 100644 --- a/libao2/ao_alsa1x.c +++ b/libao2/ao_alsa1x.c @@ -736,7 +736,7 @@ static int init(int rate_hz, int channels, int format, int flags) /* close audio device */ -static void uninit() +static void uninit(int immed) { if (alsa_handler) { diff --git a/libao2/ao_alsa5.c b/libao2/ao_alsa5.c index 95a555d7f1..2a7799fab9 100644 --- a/libao2/ao_alsa5.c +++ b/libao2/ao_alsa5.c @@ -236,7 +236,7 @@ static int init(int rate_hz, int channels, int format, int flags) } /* close audio device */ -static void uninit() +static void uninit(int immed) { int err; diff --git a/libao2/ao_alsa9.c b/libao2/ao_alsa9.c index 0ce5b51257..3795db4f26 100644 --- a/libao2/ao_alsa9.c +++ b/libao2/ao_alsa9.c @@ -723,7 +723,7 @@ static int init(int rate_hz, int channels, int format, int flags) /* close audio device */ -static void uninit() +static void uninit(int immed) { if (alsa_handler) { diff --git a/libao2/ao_arts.c b/libao2/ao_arts.c index 38fedef72c..d5704d7a28 100644 --- a/libao2/ao_arts.c +++ b/libao2/ao_arts.c @@ -100,7 +100,7 @@ static int init(int rate_hz, int channels, int format, int flags) return 1; } -static void uninit() +static void uninit(int immed) { arts_close_stream(stream); arts_free(); diff --git a/libao2/ao_dxr2.c b/libao2/ao_dxr2.c index aec87f0a68..9f996fdce8 100644 --- a/libao2/ao_dxr2.c +++ b/libao2/ao_dxr2.c @@ -118,7 +118,7 @@ static int init(int rate,int channels,int format,int flags){ } // close audio device -static void uninit(){ +static void uninit(int immed){ } diff --git a/libao2/ao_esd.c b/libao2/ao_esd.c index 9318174c4c..807a639679 100644 --- a/libao2/ao_esd.c +++ b/libao2/ao_esd.c @@ -274,7 +274,7 @@ static int init(int rate_hz, int channels, int format, int flags) /* * close audio device */ -static void uninit() +static void uninit(int immed) { if (esd_play_fd >= 0) { esd_close(esd_play_fd); diff --git a/libao2/ao_macosx.c b/libao2/ao_macosx.c index af8635ddfc..8b799ae785 100644 --- a/libao2/ao_macosx.c +++ b/libao2/ao_macosx.c @@ -353,7 +353,7 @@ static float get_delay() /* unload plugin and deregister from coreaudio */ -static void uninit() +static void uninit(int immed) { int i; OSErr status; diff --git a/libao2/ao_mpegpes.c b/libao2/ao_mpegpes.c index 3fdf67855c..d26336e27a 100644 --- a/libao2/ao_mpegpes.c +++ b/libao2/ao_mpegpes.c @@ -131,7 +131,7 @@ retry: } // close audio device -static void uninit(){ +static void uninit(int immed){ } diff --git a/libao2/ao_nas.c b/libao2/ao_nas.c index 80617c1f91..b3d8f1523a 100644 --- a/libao2/ao_nas.c +++ b/libao2/ao_nas.c @@ -476,7 +476,7 @@ static int init(int rate,int channels,int format,int flags) } // close audio device -static void uninit(){ +static void uninit(int immed){ mp_msg(MSGT_AO, MSGL_DBG3, "ao_nas: uninit()\n"); diff --git a/libao2/ao_null.c b/libao2/ao_null.c index d35f9f42bc..17f4fe8bad 100644 --- a/libao2/ao_null.c +++ b/libao2/ao_null.c @@ -64,7 +64,7 @@ static int init(int rate,int channels,int format,int flags){ } // close audio device -static void uninit(){ +static void uninit(int immed){ } diff --git a/libao2/ao_oss.c b/libao2/ao_oss.c index 3591a41adb..25545f9b75 100644 --- a/libao2/ao_oss.c +++ b/libao2/ao_oss.c @@ -263,10 +263,16 @@ ac3_retry: } // close audio device -static void uninit(){ +static void uninit(int immed){ if(audio_fd == -1) return; +#ifdef SNDCTL_DSP_SYNC + // to get the buffer played + if (!immed) + ioctl(audio_fd, SNDCTL_DSP_SYNC, NULL); +#endif #ifdef SNDCTL_DSP_RESET - ioctl(audio_fd, SNDCTL_DSP_RESET, NULL); + if (immed) + ioctl(audio_fd, SNDCTL_DSP_RESET, NULL); #endif close(audio_fd); audio_fd = -1; @@ -274,7 +280,7 @@ static void uninit(){ // stop playing and empty buffers (for seeking/pause) static void reset(){ - uninit(); + uninit(1); audio_fd=open(dsp, O_WRONLY); if(audio_fd < 0){ mp_msg(MSGT_AO,MSGL_ERR,"\nFatal error: *** CANNOT RE-OPEN / RESET AUDIO DEVICE *** %s\n", strerror(errno)); @@ -300,7 +306,7 @@ static void reset(){ // stop playing, keep buffers (for pause) static void audio_pause() { - uninit(); + uninit(1); } // resume playing, after audio_pause() diff --git a/libao2/ao_pcm.c b/libao2/ao_pcm.c index f7be0bdb72..e3484fa871 100644 --- a/libao2/ao_pcm.c +++ b/libao2/ao_pcm.c @@ -132,7 +132,7 @@ static int init(int rate,int channels,int format,int flags){ } // close audio device -static void uninit(){ +static void uninit(int immed){ if(ao_pcm_waveheader && fseek(fp, 0, SEEK_SET) == 0){ /* Write wave header */ wavhdr.file_length = wavhdr.data_length + sizeof(wavhdr) - 8; diff --git a/libao2/ao_plugin.c b/libao2/ao_plugin.c index f420a25e2b..6cb2f85c55 100644 --- a/libao2/ao_plugin.c +++ b/libao2/ao_plugin.c @@ -197,9 +197,9 @@ static int init(int rate,int channels,int format,int flags){ } // close audio device -static void uninit(){ +static void uninit(int immed){ int i=0; - driver()->uninit(); + driver()->uninit(immed); while(plugin(i)) plugin(i++)->uninit(); if(ao_plugin_local_data.plugins) diff --git a/libao2/ao_sdl.c b/libao2/ao_sdl.c index b3c2619844..115eef130b 100644 --- a/libao2/ao_sdl.c +++ b/libao2/ao_sdl.c @@ -265,7 +265,7 @@ void callback(void *userdata, Uint8 *stream, int len); userdata is the pointer s } // close audio device -static void uninit(){ +static void uninit(int immed){ mp_msg(MSGT_AO,MSGL_V,"SDL: Audio Subsystem shutting down!\n"); while(buffered_bytes > 0) usec_sleep(50000); diff --git a/libao2/ao_sgi.c b/libao2/ao_sgi.c index 77f694a3c7..3c08b10eb9 100644 --- a/libao2/ao_sgi.c +++ b/libao2/ao_sgi.c @@ -118,7 +118,7 @@ static int init(int rate, int channels, int format, int flags) { } // close audio device -static void uninit() { +static void uninit(int immed) { /* TODO: samplerate should be set back to the value before mplayer was started! */ diff --git a/libao2/ao_sun.c b/libao2/ao_sun.c index ea50876857..085117d9cc 100644 --- a/libao2/ao_sun.c +++ b/libao2/ao_sun.c @@ -615,10 +615,11 @@ static int init(int rate,int channels,int format,int flags){ } // close audio device -static void uninit(){ +static void uninit(int immed){ #ifdef __svr4__ // throw away buffered data in the audio driver's STREAMS queue - ioctl(audio_fd, I_FLUSH, FLUSHW); + if (immed) + ioctl(audio_fd, I_FLUSH, FLUSHW); #endif close(audio_fd); } diff --git a/libao2/ao_win32.c b/libao2/ao_win32.c index 124c612d37..cab59b4969 100644 --- a/libao2/ao_win32.c +++ b/libao2/ao_win32.c @@ -167,7 +167,7 @@ static int init(int rate,int channels,int format,int flags) } // close audio device -static void uninit() +static void uninit(int immed) { while (buffered_bytes > 0) usec_sleep(50000); diff --git a/libao2/audio_out.h b/libao2/audio_out.h index 9930b79403..c2b814beba 100644 --- a/libao2/audio_out.h +++ b/libao2/audio_out.h @@ -20,7 +20,7 @@ typedef struct ao_functions_s ao_info_t *info; int (*control)(int cmd,void *arg); int (*init)(int rate,int channels,int format,int flags); - void (*uninit)(); + void (*uninit)(int immed); void (*reset)(); int (*get_space)(); int (*play)(void* data,int len,int flags); -- cgit v1.2.3