[MPlayer-dev-eng] [PATCH] mplayer: fix buffer handling during channel change.

Nicolas George george at nsup.org
Sun May 10 12:16:55 CEST 2015


Without this change, when changing from, for example, stereo
to 5.1, there may be a little stereo data left in the output
buffer when the audio output is reinitialized with the new
format. If that little stereo data is not a multiple of 6 samples
it causes a shift in the mapping of the 5.1 channels.

With this patch, ensure that the output buffer is flushed before
performing the format change. It may cause a small A-V sync glitch
at the time, but it is better than completely wrong surround
arrangement.
---
 mplayer.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/mplayer.c b/mplayer.c
index 0068b84..34b7430 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -2187,7 +2187,7 @@ static int fill_audio_out_buffers(void)
         t  = GetTimer() - t;
         tt = t * 0.000001f;
         audio_time_usage += tt;
-        if (playsize > sh_audio->a_out_buffer_len) {
+        if (playsize >= sh_audio->a_out_buffer_len) {
             playsize = sh_audio->a_out_buffer_len;
             if (audio_eof || format_change)
                 playflags |= AOPLAY_FINAL_CHUNK;
@@ -2215,6 +2215,8 @@ static int fill_audio_out_buffers(void)
             mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_AudioOutputTruncated);
             sh_audio->a_out_buffer_len = 0;
         }
+        if (audio_eof || format_change)
+            bytes_to_write = sh_audio->a_out_buffer_len;
     }
     if (format_change) {
         uninit_player(INITIALIZED_AO);
-- 
2.1.4



More information about the MPlayer-dev-eng mailing list