Samstag, 17. Januar 2009

Explorer-Crash durch emzdecmp4_h263.dll

Die Ausgangssituation

Ich öffne im Windows Explorer ein Verzeichnis mit verschiedenen Videos und bekomme eine Meldung, dass der Explorer gecrasht ist. Okay, kann ja mal passieren ;-) Aber es sollte nicht reproduzierbar sein.

Die Analyse
Dann klicken wir mal auf die Details des Crash-Reports um zu erfahren, dass folgende DLL dafür verantwortlich ist: emzdecmp4_h263.dll
Fehlgeschlagene Anwendung explorer.exe, Version 6.0.2900.5512, fehlgeschlagenes Modul emzdecmp4_h263.dll, Version 2.0.0.0, Fehleradresse 0x00002827.

Weiter: Dann suchen wir die Datei mal auf der Platte. Fündig wurde ich in einem Systemordner von Nokia, genau genommen in dem hier:
C:\Programme\Gemeinsame Dateien\Nokia\Codecs

Der Eigenschaften-Dialog verrät mir dann noch, dass der Hersteller eine Firma namens "Emuzed Inc." ist und dass es sich dabei wohl um irgend einen MP4/H.263-Videocodec handelt, den vermutlich die neulich erfolgte Installation der Nokia PC Suite ins System gebracht hat.

Toll! :-(

Video- und auch Audio-Codecs, Muxer etc. werden heutzutage in der Regel durch DirectShow verwaltet. Jeder Codec ist somit ein sogenannter DirectShow-Filter. Davon kann es im Laufe der Zeit ziemlich viele geben - und schlimmer noch, ein Codec ist meistens nicht nur für einen Typ Videokompression zuständig. Wenn man sich das Filmformat AVI anschaut, dann merkt man, dass AVI nur ein Containerformat ist - man weiß also anhand der Endung nicht automatisch, was für ein Videoformat wirklich benutzt wird. Es kann ein alter Intel-Codec sein oder eine aktuelle XviD-Version oder sonstwas ausgefallenes …

Da ein Software-Player allerdings erkennen muss, welchen der vielen installierten Video-Codecs er zur Anzeige eines Films benutzen soll, ist diese Information als sogenannter FourCC-Code am Dateianfang (also im Header) einer AVI-Datei abgelegt. Kompliziert wird es dann, wenn mehrere Codecs glauben, dass sie alle für ein und denselben FourCC-Code zuständig sind. So kann DivX auch XviD abspielen und umgekehrt. Diese Doppelbelegung kann genau zu solchen Problemen und Crashs wie bei mir führen.

Die Reparatur

Welcher Codec bei Mehrdeutigkeit nun letztendlich verwendet wird, das bestimmt eine Art Priorität, auch "Merit" genannt.
Um das Problem nun in den Griff zu bekommen, gibt es zwei Möglichkeiten: Den fehlerhaften Codec ganz aus dem System löschen oder die Priorität soweit herabsetzen, dass er in der Praxis gar nicht mehr zum Tragen kommt.
Für beides kann man den DirectShow Filter Manager benutzen.
DirectShow Filter Manager Nach dem Start des Filter Managers sieht man eine farbenfrohe Übersicht aller installierten Filter und findet auch schnell die Codecs der Firma Emuzed im entsprechenden Nokia-Ordner.
Wenn man sich jetzt die "Filter Properties" anzeigen lässt, dann Merit-Einstellung für emzdecmp4_h263.dllkann man - wie auf folgendem Bild zu erkennen -  den Merit neu setzen oder den Filter ganz abmelden ("Unregister Filter"). Ich habe mich für erstere Variante entschieden, da sie leicht rückgängig zu machen ist. Die Nokia-Installation hat ihren Codecs einen hohen Merit-Wert verpasst, so dass sie eben in Systemrangfolge weit vorne stehen. Das ändert sich bei einem Zahlenwert von 200000, der im Filter Manager dem Wert "Do not use"/"Nicht benutzen" entspricht. Diesen wert habe ich zur Sicherheit für alle Emuzed-Filter gesetzt :-)

Nun noch ein Reboot und das Problem ist verschwunden.

Bisher konnte ich noch keine Nebenwirkungen erkennen!

blog comments powered by Disqus

Design von Dicas Blogger, angepasst durch Mario Ruprecht