-// Intensity Shuttle USB3 capture driver, v0.5.3
+// Intensity Shuttle USB3 capture driver, v0.5.4
// Can download 8-bit and 10-bit UYVY/v210 frames from HDMI, quite stable
// (can do captures for hours at a time with no drops), except during startup
// 576p60/720p60/1080i60 works, 1080p60 does not work (firmware limitation)
#include <libusb.h>
#include <unistd.h>
#include <netinet/in.h>
+#include <pthread.h>
#include <sched.h>
#include <stdint.h>
#include <stdio.h>
// It's a strange thing, but what can you do.
decoded_video_format->width = 720;
decoded_video_format->height = 525;
+ decoded_video_format->stride = 720 * 2;
decoded_video_format->extra_lines_top = 0;
decoded_video_format->extra_lines_bottom = 0;
decoded_video_format->frame_rate_nom = 3013;
video_format);
decoded_video_format->width = 0;
decoded_video_format->height = 0;
+ decoded_video_format->stride = 0;
decoded_video_format->extra_lines_top = 0;
decoded_video_format->extra_lines_bottom = 0;
decoded_video_format->frame_rate_nom = 60;
if (video_format == 0xe901 || video_format == 0xe9c1 || video_format == 0xe801) {
decoded_video_format->width = 720;
decoded_video_format->height = 480;
+ decoded_video_format->stride = 720 * 2;
decoded_video_format->extra_lines_top = 17;
decoded_video_format->extra_lines_bottom = 28;
decoded_video_format->frame_rate_nom = 30000;
if (video_format == 0xe909 || video_format == 0xe9c9 || video_format == 0xe809 || video_format == 0xebe9 || video_format == 0xebe1) {
decoded_video_format->width = 720;
decoded_video_format->height = 576;
+ decoded_video_format->stride = 720 * 2;
decoded_video_format->extra_lines_top = 22;
decoded_video_format->extra_lines_bottom = 27;
decoded_video_format->frame_rate_nom = 25;
if (normalized_video_format == entry.normalized_video_format) {
decoded_video_format->width = entry.width;
decoded_video_format->height = entry.height;
+ decoded_video_format->stride = entry.width * 2;
decoded_video_format->second_field_start = entry.second_field_start;
decoded_video_format->extra_lines_top = entry.extra_lines_top;
decoded_video_format->extra_lines_bottom = entry.extra_lines_bottom;
printf("Unknown video format 0x%04x (normalized 0x%04x). Assuming 720p60.\n", video_format, normalized_video_format);
decoded_video_format->width = 1280;
decoded_video_format->height = 720;
+ decoded_video_format->stride = 1280 * 2;
decoded_video_format->frame_rate_nom = 60;
decoded_video_format->frame_rate_den = 1;
return false;
void BMUSBCapture::dequeue_thread_func()
{
+ char thread_name[16];
+ snprintf(thread_name, sizeof(thread_name), "bmusb_dequeue_%d", card_index);
+ pthread_setname_np(pthread_self(), thread_name);
+
if (has_dequeue_callbacks) {
dequeue_init_callback();
}
if (sched_setscheduler(0, SCHED_RR, ¶m) == -1) {
printf("couldn't set realtime priority for USB thread: %s\n", strerror(errno));
}
+ pthread_setname_np(pthread_self(), "bmusb_usb_drv");
while (!should_quit) {
timeval sec { 1, 0 };
int rc = libusb_handle_events_timeout(nullptr, &sec);