summaryrefslogtreecommitdiffstats
path: root/mplayer.c
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2005-08-23 07:56:29 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2005-08-23 07:56:29 +0000
commit33cb7846646cafba62d1b30b3c686f2cbb2bb53c (patch)
tree2bf1216e8f19bd0a7b39774fec8416ab77eec71d /mplayer.c
parent5e220d0356bb01fb4367ede1e9e5cab805391d5d (diff)
downloadmpv-33cb7846646cafba62d1b30b3c686f2cbb2bb53c.tar.bz2
mpv-33cb7846646cafba62d1b30b3c686f2cbb2bb53c.tar.xz
ensure that audio-only files are decoded till the end by not only
waiting for eof but also checking that the a_in_buffer is empty. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@16291 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'mplayer.c')
-rw-r--r--mplayer.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/mplayer.c b/mplayer.c
index ccb3330ad2..829a7ee7d7 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -2286,10 +2286,15 @@ while(sh_audio){
// Fill buffer if needed:
current_module="decode_audio"; // Enter AUDIO decoder module
t=GetTimer();
- while(sh_audio->a_out_buffer_len<playsize && !d_audio->eof){
+ while(sh_audio->a_out_buffer_len<playsize &&
+ (!d_audio->eof || sh_audio->a_in_buffer_len > 0)){
int ret=decode_audio(sh_audio,&sh_audio->a_out_buffer[sh_audio->a_out_buffer_len],
playsize-sh_audio->a_out_buffer_len,sh_audio->a_out_buffer_size-sh_audio->a_out_buffer_len);
- if(ret<=0) break; // EOF?
+ if(ret<=0) { // EOF?
+ if (d_audio->eof)
+ sh_audio->a_in_buffer_len = 0; // make sure we don't hang if something's broken
+ break;
+ }
sh_audio->a_out_buffer_len+=ret;
}
t=GetTimer()-t;
@@ -2316,7 +2321,7 @@ if(!sh_video) {
float a_pos = sh_audio->delay - audio_out->get_delay() * playback_speed;
print_status(a_pos, 0, 0);
}
- if(d_audio->eof) eof = PT_NEXT_ENTRY;
+ if(d_audio->eof && sh_audio->a_in_buffer_len <= 0) eof = PT_NEXT_ENTRY;
} else {