#include <memory>
#include <mutex>
#include <stack>
+#include <string>
#include <thread>
using namespace std;
libusb_device *device;
};
-libusb_device_handle *open_card(int card_index)
+libusb_device_handle *open_card(int card_index, string *description)
{
libusb_device **devices;
ssize_t num_devices = libusb_get_device_list(nullptr, &devices);
});
for (size_t i = 0; i < found_cards.size(); ++i) {
- fprintf(stderr, "Card %d: Bus %03u Device %03u ", int(i), found_cards[i].bus, found_cards[i].port);
+ const char *product_name = nullptr;
if (found_cards[i].product == 0xbd3b) {
- fprintf(stderr, "Intensity Shuttle\n");
+ product_name = "Intensity Shuttle";
} else if (found_cards[i].product == 0xbd4f) {
- fprintf(stderr, "UltraStudio SDI\n");
+ product_name = "UltraStudio SDI";
} else {
assert(false);
}
+
+ char buf[256];
+ snprintf(buf, sizeof(buf), "Card %d: Bus %03u Device %03u %s",
+ int(i), found_cards[i].bus, found_cards[i].port, product_name);
+ if (i == size_t(card_index)) {
+ *description = buf;
+ }
+ fprintf(stderr, "%s\n", buf);
}
if (size_t(card_index) >= found_cards.size()) {
exit(1);
}
- libusb_device_handle *devh = open_card(card_index);
+ libusb_device_handle *devh = open_card(card_index, &description);
if (!devh) {
fprintf(stderr, "Error finding USB device\n");
exit(1);
#include <deque>
#include <functional>
#include <mutex>
+#include <string>
#include <thread>
#include <vector>
has_dequeue_callbacks = true;
}
+ // Only valid after configure_card().
+ std::string get_description() const {
+ return description;
+ }
+
void configure_card();
void start_bm_capture();
void stop_dequeue_thread();
static void usb_thread_func();
static void cb_xfr(struct libusb_transfer *xfr);
+ std::string description;
+
FrameAllocator::Frame current_video_frame;
FrameAllocator::Frame current_audio_frame;