]> git.sesse.net Git - mlt/commitdiff
Pad the last audio frame with silence.
authorDan Dennedy <dan@dennedy.org>
Sat, 7 May 2011 04:42:33 +0000 (21:42 -0700)
committerDan Dennedy <dan@dennedy.org>
Sat, 7 May 2011 04:42:33 +0000 (21:42 -0700)
Instead of returning fewer samples than requested.

src/modules/avformat/producer_avformat.c

index 970684f2585f75732eb035f824e4ff08229d2a4e..4d7281881c1cfa16c4ca73d7f2128208a039a920 100644 (file)
@@ -2207,11 +2207,15 @@ static int producer_get_audio( mlt_frame frame, void **buffer, mlt_audio_format
                        if ( self->audio_used[ index ] > 0 )
                        {
                                uint8_t *src = self->audio_buffer[ index ];
-                               *samples = self->audio_used[ index ] < *samples ? self->audio_used[ index ] : *samples;
-                               size = *samples * *channels * sizeof_sample;
-                               memcpy( *buffer, src, size );
-                               self->audio_used[ index ] -= *samples;
-                               memmove( src, src + size, self->audio_used[ index ] * *channels * sizeof_sample );
+                               // copy samples from audio_buffer
+                               size = self->audio_used[ index ] < *samples ? self->audio_used[ index ] : *samples;
+                               memcpy( *buffer, src, size * *channels * sizeof_sample );
+                               // supply the remaining requested samples as silence
+                               if ( *samples > self->audio_used[ index ] )
+                                       memset( *buffer + size * *channels * sizeof_sample, 0, ( *samples - self->audio_used[ index ] ) * *channels * sizeof_sample );
+                               // reposition the samples within audio_buffer
+                               self->audio_used[ index ] -= size;
+                               memmove( src, src + size * *channels * sizeof_sample, self->audio_used[ index ] * *channels * sizeof_sample );
                        }
                        else
                        {