# HDMI Viewer Ein schlanker Qt6/C++ HDMI-Viewer für Arch Linux mit V4L2 (Video) und ALSA (Audio). Gedacht als Companion zu OBS Studio: **Anzeigen ohne Aufnehmen**. ## Features - Live-Vorschau vom HDMI-Grabber via V4L2 (YUYV und NV12) - ALSA-Audio direkt vom Grabber-Gerät - Gerät-Auswahl beim Start, **Audio-Gerät wird gespeichert** - **F** → Vollbild / **F** oder **Esc** im Vollbild → Fenstermodus - **Esc** im Fenstermodus → zurück zur Gerät-Auswahl (Device wird sauber freigegeben) - Seitenverhältnis immer bewahrt (Letterbox/Pillarbox) - Titelleiste zeigt tatsächliche Auflösung und FPS - Colorspace-Konvertierung im ThreadPool (kein Ruckeln) - FPS explizit auf 60fps gesetzt (was Grabber liefert wird in Statusbar angezeigt) - **Bildglättung** (standardmäßig an): GPU-Shader trennt Luma/Chroma und behandelt sie getrennt – Chroma wird stärker weichgezeichnet (killt Dot-Crawl/Farbrauschen billiger Composite→HDMI-Scaler wie Lioncast Mini AV2HDMI o.ä.), Luma wird leicht geglättet und dezent gegengeschärft (nimmt harte Scaler-Kanten raus, ohne matschig zu wirken). Keine Optik- Spielerei, sondern eine echte Bildverbesserung. Taste **S** zum Umschalten. - **Retro-Optik** (standardmäßig aus): separater Nostalgie-Look – Scanlines, Phosphor-/Aperture-Grille-Maske, leichte Wölbung wie bei einem alten Röhrenfernseher. Lässt sich mit der Bildglättung kombinieren. Taste **C**. - **Helligkeit** (Tasten **,** dunkler / **.** heller): Gamma-Anpassung, live und persistiert. Sinnvoll als Feinjustierung, falls Farbraum-Erkennung (siehe unten) allein nicht perfekt zum eigenen Bildschirm passt. - **Hardware-Helligkeit**: Beim Öffnen des Geräts wird (falls vom Chip unterstützt) der V4L2-Brightness-Regler direkt am Grabber moderat angehoben (+20 % des Wertebereichs ab Werkseinstellung) – das wirkt bereits VOR der JPEG-Kompression und kann so tatsächlich verlorene Schattendetails retten, statt nur nachträglich zu strecken, was von der Kompression übrig blieb. Diagnose-Ausgabe der verfügbaren Regler landet beim Start im Terminal. - **Studio-/Full-Range-Korrektur**: Das fertig dekodierte Bild wird von einem komprimierten Kontrastumfang (Schwarzpunkt niedrig angesetzt, Weißpunkt ≈235/255) auf den vollen 0–255-Kontrastumfang gedehnt. Ohne diese Korrektur wirkt das Bild dumpf, kontrastarm und zu dunkel – viele billige HDMI-Grabber liefern (oder kodieren, auch bei MJPEG) genau in diesem komprimierten Bereich. Greift direkt im GPU-Shader auf dem fertigen RGB-Bild, also unabhängig vom Pixelformat. ## Abhängigkeiten (Arch Linux) ```bash sudo pacman -S qt6-base cmake alsa-lib linux-headers base-devel ``` `qt6-base` bringt auf Arch bereits die benötigten `Qt6OpenGL`- und `Qt6OpenGLWidgets`-Module mit. ## Bauen ```bash mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release make -j$(nproc) ``` ## Starten ```bash ./hdmi-viewer ``` ## Tastenkürzel | Taste | Funktion | |--------------|---------------------------------------------| | F | Vollbild ein/aus | | S | Bildglättung ein/aus | | C | Retro-Optik (Scanlines/Maske) ein/aus | | , / . | Dunkler / Heller (Helligkeit, gespeichert) | | Esc | Vollbild verlassen ODER zurück zum Dialog | ## Einstellungen Werden gespeichert in: `~/.config/hdmi-viewer/HDMIViewer.conf` (Standard XDG-Pfad, kein manuelles Anlegen nötig) ## Audio-Gerät finden ```bash # Alle ALSA-Capture-Geräte auflisten arecord -l # Testen (hw:X,Y aus arecord -l, z.B. hw:2,0) arecord -D hw:2,0 -f S16_LE -r 48000 -c 2 /tmp/test.wav aplay /tmp/test.wav ``` Das Gerät dann im Dialog so eingeben: z.B. `hw:2,0` oder `plughw:2,0` (plughw macht automatische Sample-Rate-Konvertierung, falls nötig)