Liest effizient die durchschnittliche Farbe des von XBMC gerenderten Bildschirminhalts

10

Ich möchte die durchschnittliche Farbe des Bildschirminhalts erhalten, wenn XBMC zum Ändern der Farbe eines TV-Umgebungslichts verwendet wird. XBMC läuft auf einem kleinen HTPC mit OpenGL ES 2.0 Hardware (Raspberry Pi), auf dem eine von Debian abgeleitete Distribution läuft. Ich denke, ich muss vom Bildschirm frame buffer lesen, in dem XBMC mit OpenGL zeichnet. (Zumindest denke ich und hoffe, dass XBMC alles mit OpenGL rendert.)

Ist es möglich, den OpenGL-Bildpuffer zu lesen, der die gesamte Bildschirmausgabe darstellt? Was brauche ich, um darauf zugreifen zu können? Brauche ich auch einen eigenen Renderkontext, um auf den Bildspeicher des Bildschirms zuzugreifen? (Ich mache nichts selbst auf den Bildschirm, ich möchte nur lesen ).

Effizient die durchschnittliche Farbe zu berechnen ist die nächste Aufgabe. Ich denke darüber nach, jeden 8. oder 16. Pixel pro Zeile / Spalte zu lesen (es reicht, wir reden über 1080p HD-Filme) und berechnen dann den Durchschnitt auf der CPU. Irgendwelche Ideen für eine bessere Lösung sind willkommen.

    
leemes 08.12.2012, 20:46
quelle

1 Antwort

6

Sie sollten sich den Quellcode von Boblight ansehen.

>

Die Erweiterung von Boblight scheint eine brauchbare Alternative zu sein (wenn es nicht das unterstützt, was Sie schon brauchen!).

Wenn nicht, sehen Sie sich den src/clients/ -Ordner an. boblight-getpixel.c (für MS Windows) und boblight-X11.c sind 'Pixelgrabber'; Standalone-Programme, die genau das tun, was Sie brauchen, und dann die gegriffene Farbe an den Boblight-Server übermitteln.

In boblight-X11.c gibt es Beispiele für die Verwendung von XShmGetImage oder die langsamere XGetImage , um Teile des Bildschirms mit X11/extensions/XShm.h zu lesen, ein Teil dieses Codes tut:

%Vor%     
istepaniuk 16.01.2013 19:05
quelle