tolga9009 / elgato-gchd

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

Beta testing dev branch #27

Open tolga9009 opened 8 years ago

tolga9009 commented 8 years ago

Hi there!

I need everyone to test out latest dev branch on your GCHD1 (0x0044, 0x004e and 0x0051), aswell as on your GCHD2 (0x005d) devices. We've made major progress, thanks to the patch series by Scott Dossey aka @seveirein! Thanks Scott!

There is now support for 0x005d devices, aswell as for auto-detecting input source, auto-detecting colorspace and much more!

Please always use the latest dev branch available when testing. You can report your issues here or in the freshly created Wiki page: https://github.com/tolga9009/elgato-gchd/wiki/dev-branch---known-issues

Make sure to check the Wiki page for duplicate bug reports, before posting them.

We're thankful for everyone, who's able to help us with this! Thanks!

Cheers, Tolga

CodePanter commented 8 years ago

I just tried this newest version with my 0x005d, and it worked! I already notified @seveirein that the colorspace wasn't auto-detected for me, but that seems to be about it. I'm now going to try a few different configurations, to see if they hold up as well!

Criptos commented 8 years ago

What tests do you want to perform? Or just test it?

I'm just returning from vacations, I'll report later mi findings...

tolga9009 commented 8 years ago

@Criptos just general testing, using it in your environment with the advertised features, like auto-detecting source, auto-detecting resolution, auto-detecting colorspace, etc. We just want to make sure, it runs with all available Elgato GCHD revisions and all implemented features.

Thanks for helping!

Criptos commented 8 years ago

Do I need to make the steps for the firmware?

because on my first try I got: Device not supported...

EDIT: Did the driver thing... there are 2 directories, beddo y beddo3, I used beddo. When trying to open with vlc
This revision of the Elgato Game Capture HD is currently not supported.

Version confirmed: Bus 001 Device 011: ID 0fd9:005d Elgato Systems GmbH Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 0 bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 64 idVendor 0x0fd9 Elgato Systems GmbH idProduct 0x005d bcdDevice 2.00 iManufacturer 1 Elgato iProduct 2 GameCapture HD iSerial 3 080F39A944 bNumConfigurations 1

Strace shows: strace -eopen gchd open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libstdc++.so.6", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libusb-1.0.so.0", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libm.so.6", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libudev.so.1", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libselinux.so.1", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libcap.so.2", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/librt.so.1", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libresolv.so.2", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libpcre.so.1", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libattr.so.1", O_RDONLY|O_CLOEXEC) = 3 open("/proc/filesystems", O_RDONLY) = 3 FIFO: /tmp/gchd.ts has been created. Waiting for user to open it. open("/tmp/gchd.ts", O_WRONLYOct 18 17:00:37 strix.aullox.com kwin_x11[1758]: QXcbConnection: XCB error: 3 (BadWindow), sequence: 60101, resource id: 33866479, major code: 10 (UnmapWindow), minor code: 0 Oct 18 17:00:37 strix.aullox.com kwin_x11[1758]: QXcbConnection: XCB error: 3 (BadWindow), sequence: 60106, resource id: 33866479, major code: 4 (DestroyWindow), minor code: 0 ) = 3 open("/dev/bus/usb", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 4 open("/etc/udev/udev.conf", O_RDONLY|O_CLOEXEC) = 4 open("/sys/bus", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 7 open("/sys/bus/usb/devices/", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 8 open("/sys/devices/pci0000:00/0000:00:14.0/usb1/1-4/uevent", O_RDONLY|O_CLOEXEC) = 9 open("/run/udev/data/c189:1", O_RDONLY|O_CLOEXEC) = 9 open("/sys/devices/pci0000:00/0000:00:14.0/usb1/1-5/uevent", O_RDONLY|O_CLOEXEC) = 9 open("/run/udev/data/c189:2", O_RDONLY|O_CLOEXEC) = 9 open("/sys/devices/pci0000:00/0000:00:14.0/usb1/1-6/uevent", O_RDONLY|O_CLOEXEC) = 9 open("/run/udev/data/c189:10", O_RDONLY|O_CLOEXEC) = 9 open("/sys/devices/pci0000:00/0000:00:14.0/usb1/1-9/uevent", O_RDONLY|O_CLOEXEC) = 9 open("/run/udev/data/c189:5", O_RDONLY|O_CLOEXEC) = 9 open("/sys/devices/pci0000:00/0000:00:14.0/usb1/uevent", O_RDONLY|O_CLOEXEC) = 9 open("/run/udev/data/c189:0", O_RDONLY|O_CLOEXEC) = 9 open("/sys/devices/pci0000:00/0000:00:14.0/usb2/uevent", O_RDONLY|O_CLOEXEC) = 9 open("/run/udev/data/c189:128", O_RDONLY|O_CLOEXEC) = 9 open("/sys/devices/pci0000:00/0000:00:14.0/usb1/1-0:1.0/uevent", O_RDONLY|O_CLOEXEC) = 9 open("/run/udev/data/+usb:1-0:1.0", O_RDONLY|O_CLOEXEC) = 9 open("/sys/devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.0/uevent", O_RDONLY|O_CLOEXEC) = 9 open("/run/udev/data/+usb:1-4:1.0", O_RDONLY|O_CLOEXEC) = 9 open("/sys/devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.1/uevent", O_RDONLY|O_CLOEXEC) = 9 open("/run/udev/data/+usb:1-4:1.1", O_RDONLY|O_CLOEXEC) = 9 open("/sys/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5:1.0/uevent", O_RDONLY|O_CLOEXEC) = 9 open("/run/udev/data/+usb:1-5:1.0", O_RDONLY|O_CLOEXEC) = 9 open("/sys/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5:1.1/uevent", O_RDONLY|O_CLOEXEC) = 9 open("/run/udev/data/+usb:1-5:1.1", O_RDONLY|O_CLOEXEC) = 9 open("/sys/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5:1.2/uevent", O_RDONLY|O_CLOEXEC) = 9 open("/run/udev/data/+usb:1-5:1.2", O_RDONLY|O_CLOEXEC) = 9 open("/sys/devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6:1.0/uevent", O_RDONLY|O_CLOEXEC) = 9 open("/run/udev/data/+usb:1-6:1.0", O_RDONLY|O_CLOEXEC) = 9 open("/sys/devices/pci0000:00/0000:00:14.0/usb1/1-9/1-9:1.0/uevent", O_RDONLY|O_CLOEXEC) = 9 open("/run/udev/data/+usb:1-9:1.0", O_RDONLY|O_CLOEXEC) = 9 open("/sys/devices/pci0000:00/0000:00:14.0/usb1/1-9/1-9:1.1/uevent", O_RDONLY|O_CLOEXEC) = 9 open("/run/udev/data/+usb:1-9:1.1", O_RDONLY|O_CLOEXEC) = 9 open("/sys/devices/pci0000:00/0000:00:14.0/usb2/2-0:1.0/uevent", O_RDONLY|O_CLOEXEC) = 9 open("/run/udev/data/+usb:2-0:1.0", O_RDONLY|O_CLOEXEC) = 9 open("/sys/class", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 7 open("/sys/devices/pci0000:00/0000:00:14.0/usb1/uevent", O_RDONLY|O_CLOEXEC) = 7 open("/sys/bus/usb/devices/usb1/busnum", O_RDONLY) = 7 open("/sys/bus/usb/devices/usb1/devnum", O_RDONLY) = 7 open("/sys/bus/usb/devices/usb1/speed", O_RDONLY) = 7 open("/sys/bus/usb/devices/usb1/descriptors", O_RDONLY) = 7 open("/sys/devices/pci0000:00/0000:00:14.0/usb1/1-4/uevent", O_RDONLY|O_CLOEXEC) = 7 open("/sys/bus/usb/devices/1-4/busnum", O_RDONLY) = 7 open("/sys/bus/usb/devices/1-4/devnum", O_RDONLY) = 7 open("/sys/bus/usb/devices/1-4/speed", O_RDONLY) = 7 open("/sys/bus/usb/devices/1-4/descriptors", O_RDONLY) = 7 open("/sys/devices/pci0000:00/0000:00:14.0/usb1/1-5/uevent", O_RDONLY|O_CLOEXEC) = 7 open("/sys/bus/usb/devices/1-5/busnum", O_RDONLY) = 7 open("/sys/bus/usb/devices/1-5/devnum", O_RDONLY) = 7 open("/sys/bus/usb/devices/1-5/speed", O_RDONLY) = 7 open("/sys/bus/usb/devices/1-5/descriptors", O_RDONLY) = 7 open("/sys/devices/pci0000:00/0000:00:14.0/usb1/1-6/uevent", O_RDONLY|O_CLOEXEC) = 7 open("/sys/bus/usb/devices/1-6/busnum", O_RDONLY) = 7 open("/sys/bus/usb/devices/1-6/devnum", O_RDONLY) = 7 open("/sys/bus/usb/devices/1-6/speed", O_RDONLY) = 7 open("/sys/bus/usb/devices/1-6/descriptors", O_RDONLY) = 7 open("/sys/devices/pci0000:00/0000:00:14.0/usb1/1-9/uevent", O_RDONLY|O_CLOEXEC) = 7 open("/sys/bus/usb/devices/1-9/busnum", O_RDONLY) = 7 open("/sys/bus/usb/devices/1-9/devnum", O_RDONLY) = 7 open("/sys/bus/usb/devices/1-9/speed", O_RDONLY) = 7 open("/sys/bus/usb/devices/1-9/descriptors", O_RDONLY) = 7 open("/sys/devices/pci0000:00/0000:00:14.0/usb2/uevent", O_RDONLY|O_CLOEXEC) = 7 open("/sys/bus/usb/devices/usb2/busnum", O_RDONLY) = 7 open("/sys/bus/usb/devices/usb2/devnum", O_RDONLY) = 7 open("/sys/bus/usb/devices/usb2/speed", O_RDONLY) = 7 open("/sys/bus/usb/devices/usb2/descriptors", O_RDONLY) = 7 open("/dev/bus/usb/001/011", O_RDWR) = 10 This revision of the Elgato Game Capture HD is currently not supported.

seveirein commented 8 years ago

Criptos, you are using the main branch, not the dev branch. Only the dev branch supports your device. git checkout dev And then a rebuild should fix your problem.

Criptos commented 8 years ago

No video in my setup... Waiting for user to open it.

Initializing device. Hardware revision is V1300230

and vlc shows blackscreen and OBS doesn't react...

Second try: [root@strix ~]# gchd
FIFO: /tmp/gchd.ts has been created. Waiting for user to open it. Initializing device. Hardware revision is V1300230 No signal found. Defaulting to HDMI. HDMI input forced. terminate called after throwing an instance of 'std::runtime_error' what(): Failure changing states. Aborted (core dumped) [root@strix ~]# gchd
FIFO: /tmp/gchd.ts has been created. Waiting for user to open it. Initializing device. Hardware revision is V1300230

I'm using a Vixia HFG20 camera, hdmi is enabled and it works. Tried with the HDMI output of a sony camera, didn't work neither.

Now, an Innocent question... Do I need to connect something to the HDMI Output? I'm just using the HDMI Input and the USB.... and nothing at the HDMI output...

CodePanter commented 8 years ago

@Criptos No, the output shouldn't be necessary, I also have an Elgato 005d, and never connect anything to the HDMI out, I only ever use the HDMI in.

Criptos commented 8 years ago

Well, then.... isn't working for me... and I don't know why... Do i need to copy the udev rule file to the rules directory? Or the driver works fine without it?

seveirein commented 8 years ago

@Criptos Thank you for the test Criptos! Not sure what is causing your issue, but you shouldn't need the udev rule file if running gchd as root (which you are). For the time being, be sure to reset the device by unplugging and replugging the USB cable back in between runs, when testing. The next step to figuring out your issue would be to do a Wireshark USB capture. See https://github.com/tolga9009/elgato-gchd/wiki/USB-Wireshark-Capturing-on-Linux for how to do that.

Criptos commented 8 years ago

Reporting back, did a git pull, rebuild everything and el gato is working...

Do you still need the usb capturing? It worked ok, I'm using a cheap "go pro" style camera... it worked fine...

I'll do other testings with other cameras later...

seveirein commented 8 years ago

Thanks Criptos, glad it is working for you. Very happy to hear that.

Criptos commented 8 years ago

Ir seems is a video camera related issue.

Stream from the action camera worked, but stream from the vixia results in a black screen.

I'll try another camera later.

seveirein commented 8 years ago

Your video camera probably outputs a mode we don't yet support. Currently we support for HDMI 1080p@60hz, 1080i@60hz, 720p@60hz, 576p@50hz, 480p@60hz. For Component we support 1080p@30hz, 1080i@60hz, 720p@60hz, 576p@50hz, 576i@50hz, 480p@60hz, 480i@60hz. For Composite we support 576i@50hz and 480i@60hz.. This covers the vast majority of sources, except , in particular, cameras. They often have a lot of output modes that are a different refresh/frame rates. If you give us a capture, and tell us what the mode is, we may be able to add support.

ralfdonald commented 8 years ago

Hi, in my case gchd starts recording, but stops recording after some minutes. gchd itself stil runs at this moment, but stops writing data into fifo/file. Mostly between four and ten minutes are possible to record. Has anyone similar problems?

I'm using Elgato GCHD (0051) under Arch Linux (4.8.4-1 x86_64) with Elgato firmware 2.0.3.

tolga9009 commented 8 years ago

@ralfdonald this is a sync issue, where FIFO reader and / or writer are taking to long. This often happens on weak computers, like dual core systems and ultra low power devices. One way to fix it, is setting thread priority higher (for both, gchd and your reading app, e.g. OBS).

Nevertheless, we're trying to find a way to fix these kind of issues in code (like resyncing in such situations).

ralfdonald commented 7 years ago

@tolga9009 Problem fixed by using two systems, one 2008 core2duo notebook for recording and my gaming system for playing. What can make more trouble, a slow cpu or a slow harddisk? Cause i'm using 840 pro ssds on every system and it seems that the multiple handling of permanent fifo>file and playing a game is to much for dualcores. Maybe you write a minimum of required hardware into the wiki.

tolga9009 commented 7 years ago

@ralfdonald usually a slow harddisk shouldn't make any problems. We have a couple of exports, I want to talk about:

  1. FIFO is done entirely on RAM. So, it doesn't wear off any SSD and doesn't fill any HDD, while you're streaming. This is the recommended output format, when you're streaming. FIFO on it's own, doesn't need a power CPU, nor does it need a fast SSD. However, FIFO won't cut anything on its own and you probably need applications like VLC or OBS, to actually make use of the FIFO. And this is the point, where you will need a performant system. E.g. slow systems, like DualCore 1.7GHz systems tend to have integrated graphics and therefore are not able to live-preview and encode 1080p30 streams.
  2. Disk is writing directly to your disk, without live-preview or encoding. It's just reading packets from USB and writing them to disk, without the need to transcode / encode / re-encode anything. Everything is already done on the Elgato and therefore this is a very lightweight task and can be done on very weak systems. This is the recommended method, if you're looking for a way to record your gameplay to your HDD. However, you will have no live-preview using this method. I've seen an i3-4010U (2x 1.7GHz, no Turbo) doing this fine with 720p60. Record-to-HDD without live-preview can probably be done even on lower-end systems, as it's just reading USB and writing to HDD at around 10MB/s - 20MB/s.

To sum this up: minimum required hardware for FIFO is pretty much on par with the system requirements for official Elgato software on Windows. This means: 2nd Gen i5 or i7 or better for desktops.

For Disk without live-preview, the lowest minimum specs we've successfully tested so far, is an Intel i3-4010U. But you can probably go lower.

ralfdonald commented 7 years ago

@tolga9009 thank you for your detailed explanation of the two possibilities an your experiences with them. For Disk i am using an intel core2duo T5750 (2x 2,0GHz), which is recording 1080p30 without problems. So my gaming cpu (intel pentium G3420 2x3,2GHz) is not usable for playing and recording at the same time.