Hallo,
vielleicht habt Ihr Euch ja schon mal gefragt: Gibt es Abhängigkeiten zwischen den von Euch verwendeten XBMC-Paketen und bestimmten Nvidia-Treiber-Versionen? Wird XBMC nur mit dem Nvidia-Treiber richtig rund funktionieren, mit dem es gebaut worden ist - und mit neueren Treibern crashen? (Ähnliche Fragen kann man als VDR-Nutzer übrigens auch bzgl. xinelib stellen, wenn man ein xinelib-basiertes Frontend mit VDPAU verwendet).
Ich will versuchen, das hier zu beantworten, weil die Frage im freevdr-Forum aufkam und meiner Meinung nach [URL=http://www.freevdr.de/forum/index.php/topic,598.msg3344.html#msg3344]dort falsch beantwortet wurde[/URL].
Erstmal haben XBMC-Binary-Pakete natürlich keine direkte Abhängigkeit zum Nvidia-Treiber (oder zur VDPAU-Library), was logisch ist, weil auch Leute ohne Nvidia-GPU XBMC verwenden wollen. Will man XBMC-Pakete mit anschaltbarem VDPAU-Support bauen, ist das XBMC-Sourcepaket jedoch angewiesen auf das Paket libvdpau-dev, welches die Headerfiles (wie vdpau.h und vdpau_x11.h) enthält, die zur Nutzung der VDPAU-Bibliothek libvdpau notwendig sind. Diese Bibliothek kam bisher immer mit den Nvidia-Treibern zusammen, das wird sich aber ändern: Aktuell gibt es Bestrebungen, die Library libvdpau komplett auszukoppeln aus dem Nvidia-Treiberpaket und von Nvidia-GPUs unabhängig zu machen. Das wird momentan auch bei den Distributoren von Debian diskutiert und auch bei Ubuntu. Somit können in Zukunft theoretisch auch Nvidia-Konkurrenten ihre GPU-Beschleunigungsfunktionen über libvdpau ansteuern lassen, wenn sie das wollen.
Nun gibt es die Nvidia-Treiber in vielen unterschiedlichen Versionen, z. B. die 180er-Reihe, die 185er-Reihe, 190er-Reihe. Jedes Nvidia-Treiberpaket, egal aus welcher Reihe, generiert bisher beim Bauen auch die Pakete libvdpau und libvdpau-dev. Wenn Nvidia nun dauernd neue Features und Bugfixes anbietet mit seinen regelmäßigen Treiber-Updates, ist die Frage: Was müssen die XBMC-Entwickler für Verrenkungen machen, damit XBMC mit libvdpau problemlos funktioniert mit all diesen verschiedenen Treiberversionen?
Die Antwort lautet: Bisher gar nichts! Die Library libvdpau hat eine API, die eine Zwischenschicht zwischen Applikationen und dem Grafikkartentreiber einzieht. Und an einer API sollten im Laufe der Zeit so wenig wie möglich inkompatible Änderungen vorgenommen werden, weil sonst alle Applikationen, die diese API verwenden, ständig neu angepasst werden müssten. Glücklicherweise ist dies auch hier der Fall, mir ist nur eine inkompatible API-Änderung bekannt, die mit Treiber-Version 180.16 reingekommen ist.
180.16: With the NVIDIA 180.16 beta release, the VdpDecoderCreate API has
been broken so all clients such as MPlayer and MythTV will now need to be
rebuilt from source against the revised API.
Ergänzungen der API sind hierbei ok, aber bestehende Elemente dürfen sich nicht ändern (=inkompatibel).
Was heißt das? Das heißt, dass die XBMC-Entwickler sich (bisher) keine Sorgen machen müssen, dass sie ihre VDPAU-Implementierung an unterschiedliche Nvidia-Treiber-Versionen anpassen müssen: Es erscheint ein neuer Nvidia-Treiber? Kein Problem, solange die API von libvdpau (=vdpau.h) sich nicht inkompatibel geändert hat.
Woran könnten die XBMC-Entwickler erkennen, dass sich die API geändert hat? Es gibt in vdpau.h die Konstante VDPAU_VERSION und über VdpGetApiVersion kann man die Version des Backends abfragen. Bisher steht der Wert der Konstanten VDPAU_VERSION in vdpau.h aber immer noch auf Null (0), egal, welchen Nvidia-Treiber (180er,185er,190er) man verwendet.
Neue Treiber-Versionen fixen zwar Bugs, verbessern die Bildqualität und bringen dem User vielleicht eine bessere Performance, aber die bestehende API, mit der entwickelt wird, ändert sich nicht, wird höchstens um neue Dinge ergänzt.
Deshalb kann ein XBMC-Binary, das eine Build-Dependency zu nvidia-180-libvdpau-dev hat (wie mein Jaunty-XBMC-Paket), problemlos auch mit der Nvidia-Treiber-Reihe 180, 185 und 190 verwendet werden, weil die API (siehe vdpau.h in libvdpau-dev) gleich geblieben ist.
Das kann sich natürlich in Zukunft ändern, aber dann werden die XBMC-Entwickler das Problem in ihrem Sourcecode lösen, so dass es mit der alten und der neuen Version funktioniert. Und in den XBMC- Sourcepaketen würde man als Paketbauer normalerweise die jeweils neueste libvdpau-dev Version referenzieren, um in den Genuss neuer Features zu kommen.
Gruß
hepi