DBus connection failure / segfault mit xineliboutput

  • Hallo zusammen,


    ich experimentiere nun schon zwei Tage mit einem VDR 1.7.22 mit xineliboutput und VDPAU, und hänge nun an einem Segmentation fault.
    Der VDR läuft im Moment noch mit einer SD-Karte Hauppauge Nexus 2.1. Anfänglich hatte ich das dvbsddevice als einziges Plugin drin - nur um zu sehen, dass der VDR selbst funktioniert. Das hat auch geklappt. Nun habe ich das dvbsdddevice wieder heraugenommen und stattdessen xineliboutput mit folgenden Parametern als einziges Plugin drin:

    Code
    --hud --local=sxfe --remote=none --fullscreen --video=vdpau --display=:1 --audio=alsa:hw:1,3 --post tvtime:method=use_vo_driver --primary


    Der nvidia-Grafikkartentreiber funzt einwandfrei, auch VDPAU (das Xine-plugin, selbst gebaut) scheint zu funktionieren. Der VDR meldet allerdings, dass er sich nciht mit dem DBus verbinden kann (also wohl ein X-Problem?) und schmiert kurz darauf ab. Hier die entsprechenden Zeilen des Logfiles:


    xhost + hat keine Änderung bewirkt. Ebenso macht es keinen Unterschied, ob ich den vdr aus einer laufenden KDE-Umgebung oder ohne vorher gestartetes KDE und X mittels xinit runvdr -- :1 starte.


    Wäre schön, wenn jemand mir HD-newby helfen könnte. Ich sehe 3 Probleme im Logfile (dbus, vo_driver != vos_driver, segfault), aber zu keinem habe ich ausreichende Hilfe finden können. Der segfault ist vermutlich die Folge des DBus-Fehlers, deshalb wollte ich den als erstes angehen.

    Wohnzimmer-VDR 1.7.22 mit xineliboutput und VDPAU: Silentium T2 ECO 80 Gehäuse, AMD Athlon X2 64 6000+, Samsung HD103 5400rpm & SSD 32GB, Tevii 480 und Gainward GF520 passiv an Toshiba 40'', SuSE 12.1.

  • Moin!


    DBus hat mit X nichts zu tun, wird bloß von X gerne benutzt. Ist ein prima System, das eine einfache Kommunikation zwischen Anwendungen ermöglicht.
    Diese Meldung hat aber keine weitere Bewandnis, die gibt es auch auf Systemen, wo kein Segfault passiert.


    Zu den anderen Dingen kann ich leider nichts sagen.


    Lars.

  • DBus hat mit X nichts zu tun, wird bloß von X gerne benutzt.

    Danke für die Klarstellung, Lars. Deckt sich auch mit meiner inzwischen gewonnenen Erkenntnis: Ich habe den VDR nun mit --local=none --remote=37890 gestartet. Er scheint dann stabil, aber natürlich "unsichtbar" zu laufen. vdr-sxfe vom Desktop aus gestartet schmiert dann nach offenbar erfolgreicher Discovery mit der bekannten Segfault ab:

    Code
    Dec 30 13:22:11 fourty vdr: [18859] [discovery] Received valid discovery message VDR xineliboutput DISCOVERY 1.0#015#012Client:255.255.255.255:37890#015#012#015
    Dec 30 13:22:11 fourty vdr: [18859] [discovery] BROADCAST: VDR xineliboutput DISCOVERY 1.0#015#012Server port: 37890#015#012Server version: xineliboutput-1.0.90-cvs#015#012#015
    Dec 30 13:22:12 fourty kernel: [16592.400228] vdr-sxfe[18866]: segfault at 0 ip       	(null) sp 00007fff84b93ac8 error 14 in vdr-sxfe[400000+1f000]


    Keine Meldung mehr über DBus...
    Irgeneine Idee, woher der Segfault kommen könnte?

    Wohnzimmer-VDR 1.7.22 mit xineliboutput und VDPAU: Silentium T2 ECO 80 Gehäuse, AMD Athlon X2 64 6000+, Samsung HD103 5400rpm & SSD 32GB, Tevii 480 und Gainward GF520 passiv an Toshiba 40'', SuSE 12.1.

  • Irgeneine Idee, woher der Segfault kommen könnte?


    Coredump erstellen lassen und daraus nen Backtrace erzeugen. Das ist eine Wunderbare Methode um Problemursachen zu finden.


    cu

  • Coredump erstellen lassen und daraus nen Backtrace erzeugen. Das ist eine Wunderbare Methode um Problemursachen zu finden.


    cu


    Ok, bekomme ich hin:

    Code
    #0  0x0000000000000000 in ?? ()
    #1  0x000000000040d273 in intercept_video_driver (video_port=0x76d630) at xine_frontend.c:54
    #2  fe_xine_init (this_gen=0x6212d0, audio_driver=0x621030 "alsa", audio_port=0x621035 "hw:1,3", video_driver=<optimized out>, pes_buffers=250, 
    	static_post_plugins=0x0, config_file=0x0) at xine_frontend.c:696
    #3  0x00000000004068d5 in main (argc=<optimized out>, argv=0x7fffa582a688) at xine_frontend_main.c:561


    Der entsprechende Codeausschnitt sieht so aus:

    Code
    static void intercept_video_driver(xine_video_port_t *video_port)
    {
      vo_driver_t *osdscaler = osdscaler_init();
      if (! wire_video_driver(video_port, osdscaler)) {
    	LOGMSG("wire_video_driver() for osdscaler failed");
    	osdscaler->dispose(osdscaler);


    Wie auch aus den Logmeldungen erkennbar, klappt das Initialisieren des osdscalers nicht (ist dann wohl null) und in der letzten Zeile geht dann der dispose schief. Könnte das an dieser vorherigen Meldung liegen:
    [xine-vo ] wire_video_driver() FAILED (vo_driver != vos_driver)
    Dazu finde ich nichts im Web als diese unbeantwortete Frage:
    http://linuxtv.org/pipermail/vdr/2011-November/025452.html


    Die eigentliche Frage ist natürlich nicht, woher der Segfault kommt, sondern wie ich ihn vermeide ;D


    Gruß,
    Uwe.

    Wohnzimmer-VDR 1.7.22 mit xineliboutput und VDPAU: Silentium T2 ECO 80 Gehäuse, AMD Athlon X2 64 6000+, Samsung HD103 5400rpm & SSD 32GB, Tevii 480 und Gainward GF520 passiv an Toshiba 40'', SuSE 12.1.

  • Die eigentliche Frage ist natürlich nicht, woher der Segfault kommt, sondern wie ich ihn vermeide ;D


    Tja, hätt ja auch einfacher sein können. Manchmal hilft auch der Backtrace leider nicht. ;)
    Kenne mich mit xine nicht gut genug aus um hier noch irgendwelche hilfreichen Ideen zu haben. Ich würde mir da jetzt vermutlich Debugausgaben reinbasteln um zu schauen wo das Problem nun eigentlich herkommt.
    Wobei es vermutlich sinniger wäre erstmal vorher die Stelle zu suchen die das hier produziert: "wire_video_driver() FAILED (vo_driver != vos_driver)", weil hier gehts dann wohl los mit dem Problem.


    Wobei du wenigstens nen Bug gefunden hast (ist doch auch schonmal was ;) ), weil Abstürzen sollte er hier wohl nicht in dieser Situation.


    cu

  • Ich hab jetzt mal nicht ganz sauberen C-Code noch etwas schmutziger gemacht und einfach die merkwürdige Gleichheitsprüfung ignoriert :angst .
    Daraufhin bleibt der segfault aus - nicht dass das eine echte Lösung wäre, aber nach zwei Tagen will ich endlich ein Bild sehen!
    Leider gab es dann noch Probleme mit der Verbindung zwischen vdr-sxfe und dem vdr (Server?):
    xine: cannot find input plugin for MRL [xvdr://localhost:37890#nocache]
    Die Lösung: Aus irgendwelchen Gründen war das xineplug_inp_xvdr.so nicht in /usr/local/lib64/xine/plugins/2.0, lag aber im Build-Ordner bereit! Nach einem einfachen Kopieren hatte ich dann das langersehnte Bild.
    Nun fehlt noch der Ton und die Tastatur-Steuerung, aber das sollte hinzubekommen sein: Das Jahr ist ja noch nicht vorbei 8) .


    Gruß,
    Uwe.

    Wohnzimmer-VDR 1.7.22 mit xineliboutput und VDPAU: Silentium T2 ECO 80 Gehäuse, AMD Athlon X2 64 6000+, Samsung HD103 5400rpm & SSD 32GB, Tevii 480 und Gainward GF520 passiv an Toshiba 40'', SuSE 12.1.

  • Ich hab jetzt mal nicht ganz sauberen C-Code noch etwas schmutziger gemacht und einfach die merkwürdige Gleichheitsprüfung ignoriert :angst .
    Daraufhin bleibt der segfault aus


    Interesannter Ansatz ;)


    Falls du das noch nicht kennst: softhddevice - Software VDPAU/VA-VAPI/CPU Decoder und Ausgabe Plugin
    Scheint mir ein ganz sinniger Ansatz zu sein um das alles mal zu vereinfachen. Ist aber noch (sehr aktiv) in der Bastelphase.


    cu

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!