X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=nageru%2Fmixer.h;h=ff8a197bccdd61c6af9de3598f6239e6645553d5;hb=0478d360a9aa0f816b21b0c6b1df91c1426c35d6;hp=49afa7f1f2f7a0e1ce7254e05e0bef3b2b6f8027;hpb=6cf87ad853439f8565c575fb29dc539a15fdba87;p=nageru diff --git a/nageru/mixer.h b/nageru/mixer.h index 49afa7f..ff8a197 100644 --- a/nageru/mixer.h +++ b/nageru/mixer.h @@ -251,14 +251,14 @@ public: return theme->get_channel_color(channel); } - int get_channel_signal(unsigned channel) const + int map_channel_to_signal(unsigned channel) const { - return theme->get_channel_signal(channel); + return theme->map_channel_to_signal(channel); } - int map_signal(unsigned channel) + int map_signal_to_card(int signal) { - return theme->map_signal(channel); + return theme->map_signal_to_card(signal); } unsigned get_master_clock() const @@ -331,6 +331,12 @@ public: bool card_is_ffmpeg(unsigned card_index) const { assert(card_index < num_cards + num_video_inputs); + if (card_index < num_cards) { + // SRT inputs are more like regular inputs than FFmpeg inputs, + // so show them as such. (This allows the user to right-click + // to select a different input.) + return false; + } return cards[card_index].type == CardType::FFMPEG_INPUT; } @@ -439,7 +445,7 @@ private: FFMPEG_INPUT, CEF_INPUT, }; - void configure_card(unsigned card_index, bmusb::CaptureInterface *capture, CardType card_type, DeckLinkOutput *output); + void configure_card(unsigned card_index, bmusb::CaptureInterface *capture, CardType card_type, DeckLinkOutput *output, bool override_ffmpeg_to_live = false); void set_output_card_internal(int card_index); // Should only be called from the mixer thread. void bm_frame(unsigned card_index, uint16_t timecode, bmusb::FrameAllocator::Frame video_frame, size_t video_offset, bmusb::VideoFormat video_format, @@ -454,6 +460,9 @@ private: void render_one_frame(int64_t duration); void audio_thread_func(); void release_display_frame(DisplayFrame *frame); +#ifdef HAVE_SRT + void start_srt(); +#endif double pts() { return double(pts_int) / TIMEBASE; } void trim_queue(CaptureCard *card, size_t safe_queue_length); std::pair get_channels_json(); @@ -595,6 +604,9 @@ private: // Protected by its own mutex. std::mutex hotplug_mutex; std::vector hotplugged_cards; +#ifdef HAVE_SRT + std::vector hotplugged_srt_cards; +#endif class OutputChannel { public: @@ -627,6 +639,9 @@ private: std::thread mixer_thread; std::thread audio_thread; +#ifdef HAVE_SRT + std::thread srt_thread; +#endif std::atomic should_quit{false}; std::atomic should_cut{false};