]> git.sesse.net Git - nageru/blobdiff - mixer.h
Delete streams when they are closed (prevents memory leak on disconnecting clients).
[nageru] / mixer.h
diff --git a/mixer.h b/mixer.h
index 00b10f8c5a056ee77ed5c7e13000f83ec32414e8..061b38243c1adca511de97f119778da3e32c85f1 100644 (file)
--- a/mixer.h
+++ b/mixer.h
@@ -241,6 +241,23 @@ public:
                return cards[card_index].capture->get_description();
        }
 
+       std::map<uint32_t, VideoMode> get_available_video_modes(unsigned card_index) const {
+               assert(card_index < num_cards);
+               return cards[card_index].capture->get_available_video_modes();
+       }
+
+       uint32_t get_current_video_mode(unsigned card_index) const {
+               assert(card_index < num_cards);
+               return cards[card_index].capture->get_current_video_mode();
+       }
+
+       void set_video_mode(unsigned card_index, uint32_t mode) {
+               assert(card_index < num_cards);
+               cards[card_index].capture->set_video_mode(mode);
+       }
+
+       void start_mode_scanning(unsigned card_index);
+
 private:
        void configure_card(unsigned card_index, const QSurfaceFormat &format, CaptureInterface *capture);
        void bm_frame(unsigned card_index, uint16_t timecode,
@@ -367,6 +384,12 @@ private:
        std::mutex audio_mutex;
        std::condition_variable audio_task_queue_changed;
        std::queue<AudioTask> audio_task_queue;  // Under audio_mutex.
+
+       // For mode scanning.
+       bool is_mode_scanning[MAX_CARDS]{ false };
+       std::vector<uint32_t> mode_scanlist[MAX_CARDS];
+       unsigned mode_scanlist_index[MAX_CARDS]{ 0 };
+       timespec last_mode_scan_change[MAX_CARDS];
 };
 
 extern Mixer *global_mixer;