X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=bmusb.h;fp=bmusb.h;h=9ee6617a6e7874164a8a53603a47d974acf01694;hb=a5e46ba4b478f7fae63f3032e574208c0e69cc11;hp=9ba27bcc111234040d807bbcd0fafbb3f3cd9275;hpb=5b54cc5acb28f5d2071c99ef7a715044aa30f10c;p=bmusb diff --git a/bmusb.h b/bmusb.h index 9ba27bc..9ee6617 100644 --- a/bmusb.h +++ b/bmusb.h @@ -13,6 +13,7 @@ #include #include +struct libusb_device_handle; struct libusb_transfer; // An interface for frame allocators; if you do not specify one @@ -117,6 +118,14 @@ class CaptureInterface { virtual uint32_t get_current_video_mode() const = 0; virtual void set_video_mode(uint32_t video_mode_id) = 0; + virtual std::map 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 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; @@ -156,6 +165,14 @@ class BMUSBCapture : public CaptureInterface { uint32_t get_current_video_mode() const override; void set_video_mode(uint32_t video_mode_id) override; + virtual std::map get_available_video_inputs() const override; + virtual void set_video_input(uint32_t video_input_id) override; + virtual uint32_t get_current_video_input() const override { return current_video_input; } + + virtual std::map get_available_audio_inputs() const override; + virtual void set_audio_input(uint32_t audio_input_id) override; + virtual uint32_t get_current_audio_input() const override { return current_audio_input; } + // Does not take ownership. void set_video_frame_allocator(FrameAllocator *allocator) override { @@ -220,6 +237,8 @@ class BMUSBCapture : public CaptureInterface { static void usb_thread_func(); static void cb_xfr(struct libusb_transfer *xfr); + void update_capture_mode(); + std::string description; FrameAllocator::Frame current_video_frame; @@ -248,6 +267,10 @@ class BMUSBCapture : public CaptureInterface { int card_index; std::vector iso_xfrs; int assumed_frame_width = 1280; + + libusb_device_handle *devh = nullptr; + uint32_t current_video_input = 0x00000000; // HDMI/SDI. + uint32_t current_audio_input = 0x00000000; // Embedded. }; // Get details for the given video format; returns false if detection was incomplete.