Wie werden Pixel tatsächlich angezeigt?

604
Fredrik Pihl

Ich verbringe viel Zeit damit, Rohvideos im YCbCr-Format anzusehen. Ich habe darüber nachgedacht, was wirklich auf dem Display angezeigt wird und wie die Pixel dort landen.

Kein Display kann mit YCbCr-Daten umgehen, daher wird alles irgendwo in RGB konvertiert. YCbCr-> RGB ist jedoch eine heikle Angelegenheit, siehe zB http://www.fourcc.org/fccyvrgb.php

Kann ich bei der YCbCr- in RGB-Konvertierung sicherstellen, dass die Pixelwerte, die ich habe, angezeigt werden?

Ein Hardware-kalibriertes Eizo-Display wie das hier abgebildete:

http://www.eizo.com/global/products/coloredge/

Wie werden Pixel tatsächlich angezeigt?

Gibt es eine Möglichkeit, so viel Kontrolle wie möglich über die "Pipeline" zur Anzeige zu haben (dh meine Pixel werden nicht auf dem Weg konvertiert), denke ich vielleicht nvidia / gpu / opengl und schiebe alles so nah an die HW wie möglich; dann für meine grafikkarte weiß ich wenigstens was ich suche.

Gibt es ein RGB-Format, das ist nativer für Grafikkarte und dieser erfordert keine weitere Umwandlung? YCbCr ist 8 Bpp und ich denke an 32-Bit-RGB 4: 4: 4.

Ich bin hauptsächlich auf einem Linux-System, wenn das einen Unterschied macht. Zur Zeit verwende ich http://www.libsdl.org/. Es gibt auch http://directfb.org/, aber ich habe diesen Pfad noch nicht erforscht.

Oder vielleicht ist das alles nur dumm und paranoid :-)

1
Bitte zerstöre nicht deine eigenen Beiträge. Ich habe die Frage vorerst geschlossen - das sollte in Ordnung sein. Ich bin nicht geneigt, es zu löschen, da sich tatsächlich jemand die Zeit genommen hat, um Ihre Fragen zu beantworten und auch Stimmen erhalten hat. slhck vor 11 Jahren 0

1 Antwort auf die Frage

3
gronostaj

Das sind viele Fragen, ich werde versuchen, einige von ihnen zu beantworten.

Kein Display kann mit YCbCr-Daten umgehen, daher wird alles irgendwo in RGB konvertiert.

Alle Displays verwenden RGB. Bei LCDs besteht jedes Pixel aus drei Subpixeln in drei Grundfarben. Sie haben also Recht, alles muss in RGB umgewandelt werden, um angezeigt zu werden.

Kann ich bei der YCbCr- in RGB-Konvertierung sicherstellen, dass die Pixelwerte, die ich habe, angezeigt werden?

Es kommt darauf an, was du meinst. Sie sind garantiert, dass die genauen Ergebnisse der Konvertierung angezeigt werden. Es hängt also von den Ergebnissen der Konvertierung ab, und diese hängen vom verwendeten Gamma ab.

Gibt es eine Möglichkeit, so viel Kontrolle wie möglich über die "Pipeline" zur Anzeige zu haben (dh meine Pixel werden nicht auf dem Weg konvertiert), denke ich vielleicht nvidia / gpu / opengl und schiebe alles so nah an die HW wie möglich; dann für meine grafikkarte weiß ich wenigstens was ich suche.

Sobald das Bild in RGB konvertiert wurde, wird es nicht mehr geändert (es sei denn, Sie verwenden f.lux oder eine ähnliche Software). Es spielt keine Rolle, ob es näher an der Hardware liegt oder nicht, es handelt sich lediglich um eine Reihe von Pixeln, und nach der Konvertierung in RGB werden sie nicht geändert (es sei denn, Sie fragen etwas nach, z. B. mit der genannten f.lux, Farbkorrektur-Software oder Videobearbeitung Programme, die Farbfilter anwenden können).

YCbCr ist 8 Bpp und ich denke an 32-Bit-RGB 4: 4: 4.

Ich denke, Sie mischen ein paar Dinge oder ich verstehe nicht, was Sie meinen. Erstens kann 32-Bit-RGB nicht 4: 4: 4 sein, da 32 Bit nicht gleichmäßig auf 3 Farbkanäle aufgeteilt werden können. (10 Bits für R, 11 Bits für G, 11 Bits für B?) 32-Bit-RGB besteht tatsächlich aus drei 8-Bit-Farbkanälen und einem 8-Bit-Transparenzkanal. Videos haben keine Transparenz und funktionieren daher mit 24-Bit-RGB. (8 Bits für jeden Kanal)

Ich weiß nicht, wie YCbCr im digitalen Format gespeichert wird, aber ich bin mir sicher, dass es nicht 8-Bit ist. Zumindest gehen wir davon aus, dass wir über die Gesamtgröße eines Pixels sprechen. (Wenn Sie 8-Bit-Farbkanäle meinen, dann sind es genau so viele wie in RGB.) 8-Bit-Pixel können bis zu 256 Farben enthalten. 24-Bit-RGB umfasst über 16 Millionen Farben.

Gibt es ein RGB-Format, das für Grafikkarten systemeigen ist und keine weitere Konvertierung erfordert?

Sie möchten also unkomprimierte RGB-Pixel? Nun, es gibt solche Bild- und Videoformate, aber unkomprimierte Videos beanspruchen wirklich viel Platz. Lassen Sie uns eine schnelle Berechnung für ein 24-Bit-Video mit 24 Bildern pro Sekunde und 1080p durchführen:

3B * 1920px * 1080px * 24fps = 149299200B 

Jede Sekunde unkomprimiertes unkomprimiertes 1080p-Video ist also über 140 MB groß. Dies bedeutet, dass Sie auf einer branchenüblichen Blu-Ray-Disc bis zu fünfeinhalb Minuten Video aufnehmen können. Ich glaube nicht wirklich ein gutes Geschäft;)