+
+ // Metrics.
+ std::atomic<int64_t> metric_input_dropped_frames_jitter{0};
+ std::atomic<int64_t> metric_input_dropped_frames_error{0};
+ std::atomic<int64_t> metric_input_resets{0};
+
+ std::atomic<int64_t> metric_input_has_signal_bool{-1};
+ std::atomic<int64_t> metric_input_is_connected_bool{-1};
+ std::atomic<int64_t> metric_input_interlaced_bool{-1};
+ std::atomic<int64_t> metric_input_width_pixels{-1};
+ std::atomic<int64_t> metric_input_height_pixels{-1};
+ std::atomic<int64_t> metric_input_frame_rate_nom{-1};
+ std::atomic<int64_t> metric_input_frame_rate_den{-1};
+ std::atomic<int64_t> metric_input_sample_rate_hz{-1};
+ };
+ CaptureCard cards[MAX_VIDEO_CARDS]; // Protected by <card_mutex>.
+ YCbCrInterpretation ycbcr_interpretation[MAX_VIDEO_CARDS]; // Protected by <card_mutex>.
+ AudioMixer audio_mixer; // Same as global_audio_mixer (see audio_mixer.h).
+ bool input_card_is_master_clock(unsigned card_index, unsigned master_card_index) const;
+ struct OutputFrameInfo {
+ int dropped_frames; // Since last frame.
+ int num_samples; // Audio samples needed for this output frame.
+ int64_t frame_duration; // In TIMEBASE units.
+ bool is_preroll;
+ std::chrono::steady_clock::time_point frame_timestamp;