HTPC Bildfrequenz Optimierung
Aus D65
Inhaltsverzeichnis |
[bearbeiten] Einführung
Es geht um den Versuch eine Verbesserung des Setups durch Optimierung der Bildwiederholfrequenz zu erreichen, um ein Minimum an ausgelassenen/wiederholten AC3-Paketen bei Verwendung von ReClock zu bekommen.
Jeder ReClock-Nutzer mit einem externen AC3-Amp kennt ja das Problem:
- Irgendwann werden einzelne AC3-Frames ausgelassen oder wiederholt, weil ReClock die Synchronität zwischen Bild und Ton wiederherstellen muss.
- Man kann das Problem minimieren, indem man die Bildwiederholfrequenz mit PowerStrip anpasst.
- Die Einstellung einer besseren Wiederholrate ist aber mehr oder minder Glückssache, da die Pixelclock der Grafikkarte sich nur in relativ groben Schritten verstellen lässt.
- Man kann eine noch feiner abgestufte Frequenz erreichen, wenn man zusätzlich auch noch die totale Auflösung verstellt. Also auch noch die Porches etwas verdreht. Da sich die Wiederholfrequenz aus vFreq = Pixelclock / (hTotal * vTotal) ergibt, hat man so eine noch viel größere Menge an möglichen Frequenzen.
- Die Berechnung der resultierenden vFreq von PowerStrip ist leider etwas ungenau. Um wirklich einen 2-3 Stunden Film ohne ein einziges AC3-Problem abspielen zu können, braucht man ein paar mehr Nachkommastellen.
Deshalb habe ich mich als Workaround für dieses Problem rangesetzt und die Berechnung der Pixelclock bei Radeon-Karten etwas genauer untersucht. Nach einer längeren Diskussion mit Rik Wang (dem PowerStrip-Autor), kann ich nun die Pixelclock mit fast beliebiger Anzahl von Nachkommastellen ausrechnen. Daraufhin habe ich ein Skript geschrieben, welches folgendes macht:
- Der erste Teil des Skriptes analysiert ein ReClock-Log auf die Abstände zwischen den AC3-Problemen. Damit lässt sich der notwendige Korrektur-Faktor für die Bildwiederholfrequenz berechnen. Dieser Korrekturfaktor ist eine Hardware-Konstante, die sich aus den Taktgebern der Audio- und Grafik-Karte ergibt. Solange also weder die Grafikkarte, noch die Audiokarte getauscht wird, ist dieser Faktor für alle Auflösungen, Betriebssysteme und Abspielprogramme gültig.
- Der zweite Teil wird nun mit diesem Korrekturfaktor gefüttert und einer PowerStrip-Einstellung, welche schon ganz ordentlich auf dem Projektor läuft (also von der Bildlage, Größe, Scanrate, etc). Danach berechnet es eine Liste von möglichen neuen PowerStrip-Einstellungen um der optimalen Bildwiederholrate möglichst nahe zu kommen. Nicht jeder der berechneten Vorschläge wird in der Praxis wirklich gut funktionieren, da jeder Projektor etwas anders auf verstellte Porches etc. reagiert, aber es sollte sich so relativ gezielt eine bessere PowerStrip-Einstellung erreichen lassen. Bei mir kriege ich die Zeit zwischen zwei AC3-Problemen öfters auf über 10h. Klappt nicht immer so gut, aber auf über 3h sollte man immer kommen und damit fast jeden Film ohne ein einziges verlorenes/wiederholtes AC3-Paket genießen können.
Um nun zu sehen, ob dieser Ansatz auch bei anderen Setups genauso gut funktioniert wie bei mir, würde ich das gerne bei ein paar mehr Leuten durchexerzieren.
Die Anforderungen sind also:
- grundlegendes Interesse
- HTPC-Nutzer mit Radeon-HD (oder Radeon-X) Grafikkarte
- etwas Erfahrung mit PowerStrip
- Verständnis der Funktion von ReClock (man sollte das ReadMe von ReClock gelesen und grob verstanden haben)
- eine gute Portion Geduld, da die Testläufe teilweise mehrere Stunden dauern (aber dabei muss man natürlich nicht die ganze Zeit anwesend sein und der Projektor muss dabei auch nicht laufen).
[bearbeiten] Theorie
Um das Problem zu verstehen, versuche ich einmal kurz zusammenzufassen, wo die Ursachen liegen.
In einem PC, mit heutiger Architektur, gibt es für den Ton und das Bild jeweils eine völlig unabhängige Baugruppe, nämlich die Audiokarte und die Grafikkarte. Jede dieser Baugruppen benutzt nun ein ebenfalls unabhängiges Frequenz-Normal (in der Regel einen Quarz-Oszillator) zur Bestimmung notwendiger Frequenzen. Dieses gilt in der Regel auch, wenn Audio-Karte und/oder Video-Karte auf dem Mainboard integriert sind. Und kein Quarz-Oszillator ist wirklich so genau, dass zwei davon absolut die gleiche Frequenz liefern würden. Besonders nicht, wenn man eine bestimmte absolute Frequenz anpeilt, da die üblichen Fertigungstoleranzen eines Oszillator-Quarzes im Bereich bis zu +/- 100 ppm ("parts-per-million") liegen. Und da man es gleich mit zwei Oszillatoren zu tun hat, verdoppelt sich diese Toleranz auch noch. Also selbst, wenn man alle Einstellungen theoretisch richtig machen würde, dann kann es leicht sein, dass diese beiden Zeitbasen um 0,02% auseinander liegen. Klingt nicht viel, macht bei einem 90min Film aber schon über eine Sekunde aus.
Es wird in der Praxis also niemals zu einem absoluten Gleichlauf zwischen Audio- und Video-Wiedergabe kommt. Wenn nun während der Wiedergabe diese Diskrepanz zu groß wird, würde der Ton nicht mehr Lippensynchron sein und eine Abspielsoftware muss sich nun überlegen, wie es wieder einen akzeptablen Gleichlauf herstellt.
In einer normalen DirectShow-Wiedergabekette (also ohne ReClock), wird die Audiokarte als Taktbasis verwendet. Laufen Bild und Ton zuweit auseinander, dann ist der Video-Renderer gezwungen ein Bild zu wiederholen oder eines auszulassen. Diese Bild-Ruckler sind so unangenehm, dass sie zur Entwicklung von ReClock führten.
ReClock versucht, im Gegensatz zu dem normalen Verfahren, den Audio-Zweig zur Wiederherstellung der Synchronität zu verwenden. Der Video-Renderer muss also keine Bilder mehr wiederholen oder auslassen, aber dafür muss etwas mit dem Ton passieren. Bei Verwendung von PCM-Ton (also z.B. bei Verwendung der analogen Ausgänge der Audiokarte), versucht ReClock den Ton dann geringfügig schneller oder langsamer ablaufen zu lassen.
Für komprimierten digitalen Ton (Dolby Digital/DTS) über S/PDIF oder HDMI ist dieses aber nicht möglich, da ReClock den Ton hier nicht selber bearbeiten kann, da er gar nicht im PC dekodiert wird. Es werden nur die unveränderten Datenpakete der Tonspur aus dem PC zu dem externen Dekoder geschickt. Um nun das Synchronitätsproblem zu lösen, kann ReClock nur ganze Tonpakete auslassen oder wiederholen. Man hat also Bild-Ruckler gegen Ton-Ruckler eingetauscht. In der Regel ist ein Tonpaket genau 32ms lang. Leider ist das groß genug, um diese Ton-Ruckler immer mal wieder hören zu können.
[bearbeiten] Was kann man also dagegen tun?
Damit ReClock den Ton gar nicht erst bearbeiten muss, kann man versuchen die Differenz der beiden Taktgeber auszugleichen. An der Soundkarte kann man leider nichts einstellen. Sie kennt nur einen festen Takt von 48 kHz. Aber für die Grafikkarte gibt es das Programm "PowerStrip", welches die Verstellung vieler Parameter der Grafikkarte erlaubt. Wenn es nun gelingt, die Bildwiederholrate der Grafikkarte genau so einzustellen, dass sie den Fehler des Taktgebers der Soundkarte ausgleicht (und ihres eigenen Fehlers), dann können wir damit rechnen, dass ReClock keine S/PDIF-Pakete verwerfen oder wiederholen muss. Zumindest nicht für die Zeit, die eine Filmwiedergabe in der Praxis dauern wird (also z.B. bis zu drei Stunden). Das ist auch der Ansatz, welcher im letzten Teil des ReClock-ReadMe beschrieben wird.
Das Problem ist aber leider, dass PowerStrip nur Bedienelemente hat, welche eine relativ grobe Verstellung der Bildwiederholfrequenz erlauben. Um unter 32ms Abweichung für einen drei Stunden Film zu kommen, brauchen wir eine Genauigkeit der Einstellung von weniger als 3ppm. Also in anderen Worten um weniger als 0,0003%. Die drei Nachkommastellen von PowerStrip erlauben aber nur Einstellungen mit einer Genauigkeit (im allerbesten Fall) von 0,001%.
Das hier vorgestellte Skript erlaubt nun aber eine Einstellung mit wesentlich höherer Präzision. In der Praxis dürfte sich eine Genauigkeit von bis zu 0,1ppm erreichen lassen. Und damit ist man dann weit davon entfernt in einem Film jemals einen Versatz zwischen Ton und Bild von den 32ms zu bekommen.
[bearbeiten] Durchführung der Messung
[bearbeiten] Messung vorbereiten
- Den HTPC für PAL-DVD-Wiedergabe einrichten. Nicht vergessen, dass der Audio-Dekoder "AC3 passthrough" machen muss. Als Video-Renderer empfiehlt sich der Overlay-Mixer.
- Herunterladen und entpacken der Test-DVD. Es handelt sich um eine DVD, die nur ein schwarzes Bild und Stille enthält. Dafür ist sie aber 24h lang und der Ton ist in DD5.1. Die gepackten Test-DVD-Dateien gibt es hier
- PowerStrip starten und das benutzte Timing zur Sicherheit in eine Textdatei kopieren.
- Im ReClock-Konfigurationsprogramm alle Einstellungen zurücksetzen ("Restore default settings") und die Log-Funktion aktivieren.
- Falls das Logging in ReClock schon aktiviert war, kann es sein, dass die Log-Datei (C:\reclock_log.txt) schon sehr groß geworden ist, deshalb empfiehlt es sich diese mal zu löschen.
- Im ReClock-Konfigurationsprogramm "Clean-up video clock timings database" drücken.
- ReClock mit der Test-DVD "warmlaufen" lassen. Ca. 5min würde ich sagen. Dann sollte das Icon grün sein und die "System clock correction" auf unter 5ppm.
ACHTUNG: Immer wenn Einstellungen in PowerStrip verändert werden, müssen die Schritte 6. und 7. erneut durchgeführt werden!
[bearbeiten] Messlauf starten
Nun kann man den ersten Messlauf starten. Einfach im Player die Test-DVD einmal stoppen und wieder starten. Nun sollte man den Rechner für einige Stunden in Ruhe die Test-DVD abspielen lassen, damit sich genug "Drops" oder "Repeats" ansammeln. Optimal dürfte es sein, wenn man etwa alle 30min einen dieser Hiccups (also einen "Drop" oder einen "Repeat") bekommt. Wenn es viel mehr sind, dann kann man den Testlauf schon nach einer Stunde beenden und eine erste Optimierung versuchen. Danach sollte man dann aber einen längeren Messlauf (z.B. über Nacht) machen.
Bei fast jedem HTPC kommt es gleich am Anfang der Wiedergabe zu einem einzelnen Hiccup. Das ist also normal und wird von der Messauswertung auch berücksichtigt. Um überhaupt ein Ergebnis berechnen zu können, braucht man mindestens zwei Hiccups im Messlauf (den Start-Hiccup nicht mitgerechnet).
Übrigens hat ReClock einen kleinen Bug, weshalb der Messlauf nach etwas über 13h stehenbleibt. Die Messung ist aber trotzdem gültig und wird immer reichen um ein genaues Ergebnis zu erzielen.
[bearbeiten] Auswertungs-Skript-Programm installieren
Nach dem langen Messlauf brauchen wir nun das Skript, um die Messung auszuwerten. Das Skript ist in Python geschrieben und benötigt zur Ausführung daher eine Python-Runtime. Zum Glück habe ich ja noch mein EventGhost Projekt, welches eine solche Runtime mitbringt und sich einfach installieren lässt. Es sollte aber die aktuelle Beta-Version sein. Also:
- Download-Verzeichnis des EventGhost Projektes besuchen und sich die EventGhost_Setup.exe mit der höchsten Nummer downloaden.
- Den Installer ausführen und sich einfach durchklicken. Die Option EventGhost am Ende zu starten kann man deaktivieren.
- Das Skript-Paket downloaden und entpacken. In dem Skript-Paket befindet sich eine Datei mit dem Namen "Start.vbs", welche dann zum Starten des Skriptes benutzt wird. Alle Dateien des Skript-Paketes müssen in einem Ordner zusammen bleiben. Wo der liegt ist aber egal.
[bearbeiten] Messergebnis bestimmen
Hier mal ein Screenshot des ersten Teils des Skriptes:
Die Bedienung ist eigentlich simpel:
- Zuerst muss das Skript wissen, welche Bildwiederholrate das Test-Medium hatte. In unserem Fall ist das 25.00 fps (PAL) und das ist auch die Voreinstellung dieser Option.
- Danach muss es wissen, welches PowerStrip-Timing verwendet wurde. Wenn PowerStrip zur Zeit der Ausführung des Skriptes läuft, dann holt es sich die aktuelle Einstellung direkt von PowerStrip. Ansonsten (oder wenn man zur Zeit ein anderes PowerStrip-Timing hat als bei dem Messlauf) kann man es in die Textbox kopieren.
- Nun gilt es den richtigen Lauf zu markieren, der in dem ReClock-Log gespeichert wurde. Um den besser identifizieren zu können, werden die Laufzeit und die Anzahl der Drops und Repeats angezeigt. Sollte der Lauf zu kurz für eine Messung gewesen sein, steht in der letzten Spalte "test to short for calculation", ansonsten ist dort die durchschnittliche Zeit zwischen zwei Hiccups zu finden.
Sind alle Einstellungen gemacht, erscheint dann in der untersten Textbox das Ergebnis. Im Falle des oben gezeigten Screenshots, waren die Grafik- und Sound-Taktgeber also um rund -95,987 ppm auseinander. Also muss die Grafikkarte um 95,987 ppm langsamer eingestellt werden, als die theoretische Geschwindigkeit eines Abspielmediums.
[bearbeiten] Errechnung neuer PowerStrip-Einstellungen
Mit dem Messergebnis (der "hardware deviation") kann man nun neue PowerStrip-Timings errechnen. Und zwar gleich für alle gewünschten Medienarten. Hierzu drückt man in dem Fenster auf "Calculate new timíngs" und es erscheint ein neues Fenster:
- Links oben sollte man das PowerStrip-Timings angeben, welches "verbogen" werden soll. Also ein Timing, dass auf dem Anzeigegerät schon ganz gut funktioniert, aber noch nicht die optimale Frequenz hat. Als Voreinstellung steht dort das Timing aus dem vorherigen Dialog.
- Rechts oben wird nun die Zielfrequenz konfiguriert. Man muss dort auswählen, für welche Medien-Art das Timing sein soll und einen Multiplikator, damit man z.B. durch 25.000 fps * 3 auf 75 Hz kommt. Wichtig ist es nun hier die gemessene "hardware deviation" anzugeben.
- Sind alle Angaben vollständig, drückt man einmal auf "Calculate" und es erscheint eine Liste von optimierten Timings. Mit einem Rechtsklick auf einen Listeneintrag, kann man das jeweilige Timing in die Zwischenablage übertragen oder direkt mit PowerStrip anwenden lassen.



