CiNcH Posted January 7, 2011 Share Posted January 7, 2011 Ich habe mich wieder einmal der Synchronisation zwischen Videowiedergabe (Video fps) und Videoausgabe (Hz) gewidmet. Ich werde hier mal Optimalfall und Fehlerfälle mit Lösungsansätzen dokumentieren. Später werden diese Informationen in meinen Wiki-Artikel 'DirectShow und Synchronisation' einfließen. Problemanalyse Timings kann man sehr gut mit MPC-HC und dem mittlerweile integrierten EVR Sync Renderer (ehemals GothSync) analysieren. Während der Wiedergabe kann ein Graph eingeblendet werden (STRG + J), welcher Aufschluss über die Synchronität zwischen Wiedergabe und Ausgabe gibt. Entlang der horizontalen Achse (X) verlaufen die Frames (Skalierung: 25 Frames). Die vertikale Achse (Y) ist in Millisekunden skaliert (Jitter/Offset-Achse, dazu gleich mehr). Die grüne Kurve visualisiert die Zeitpunkte, zu welchen der Renderer beginnt die Frames zu zeichnen. Die rote Linie stellt die Zeitpunkte der VSync-Signale dar, zu welchen die Frames dann auf den Bildschirm ausgegeben werden. Im Graph kann man also ablesen, wie sich Wiedergabe und Ausgabe zueinander verhalten. Im Optimalfall bleiben rote und grüne Kurve parallel zueinander mit einem gewissen Offset (siehe obigen Screenshot). Dieser Offset (auch Sync-Offset genannt) sollte groß genug sein, damit der Renderer noch diverse Filter (z.B. Shader) über das Bild laufen lassen kann. Zum VSync-Zeitpunkt sollte das Bild dann bereit sein. Kollidieren grüne und rote Kurve, kommt es zu Rucklern. Bei den folgenden Screenshots wurde das Video mit einer Originalgeschwindigkeit von 23.976 fps wiedergegeben (Framedauer 41.7ms). Der VSync kommt aber alle 41.6ms (24Hz). Findet keine Synchronisation statt, wandert die Präsentation durch den Renderer langsam in Richtung VSync (1) bis es dann zu einem Überlauf kommt (2). (1) (2) Bei einem Unterschied von 0.024 (24 - 23.976) kommt es alle 43 Sekunden zu diesem Phänomen. Ein übliches Problem bei Renderern ist, dass der Sync-Offset zu klein ist, was in einem konstanten Ruckeln resultiert, da das Bild ab und zu kurz vor oder kurz nach dem VSync zur Verfügung steht. Synchronisationsansätze Der EVR Sync Renderer in MPC-HC bietet 3 Synchronisationsansätze. Bei 'Sync video to display' wird wie bei ReClock die Wiedergabegeschwindigkeit angepasst, indem die Uhr im DirectShow-Graph verlangsamt oder beschleunigt wird, was nur bei kleinen Abweichungen praktikabel ist, z.B. 23.976 -> 24. Audio wird adaptiv durch Frequenzänderungen angepasst. Das funktioniert natürlich nur für unkomprimiertes PCM, nicht aber für komprimierte S/P-DIF / HDMI Audio Formate. Bei 'Sync display to video' wird mittels PowerStrip der VSync verschoben. Das wird durch Variation der unsichtbaren Pixel (Front/Back Porch) bei der Ausgabe erreicht. Das ist der optimale Ansatz, da er sowohl in einer Streamingumgebung funktioniert, als auch mit komprimierten Audio Formaten. Problem ist allerdings, dass die GPU-Hersteller sehr sparsam mit der Veröffentlichung von Spezifikationen umgehen und PowerStrip somit nur eine eingeschränkte Unterstützung für aktuelle GPU's hat. 'Present at nearest vsync' ist die bevorzugte Variante, wenn die eingesetzte GPU von PowerStrip nicht unterstützt wird und Videoerzeuger und Verbraucher entkoppelt sind (Streaming- bzw. Pushumgebung) oder komprimiertes Audio ausgegeben werden soll. Hier zeichnet der Renderer die Frames mit einem konstanten Offset relativ zum VSync. Um die Synchronität zu wahren kommt es in regelmäßigen Abständen (je nachdem wie synchron Wiedergabe und Ausgabe sind) zu einem einzigen Ruckler, bei dem die Präsentation einen VSync vor oder zurück springt. Hier noch einmal obiges Beispiel (23.976 fps Wiedergabe bei 24 Hz Ausgabe), diesmal aber mit eben erwähntem Synchronisationsmechanismus: Quote Link to comment
nuts Posted January 10, 2011 Share Posted January 10, 2011 Bei einem Unterschied von 0.024 (24 - 23.976) kommt es alle 43 Sekunden zu diesem Phänomen. Ich mach mal hier weiter, da das im internen Sourcefilter Thread wenig verloren hat. Bei meiner Ati HD5670 lässt sich 23,976hz (23hz im Treiber) ausgeben. Das kann man mit einem Videoprozessor (dvdo edge bei mir) auch gut nachweisen, da der frameratelock laut VP bei 23,98 <-> 23hz (Anzeige gerundet) und 24,00 <-> 24hz liegt. Bei der Dateiwiedergabe ist dann nach meinem Verständnis nurnoch der unterschiedliche Audio / Video Taktgeber problematisch. Wobei mir hier nicht klar ist wie Ati das umgesetzt hat. Quote Link to comment
CiNcH Posted January 11, 2011 Author Share Posted January 11, 2011 Bei meiner Ati HD5670 lässt sich 23,976hz (23hz im Treiber) ausgeben. Ich kann für meine HD 3650 nirgends 23 fps einstellen. Ich denke das geht mit älteren Modellen noch nicht, entweder Treiber- oder Hardwarelimitierung. Bei der Dateiwiedergabe ist dann nach meinem Verständnis nurnoch der unterschiedliche Audio / Video Taktgeber problematisch.Wobei mir hier nicht klar ist wie Ati das umgesetzt hat. Wo soll das Problem sein? Ohne ReClock wird die Uhr der Soundkarte verwendet. Da Audio die gleiche Geschwindigkeit wie das Video haben sollte passt das doch wunderbar. Der VSync der GPU kommt alle 41.7ms (bei 24 Hz alle 41.66ms). Das einzige Problem ist der übliche Drift zwischen Uhr der Soundkarte und VSync, weil diese nicht wie beim ReClock-Ansatz synchronisiert sind. Quote Link to comment
nuts Posted January 11, 2011 Share Posted January 11, 2011 Genau und da der Audio/Video Sync. fehlt kommt es (streaming umgebung oder bitstream Ausgabe) zu drops/repeates oder zu einem aueinanderlaufen von Audio/Video. Letzeres (ohne timing optimierung) passiert imho beim DVBViewer wenn man über sehr lange Zeit den AC3 Ton encodiert ausgibt. Ich bemerke das während der langen Fussball Samstage (15:30 bis 20:30) auf Sky SportHD. Quote Link to comment
CiNcH Posted January 11, 2011 Author Share Posted January 11, 2011 Die einzige echte Lösung ist da 'sync display to video'. Da kann die Soundkartenuhr verwendet werden und der VSync wird damit synchronisiert. Leider gibt es kein Standard-API womit man die Displaytimings einstellen (Pixelclock, unsichtbare Pixel bzw. Front und Back Porch usw.) und schon gar nicht dynamisch variieren kann. PowerStrip kann das und bietet auch ein API dafür an. Aber da die GPU-Hersteller die Spezifikationen nicht so gerne herausrücken... Beim Streaming kann es halt auf Grund der fehlenden Synchronisation zwischen Sender und Empfänger noch zu Problemen kommen, wenn die Pufferverwaltung schlecht ist (Bufferoverflow und Underrun). Quote Link to comment
nuts Posted January 11, 2011 Share Posted January 11, 2011 (edited) Wie nutzt man denn die von dir angesprochenen Sync. Varianten? Bei mir ist bis auf 'Present at nearest vsync' nichts verfügbar. Edit\ Mal ein Bild mit der Einstellung 23hz und einer 23,976 Bluray Die beiden Linien trafen sich im Testzeitraum (~5min) nie. Edited January 11, 2011 by nuts Quote Link to comment
CiNcH Posted January 11, 2011 Author Share Posted January 11, 2011 Wie nutzt man denn die von dir angesprochenen Sync. Varianten?Bei mir ist bis auf 'Present at nearest vsync' nichts verfügbar. Aktuelle Version von MPC-HC? Einstellungen können nur vorgenommen werden, wenn kein Video läuft. 'sync display to video' funktioniert nur, wenn PowerStrip läuft. Allerdings wird das erst zur Wiedergabezeit erkannt, sprich selbst wenn PowerStrip nicht installiert ist, sollte diese Option nicht ausgegraut sein. In den Optionen bei Output ist aber der EVR Sync Renderer gewählt, oder? Mal ein Bild mit der Einstellung 23hz und einer 23,976 BlurayDie beiden Linien trafen sich im Testzeitraum (~5min) nie. Können sie bei 'present at nearest vsync' auch gar nicht. Nur wenn keine Synchronisation stattfindet. Wenn die Wiedergabe mit 23.976 fps und die Ausgabe mit selbiger Hertzanzahl laufen, dürfte es aber nur alle paar Stunden dazu kommen, da die Ungenauigkeit dann recht gering ist. Quote Link to comment
nuts Posted January 11, 2011 Share Posted January 11, 2011 (edited) Hm die neuste release Version mit EVR Sync Renderer (Powerstrip installiert). Welche hast du installiert? Muss ich nachher nochmal schauen ... Edited January 11, 2011 by nuts Quote Link to comment
CiNcH Posted January 11, 2011 Author Share Posted January 11, 2011 Nimm ein aktuelleres Build von hier. Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.