X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=nageru%2Fmixer.h;h=5549a245064d613a0632cdd3e8b4786a2fcde8ff;hb=HEAD;hp=6e9da90c3c0e1a27bc830a18acd1407cf6cfc1f0;hpb=c4497a099d6a01ff2eedb483c2589ef70e7c657c;p=nageru diff --git a/nageru/mixer.h b/nageru/mixer.h index 6e9da90..c42d8f1 100644 --- a/nageru/mixer.h +++ b/nageru/mixer.h @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -21,14 +22,14 @@ #include #include #include +#include #include #include -#include #include "audio_mixer.h" +#include "card_type.h" #include "bmusb/bmusb.h" -#include "defs.h" #include "ffmpeg_capture.h" #include "shared/httpd.h" #include "input_state.h" @@ -37,7 +38,9 @@ #include "queue_length_policy.h" #include "ref_counted_frame.h" #include "shared/ref_counted_gl_sync.h" +#include "srt_metrics.h" #include "theme.h" +#include "shared/shared_defs.h" #include "shared/timebase.h" #include "video_encoder.h" #include "ycbcr_interpretation.h" @@ -326,6 +329,10 @@ public: desired_output_card_index = card_index; } + bool get_output_card_is_master() const { + return output_card_is_master; + } + std::map get_available_output_video_modes() const; uint32_t get_output_video_mode() const { @@ -396,9 +403,10 @@ private: std::unique_ptr resource_pool; std::unique_ptr theme; std::atomic audio_source_channel{0}; - std::atomic master_clock_channel{0}; // Gets overridden by if set. + std::atomic master_clock_channel{0}; // Gets overridden by if output_card_is_master == true. int output_card_index = -1; // -1 for none. uint32_t output_video_mode = -1; + bool output_card_is_master = false; // Only relevant if output_card_index != -1. // The mechanics of changing the output card and modes are so intricately connected // with the work the mixer thread is doing. Thus, we don't change it directly, @@ -470,9 +478,6 @@ private: std::unique_ptr frame_allocator; - // Stuff for the OpenGL context (for texture uploading). - QSurface *surface = nullptr; - struct NewFrame { RefCountedFrame frame; int64_t length; // In TIMEBASE units. @@ -516,52 +521,9 @@ private: std::atomic metric_input_frame_rate_den{-1}; std::atomic metric_input_sample_rate_hz{-1}; - // SRT metrics. - std::atomic metric_srt_uptime_seconds{0.0 / 0.0}; - std::atomic metric_srt_send_duration_seconds{0.0 / 0.0}; - std::atomic metric_srt_sent_bytes{-1}; - std::atomic metric_srt_received_bytes{-1}; - std::atomic metric_srt_sent_packets_normal{-1}; - std::atomic metric_srt_received_packets_normal{-1}; - std::atomic metric_srt_sent_packets_lost{-1}; - std::atomic metric_srt_received_packets_lost{-1}; - std::atomic metric_srt_sent_packets_retransmitted{-1}; - std::atomic metric_srt_sent_bytes_retransmitted{-1}; - std::atomic metric_srt_sent_packets_ack{-1}; - std::atomic metric_srt_received_packets_ack{-1}; - std::atomic metric_srt_sent_packets_nak{-1}; - std::atomic metric_srt_received_packets_nak{-1}; - std::atomic metric_srt_sent_packets_dropped{-1}; - std::atomic metric_srt_received_packets_dropped{-1}; - std::atomic metric_srt_sent_bytes_dropped{-1}; - std::atomic metric_srt_received_bytes_dropped{-1}; - std::atomic metric_srt_received_packets_undecryptable{-1}; - std::atomic metric_srt_received_bytes_undecryptable{-1}; - - std::atomic metric_srt_filter_received_extra_packets{-1}; - std::atomic metric_srt_filter_received_rebuilt_packets{-1}; - std::atomic metric_srt_filter_received_lost_packets{-1}; - - std::atomic metric_srt_packet_sending_period_seconds{0.0 / 0.0}; - std::atomic metric_srt_flow_window_packets{-1}; - std::atomic metric_srt_congestion_window_packets{-1}; - std::atomic metric_srt_flight_size_packets{-1}; - std::atomic metric_srt_rtt_seconds{0.0 / 0.0}; - std::atomic metric_srt_estimated_bandwidth_bits_per_second{0.0 / 0.0}; - std::atomic metric_srt_bandwidth_ceiling_bits_per_second{0.0 / 0.0}; - std::atomic metric_srt_send_buffer_available_bytes{-1}; - std::atomic metric_srt_receive_buffer_available_bytes{-1}; - std::atomic metric_srt_mss_bytes{-1}; - std::atomic metric_srt_sender_unacked_packets{-1}; - std::atomic metric_srt_sender_unacked_bytes{-1}; - std::atomic metric_srt_sender_unacked_timespan_seconds{0.0 / 0.0}; - std::atomic metric_srt_sender_delivery_delay_seconds{0.0 / 0.0}; - std::atomic metric_srt_receiver_unacked_packets{-1}; - std::atomic metric_srt_receiver_unacked_bytes{-1}; - std::atomic metric_srt_receiver_unacked_timespan_seconds{0.0 / 0.0}; - std::atomic metric_srt_receiver_delivery_delay_seconds{0.0 / 0.0}; - std::atomic metric_srt_filter_sent_packets{-1}; - +#ifdef HAVE_SRT + SRTMetrics srt_metrics; +#endif }; JitterHistory output_jitter_history; CaptureCard cards[MAX_VIDEO_CARDS]; // Protected by . @@ -578,10 +540,6 @@ private: }; OutputFrameInfo get_one_frame_from_each_card(unsigned master_card_index, bool master_card_is_output, CaptureCard::NewFrame new_frames[MAX_VIDEO_CARDS], bool has_new_frame[MAX_VIDEO_CARDS], std::vector raw_audio[MAX_VIDEO_CARDS]); -#ifdef HAVE_SRT - void update_srt_stats(int srt_sock, Mixer::CaptureCard *card); -#endif - std::string description_for_card(unsigned card_index); static bool is_srt_card(const CaptureCard *card);