]> git.sesse.net Git - mlt/commitdiff
Fix force_fps by scaling the stream time_base.
authorDan Dennedy <dan@dennedy.org>
Wed, 12 Dec 2012 05:48:37 +0000 (21:48 -0800)
committerDan Dennedy <dan@dennedy.org>
Wed, 12 Dec 2012 05:48:37 +0000 (21:48 -0800)
src/modules/avformat/producer_avformat.c

index 66e74b3aae6762c92ac1dc7585a6e6fa9e58cc11..6f79fa9ec1d4abd79f10821ec4558097a487ecbc 100644 (file)
@@ -1934,14 +1934,6 @@ static int video_codec_init( producer_avformat self, int index, mlt_properties p
                double source_fps = (double) self->video_codec->time_base.den /
                                                                   ( self->video_codec->time_base.num == 0 ? 1 : self->video_codec->time_base.num );
                
-               if ( mlt_properties_get( properties, "force_fps" ) )
-               {
-                       source_fps = mlt_properties_get_double( properties, "force_fps" );
-                       stream->time_base = av_d2q( source_fps, 1024 );
-                       mlt_properties_set_int( properties, "meta.media.frame_rate_num", stream->time_base.num );
-                       mlt_properties_set_int( properties, "meta.media.frame_rate_den", stream->time_base.den );
-               }
-               else
                {
                        // If the muxer reports a frame rate different than the codec
 #if LIBAVFORMAT_VERSION_INT >= ((52<<16)+(42<<8)+0)
@@ -1981,6 +1973,15 @@ static int video_codec_init( producer_avformat self, int index, mlt_properties p
                                mlt_properties_set_int( properties, "meta.media.frame_rate_den", frame_rate.den );
                        }
                }
+               if ( mlt_properties_get( properties, "force_fps" ) )
+               {
+                       double source_fps = mlt_properties_get_double( properties, "force_fps" );
+                       AVRational fps = av_d2q( source_fps, 1024 );
+                       stream->time_base.num *= mlt_properties_get_int( properties, "meta.media.frame_rate_num" ) * fps.den;
+                       stream->time_base.den *= mlt_properties_get_int( properties, "meta.media.frame_rate_den" ) * fps.num;
+                       mlt_properties_set_int( properties, "meta.media.frame_rate_num", fps.num );
+                       mlt_properties_set_int( properties, "meta.media.frame_rate_den", fps.den );
+               }
 
                // Set the YUV colorspace from override or detect
                self->colorspace = mlt_properties_get_int( properties, "force_colorspace" );