]> git.sesse.net Git - bmusb/blobdiff - bmusb.cpp
Add a way to get the current video mode.
[bmusb] / bmusb.cpp
index aa5b93283e66ca4b2ec9453d1775a154438d809d..3d2c9f018488e202dff12e9439ebe8be665fa376 100644 (file)
--- a/bmusb.cpp
+++ b/bmusb.cpp
@@ -188,8 +188,14 @@ void BMUSBCapture::dequeue_thread_func()
                        pending_audio_frames.pop_front();
                        lock.unlock();
                        audio_format.id = audio_frame.format;
+
+                       // Use the video format of the pending frame.
+                       QueuedFrame video_frame = pending_video_frames.front();
+                       VideoFormat video_format;
+                       decode_video_format(video_frame.format, &video_format);
+
                        frame_callback(audio_timecode,
-                                      FrameAllocator::Frame(), 0, VideoFormat(),
+                                      FrameAllocator::Frame(), 0, video_format,
                                       audio_frame.frame, AUDIO_HEADER_SIZE, audio_format);
                } else {
                        QueuedFrame video_frame = pending_video_frames.front();
@@ -1224,3 +1230,22 @@ bool decode_video_format(uint16_t video_format, VideoFormat *decoded_video_forma
        decoded_video_format->frame_rate_den = 1;
        return false;
 }
+
+map<uint32_t, VideoMode> BMUSBCapture::get_available_video_modes() const
+{
+       // The USB3 cards autodetect, and seem to have no provision for forcing modes.
+       VideoMode auto_mode;
+       auto_mode.name = "Autodetect";
+       auto_mode.autodetect = true;
+       return {{ 0, auto_mode }};
+}
+
+uint32_t BMUSBCapture::get_current_video_mode() const
+{
+       return 0;  // Matches get_available_video_modes().
+}
+
+void BMUSBCapture::set_video_mode(uint32_t video_mode_id)
+{
+       assert(video_mode_id == 0);  // Matches get_available_video_modes().
+}