27.Jan.2001
Fun Time World
|
SoftCinema und wie man an neue Codecs kommt
Sebastian Brylka von Fun Time World hat eine Zusammenfassung eines
polnischen Artikels (siehe Titellink) geschrieben, welche wir hier mit
seinem Einverständnis wiedergeben:
«Jacek Cybularczyk, Autor von SoftCinema veröffentlichte auf der Seite
Amiga.com.pl einen Artikel über die
Herkunft neuer Codecs für den Video-Player. Der Artikel ist in
polnischer Sprache, deshalb folgen hier nur die wichtigsten Einzelheiten.
Das Programm SoftCinema kann inzwischen die beiden Formate OpenDivX und
bald auch 3ivX lesen. Was noch fehlt, ist z.B. MPEG-4 Unterstützung und
einige andere nicht ganz legale Codecs. Hier hat man das Problem, dass die
Sourcen der Formate nicht frei erhältlich sind. Man hat aber einige
Möglichkeiten, um auch das Problem zu lösen. Für den Macintosh existieren
zwar Codecs für MPEG-4 und DivX, doch aufgrund von fehlenden Dokumentationen
der Macintosh Resourcen und Extensions wäre das alles etwas schwierig.
Ein PowerMac zur Disassemblierung fehlt den Autoren offensichtlich auch.
Bei der zweiten Möglichkeit schreibt der Autor, dass viele dies für idiotisch
halten werden, aber die Sache funktioniert. Hier nimmt man sich die Windows
dll's zu Hilfe. Vor ca. zwei Monate begannen die Arbeiten. Die dabei verwendete
Technik wird als "Binary Translation" bezeichnet. Als erstes wird der x86 Code
für den C Preprozessor in Form einer Makro-Instruktion vorbereitet. Viel Arbeit
nimmt dabei das Programm TX86 ab, das die dll's (vergleichbar mit Amiga Libraries)
einlesen und in C Code umwandeln kann. Das funktioniert nicht ganz automatisch,
so dass man hier noch vieles selbst korrigieren muss. Der so erzeugte Code ist
kompiliert und lässt sich in einer Windows emulierten Umgebung genannt WIN32ENV
ausführen. Emuliert wird dabei ein Teil von Win32 und einige wichtige Bibliotheken.
Das alles funktioniert auf einem PowerPC nur nativ. Es laufen zwar alle möglichen
Codecs, aber die Geschwindigkeit liegt bei schlappen 1 FPS.
Damit die Sache etwas schneller wird, muss der gesamte Code, der ca. 17000 Zeilen
mit Makro-Instruktionen enthält, optimiert werden. Ohne Optimierung reichten 72 MB
für eine Kompilierung leider nicht aus, deshalb wurden die restlichen Arbeiten unter
APUS mit einer 200 MB SWAP Datei durchgeführt. Bei einer optimierten Kompilierung
wurde eine 1 GB SWAP Datei benötigt. Der Vorgang dauerte ca. 13 Stunden. Doch die
Mühe hat sich gelohnt, alles läuft inzwischen viel schneller. Als nächstes werden
die dll's, um noch bessere Geschwindigkeiten zu erreichen, in Assembler übersetzt.
Das ist nach einer Analyse des C-Codes, und dem was der GCC generiert hat, möglich.
Später wird alles noch einmal weiter optimiert. Nach einem durchgeführtem Profiling
werden oft gebrauchte Programmteile entweder neu geschrieben oder noch stärker
optimiert. (ps)
[Meldung: 27. Jan. 2001, 14:18] [Kommentare: 11 - 28. Jan. 2001, 16:00]
[Per E-Mail versenden] [Druck-Version] [ASCII-Version]
|