[FFmpeg-cvslog] ffplay: do not update audio clock with old audio pts if current frame is AV_NOPTS_VALUE

Marton Balint git at videolan.org
Wed Jul 10 01:04:40 CEST 2013


ffmpeg | branch: master | Marton Balint <cus at passwd.hu> | Sat Jul  6 20:47:12 2013 +0200| [3886572a83bf868b51d840071e27f40fc94fbd6b] | committer: Marton Balint

ffplay: do not update audio clock with old audio pts if current frame is AV_NOPTS_VALUE

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

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

 ffplay.c |   13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/ffplay.c b/ffplay.c
index e66886e..b8783da 100644
--- a/ffplay.c
+++ b/ffplay.c
@@ -2297,10 +2297,11 @@ static int audio_decode_frame(VideoState *is)
 
             audio_clock0 = is->audio_clock;
             /* update the audio clock with the pts */
-            if (is->frame->pts != AV_NOPTS_VALUE) {
+            if (is->frame->pts != AV_NOPTS_VALUE)
                 is->audio_clock = is->frame->pts * av_q2d(tb) + (double) is->frame->nb_samples / is->frame->sample_rate;
-                is->audio_clock_serial = is->audio_pkt_temp_serial;
-            }
+            else
+                is->audio_clock = NAN;
+            is->audio_clock_serial = is->audio_pkt_temp_serial;
 #ifdef DEBUG
             {
                 static double last_clock;
@@ -2374,8 +2375,10 @@ static void sdl_audio_callback(void *opaque, Uint8 *stream, int len)
     bytes_per_sec = is->audio_tgt.freq * is->audio_tgt.channels * av_get_bytes_per_sample(is->audio_tgt.fmt);
     is->audio_write_buf_size = is->audio_buf_size - is->audio_buf_index;
     /* Let's assume the audio driver that is used by SDL has two periods. */
-    set_clock_at(&is->audclk, is->audio_clock - (double)(2 * is->audio_hw_buf_size + is->audio_write_buf_size) / bytes_per_sec, is->audio_clock_serial, audio_callback_time / 1000000.0);
-    sync_clock_to_slave(&is->extclk, &is->audclk);
+    if (!isnan(is->audio_clock)) {
+        set_clock_at(&is->audclk, is->audio_clock - (double)(2 * is->audio_hw_buf_size + is->audio_write_buf_size) / bytes_per_sec, is->audio_clock_serial, audio_callback_time / 1000000.0);
+        sync_clock_to_slave(&is->extclk, &is->audclk);
+    }
 }
 
 static int audio_open(void *opaque, int64_t wanted_channel_layout, int wanted_nb_channels, int wanted_sample_rate, struct AudioParams *audio_hw_params)



More information about the ffmpeg-cvslog mailing list