tolga9009 / elgato-gchd

DISCONTINUED. Reverse engineering the Elgato Game Capture HD to make it work under Linux.
Other
280 stars 36 forks source link

Roxio Game Capture HD Pro Support? #48

Closed rsaxvc closed 10 months ago

rsaxvc commented 4 years ago

I just too apart a Roxio Game Capture HD Pro to find the same MB86H58A chip that the Elgato uses( https://rsaxvc.net/blog/2019/11/20/Taking_Apart_the_Roxio_Game_Capture_HD_Pro.html ). Is anyone interested in working on supporting this too? Is the project interested in accepting patches if we can get anything to work?

Strangely, a Windows 10 VM crashes when passing the HD Pro through VirtualBox USB passthrough, so I'm limited in how I can capture packets.

tolga9009 commented 4 years ago

Hi,

interesting find! I've examined the photos you've posted and it looks like the Roxio and Elgato GCHD are quite different, other than the Fujitsu MB86H58A. It looks like the Roxio can passthrough analog and HDMI, whereas the Elgato can't passthrough analog. It converts analog to HDMI and outputs via HDMI. Hence we have difficulties in order to support / capture some output formats.

We also have very specific code in order to drive the other internal components, which I think are completely incompatible with the Roxio. If I had to take a wild guess, I'd say the Elgato and Roxio share maybe 10% code base (again, very wild, uneducated speculation of mine).

At the current stage, I don't accept any patches, as we have internally discussed to change the license of the project, as there were legal issues with Elgato in the past. They also made it very clear, they had no intention to support a project published under the very permissive MIT license.

That beeing said: if large parts of the code are shared, it makes sense to integrate Roxio into this project aswell. But if supporting the Roxio requires 90% rewrite / branching, I think it's easier to keep both projects in seperate repos.

Strangely, a Windows 10 VM crashes when passing the HD Pro through VirtualBox USB passthrough, so I'm limited in how I can capture packets.

I advise you to check out Scott's usbparse project under https://github.com/seveirein/usbparse. He has developed this tool in order to capture USB packets under a native Windows OS and convert it into functions, which are compatible with this project's internals. Pretty sure it will help you jumpstart into this matter. You might need to modify some bits.

Also please note: what made reverse engineering the Elgato so difficult: the communication between the host and device were "scrambled". Not really encrypted, but simply scrambled. This lead to the multi-thousand lines of code, whereas it could be easily solved with some simple if-else checks and for-loops.

Before you write actual code, I advise you to figure out, if the communication between your Roxio and your PC is scrambled or not. Depending on the laws of your country, it might be legal / easier to just disassemble the code.

Good luck!

Cheers, Tolga

rsaxvc commented 4 years ago

I started hacking around with gchd, and was able to add the Roxio USB devices in. I get at least as far as reading the hardware version out (V1100090), so we can at least communicate with the encoder. Next I was able to load the Roxio firmware too.

The Roxio Windows driver seems to be implemented as an audio device, which seems to be not easily loggable with USB capture on Windows.

Luckily, there are a bunch of logging strings in the Roxio Windows Kernel Driver, so that should provide some insight into how to send scmd() for Roxio.

Sadly, as you suspected, it seems quite different from the Elgato protocol.