Jump to content

EVR Sync Renderer


CiNcH

Recommended Posts

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.

 

24fps_24hz.jpg

 

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).

23fps_24hz_1.jpg (1)

23fps_24hz_2.jpg (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:

23fps_24hz_nearest.jpg

Link to comment

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.

Link to comment
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.

Link to comment

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.

Link to comment

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).

Link to comment

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.

post-39934-0-05060800-1294764491_thumb.png

Edited by nuts
Link to comment
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 Bluray

Die 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.

Link to comment

Hm die neuste release Version mit EVR Sync Renderer (Powerstrip installiert).

Welche hast du installiert?

 

Muss ich nachher nochmal schauen ... :wacko:

Edited by nuts
Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...