]> git.sesse.net Git - mlt/blobdiff - src/modules/avformat/consumer_avformat.c
Fix muxing vorbis into webm/mkv with libavcodec < 55.
[mlt] / src / modules / avformat / consumer_avformat.c
index d9215d23ac1a0e91e136de80bc8f5fccf937bfc4..33b3a93f983e05597ae0830be5ae0503cfc41924 100644 (file)
@@ -1628,9 +1628,11 @@ static void *consumer_thread( void *arg )
 #endif
 #if LIBAVCODEC_VERSION_MAJOR >= 54
                                                        audio_avframe->nb_samples = FFMAX( samples, audio_input_nb_samples );
+#if LIBAVCODEC_VERSION_MAJOR >= 55
                                                        if ( audio_codec_id == AV_CODEC_ID_VORBIS )
                                                                audio_avframe->pts = synth_audio_pts;
                                                        synth_audio_pts += audio_avframe->nb_samples;
+#endif
                                                        avcodec_fill_audio_frame( audio_avframe, codec->channels, codec->sample_fmt,
                                                                (const uint8_t*) p, AUDIO_ENCODE_BUFFER_SIZE, 0 );
                                                        int got_packet = 0;
@@ -1718,9 +1720,11 @@ static void *consumer_thread( void *arg )
                                                        }
 #if LIBAVCODEC_VERSION_MAJOR >= 54
                                                        audio_avframe->nb_samples = FFMAX( samples, audio_input_nb_samples );
+#if LIBAVCODEC_VERSION_MAJOR >= 55
                                                        if ( audio_codec_id == AV_CODEC_ID_VORBIS )
                                                                audio_avframe->pts = synth_audio_pts;
                                                        synth_audio_pts += audio_avframe->nb_samples;
+#endif
                                                        avcodec_fill_audio_frame( audio_avframe, codec->channels, codec->sample_fmt,
                                                                (const uint8_t*) audio_buf_2, AUDIO_ENCODE_BUFFER_SIZE, 0 );
                                                        int got_packet = 0;
@@ -2029,9 +2033,11 @@ static void *consumer_thread( void *arg )
 #if LIBAVCODEC_VERSION_MAJOR >= 54
                                pkt.size = audio_outbuf_size;
                                audio_avframe->nb_samples = FFMAX( samples / channels, audio_input_nb_samples );
+#if LIBAVCODEC_VERSION_MAJOR >= 55
                                if ( audio_codec_id == AV_CODEC_ID_VORBIS )
                                        audio_avframe->pts = synth_audio_pts;
                                synth_audio_pts += audio_avframe->nb_samples;
+#endif
                                avcodec_fill_audio_frame( audio_avframe, c->channels, c->sample_fmt,
                                        (const uint8_t*) p, AUDIO_ENCODE_BUFFER_SIZE, 0 );
                                int got_packet = 0;
@@ -2213,6 +2219,18 @@ on_fatal_error:
                free( full );
                free( cwd );
                remove( "x264_2pass.log.temp" );
+
+               // Recent versions of libavcodec/x264 support passlogfile and need cleanup if specified.
+               if ( !mlt_properties_get( properties, "_logfilename" ) &&
+                     mlt_properties_get( properties, "passlogfile" ) )
+               {
+                       file = mlt_properties_get( properties, "passlogfile" );
+                       remove( file );
+                       full = malloc( strlen( file ) + strlen( ".mbtree" ) + 1 );
+                       sprintf( full, "%s.mbtree", file );
+                       remove( full );
+                       free( full );
+               }
        }
 
        while ( ( frame = mlt_deque_pop_back( queue ) ) )