X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=bmusb.cpp;h=c03b228c0d5d98fef78c56b256c96490a48ebf45;hb=dfaf0700aefbcede0d058254f1f0a456ad46de03;hp=96ffa58fa21f12e168893fbbb487f2d63f8b412d;hpb=4e782709a86e19676ea83d3d773e0ad8f70cc5e3;p=bmusb diff --git a/bmusb.cpp b/bmusb.cpp index 96ffa58..c03b228 100644 --- a/bmusb.cpp +++ b/bmusb.cpp @@ -45,6 +45,9 @@ using namespace std::placeholders; FILE *audiofp; +thread usb_thread; +atomic should_quit; + FrameAllocator::~FrameAllocator() {} #define NUM_QUEUED_FRAMES 8 @@ -574,7 +577,7 @@ void BMUSBCapture::usb_thread_func() } } -void BMUSBCapture::start_bm_capture() +void BMUSBCapture::configure_card() { if (video_frame_allocator == nullptr) { set_video_frame_allocator(new MallocFrameAllocator(FRAME_SIZE)); // FIXME: leak. @@ -586,7 +589,6 @@ void BMUSBCapture::start_bm_capture() int rc; struct libusb_transfer *xfr; - vector iso_xfrs; rc = libusb_init(nullptr); if (rc < 0) { @@ -594,7 +596,9 @@ void BMUSBCapture::start_bm_capture() exit(1); } - struct libusb_device_handle *devh = libusb_open_device_with_vid_pid(nullptr, 0x1edb, 0xbd3b); + //struct libusb_device_handle *devh = libusb_open_device_with_vid_pid(nullptr, 0x1edb, 0xbd3b); + //struct libusb_device_handle *devh = libusb_open_device_with_vid_pid(nullptr, 0x1edb, 0xbd4f); + struct libusb_device_handle *devh = libusb_open_device_with_vid_pid(nullptr, vid, pid); if (!devh) { fprintf(stderr, "Error finding USB device\n"); exit(1); @@ -852,24 +856,24 @@ void BMUSBCapture::start_bm_capture() iso_xfrs.push_back(xfr); } } +} - { - int i = 0; - for (libusb_transfer *xfr : iso_xfrs) { - rc = libusb_submit_transfer(xfr); - ++i; - if (rc < 0) { - //printf("num_bytes=%d\n", num_bytes); - fprintf(stderr, "Error submitting iso to endpoint 0x%02x, number %d: %s\n", - xfr->endpoint, i, libusb_error_name(rc)); - exit(1); - } +void BMUSBCapture::start_bm_capture() +{ + printf("starting capture\n"); + int i = 0; + for (libusb_transfer *xfr : iso_xfrs) { + printf("submitting transfer...\n"); + int rc = libusb_submit_transfer(xfr); + ++i; + if (rc < 0) { + //printf("num_bytes=%d\n", num_bytes); + fprintf(stderr, "Error submitting iso to endpoint 0x%02x, number %d: %s\n", + xfr->endpoint, i, libusb_error_name(rc)); + exit(1); } } - should_quit = false; - usb_thread = thread(&BMUSBCapture::usb_thread_func, this); - #if 0 libusb_release_interface(devh, 0); @@ -881,7 +885,13 @@ out: #endif } -void BMUSBCapture::stop_bm_capture() +void BMUSBCapture::start_bm_thread() +{ + should_quit = false; + usb_thread = thread(&BMUSBCapture::usb_thread_func); +} + +void BMUSBCapture::stop_bm_thread() { should_quit = true; usb_thread.join();