\r
int64_t frame_number_;\r
uint32_t file_frame_number_;\r
+\r
+ uint32_t audio_poll_tries_;\r
\r
public:\r
explicit ffmpeg_producer(const safe_ptr<core::frame_factory>& frame_factory, const std::wstring& filename, FFMPEG_Resource resource_type, const std::wstring& filter, bool loop, uint32_t start, uint32_t length, bool thumbnail_mode, const std::wstring& custom_channel_order, const ffmpeg_producer_params& vid_params)\r
, thumbnail_mode_(thumbnail_mode)\r
, last_frame_(core::basic_frame::empty())\r
, frame_number_(0)\r
+ , audio_poll_tries_(0)\r
{\r
graph_->set_color("frame-time", diagnostics::color(0.1f, 1.0f, 0.1f));\r
graph_->set_color("underflow", diagnostics::color(0.6f, 0.3f, 0.9f)); \r
},\r
[&]\r
{ \r
- if(!muxer_->audio_ready() && audio_decoder_) \r
- audio = audio_decoder_->poll(); \r
+ if(!muxer_->audio_ready() && audio_decoder_)\r
+ {\r
+ audio = audio_decoder_->poll();\r
+ if(audio == nullptr)\r
+ audio_poll_tries_++;\r
+ }\r
});\r
\r
+ if(audio_decoder_ && audio_poll_tries_ > 7)\r
+ {\r
+ CASPAR_LOG(warning) << print() << "Failed to get valid packets from audio stream. Removing audio decoder.";\r
+ audio_decoder_.reset(nullptr);\r
+ }\r
+ \r
muxer_->push(video, hints);\r
muxer_->push(audio);\r
\r