]> git.sesse.net Git - casparcg/commitdiff
2.0. ffmpeg_producer: If invalid framerate is detected, try to estimate it from video...
authorRonag <Ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sat, 13 Aug 2011 14:59:37 +0000 (14:59 +0000)
committerRonag <Ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sat, 13 Aug 2011 14:59:37 +0000 (14:59 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@1155 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

modules/ffmpeg/producer/ffmpeg_producer.cpp

index 0b6128b117705c7971a6d1af83a9b208e945fe8e..d0f00dbd8c7449e42ed854e994b07e2e5eee2087 100644 (file)
 #include <tbb/parallel_invoke.h>\r
 \r
 namespace caspar {\r
+\r
+double validate_fps(double fps, int64_t nb_frames, double duration_sec)\r
+{\r
+       if(fps > 20.0 && fps < 80.0)\r
+               return fps;\r
+       \r
+       auto est_fps = nb_frames/duration_sec;\r
+\r
+       CASPAR_LOG(warning) << L"Invalid framerate detected, trying to estimate, fps: " << fps << L" nb_frames: " << nb_frames << L" duration_sec: " << duration_sec << L" => " << est_fps << L" fps.";\r
+\r
+       return est_fps;\r
+}\r
                        \r
 struct ffmpeg_producer : public core::frame_producer\r
 {\r
@@ -80,7 +92,7 @@ public:
                , input_(graph_, filename_, loop, start, length)\r
                , video_decoder_(input_.context(), frame_factory, filter)\r
                , audio_decoder_(input_.context(), frame_factory->get_video_format_desc())\r
-               , muxer_(video_decoder_.fps(), frame_factory)\r
+               , muxer_(validate_fps(video_decoder_.fps(), video_decoder_.nb_frames(), audio_decoder_.duration()), frame_factory)\r
                , late_frames_(0)\r
                , start_(start)\r
                , loop_(loop)\r