]> git.sesse.net Git - casparcg/commitdiff
2.0. ffmepg_producer: - fix_meta_data: Added fix for invalid double framerate metadata.
authorRonag <Ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sun, 21 Aug 2011 17:59:38 +0000 (17:59 +0000)
committerRonag <Ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sun, 21 Aug 2011 17:59:38 +0000 (17:59 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@1254 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

modules/ffmpeg/producer/util.cpp

index 6d67bfaf200441a3f73e699ba33f95c89ebdb737..1baa868b25c1c6861e260538ba8ae2fedb32d348 100644 (file)
@@ -252,6 +252,21 @@ void fix_meta_data(AVFormatContext& context)
                                video_context.time_base.den = static_cast<int>(video_stream.nb_frames*100000);\r
                        }\r
                }\r
+\r
+               if(audio_index > -1)\r
+               {\r
+                       auto& audio_context = *context.streams[audio_index]->codec;\r
+                       auto& audio_stream  = *context.streams[audio_index];\r
+\r
+                       double duration_sec = audio_stream.duration / static_cast<double>(audio_context.sample_rate);\r
+                       double fps = static_cast<double>(video_context.time_base.den) / static_cast<double>(video_context.time_base.num);\r
+\r
+                       double fps_nb_frames    = static_cast<double>(duration_sec*fps);\r
+                       double stream_nb_frames =  static_cast<double>(video_stream.nb_frames);\r
+                       double diff = std::abs(fps_nb_frames - stream_nb_frames*2.0);\r
+                       if(diff < fps_nb_frames*0.01)\r
+                               video_context.time_base.num *= 2;\r
+               }\r
        }\r
 \r
        double fps = static_cast<double>(video_context.time_base.den) / static_cast<double>(video_context.time_base.num);\r