Atmo-plugin
Inhaltsverzeichnis |
Hardware
Die Beschreibung der Hardware ist ausgelagert im Artikel Atmo-Light .
Beschreibung
Maintainer: Eike Edener, Daniel König
Autor(en): Eike Edener, Daniel König, Simon Canins, Peter Ippy
Das Atmolight-Plugin dient zum Ansteuern einer farbigen Hintergrundbeleuchtung für Fernsehgeräte. Die angezeigte Farbe hängt dabei vom Bildschirminhalt ab. Als Vorlage diente das Ambilight von Philips. Die Ansteuerung der Beleuchtung erfolgt über einen Mikrocontroller. Dieser wird über eine serielle Schnittstelle (oder über einen USB<->Seriell-Wandler) mit dem VDR verbunden. Als Lichtquellen kommen RGB-Anordnungen aus Leuchtdioden (LEDs) zum Einsatz. Das Plugin ist in der Lage für jede der vier Kanten des Fernsehgerätes (also links/rechts/oben/unten) eine individuell berechnete Farbe auszugeben. Die Beleuchtung wird dann quasi als "Verlängerung" des Bildes über die Grenzen des Fernsehers hinaus genutzt. Zusätzlich wird eine "Summenfarbe" ausgegeben, die Verwendung findet, wenn nur eine RGB-Leuchte zentral hinter dem Fernsehgerät platziert werden soll. Es werden also laufend fünf verschiedene RGB-Farbkanäle ausgegeben.
Die Atmolight-Hardware kann auch unter Windows betrieben werden. Mehr dazu hier: Atmolight unter Windows XPoder AtmoLight Windows
Status
Die aktuelle Version (VDR-1.5.7) ist vdr-atmo-0.1.3.tgz. Diskussion im VDR-Portal.
Eine Nachbauanleitung für die notwendige Hardware (Ansteuerplatine, LED-Module) findet sich weiter unten, ebenso eine Bezugsquelle für fertige LED-Module.
Bilder
Videos
P2k1 und kc_captain haben im VDR-Portal eine Vorstellung Ihres Systems mit weiteren Bildern und Videos gepostet.
http://www.vdr-portal.de/board/thread.php?threadid=57731
http://www.vdr-portal.de/board/thread.php?threadid=58491
Bedienung
SVDRP Befehle
Das Plugin kann auch über SVDRP gesteuert werden:
Befehl | Beschreibung |
---|---|
ON | schaltet das Atmolight an |
OFF | schaltet das Atmolight aus |
STATUS | gibt den Status des Atmolights aus (ein- oder ausgeschaltet) |
LIVE_HSV | schaltet in den Live-Mode |
<color> | schaltet auf die angegebe Farbe um, möglich sind: |
BLACK, WHITE, RED, GREEN, BLUE, YELLOW, CYAN, MAGENTA | |
<channel> <r_value> <g_value> <b_value> | Farbwert (als RGB-Wert, jeweils 0-255) auf dem Kanal (ALL, CENTER, LEFT, RIGHT, TOP, BOTTOM) darstellen |
BRIGHT | Helligkeitswert setzen (50-300) |
Konfiguration
Einstellungen
Im OSD können folgene Einstellungen vorgenommen werden:
Parameter | Beschreibung |
---|---|
Start-Modus / Startmode | Beim Start von VDR ist das Atmolight:
immer an / always on: eingeschaltet immer aus / always off: ausgeschaltet timerabhängig / timer dependent: nur eingeschaltet, wenn der VDR NICHT durch einen Timer gestartet wurde |
Widescreen-Modus / Widescreen mode | Diese Option ist für Nutzer von 16:9 Fernsehern gedacht. Bei solchen Geräten ist ein Modus einstellbar, bei dem 4:3 Bilder oben und unten beschnitten werden um sie formatfüllend darzustellen. In diesem Fall wird die Berechnung normalerweise (= ja / yes) auf Basis "unsichtbarer" Bildteile durchgeführt. Um diese Streifen von der Berechnung auszunehmen muss = nein / no gesetzt werden. |
Gewichtung / Power of weighting | je höher die Zahl ist, desto stärker wird die Berechnung der Farben auf den Bildinhalt in der Nähe des jeweiligen Bildrands konzentriert |
Helligkeit / Brightness | dient zur Anpassung der LED-Helligkeit an die Bildhelligkeit |
Gamma-Korrektur / Gamma correction | aus / off: keine Gammakorrektur im Plugin Anmerkung: die Ansteuerplatine führt schon intern eine Korrektur durch, so dass eine Korrektur im Plugin eigentlich nicht nötig ist. Evtl. sind feine Anpassungen an den jeweiligen Fernseher nötig; dann sind Gamma-Werte um "10" herum zu verwenden.
gleichmäßig / uniform: auf alle Farbkanäle wird die gleiche Korrektur angewandt pro Kanal / by channel: jeder der Farbkanäle kann separat korrigiert werden |
Gamma (Red/Green/Blue) | Gamma-Wert der Korrektur. Der angezeigte Wert muss durch 10 dividiert werden: 20 steht also für ein Gamma von 2,0 |
Filter / Filter | Für jedes Vollbild wird eine Farbe berechnet. Um "Flackern" zu vermeiden, wird eine Art Mittelwert zwischen den gefundenen Farben gebildet.
Prozent / percentage: jeder neu berechnete Farbwert trägt einen bestimmten Prozentsatz zur angezeigten Farbei bei. Dieser Filter wirkt oft sehr "nervös", aber auch wunderbar "spontan". gemeinsam / combined: es wird ein laufender Mittelwert aus den berechneten Farben gebildet. Über welche Zeitspanne der Mittelwert gebildet werden soll, wird mit Filterlänge / Filter length festgelegt; je größer die Zahl, desto langsamer wird übergeblendet. Zusätzlich wird überwacht, ob es einen "Sprung" in den berechneten Farbwerten gibt (z.B. bei einem Szenenwechsel). Ein "Sprung" wird erkannt, wenn die neue Farbe vom Mittelwert den Abstand Filterschwelle / Filter threshold hat. Je größer diese Zahl ist, desto seltener werden Sprünge erkannt. Wenn ein Sprung erkannt wird, dann wird die angezeigte Farbe sofort auf den neuen Wert korrigiert. Wenn kein Sprung erkannt wurde, kommt wieder der "percentage" Filter zum Einsatz und sorgt für einen leicht sanften Übergang. Je größer der Wert von Filterglätte / Filter smoothness, desto sanfter ist der Übergang. |
Modus / Mode | Es gibt verschieden Betriebsmodi für das Atmolight, einige sind für die Einrichtung und den Test der Leuchten hilfreich. Normalerweise wird es in einem "live" Modus betrieben:
Livebild / live picture (HSV): Es wird eine Farbraumtransformation durchgeführt, Histogramme werden erzeugt, gefenstert und ausgewertet. Farbtonfenster / Hue windowing und Sättigungsfenster / Sat windowing geben an, wie breit die Fensterung der jeweiligen Histogramme erfogt. Höhere Werte "glätten" die Histogramme stärker. Schwarzgrenze / Darkness limit wird dazu verwendet, dunkle Pixel von der Berechnung auszuschließen. So werden zB. schwarze Balken im Bild einfach übersprungen und Bildrauschen bei schwarzen Bildteilen wird ignoriert. Je größer der Wert, desto mehr wird ignoriert. Helligkeits-Modus / Brightness mode steuert die Helligkeit der Leuchten in Abhängigkeit des Bildes. Bei Durchschnitt / average entspricht die Helligkeit der mittleren Bildhelligkeit. Höchstwert / peak stellt die Helligkeit nach den hellsten Bildanteilen ein. Standardfarbe / default color: Es kann eine statische Farbe ausgewählt werden: schwarz, weiß, rot, grün, blau, gelb, cyan oder magenta. statische Farbe / static colors: Es kann eine statische Farbe durch Mischen der Komponenten rot, grün und blau erzeugt werden. Weißkalibrierung / white calibration: Weißabgleich: Die Werte 255 für rot, grün und blau sollten die Farbe "weiß" ergeben. Sollte das Weiß einen Farbstich aufweisen, läßt sich dies durch Absenken des Wertes der entsprechenden Farbe kompensieren (z.B. bei Rotstich den Rotwert so lange verkleinern, bis ein reines Weiß entsteht). Danach das Zurückstellen auf den Live-Mode nicht vergessen. ;-) |
Parameter
Folgende Kommandozeilenparameter gibt es:
Parameter (kurz) | Parameter (lang) | Beschreibung |
---|---|---|
-i <INPUT_DEVICE> | --input=<INPUT_DEVICE> | gibt an, welches Input-Device verwendet werden sollen (z.B. FFDVB für die im VDR als Primary Device verwendete Full-Featured-DVB-Karte mit Devicebezeichnung /dev/videoX oder SOFTDEVICE für das Softdevice-Plugin) |
-o <OUTPUT_DEVICE=PARAMETER> | --serial=<OUTPUT_DEVICE=PARAMETER> | gibt an, an welche Schnittstelle die Ausgabedaten geschickt werden sollen (z.B. SERIAL=/dev/ttyS1 oder NETWORK=192.168.0.1:1234) |
Sonstiges
Interne Funktionsweise
Farberkennung
- Umrechnung von RGB-Farbraum in HSV-Farbraum
- Erzeuge Histogramm des Hue Kanals unter Berücksichtigung von Gewichtungsfaktoren und Gewichtungsfunktionen:
- Position des Pixels im Bild.
- Value des Pixels.
- Wende Fensterung mit Dreiecks-Fenster auf Hue-Histogramm an.
- Finde Maximum im gefensterten Hue-Histogramm.
- Damit ist der Farbton bestimmt.
- Erzeuge Histogramm verwendeten Saturation in der Umgebung der gefundenen Hue nter Berücksichtigung von Gewichtungsfaktoren und Gewichtungsfunktionen:
- Position des Pixels im Bild.
- Value des Pixels.
- Wende Fensterung mit Dreiecks-Fenster auf Saturation-Histogramm an.
- Finde Maximum im gefensterten Saturation-Histogramm.
- Damit ist die "Sättigung" bestimmt.
- Value (Grauwert)
- 2 Modi
- Value Peak
- Bestimme Maximum von Value im Bild, sprich die höchste vorkommende "Helligkeit"
- Value Average
- Bestimme Mittelwert von Value im Bild, sprich die durchschnittliche "Helligkeit"
- Helligkeitsanpassung
- Zurückrechnen von HSV-Farbraum in RGB-Farbraum
- Filterung
Serielles Protokoll
Baudrate: 38400 bps Parity: None Datenbits: 8 Stopbits: 1
Nachrichtenformat:
Byte | Beschreibung |
---|---|
0 |
0xFF: Startbyte |
1 |
0x00: Startkanal (low byte) |
2 |
0x00: Startkanal (high byte) |
3 |
0x0F: Anzahl Kanäle (15 = 5 * 3 (R, G, B)) |
4 - 6 |
Summenkanal R, G, B (Center) |
7 - 9 |
linker Kanal R, G, B (Left) |
10 - 12 |
rechter Kanal R, G, B (Right) |
13 - 15 |
oberer Kanal R, G, B (Top) |
16 - 18 |
unterer Kanal R, G, B (Bottom) |
Beispiel:
Folgende Nachricht (in hexadezimaler Darstellung) gibt auf allen Kanälen hellstes Rot aus:
0xFF 0x00 0x00 0x0F 0xFF 0x00 0x00 0xFF 0x00 0x00 0xFF 0x00 0x00 0xFF 0x00 0x00 0xFF 0x00 0x00
Test über eine Konsole:
setserial /dev/ttySX baud_base 115200 divisor 3 spd_cust stty -F /dev/ttySX 38400 echo -e '\0377\0000\0000\0017\0377\0000\0000\0377\0000\0000\0377\0000\0000\0377\0000\0000\0377\0000\0000' > /dev/ttySX (X entsprechend an die benutzte serielle Schnittstelle anpassen, z.B. 0 = COM1)
Versions-Historie
Version | Datum | Beschreibung | Link |
---|---|---|---|
0.1.3 | 07.01.2008 |
|
[1] |
0.1.2 | 30.12.2007 |
|
[2] |
0.1.1 | 17.12.2006 |
|
[3] |
0.1.0 | 03.12.2006 |
|
[4] |
0.0.6 | 19.11.2006 |
|
[5] |
0.0.5 | 21.10.2006 |
|
[6] |
0.0.4 | 05.10.2006 |
|
[7] |
0.0.3 | 24.09.2006 |
|
[8] |
0.0.2 | 17.09.2006 | (thanks to Daniel König, Simon Canins & Peter Ippy)
|
[9] |
0.0.1 | 11.06.2006 | (thanks to Daniel König)
|
[10] |
Installation
Wie für Plugins üblich (siehe Plugin Installation). Danach müssen nur noch die Aufrufparameter in der runvdr angepaßt werden (Auswahl der Eingabe- und Ausgabeschnittstelle), siehe Parameter.