]> git.sesse.net Git - nageru/blobdiff - mixer.h
Add the first beginnings of Prometheus metrics.
[nageru] / mixer.h
diff --git a/mixer.h b/mixer.h
index 6828bc66364d27d20d9f0a264816d29d42293882..bb317c87ad503f8941513e7ba12682b0dbaf3f3d 100644 (file)
--- a/mixer.h
+++ b/mixer.h
@@ -23,6 +23,8 @@
 #include <thread>
 #include <vector>
 
+#include <movit/image_format.h>
+
 #include "audio_mixer.h"
 #include "bmusb/bmusb.h"
 #include "defs.h"
@@ -35,6 +37,7 @@
 #include "theme.h"
 #include "timebase.h"
 #include "video_encoder.h"
+#include "ycbcr_interpretation.h"
 
 class ALSAOutput;
 class ChromaSubsampler;
@@ -216,6 +219,9 @@ public:
                return theme->set_signal_mapping(signal, card);
        }
 
+       YCbCrInterpretation get_input_ycbcr_interpretation(unsigned card_index) const;
+       void set_input_ycbcr_interpretation(unsigned card_index, const YCbCrInterpretation &interpretation);
+
        bool get_supports_set_wb(unsigned channel) const
        {
                return theme->get_supports_set_wb(channel);
@@ -409,6 +415,7 @@ private:
        struct CaptureCard {
                std::unique_ptr<bmusb::CaptureInterface> capture;
                bool is_fake_capture;
+               CardType type;
                std::unique_ptr<DeckLinkOutput> output;
 
                // If this card is used for output (ie., output_card_index points to it),
@@ -441,6 +448,7 @@ private:
                int last_timecode = -1;  // Unwrapped.
        };
        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 {
@@ -510,6 +518,11 @@ private:
        std::vector<uint32_t> mode_scanlist[MAX_VIDEO_CARDS];
        unsigned mode_scanlist_index[MAX_VIDEO_CARDS]{ 0 };
        std::chrono::steady_clock::time_point last_mode_scan_change[MAX_VIDEO_CARDS];
+
+       // Metrics.
+       std::atomic<int64_t> metrics_num_frames;
+       std::atomic<int64_t> metrics_dropped_frames;
+       std::atomic<double> metrics_uptime;
 };
 
 extern Mixer *global_mixer;