1. It runs inconsistently between 30 and 60 fps. This is due to the fact that it's taking between 1 to 2 reads to get a full frame of data over usb.
2. There are occasional misaligned/miscolored frames. These are very infrequent but do still happen and really shouldn't. These seem to only happen when it takes 3 (or presumably more) reads.
3. There's no audio support.
I believe that all of these issues could likely be solved if I had more information about how the capture card is controlled. I listened in on the data packets being transferred while using the official software on Windows and noticed some things about it:
1. When the software is actively capturing, it's consistently receiving 520615 bytes every read. In my software, using the default pipeline state, I can only read at most 518400 bytes (a full video frame) and it takes 1 to 2 but sometimes 3 reads to attain. Based on my observations, the additional 2215 bytes that I'm unable to get likely contains the audio data. Figuring out how to get the software/capture card in a state where I can get the full 520615 bytes every transfer is the key to solving the above 3 issues.
2. Whenever the software starts actively capturing, data is first written over usb to the capture card. This is the part where I'm pretty much at a loss because even though I can see what bytes are being transferred and when, I can't actually determine what they mean. The most noteworthy of these is that there are several 20 byte transfers to control out endpoint 0x01 that seem to refer to data in endpoint 0x82 which is where the data is captured over. I imagine what this is doing is giving the capture card instructions on how to start transmitting data, but I'm not sure how much of this is being done in or by the FTDI driver and how. There's also data being sent to data in endpoint 0x02 which I believe also plays a role in this somehow since I think this endpoint could have been omitted in the configuration if it wasn't actually needed for something (which means it's probably needed for something :p).
I haven't actually tried to submit any data over either of the out endpoints, but I might start playing around with this just to see if I can get any different behavior out of the data in endpoint. Best case scenario, I somehow manage to come up with something on my own, but in reality, I'll likely need some guidance to figure this one out (this is really the only likely way that an ideal implementation will ever be achieved to be honest).
For the meantime, I'm at least (somewhat)