#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
, 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