diff options
author | al3x <al3x@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-06-07 13:03:17 +0000 |
---|---|---|
committer | al3x <al3x@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-06-07 13:03:17 +0000 |
commit | f5f7b69b3a9cf2c8917451db04f108896f51a40d (patch) | |
tree | 98fc7f14a6d4f902a1e779d61ab0751f62144a0b /libao2/ao_alsa5.c | |
parent | d346c4eff48611c37baf0ada5e1e960a1643b5fb (diff) | |
download | mpv-f5f7b69b3a9cf2c8917451db04f108896f51a40d.tar.bz2 mpv-f5f7b69b3a9cf2c8917451db04f108896f51a40d.tar.xz |
audio_pause/resume implementacio es kozmetikai valtoztatasok
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@1047 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libao2/ao_alsa5.c')
-rw-r--r-- | libao2/ao_alsa5.c | 45 |
1 files changed, 38 insertions, 7 deletions
diff --git a/libao2/ao_alsa5.c b/libao2/ao_alsa5.c index f058d2c829..ae18cbcadd 100644 --- a/libao2/ao_alsa5.c +++ b/libao2/ao_alsa5.c @@ -1,5 +1,5 @@ /* - ao_alsa5 - ALSA 5.x output plugin for MPlayer + ao_alsa5 - ALSA-0.5.x output plugin for MPlayer (C) Alex Beregszaszi <alex@naxine.org> @@ -237,8 +237,23 @@ static int init(int rate_hz, int channels, int format, int flags) /* close audio device */ static void uninit() { - reset(); - snd_pcm_close(alsa_handler); + if ((err = snd_pcm_playback_drain(alsa_handler)) < 0) + { + printf("alsa-uninit: playback drain error: %s\n", snd_strerror(err)); + return; + } + + if ((err = snd_pcm_channel_flush(alsa_handler, SND_PCM_CHANNEL_PLAYBACK)) < 0) + { + printf("alsa-uninit: playback flush error: %s\n", snd_strerror(err)); + return; + } + + if ((err = snd_pcm_close(alsa_handler)) < 0) + { + printf("alsa-uninit: pcm close error: %s\n", snd_strerror(err)); + return; + } } /* stop playing and empty buffers (for seeking/pause) */ @@ -268,13 +283,29 @@ static void reset() /* stop playing, keep buffers (for pause) */ static void audio_pause() { - /* for now, just call reset(); */ - reset(); + int err; + + if ((err = snd_pcm_playback_drain(alsa_handler)) < 0) + { + printf("alsa-pause: playback drain error: %s\n", snd_strerror(err)); + return; + } + + if ((err = snd_pcm_channel_flush(alsa_handler, SND_PCM_CHANNEL_PLAYBACK)) < 0) + { + printf("alsa-pause: playback flush error: %s\n", snd_strerror(err)); + return; + } } /* resume playing, after audio_pause() */ static void audio_resume() { + if ((err = snd_pcm_channel_prepare(alsa_handler, SND_PCM_CHANNEL_PLAYBACK)) < 0) + { + printf("alsa-resume: channel prepare error: %s\n", snd_strerror(err)); + return; + } } /* @@ -314,7 +345,7 @@ static int get_space() ch_stat.channel = SND_PCM_CHANNEL_PLAYBACK; if (snd_pcm_channel_status(alsa_handler, &ch_stat) < 0) - return(0); + return(0); /* error occured */ else return(ch_stat.free); } @@ -327,7 +358,7 @@ static int get_delay() ch_stat.channel = SND_PCM_CHANNEL_PLAYBACK; if (snd_pcm_channel_status(alsa_handler, &ch_stat) < 0) - return(0); + return(ao_buffersize); /* error occured */ else return(ch_stat.count); } |