From 0e6af3c26c3b04141779e0137ff09c28c8512e8c Mon Sep 17 00:00:00 2001 From: Dan Dennedy Date: Thu, 14 Jul 2011 22:35:45 -0700 Subject: [PATCH] Fix audio glitch on seek (3362840). --- src/modules/avformat/producer_avformat.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/modules/avformat/producer_avformat.c b/src/modules/avformat/producer_avformat.c index 038e3f1a..929b08cb 100644 --- a/src/modules/avformat/producer_avformat.c +++ b/src/modules/avformat/producer_avformat.c @@ -2055,10 +2055,10 @@ static int decode_audio( producer_avformat self, int *ignore, AVPacket pkt, int } // Handle ignore - while ( *ignore && audio_used > samples ) + while ( *ignore && audio_used ) { *ignore -= 1; - audio_used -= samples; + audio_used -= audio_used > samples ? samples : audio_used; memmove( audio_buffer, &audio_buffer[ samples * (resample? channels : codec_context->channels) * sizeof_sample ], audio_used * sizeof_sample ); } @@ -2076,9 +2076,10 @@ static int decode_audio( producer_avformat self, int *ignore, AVPacket pkt, int if ( *ignore == 0 ) { + fprintf(stderr, "int_pos %lld req_pos %lld\n", int_position, req_position); if ( int_position < req_position ) // We are behind, so skip some - *ignore = 1; + *ignore = req_position - int_position; // We use nb_streams in this test because the tolerance is dependent // on the interleaving of all streams esp. when there is more than -- 2.39.5