I bought a cheap (< €15) USB 2.0 video grabber which is based on the SyntekSTK1160 chipset. My goal was to display the output of my Commodore 64 on the screen of my laptop. The cable which connects the C64 with the video grabber allows me to use an s-video signal.
I use a current Linux Kernel (5.4), but the chipset is supported in Linux for ages. The device turns up as
/dev/video2
in my filesystem when connected to the laptop.
The device also contains an audio interface:
$ cat /proc/asound/cards
0 [HDMI ]: HDA-Intel - HDA Intel HDMI
HDA Intel HDMI at 0xf2530000 irq 36
1 [PCH ]: HDA-Intel - HDA Intel PCH
HDA Intel PCH at 0xf2534000 irq 37
2 [STK1160 ]: USB-Audio - STK1160
Syntek STK1160 at usb-0000:00:14.0-6, high speed
29 [ThinkPadEC ]: ThinkPad EC - ThinkPad Console Audio Control
ThinkPad Console Audio Control at EC reg 0x30, fw unknown
On my system it has the number 2.
With this information I can start VLC displaying the video output of the C64 and playing the audio synchronously.
vlc v4l2:///dev/video2:input=4:width=720:height=576:standard=PAL_BG --input-slave=alsa://hw:2,0 --demux rawvideo
Since I want to use s-video I have to use input 4, otherwise the screen will stay black because VLC defaults to input 0 which is composite.
The lag is negligible, I have owned TVs which behaved worse.