A small library to force removal of invalid colorspaces exported by the Elgato Cam Link 4K.
You will need gcc
and make
to build.
Run mkdir build && make
Simply run sudo make install
. The camlink.so
file will be copied to the path /usr/local/lib/camlink/camlink.so
Run sudo make uninstall
.
This library is run as a LD_PRELOAD
to other applications. It intercepts all ioctl
calls
and determines if the call is intended to query the colorspaces available on a camlink.
If so, it rejects all return values that are NOT YUYV 4:2:2
. This should make colors work
correctly on the Camlink in Linux.
$ LD_PRELOAD=/usr/local/lib/camlink/camlink.so v4l2-ctl -d /dev/video2 --list-formats-ext
$ LD_PRELOAD=/usr/local/lib/camlink/camlink.so zoom
$ flatpak override us.zoom.Zoom --filesystem=/usr/local/lib/camlink/camlink.so
$ flatpak run --env=LD_PRELOAD=/usr/local/lib/camlink/camlink.so us.zoom.Zoom
$ LD_PRELOAD=/usr/local/lib/camlink/camlink.so firefox
export LD_PRELOAD=/usr/local/lib/camlink/camlink.so
Say you use Google Chrome. You click on the icon in your desktop environment, and it locates the .desktop file. (located @ /usr/share/applications/google-chrome.desktop
on my machine)
Inside that file is an Exec=
line that specifies how to the browser should be started. On my machine, the line is:
Exec=/usr/bin/google-chrome-stable %U
You need to edit that line, and you need that line to STAY edited even if you update Google Chrome. The solution is to make a local copy of this file in your home directory:
$ cp /usr/share/applications/google-chrome.desktop ~/.local/share/applications/
Then edit the new file @ ~/.local/share/applications/google-chrome.desktop
and change the exec line to include the LD_PRELOAD call. Something like this:
Exec=env LD_PRELOAD=/usr/local/lib/camlink/camlink.so /usr/bin/google-chrome-stable %U
If running the browser on the command line DOES NOT WORK -- even after fully quitting it first:
Then the issue is different; likely the LD_PRELOAD
path is incorrect. The examples assume that you have installed the camlink library. If you have not, instead use the path where your camlink.so file can be found. For example: LD_PRELOAD=/home/yourname/path/to/camlink/sources/build/camlink.so
I contacted Elgato about the issue and got this reply:
Thank you for contacting Elgato Technical support.
I understand you are in need of some information regarding running a Cam Link 4K on a Linux computer. I will be happy to help!
As it turns out, Linux OS is not supported. Elgato products were designed to work with Windows and Mac only.
I understand this may not be the information your were expecting to hear and for that I apologize.
So they will not be helpful. That doesn't mean you shouldn't contact them about the issue! Manufacterers need to know how their product is being used.
There are several other possible fixes for the color issue for the Cam Link 4K:
- Hack the firmware to stop returning invalid colorspaces
- Use a dummy video source and ffmpeg to convert the color to something different
- Build an exception into the v4l2 driver for the Camlink to ignore the extra colorspaces