Ich habe noch ein bisschen rumprobiert und -geguckt
Mal eine kurze Erklärung wie der MPC das nun macht.
Auch nicht so anders natürlich wie andere Software.
Die Farbraumkonvertierung setzt auf eine 3D-LUT. Das ist soweit normal.
Im Prinzip steht da für jede mögliche RGB-Kombination eine Ausgang RGB-Kombination drin. Das wäre bei 24-Bit Farbe also eine 255x255x255 große Matrix. Würde man da nun auch die Information mit 24 Bit darin ablegen (was ja das Minimum ist), dann bräuchte diese Matrix 47 Megabyte.
Das ist ja eine Menge und vielleicht auch schon zu viel für die spätere Art der Weiterverwendung.
Die Version in MPC ist reduziert auf 64x64x64 und legt dafür aber die Werte mit 16 Bit je Farbkanal ab. Das braucht nur 1,5 MB. Um dennoch für jedes 24 Bit RGB-Tupel eine Ausgangsfarbe zu haben, muss dann eben zwischen den Ausgangswerten interpoliert werden.
Ich denke, dass kann man schon als State-of-the-Art oder gar drüber bezeichnen. Eine HW-Farbraumkonvertierung rechnet sicher nicht mit mehr Daten und einfache Farbraumkonvertierung berücksichtigen nur die Primärfarben und interpolieren praktisch alles.
Diese Matrix wird von
LittleCMS berechnet. MPC lädt auch das richtige, dem Monitor zugewiesene Profil (kann man mit ProcMon sehen).
Die fertige Matrix wird dann in der Grafikkarte benutzt, um die eigentlich Konvertierung durchzuführen.
MPC nutzt dazu die Shader der Grafikkarteneinheit, die genau solche Sachen machen können. Es sind kleine Programme, die direkt in der Grafikkarte ablaufen und daher die CPU nicht belasten.
Das Programm wird auf jeden Pixel eines Bildes angewendet und macht genau den Lookup in der Matrix nach den Zielfarbwerten mit den Farbwerten, die der Pixel gerade hat. Auch die Interpolation kann dabei die Grafikkarte erledigen.
Ich nehme an, dass die 64x64x64 LUT einfach als 64 Texturen abgelegt werden, die jeweils 64x64 Pixel groß sind.
Zwischen verschiedenen Texturen interpolieren und diese in der Größe skalieren (also damit auch Zwischenwerte interpolieren), kann eine 3D-Grafikkarte. Das ist ihr Job.
Für das Interpolieren helfen auch die 16-Bit Auflösung.
Damit die Shader arbeiten können, muss das Videobild allerdings als eine 3D-Oberfläche vorliegen und das bedingt, dass bestimmte Videoausgabemodi aktiv sind. Das sind dann anscheinend VMR9 renderless oder EVR.
Der Eingabefarbraum für die Videos ist fest kodiert und wird entweder nach der Auflösung automatisch oder eben von User per Menu gewählt.
Es gibt SDTV PAL, SDTV NTSC und HDTV.
Lustigerweise kann man so genau keine Videos farbrichtig sehen, die schon in einem erweiterten Farbraum vorliegen.
***
Nach dem kurzen Exkurs mal meine Beobachtung.
Auf meiner ATI4870 ist alles supi. Geht, klappt immer und sieht gut aus. Mit EVR unter Windows7 läuft auch alles mit ReClock zusammen ruckelfrei.
Alter Laptop mit GMA950 (und Windows7) klappt es leider nicht. Man kann zwar nach manchen Umschaltungen des Output das Farbmanagement anschalten, es macht aber keinen Unterschied. Beendet man dann MPC und starten ihn neu, sind die Settings im Prinzip wie vorher, aber Farbmanagement ist ausgegraut.
Die Umschaltung der Output-Modi funktioniert evtl. nicht sauber ohne den MPC neu zu starten.
Ich würde mal annehmen, die Grafikkarte muss wenigstens DirectX9 haben.