\r
void remove(safe_ptr<frame_producer>&& producer)\r
{\r
- CASPAR_VERIFY(producer == frame_producer::empty() || producer.unique());\r
+ if(producer != frame_producer::empty() && !producer.unique())\r
+ CASPAR_LOG(debug) << producer->print() << L" was not destroyed on dedicated destruction thread.";\r
executor_.begin_invoke(std::bind(&frame_producer_remover::do_remove, this, std::move(producer)));\r
}\r
};\r
input_.reset(new input(safe_ptr<diagnostics::graph>(graph_), filename_, loop_, std::bind(&ffmpeg_producer::print, this)));\r
video_decoder_.reset(input_->get_video_codec_context().get() ? new video_decoder(input_->get_video_codec_context().get(), frame_factory) : nullptr);\r
audio_decoder_.reset(input_->get_audio_codec_context().get() ? new audio_decoder(input_->get_audio_codec_context().get(), frame_factory->get_video_format_desc().fps) : nullptr);\r
+\r
+ double frame_time = 1.0f/input_->fps();\r
+ double format_frame_time = 1.0/frame_factory->get_video_format_desc().fps;\r
+ if(abs(frame_time - format_frame_time) > 0.0001)\r
+ CASPAR_LOG(warning) << print() << L" Invalid framerate detected. This may cause distorted audio during playback.";\r
+\r
}\r
\r
virtual void set_parent_printer(const printer& parent_printer) \r