1 #ifndef _FAKE_CAPTURE_H
2 #define _FAKE_CAPTURE_H 1
8 #include "bmusb/bmusb.h"
10 class FakeCapture : public CaptureInterface
13 FakeCapture(int card_index);
17 void set_video_frame_allocator(FrameAllocator *allocator) override
19 video_frame_allocator = allocator;
20 if (owned_video_frame_allocator.get() != allocator) {
21 owned_video_frame_allocator.reset();
25 FrameAllocator *get_video_frame_allocator() override
27 return video_frame_allocator;
30 // Does not take ownership.
31 void set_audio_frame_allocator(FrameAllocator *allocator) override
33 audio_frame_allocator = allocator;
34 if (owned_audio_frame_allocator.get() != allocator) {
35 owned_audio_frame_allocator.reset();
39 FrameAllocator *get_audio_frame_allocator() override
41 return audio_frame_allocator;
44 void set_frame_callback(frame_callback_t callback) override
46 frame_callback = callback;
49 void set_dequeue_thread_callbacks(std::function<void()> init, std::function<void()> cleanup) override
51 dequeue_init_callback = init;
52 dequeue_cleanup_callback = cleanup;
53 has_dequeue_callbacks = true;
56 std::string get_description() const override
61 void configure_card() override;
62 void start_bm_capture() override;
63 void stop_dequeue_thread() override;
65 std::map<uint32_t, VideoMode> get_available_video_modes() const override;
66 void set_video_mode(uint32_t video_mode_id) override;
67 uint32_t get_current_video_mode() const override { return 0; }
69 std::map<uint32_t, std::string> get_available_video_inputs() const override;
70 void set_video_input(uint32_t video_input_id) override;
71 uint32_t get_current_video_input() const override { return 0; }
73 std::map<uint32_t, std::string> get_available_audio_inputs() const override;
74 void set_audio_input(uint32_t audio_input_id) override;
75 uint32_t get_current_audio_input() const override { return 0; }
78 void producer_thread_func();
82 bool has_dequeue_callbacks = false;
83 std::function<void()> dequeue_init_callback = nullptr;
84 std::function<void()> dequeue_cleanup_callback = nullptr;
86 FrameAllocator *video_frame_allocator = nullptr;
87 FrameAllocator *audio_frame_allocator = nullptr;
88 std::unique_ptr<FrameAllocator> owned_video_frame_allocator;
89 std::unique_ptr<FrameAllocator> owned_audio_frame_allocator;
90 frame_callback_t frame_callback = nullptr;
92 std::string description;
94 std::atomic<bool> producer_thread_should_quit{false};
95 std::thread producer_thread;
98 #endif // !defined(_FAKE_CAPTURE_H)