]> git.sesse.net Git - mlt/commitdiff
Fix A/V sync error accumulation regression in avformat producer.
authorDan Dennedy <dan@dennedy.org>
Sat, 30 Mar 2013 04:07:34 +0000 (21:07 -0700)
committerDan Dennedy <dan@dennedy.org>
Sat, 30 Mar 2013 04:07:34 +0000 (21:07 -0700)
Regresion occurred in commit 6cfe84 on March 18 when adding support for
libavformat v55.

src/modules/avformat/producer_avformat.c

index ccbdb0146a60815877de70ab4c24f77c4e8aae26..38f0e3f31c410799e0d86be98040818f7fe2b25e 100644 (file)
@@ -2302,7 +2302,7 @@ static int producer_get_audio( mlt_frame frame, void **buffer, mlt_audio_format
                index = 0;
                index_max = FFMIN( MAX_AUDIO_STREAMS, context->nb_streams );
                *channels = self->total_channels;
-               *samples = *samples * FFMAX( self->max_frequency, *frequency ) / *frequency;
+               *samples = mlt_sample_calculator( fps, FFMAX( self->max_frequency, *frequency ), position );
                *frequency = FFMAX( self->max_frequency, *frequency );
        }
 
@@ -2335,10 +2335,9 @@ static int producer_get_audio( mlt_frame frame, void **buffer, mlt_audio_format
 
                av_init_packet( &pkt );
                
-               // It requested number samples based on requested frame rate.
-               // Do not clean this up with a samples *= ...!
+               // Caller requested number samples based on requested sample rate.
                if ( self->audio_index != INT_MAX )
-                       *samples = *samples * self->audio_codec[ self->audio_index ]->sample_rate / *frequency;
+                       *samples = mlt_sample_calculator( fps, self->audio_codec[ self->audio_index ]->sample_rate, position );
 
                while ( ret >= 0 && !got_audio )
                {