X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=bmusb.h;h=6fdddedeb6e1d5781d8a9128cf67b5525fd5ef33;hb=cd4dd0ed2eaf14fc50f0601295c821a41b603490;hp=9eb3ff4f716a4ede88c997f65131c6fe69232179;hpb=89136643760d7da0c94c4d4fb1ec778f9cefb97f;p=bmusb diff --git a/bmusb.h b/bmusb.h index 9eb3ff4..6fddded 100644 --- a/bmusb.h +++ b/bmusb.h @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -104,6 +105,11 @@ class BMUSBCapture { 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(); @@ -127,6 +133,8 @@ class BMUSBCapture { 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; @@ -152,10 +160,16 @@ class BMUSBCapture { int card_index; std::vector iso_xfrs; + int assumed_frame_width = 1280; }; // Get details for the given video format; returns false if detection was incomplete. // Note: Frame rate is _frame_ rate, not field rate. So 1080i60 gets 30/1, _not_ 60/1. -bool decode_video_format(uint16_t video_format, int *width, int *height, int *frame_rate_nom, int *frame_rate_den, bool *interlaced); +// "second_field_start" is only valid for interlaced modes; it signifies +// how many lines from the very top of the frame there are before the second field +// starts (so it will always be >= height/2 + extra_lines_top). +bool decode_video_format(uint16_t video_format, unsigned *width, unsigned *height, unsigned *second_field_start, + unsigned *extra_lines_top, unsigned *extra_lines_bottom, + unsigned *frame_rate_nom, unsigned *frame_rate_den, bool *interlaced); #endif