+class CaptureInterface {
+ public:
+ virtual ~CaptureInterface() {}
+
+ virtual std::map<uint32_t, VideoMode> get_available_video_modes() const = 0;
+ virtual uint32_t get_current_video_mode() const = 0;
+ virtual void set_video_mode(uint32_t video_mode_id) = 0;
+
+ virtual std::map<uint32_t, std::string> get_available_video_inputs() const = 0;
+ virtual void set_video_input(uint32_t video_input_id) = 0;
+ virtual uint32_t get_current_video_input() const = 0;
+
+ virtual std::map<uint32_t, std::string> get_available_audio_inputs() const = 0;
+ virtual void set_audio_input(uint32_t audio_input_id) = 0;
+ virtual uint32_t get_current_audio_input() const = 0;
+
+ // Does not take ownership.
+ virtual void set_video_frame_allocator(FrameAllocator *allocator) = 0;
+
+ virtual FrameAllocator *get_video_frame_allocator() = 0;
+
+ // Does not take ownership.
+ virtual void set_audio_frame_allocator(FrameAllocator *allocator) = 0;
+
+ virtual FrameAllocator *get_audio_frame_allocator() = 0;
+
+ virtual void set_frame_callback(frame_callback_t callback) = 0;
+
+ // Needs to be run before configure_card().
+ virtual void set_dequeue_thread_callbacks(std::function<void()> init, std::function<void()> cleanup) = 0;
+
+ // Only valid after configure_card().
+ virtual std::string get_description() const = 0;
+
+ virtual void configure_card() = 0;
+
+ virtual void start_bm_capture() = 0;
+
+ virtual void stop_dequeue_thread() = 0;
+};
+