[softhddevice] hängt bei Fenster-Skalierung in der Gnome-Shell 3.8

  • Hallo,
    heute morgen habe ich mal unter Arch Linux mit VDR 2.0.1 und der aktuellen Softhddevice-Version aus dem Git ausprobiert wie gut softhddevice mit der Gnome-Shell 3.8 zusammenarbeitet. Mutter scheint einige Verbesserungen erfahren zu haben und die CPU-Auslastung im Betrieb ist im Gegensatz zum Stand mit Gnome 3.6 unter Ubuntu Precise kaum höher als mit einem nackten X-Server.
    Leider hängt softhddevice sich gerne mal dauerhaft weg wenn man den Übersichts-Modus aufruft (in dem das Fenster in einer weichen Animation mehrfach neu skaliert wird, bis es die Zielgröße erreicht hat).
    Das Log wird dann mit dieser Meldung geflutet:

    Code
    Apr 27 10:13:42 vdr4arch vdr[1357]: [1754] ERROR: TS packet not accepted in Transfer Mode
    Apr 27 10:13:42 vdr4arch vdr[1357]: [1754] [softhddev]Clear:
    Apr 27 10:13:42 vdr4arch vdr[1357]: audio/alsa: using device 'default'
    Apr 27 10:13:42 vdr4arch vdr[1357]: audio/alsa: start delay 336ms
    Apr 27 10:13:42 vdr4arch vdr[1357]: [1754] ERROR: TS packet not accepted in Transfer Mode


    Vermutlich laufen da die Buffer voll, weil das Video nicht konstant wiedergegeben werden kann. Gäbe es evtl. eine Möglichkeit das komplette Einfrieren zu vermeiden (ein detachen über svdrp ist in dem Zustand dann auch nicht mehr möglich, nur ein Neustart des VDR hilft)?

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Mutter scheint einige Verbesserungen erfahren zu haben und die CPU-Auslastung im Betrieb ist im Gegensatz zum Stand mit Gnome 3.6 unter Ubuntu Precise kaum höher als mit einem nackten X-Server.


    Aha!


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Vermutlich laufen da die Buffer voll, weil das Video nicht konstant wiedergegeben werden kann. Gäbe es evtl. eine Möglichkeit das komplette Einfrieren zu vermeiden (ein detachen über svdrp ist in dem Zustand dann auch nicht mehr möglich, nur ein Neustart des VDR hilft)?


    Komisch, mit 3.6 ging das noch, oder war das die ältere Version von SHD die ich da getestet hatte? Bei meinen Tests lief dann das Video auch in der Übersicht einfach weiter und bei dir stoppt das Bild?


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Bei meinen Tests lief dann das Video auch in der Übersicht einfach weiter und bei dir stoppt das Bild?


    Ja, damit lief es mit dem VDR 1.7.33 abgesehen von der inaktzeptabel hohen Systemlast unter Precise relativ gut - das Problem tritt mit Gnome 3.8 nichtjedes mal auf, aber ist mit ein paar Versuchen eindeutig reproduzierbar, dass es mit dem aktuellen Stand wenig Sinn macht noch groß weiter zu experimentieren.


    Genauer gesagt stoppt das Video und der Ton läuft nach bis der Buffer leer ist. Ich weiß nicht, ob das mit der Änderung im VDR zusammenhängt, dass Ausgabegeräte, die keine TS-Pakete annehmen können dann ein DeviceClear() bekommen und wie softhddevice darauf reagiert.

    Code
    - Now calling DeviceClear() in cTransfer::Receive() if the output device blocks, instead
    of not retrying for 10 seconds (reported by Andreas Mair, with help from Oliver Endriss).
    - Updated the Spanish OSD texts (thanks to Luca Olivetti).

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Also ich wüsste nicht was hängen kann.
    Man kann einfach die Fenster Version mit jedem X11 Windowmanager testen und Fenster groß und klein ziehen.
    Du kannst mal die GIT Version testen, dort habe ich für OpenGL zusätzliche Locks eingebaut, weil dies mit
    Threads Probleme hatte, dies kommt auch der X11 Version zugute.


    Ansonsten "gdb --pid=`pidof vdr`" und gucken wo er hängt, geht mit -dbg version und -DDEBUG besser.


    Also bei mir funktioniert es, dauert nur 1-2 Minuten bis er alle Window Reseize Events abgearbeitet hat.
    Es hilft hier auch das der aktuelle VDR seine Internen Puffer löcht.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • Also ich habe mal ein bisschen weiter gespielt - das ganze tritt wohl nur auf, wenn das Fenster im Vollbildmodus ist (und evtl. wenn ich mittels xprop die Fensterdeko entfernt habe). Solange die Fensterdeko da ist, reagiert er nur eine Zeit lang nicht mehr auf die Skalierungs-Anweisungen.
    Wenn ich dann mit gdb in den Prozess einsteige sehe ich nicht wirklich was - das unterscheidet sich nicht vom normalen Ablauf:

    Code
    warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7fffc2dfe000
    0x00007f57dee47c61 in pthread_cond_timedwait@@GLIBC_2.3.2 () from /usr/lib/libpthread.so.0
    (gdb) bt
    #0  0x00007f57dee47c61 in pthread_cond_timedwait@@GLIBC_2.3.2 () from /usr/lib/libpthread.so.0
    #1  0x00000000004f9812 in cCondVar::TimedWait(cMutex&, int) ()
    #2  0x00000000004d1003 in cRemote::Get(int, char**) ()
    #3  0x00000000004684b8 in main ()

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

    Einmal editiert, zuletzt von seahawk1986 ()

  • Vermute das gnome etwas anders macht, wenn die Fensterdeko da bzw. weg ist.
    Ich mache nichts anderes bei mit und ohne Fensterdeko.


    Das einzige was ich machen kann und dies steht schon in den Todo's, ist mehrere
    Größenveränderungen zusammenzufassen. So sollte dann das Nachlaufen
    reduziert werden.


    Bei einem guten Windowmanager kannst es für jedes Programm einstellen ob
    es "opaque" resized, bzw. die Animation machen soll. Dies würde ich für
    softhddevice ausschalten.


    Bei gdb guck dir alle Threads an, wichtig wäre hier der "video" thread.


    Ist einer von Threads mit dem Namen "vdr", wenn ohne -DHAVE_PTHREAD_NAME gebaut wurde.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • Könnte es passieren, dass die OSD-Größe beim Skalieren zwischendrin extreme oder ungültige Werte annimmt?
    Mit i3-wm (keine Animationen, simple Skalierung) sieht SkinnOpacity ja offenbar kurzzeitig extreme Werte für die Fensterhöhe (aus der dann die Größe der OSD-Elemente berechnet wird:(
    [Announce] nOpacity 0.1.1


    Ich habe die OSD-Größe in softhddevice auf auto stehen - wie könnte ich das am besten debuggen um zu sehen was da an Werten für die OSD-Größe von softhddevice gesetzt wird?

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Einfach die Debug Version (mit -DDEBUG) bauen.
    Dann wird im Syslog jede Änderung die geholt wird ausgeben.


    siehe softhddev.c:GetOsdSize()

    Code
    May  3 15:56:02 c60m1 vdr: [softhddev]GetOsdSize: 1920x1080 1


    Es wird nicht jeder Aufruf geloggt, nur die, die eine Änderung melden.


    Also ich reporte keine Änderungen an VDR, der VDR muß erst cSoftHdDevice::GetOsdSize
    aufrufen um die Größenänderung mitzubekommen.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • Ok, damit passiert das Abfragen der OSD-Größe wohl nur zwei Mal - das erste Mal nimmt er die Werte aus der setup.conf und das zweite Mal die Werte der tatsächlichen Bildschirmauflösung.
    http://pastebin.com/bseQJVUr
    In Zeile 1512 schalte ich in den Vollbild-Modus und dann drücke ich mehrfach die Windows-Taste um den Übersichts-Modus aufzurufen, wobei er dann mit der Bild-Ausgabe hängen bleibt.


    gdb listet das wenn die Ausgabe hängen bleibt:


    Der Audio-Thread:


    Und der Video-Thread:


    Lohnt es sich den nvidia-Treiber nochmal mit debug-Symbolen zu übersetzen?

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Sowie es aussieht hängt da X11, müsstest den Video Thread Single steppen und gucken ob er aus dem poll wieder herauskommt.
    Und wenn das nicht geht, Debug Ausgaben vor und nach dem Display.


    EDIT: Schalte mal den grab ab, da bin ich mir nicht sicher ob der gut gelockt ist.


    Ansonsten hângt eindeutig der Videothread. Welche.xlib? Mit xcb?


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

    Einmal editiert, zuletzt von johns ()

  • xlib? Mit xcb?


    Code
    $ Xorg -version
    
    
    X.Org X Server 1.14.1
    Release Date: 2013-04-17
    X Protocol Version 11, Revision 0
    Build Operating System: Linux 3.8.7-1-ARCH x86_64
    Current Operating System: Linux vdr4arch 3.8.11-1-ARCH #1 SMP PREEMPT Wed May 1 20:18:57 CEST 2013 x86_64
    [...]


    Code
    $ pacman -Qs xcb
    local/cairo 1.12.14-3
        Cairo vector graphics library
    local/libxcb 1.9-3
        X11 client-side library
    local/xcb-proto 1.8-1
        XML-XCB protocol descriptions


    Soweit ich weiß nutzt mutter clutter und Cairo hat damit AFAIK Abhängigkeiten zur Xlib und xcb - wobei clutter auf die Xlib zu setzen scheint (https://git.gnome.org/browse/clutter/tree/clutter/x11)

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Also mit normalen steps komme ich in gdb nicht weiter, bei stepi kann ich endlos durch Zeilen ohne Symbole springen... :(
    Was soll ich denn an Debug-Ausgaben einbauen?

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • EDIT: Schalte mal den grab ab, da bin ich mir nicht sicher ob der gut gelockt ist.


    Das war nur durch das Live-Plugin, ohne den Grab passiert das aber leider auch - oder kann man den komplett für das Plugin deaktivieren?

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Also ich meinte libx11, aber die scheint es nur noch mit xcb zugeben. Zumindest kann ich es jetzt mit Gentoo nicht mehr anders auswählen.

    Code
    ldd /usr/lib/libX11.so
    	linux-vdso.so.1 (0x00007fff947ff000)
    	libxcb.so.1 => /usr/lib64/libxcb.so.1 (0x00000037f5200000)
    	libdl.so.2 => /lib64/libdl.so.2 (0x00000037f3e00000)
    	libc.so.6 => /lib64/libc.so.6 (0x00000037f3600000)
    	libXau.so.6 => /usr/lib64/libXau.so.6 (0x00000037f5600000)
    	libXdmcp.so.6 => /usr/lib64/libXdmcp.so.6 (0x00000037f4a00000)
    	/lib64/ld-linux-x86-64.so.2 (0x00000037f3200000)


    libxcb ist aktuell, daran kann es nicht liegen.
    Ich bin mir fast 100% sicher das X11 im Eventhandler hängt. Du verwendest doch GIT softhddevice?
    Da habe ich noch ein paar mehr Locks eingebaut, weil sonst X11 mit OpenGL hing. Jetzt sollte alles abgesichert sein,
    bis auf den Grab, den muß ich mir nochmal genau angucken.
    Wenn das Liveplugin nicht mehr aktiv ist, dann solle es auch keine grab mehr machen.



    Gibt aber auf stderr aus. Einfach vdr per Hand starten, sind aber normal 50 Ausgaben pro Sekunde.


    So meinte ich es, aber wenn der gdb nicht zurückkommt, dann hat X11 mit Threads usw. aufgegeben.
    Und was kann man dagegen machen, einfach Fenster nicht mehr vergrößern verkleinern.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • Also die libX11:

    Code
    $ ldd /usr/lib/libX11.so
    	linux-vdso.so.1 (0x00007fffb71fe000)
    	libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00007fea03237000)
    	libdl.so.2 => /usr/lib/libdl.so.2 (0x00007fea03033000)
    	libc.so.6 => /usr/lib/libc.so.6 (0x00007fea02c86000)
    	libXau.so.6 => /usr/lib/libXau.so.6 (0x00007fea02a81000)
    	libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007fea0287b000)
    	/usr/lib64/ld-linux-x86-64.so.2 (0x00007fea037af000)


    Du verwendest doch GIT softhddevice?


    Ja, genau die Version aus dem Git mit dieser Konfiguration:

    Code
    CONFIG += -DAV_INFO -DAV_INFO_TIME=3000 # info/debug a/v sync
    CONFIG += -DUSE_PIP                     # PIP support
    CONFIG += -DUSE_MPEG_COMPLETE           # support only complete mpeg packets
    CONFIG += -DUSE_VDR_SPU         # use VDR SPU decoder.
    CONFIG += -DHAVE_PTHREAD_NAME


    Das Plugin starte ich mit "-w still-h264-hw-decoder -v vdpau -D"


    Gibt aber auf stderr aus. Einfach vdr per Hand starten, sind aber normal 50 Ausgaben pro Sekunde.


    Da bleibt er mit einem "enter" stehen. Ab und an kommt es nach einiger Zeit in der Situation zu einem Segfault:
    http://pastebin.com/zxcPTGBj


    Und was kann man dagegen machen, einfach Fenster nicht mehr vergrößern verkleinern.


    Genau, der einfachste Weg ist dem Fehler aus dem Weg zu gehen :unsch - bzw. die Gnome-Shell nicht zu verwenden, denn z.B. mit i3 klappt das ja jetzt wunderbar nachdem louis SkinnOpacity angepasst hat, da kann ich nach Lust und Laune das Fenster skalieren lassen.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Den "segfault" kenne ich, der kommt meiner Meinung nach vom VDR, konnte den aber nicht nachvollziehen.
    Kommt aber im normalen Betrieb nicht vor und mit valgrind läst sich VDR nicht gut analysieren.


    Also bei i3 funktioniert es und bei der tollen Software von GNU geht es nicht.
    Ich vermute es liegt am NVidia-Treiber und kann es sein das die Zwerge 3D bzw. OpenGL benutzen.


    Ich werde mal wenn ich Langeweile habe, die Grö0e des VDR Fenster laufend verändern.
    Leider habe ich xdotool nicht überzeugen können das VDR Fenster zu verändern, sonst hätte ich das
    mit einem Script mal stundenlang laufen lassen.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • Ich vermute es liegt am NVidia-Treiber und kann es sein das die Zwerge 3D bzw. OpenGL benutzen.


    Ja, clutter setzt auf opengl.

    Leider habe ich xdotool nicht überzeugen können das VDR Fenster zu verändern, sonst hätte ich das
    mit einem Script mal stundenlang laufen lassen.


    Leider kann man das softhddevice Fenster nur am Titel erkennen, weil es kein WM_CLASS Attribut hat.
    Aus dem yavdr-addon-pip kenne ich einen Weg über wmctrl (https://github.com/yavdr/yavdr…ob/master/vdr-pip-sp.conf:(

    Code
    SHD=$(wmctrl -l | grep "softhddevice" | cut -d ' ' -f 1)
    wmctrl -i -r $SHD -e 0,x,y,w,h

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • WM_CLASS habe ich nicht eingebaut, da es schon Probleme mit dem Namen gab.


    Wenn es jetzt geht, dann gibt es einen Konflikt von OpenGL und VDPAU.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • Wenn es jetzt geht, dann gibt es einen Konflikt von OpenGL und VDPAU.


    Das könnte sein (auch wenn ich das mit anderen VDPAU-fähigen Playern nicht habe), aber was meinst du mit "jetzt"?
    Könnte man solche Fehlerfälle abfangen, dass der VDR dabei nicht hängen bleibt? Ich fände es weniger Schlimm, wenn das Frontend in so einem Fall detached wird als wenn sich gleich der komplette VDR weghängt. Der nVidia-Treiber und der X-Server arbeiten ja normal weiter.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

Jetzt mitmachen!

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