From: Helge Norberg Date: Mon, 23 Nov 2015 19:19:16 +0000 (+0100) Subject: Decode audio and video in parallel just like in 2.0 X-Git-Tag: 2.1.0_Beta1~173 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=52bfd95490c08f702ce739a5d503ba35b93b3e27;p=casparcg Decode audio and video in parallel just like in 2.0 --- diff --git a/modules/ffmpeg/producer/ffmpeg_producer.cpp b/modules/ffmpeg/producer/ffmpeg_producer.cpp index 7370a5b49..a6b41e07a 100644 --- a/modules/ffmpeg/producer/ffmpeg_producer.cpp +++ b/modules/ffmpeg/producer/ffmpeg_producer.cpp @@ -485,10 +485,25 @@ public: { for(int n = 0; n < 32 && muxer_->empty(); ++n) { - if(!muxer_->video_ready()) - muxer_->push_video(video_decoder_ ? (*video_decoder_)() : create_frame()); - if(!muxer_->audio_ready()) - muxer_->push_audio(audio_decoder_ ? (*audio_decoder_)() : create_frame()); + std::shared_ptr video; + std::shared_ptr audio; + bool needs_video = !muxer_->video_ready(); + bool needs_audio = !muxer_->audio_ready(); + + tbb::parallel_invoke( + [&] + { + if (needs_video) + video = video_decoder_ ? (*video_decoder_)() : create_frame(); + }, + [&] + { + if (needs_audio) + audio = audio_decoder_ ? (*audio_decoder_)() : create_frame(); + }); + + muxer_->push_video(video); + muxer_->push_audio(audio); } graph_->set_text(print());