X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=mixer.cpp;h=e66a3881975d1ef1ffd2119c0c23ddf3e6e7a375;hb=d7d1594937aac9e11fc35e84e5a3873c2207136f;hp=5cee30005faee349e8023396b9cd5f98d5072316;hpb=4d4386716f258413132b8696315cb4efbf2c8b45;p=nageru diff --git a/mixer.cpp b/mixer.cpp index 5cee300..e66a388 100644 --- a/mixer.cpp +++ b/mixer.cpp @@ -499,6 +499,7 @@ Mixer::Mixer(const QSurfaceFormat &format, unsigned num_cards) Mixer::~Mixer() { + httpd.stop(); BMUSBCapture::stop_bm_thread(); for (unsigned card_index = 0; card_index < num_cards + num_video_inputs + num_html_inputs; ++card_index) { @@ -1066,7 +1067,11 @@ void Mixer::thread_func() int64_t frame_duration = output_frame_info.frame_duration; render_one_frame(frame_duration); - ++frame_num; + { + lock_guard lock(frame_num_mutex); + ++frame_num; + } + frame_num_updated.notify_all(); pts_int += frame_duration; basic_stats.update(frame_num, stats_dropped_frames); @@ -1598,6 +1603,14 @@ void Mixer::set_ffmpeg_filename(unsigned card_index, const string &filename) { ((FFmpegCapture *)(cards[card_index].capture.get()))->change_filename(filename); } +void Mixer::wait_for_next_frame() +{ + unique_lock lock(frame_num_mutex); + unsigned old_frame_num = frame_num; + frame_num_updated.wait_for(lock, seconds(1), // Timeout is just in case. + [old_frame_num, this]{ return this->frame_num > old_frame_num; }); +} + Mixer::OutputChannel::~OutputChannel() { if (has_current_frame) {