Sind meine XBMC-Pakete mit bestimmten NVIDIA-Treiber-Versionen inkompatibel?

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


    Code
    1. 180.16: With the NVIDIA 180.16 beta release, the VdpDecoderCreate API has
    2. been broken so all clients such as MPlayer and MythTV will now need to be
    3. 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

  • hepi
    Nur als Ergänzung ein Zitat aus known_issues.txt:


    --- Linux Specific Issues -----------------------------------------------------
    ...


    *) VDPAU is still a new and experimental feature. It is disabled by default and
    will NOT be selected if renderer is set to 'Auto', it must be set manually.
    Ensure that the latest drivers from NVidia are installed. As of this writing,
    >180.44 is sufficient. It is known that certain subtitles may not be displayed
    when VDPAU is enabled.


    Und motd2k (xbmc-Entwickler) schrieb in einem Thread im xbmc-Forum:
    That commit ups the driver requirement to 185.xx i'm afraid. You'll probably find X is pegging your CPU whilst playing video if you're using 180.xx, hence the UI slowdown.

  • semerchet, danke für die Infos!


    Zitat

    Original von semerchet
    >180.44 is sufficient. It is known that certain subtitles may not be displayed
    when VDPAU is enabled.

    180.44 ist auch glücklicherweise die Version, die man momentan für Ubuntu Jaunty standardmäßig installiert bekommt, was auch erklärt, warum meine Jaunty-Pakete eine Build-Dependency zu nvidia-180-libvdpau-dev haben. Wenn man neuere NVIDIA-Treiber will, muss man auf non-standard Repositories ausweichen.

    Zitat

    Original von semerchet
    Und motd2k (xbmc-Entwickler) schrieb in einem Thread im xbmc-Forum:
    That commit ups the driver requirement to 185.xx i'm afraid. You'll probably find X is pegging your CPU whilst playing video if you're using 180.xx, hence the UI slowdown.

    Interessant. Wenn ich es richtig verstehe, bietet der Treiber ab 185.19er eine pixmap-bezogene Performance-Optimierung, die motd2k in jenem Commit scharf schaltet. Diese Optimierung hat aber nix mit VDPAU zu tun, sondern mit X. Empfehlung wäre also: Wenn man seine CPU entlasten will, sollte man nicht mehr den 180er-Treiber verwenden bei einer XBMC-trunk-Revision >= 23193.


    Gruß
    hepi

  • hi

    Zitat

    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.


    stimmt so nicht ist libvdpau-dev nicht instalirt baut xbmc auch wen mann die option --enable-vdpau und in der control nvidia-190-libvdpau-dev weglest
    mfg det

    Jeder sollte sein Leben so leben können wie er/sie es möchte, frei und
    unabhängig, in der Not anderen zur Seite stehend, nie vergessen was man
    ist, eben einfach nur Mensch sein mit allen Schwächen und Stärken
    Lieber stehend sterben als ewig gebückt leben

  • N'Abend,
    was ist den nun richtig, Abhängig oder nicht?
    Das hier steht immer noch im ersten Post:

    Zitat

    Ich will versuchen, das hier zu beantworten, weil die Frage im freevdr-Forum aufkam und meiner Meinung nach dort falsch beantwortet wurde.

    Gruß Axel

    Asus P5KPL-1600 Cel.440, 2x TT-S2-1600, OCZ Vertex, Asus GT520 , Gen2VDR V3 Release :]

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von Fireblade ()

  • Oben schreibe ich:

    Zitat

    Original von hepi
    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.

    Ist das unklar ausgedrückt?

  • Hallo Axel,


    Zitat

    Original von Fireblade
    Hallo Henning,
    vielen vielen Dank für den äußert freundlichen Hinweis.
    Angenehme Nachtruhe
    Axel


    vielleicht habe ich Deine Frage nicht verstanden. Du fragtest: "Abhängig oder nicht?". Könntest Du Deine Frage noch etwas präzisieren, damit ich Dir zufriedenstellend antworten kann.


    Gruß
    hepi

  • Zitat

    Original von Fireblade
    N'Abend,
    was ist den nun richtig, Abhängig oder nicht?


    Abhängig sind sie nicht. Du kannst sie updaten usw. Aber es gibt ein Performance-Problem mit der GLX-Erweiterung bei 180.xx .


    Gruß Falk

  • Hi hepi,
    nach einigen Recherchen im XBMC-Forum und dem Hinweis von Falk (Danke) kann ich mir das ganze nun erklären, und wahrscheinlich lassen sich die Probleme der verschiedenen Versionen auf defektes Abspielmaterial (zumindest in einem Fall bei mir (m2ts-Format)).
    Ob es letztendlich besser läuft wenn nvidia vom X-Server und von XBMC gleich sind werden die nächsten Versionen zeigen, es lässt sich ja aus den sourcen selbstbauen ( oder jemand kennen der es baut)
    Gruß Axel

  • hi
    xbmc.log
    17:12:18 T:3078162320 M:1991188480 NOTICE: GL_VENDOR = NVIDIA Corporation
    17:12:18 T:3078162320 M:1991188480 NOTICE: GL_RENDERER = GeForce 8400 GS/PCI/SSE2
    17:12:18 T:3078162320 M:1991315456 NOTICE: GL_VERSION = 3.2.0 NVIDIA 190.42
    mfg det

    Jeder sollte sein Leben so leben können wie er/sie es möchte, frei und
    unabhängig, in der Not anderen zur Seite stehend, nie vergessen was man
    ist, eben einfach nur Mensch sein mit allen Schwächen und Stärken
    Lieber stehend sterben als ewig gebückt leben

  • Da es jetzt seit kurzem den Beta-Treiber 195.22 gibt, will ich anmerken, dass dafür jetzt erstmals die oben angesprochene Konstante VDPAU_VERSION in libvdpau inkrementiert worden ist:


    Code
    1. # Modified vdpau.h to increment VDPAU_VERSION, to reflect the fact that new features have been added in the past. Also, add the new define VDPAU_INTERFACE_VERSION.


    Code-Change:


    http://cgit.freedesktop.org/~a…9d596c2dadc657c932fae32e1


    Meines Wissens nach wird diese Konstante aber weder in xine-lib noch in XBMC derzeit ausgewertet. Ich bin neugierig, ob sich das jetzt ändert.


    Gruß
    hepi