[FFmpeg-cvslog] ffplay: silence buffer size must be a multiple of frame size

Marton Balint git at videolan.org
Sat Jan 14 16:55:25 CET 2012


ffmpeg | branch: master | Marton Balint <cus at passwd.hu> | Mon Jan  9 00:23:12 2012 +0100| [1348420b8ae87f19e1659a9a50e74df6e3791b57] | committer: Marton Balint

ffplay: silence buffer size must be a multiple of frame size

Otherwise the audio channels sometimes would be shifted on output.

Signed-off-by: Marton Balint <cus at passwd.hu>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=1348420b8ae87f19e1659a9a50e74df6e3791b57
---

 ffplay.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/ffplay.c b/ffplay.c
index 5019fb5..749cfc7 100644
--- a/ffplay.c
+++ b/ffplay.c
@@ -2163,6 +2163,7 @@ static void sdl_audio_callback(void *opaque, Uint8 *stream, int len)
     VideoState *is = opaque;
     int audio_size, len1;
     int bytes_per_sec;
+    int frame_size = av_samples_get_buffer_size(NULL, is->audio_tgt_channels, 1, is->audio_tgt_fmt, 1);
     double pts;
 
     audio_callback_time = av_gettime();
@@ -2173,7 +2174,7 @@ static void sdl_audio_callback(void *opaque, Uint8 *stream, int len)
            if (audio_size < 0) {
                 /* if error, just output silence */
                is->audio_buf      = is->silence_buf;
-               is->audio_buf_size = sizeof(is->silence_buf);
+               is->audio_buf_size = sizeof(is->silence_buf) / frame_size * frame_size;
            } else {
                if (is->show_mode != SHOW_MODE_VIDEO)
                    update_sample_display(is, (int16_t *)is->audio_buf, audio_size);



More information about the ffmpeg-cvslog mailing list