X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=mixer.cpp;h=a168b66bcdd41fbbf7e575edf761551fa717b33e;hb=aca8e7f15c4fd9d49875ad2bde27f7f467a6869e;hp=73a59d5a3a0745b60e5e327cb866895f30f3ac11;hpb=c6c5e2ca4ea51426e32608f8b8e2cbcd5f1ab74f;p=nageru diff --git a/mixer.cpp b/mixer.cpp index 73a59d5..a168b66 100644 --- a/mixer.cpp +++ b/mixer.cpp @@ -1066,7 +1066,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); @@ -1587,6 +1591,25 @@ map Mixer::get_available_output_video_modes() const return cards[desired_output_card_index].output->get_available_video_modes(); } +string Mixer::get_ffmpeg_filename(unsigned card_index) const +{ + assert(card_index >= num_cards && card_index < num_cards + num_video_inputs); + return ((FFmpegCapture *)(cards[card_index].capture.get()))->get_filename(); +} + +void Mixer::set_ffmpeg_filename(unsigned card_index, const string &filename) { + assert(card_index >= num_cards && card_index < num_cards + num_video_inputs); + ((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) {