Sonntag, 31. Mai 2009

XVID-Windows-Compilierung - Teil 1: Core und VFW-Treiber


Hintergrund


XVID-Binaries für Windows finden sich bei normalerweise unter http://www.koepi.info/xvid.html. Allerdings kann es etwas dauern bis nach einem neuen Release die entsprechenden Binaries zur Verfügung stehen. Am 28.05.2009 wurde XVID in Version 1.2.2 freigegeben (siehe z.B. Meldung im Heise-Ticker) und ich habe dies zum Anlass genommen XVID einmal selbst unter Windows zu compilieren. Wie ich feststellen konnte, geht dies ziemlich schnell und problemlos, falls man bereits ein Visual Studio installiert hat.

Meine Erfahrungen habe ich im Folgenden in Form einer kleinen Anleitung zum Compilieren von XVID 1.2.2 zusammengestellt. Die Anleitung erhebt keinen Anspruch darauf immer und unter jeder Umgebung zu funktionieren. Aber vielleicht kann diese Anleitung für jemanden hilfreich sein, der sich auch einmal an die XVID-Compilierung wagen möchte.


Benötigt

XVID Sourcen: http://www.xvid.org/

NASM Assembler: http://www.nasm.us/

Die folgende Anleitung wurde unter folgenden Umgebungen getestet:
  • Windows XP SP3 mit Visual Studio 2005
  • Windows Vista SP2 mit Visual Studio 2008

Vorbereitung

Hinweis: Um potentielle Probleme mit Spaces im Pfad von vornherein auszuschliessen, am besten nur Pfade ohne Spaces wählen.

1. XVID Sourcen in ein beliebiges Verzeichnis entpacken. Im Folgenden sei dies als %XVID%
bezeichnet.

2. NASM Assembler in ein beliebiges Verzeichnis entpacken. Im Folgenden sei dies als %NASM% bezeichnet.


Compilieren

Die Compilierung von XVID erfolgt in zwei Schritten:
  1. XVIDCore-Bibliothek compilieren
  2. XVID VFW-Treiber compilieren

1. XVIDCore-Bibliothek compilieren

Visual Studio Workspace File "%XVID%\build\win32\xvidcore.dsw" öffnen.
  • Nachfragen, ob VCProject-Dateien (*.vcproj), die bereits im aktuellen Format vorliegen, verwendet werden sollen, mit "Ja" beantworten.
  • Nachfragen, ob Projektdateien (*.dsp), die in einem älteren Format vorliegen, in das aktuelle Format konvertiert werden sollen, mit "Ja" beantworten.
Rechts im Solution Explorer sollte das Projekt "libxvidcore" durch eine fette Schrif als aktuelles Projekt gekennzeichnet sein.

In der Symbolleiste wird als Build-Konfiguration "Debug" und "Win32" angezeigt. Hier "Debug" auf "Release" ändern.

Nun den NASM-Assembler zum Pfad der VC++ Tools hinzufügen:
  • Tools > Options... > Projects and Solutions > VC++ Directories
  • Den Pfad "%NASM%" einfügen (Position in Liste ist egal)
Die Ansicht der Ausgabe aktivieren (Menü: View > Output), um den Fortschritt des folgenden Build-Laufes verfolgen zu können.

Um den Build zu starten im Solution Explorer mit der rechten Maustaste auf das aktuelle Projekt "libxvidcore" klicken, dann "Project only > Build only libxvidcore" wählen.

Nach erfolgreichem Build sollte die Datei "%XVID%\build\win32\bin\xvidcore.dll" erzeugt worden sein.


H I N W E I S

Hat man beim Öffnen des Workspace Files nicht die bestehenden *.vcproj-Dateien übernommen, so werden nun einige ASM-Files nicht compiliert und der Build bricht mit einer entsprechenden Meldung ab:

[...]
1>Assembling %XVID%\src\image\x86_asm\colorspace_yuyv_mmx.asm

1>nasm: error: no input file specified

1>type `nasm -h' for help

1>Project : error PRJ0019: A tool returned an error code from "Assembling %XVID%\src\image\x86_asm\colorspace_yuyv_mmx.asm"


Dies läßt sich jedoch durch eine Korrektur der Custom-Build-Anweisung (Aufruf des NASM-Compilers) für die betroffenen Dateien beheben. Dazu die betroffene Datei im Solution Explorer im Projekt ansteuern. Nun rechte Maustaste > Properties > Custom Build Step > Commandline. Dort steht:

nasm -o "$(IntDir)\$(InputName).obj" -f win32 -DWINDOWS -I..\..\src\ -I"$(InputDir)"\ "$(InputPath)"

Dies korrigieren auf (Entfernen der Anführungszeichen und des Backslashs nach -I bis Ende):

nasm -o "$(IntDir)\$(InputName).obj" -f win32 -DWINDOWS -I..\..\src\ -I$(InputDir) $(InputPath)

Build neu starten. Der Build hängt nun bei einem anderen ASM-File. Nun solange die Custom Build Step Commandline betroffener ASM-Files wie oben angegeben ändern bis der Build durchläuft. Betroffen sind lediglich die folgenden drei ASM-Files:
  • colorspace_yuyv_mmx.asm
  • colorspace_yuv_mmx.asm
  • colorspace_rgb_mmx.asm
Die Custom Build Step Commandlines sind in der VS-Projektdatei "libxvidcore.dsp" zu den einzelnen ASM-Dateien hinterlegt. Eine Änderung der Commandlines kann daher auch mit einem Texteditor in dieser Datei vorgenommen werden (sofern das Projekt nicht gerade in VS geöffnet ist).

2. VFW-Treiber compilieren

Falls der Workspace aus dem vorherigen Build noch geöffnet sein sollte, dann diesen schließen (Menü: File > Close Solution).

Nun Projektdatei "%XVID%\vfw\vfw.dsp" öffnen (Nachfragen wie oben beantworten).

Sicherstellen, dass die Konfiguration auf "Release" und nicht auf "Debug" gestellt ist.

Build des Projekts "vfw" im Solution Explorer starten (rechte Maustaste > Build).

Nach dem Start des Build öffnet sich eine Dialogbox, da VS die Lösung vor dem Build noch in eine Solution-Datei (*.sln) speichern möchte. Dies kann man getrost mit "Cancel" abbrechen.

Der Build sollte problemlos durchlaufen.

Im Verzeichnis "%XVID%\vfw\bin" sollten nun die folgenden drei Dateien zu finden sein:
  • xvid.inf
  • xvidvfw.dll
  • xvidcore.dll

Um den VFW-Treiber zu installieren einfach "xvid.inf" mit der rechten Maustaste anklicken, "Installieren" wählen. Eventuelle Nachfragen, ob der Treiber tatsächlich installiert werden soll, bestätigen. (Die DLL-Dateien werden bei der Installation in das system32-Verzeichnis von Windows kopiert.)

Um den Treiber zu Deinstallieren: Systemsteuerung > Software. Dort aus der Liste der installierten Software "Xvid MPEG-4 Video Codec" auswahlen und auf "Entfernen" klicken.

Weitere nützliche Infos zur Compilierung von XVID unter Windows (wenn auch älter) finden sich hier: http://www.discdude.net/xvid/compile.html

Im nächsten Teil werden wir die Compilierung von XVID durch die Compilierung des XVID-DirectShow-Filters, dessen Installation und Test abschließen.

Keine Kommentare:

Kommentar veröffentlichen