[softhdcuvid] Problem mit DETA/ATTA

  • Hallo,


    ich spiele gerade mit den Devices rum und habe aktuell Probleme mit softhdcuvid.

    Kompiliert ist das Plugin mit

    Code
    VAAPI=0
    CUVID=1
    LIBPLACEBO=0
    LIBPLACEBO_GL=0

    VDR ist Version 2.6.1, Geladen werden nur die Plugins softhdcuvid und satip.


    Das Problem taucht auf, wenn ich das Device detache/attache:

    svdrpsend plug sofhdcuvid DETA <- Funkt

    svdrpsend plug sofhdcuvid ATTA <- Funkt

    svdrpsend plug sofhdcuvid DETA <- Crash


    Im syslog finde ich dazu nur



    Auf der Konsole gibt es noch die Meldung


    VDR lässt sich dann nur noch mit kill -9 stoppen.


    Im Debugger sieht der Stacktrace so aus:

  • hi,

    ich habe ebenfalls Probleme mit softhdcuvid.


    Mein system ist ein ubuntu jammy, ubuntu desktop installiert. vdr+plugins von seahawk.

    Ich habe entsprechend Seahawk's softhdcuvid am start, also mit LIBPLACEBO ?= 1


    Seit einem update läuft dort Wayland und entsprechend XWayland.


    Beim Startup des systems wird vdr via systemd gestartet, mit softhdcuvid detached (-D).

    Dann logge mich in den desktop ein, mache ein xhost + und attache softhdcuvid.


    Das Problem: Das erste ATTA geht bei mir gut, beim ersten DETA crashed vdr.


    Mein Verdacht ist, dass es sich um eine Wayland Geschichte handelt, das müsste ich aber noch verifizieren.

  • Ergänzung:

    mit Jammy compiliert softhdcuvid und libplacebo nicht mehr bei mir, obwohl ich das libplacebo-dev von Seahawks nutze.



    Code
    video.c:1401:21: error: array type has incomplete element type ‘struct pl_frame’
     1402 |     struct pl_frame pl_frames[CODEC_SURFACES_MAX + 1]; // images for Placebo chain
  • Ich kann das hier nicht nachvollziehen. Um da weiter zu kommen brauche ich einen TraceBack.

    Danke schon mal. Ich liefere gerne einen Traceback.

    Folgendes passiert: ich starte softhdcuvid mit atta, alles geht gut.

    Dann detache ich und beim zweiten mal atta crashed sogar der vdr.

    Um weiterzukommen wollte ich softhdcuvid von Deinem git repo kompilieren.

    Hier scheitere ich aber auch schon, da:

    struct pl_frame pl_frames[CODEC_SURFACES_MAX + 1];

    einen Fehler wirft. Ebenso geht das, wenn ich mit den debtools arbeite.

    Hast Du eine Idee warum: array type has incomplete element type ‘struct pl_frame’ kommt?


    Das ist das build command:


    make video_test

    cc -DVIDEO_TEST -DVERSION='"3.6"' -g -O3 -Wall -fPIC -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/x86_64-linux-gnu -I/usr/include/x86_64-linux-gnu -I/usr/include/x86_64-linux-gnu -I/usr/include/x86_64-linux-gnu -I./opengl -I./ -DPLUGIN_NAME_I18N='"softhdcuvid"' -D_GNU_SOURCE -DDEBUG -DHAVE_GL -DAV_INFO -DAV_INFO_TIME=3000 -DUSE_MPEG_COMPLETE -DH264_EOS_TRICKSPEED -DUSE_VDR_SPU -DUSE_OPENGLOSD -DUSE_GLX -DPLACEBO -DCUVID -DUSE_SCREENSAVER -DGIT_REV='"115f3b1"' -g -W -Wextra video.c \

    -lfreetype -lEGL -lEGL -lplacebo -lEGL -lGL -lswresample -lavutil -lswscale -lavcodec -lavfilter -lasound -lxcb-screensaver -lxcb-dpms -lrt -lX11-xcb -lX11 -lxcb-icccm -lxcb -L/usr/lib64 -lcuda -lnvcuvid -lGLEW -lGLU -ldl -lglut -o video_test

  • Das kann eigentlich nur an der "falschen" libplacebo liegen. Du könntest mal ohne libplacebo übersetzen. Mal sehen ob es dann auch noch passiert.

    Danke, das war der richtige Hinweis. Unter /usr/local hatte sich noch eine alte version versteckt.


    Jetzt kompiliert das plugin, wie es ja auch soll und ich kann mit dem testen anfangen. Ich werde erstmal an der Symptomatik arbeiten und genaueres berichten.


    Ein merkwürdiger Effekt war, dass das Plugin lief (ATTA) und bei Einschalten der Glotze (Ein LG OLED) das Bild nach weniger als einer Sekunde einfriert, Ton lief weiter.

    Der andere Effekt: Beim ATTA (und schon eingeschaltetem TV) friert das Fenster beim Aufgehen ein, kurz bevor es im Fullscreen Modus war.
    Ich hatte zuerst an das TV gedacht (Geräteerkennung aus, etc; was mir die UHD mit 60HZ bei meiner GT 1030 erst ermöglichte), aber das wars leider nicht.

  • Das sieht mir eher danach aus als ob der NVIDIA Treiber mit dem Fernseher ein Problem hat. Evtl. mit den EDID Daten.

    Beim ATTA wird nichts mit dem HDMI Port gemacht ausser das das X Fenster in den Vollbildmodus schaltet. Aber das hat nichts mit dem HDMI Port zu tun.

  • Das sieht mir eher danach aus als ob der NVIDIA Treiber mit dem Fernseher ein Problem hat. Evtl. mit den EDID Daten.

    Beim ATTA wird nichts mit dem HDMI Port gemacht ausser das das X Fenster in den Vollbildmodus schaltet. Aber das hat nichts mit dem HDMI Port zu tun.

    hab ich auch erst gedacht, daher habe ich diverse tweaks in xorg.conf gemacht. Das ist es aber nicht.

    Das habe ich jetzt gefunden:

    i) vdr als normaler user gestartet, mit softhdcuvid -D.

    ii) dann in der normalen jammy, xorg.session (kein wayland), atta gemacht: läuft gut.

    iii) dann ein Zyklus deta/atta/deta/atta: läuft gut.

    iv) dann mit der Maus auf das Fullscreen Fenster geklickt. Das führt Absturz und der vdr spukt folgende Fehlermeldung aus:

    Code
    error: Retrieving query pool results: VK_ERROR_DEVICE_LOST (../src/vulkan/gpu.c:
    111)
    error: vk->QueueSubmit(cmd->queue, 1, &sinfo, cmd->fence): VK_ERROR_DEVICE_LOST 
    (../src/vulkan/command.c:481)
    
    error: Retrieving query pool results: VK_ERROR_DEVICE_LOST (../src/vulkan/gpu.c:
    111)
    error: vk->QueueSubmit(cmd->queue, 1, &sinfo, cmd->fence): VK_ERROR_DEVICE_LOST 
    (../src/vulkan/command.c:481)
    error: Failed holding swapchain image for presentation

    Das gleiche Phänomen ist auch zu beobachten, wenn softhdcuvid attached ist und ich die glotze ausschalte und wieder einschalte. Ich hatte also nicht gecheckt, dass es was mit dem Fullscreen zu tun hat.

  • Das sind libplacebo Fehlermeldungen. Sieht so aus als ob es das ändern der Screensize nicht verkraftet.


    Versuche mal libplacebo mit opengl zu nutzen. Dazu musst du im Makefile LIBPLACEBO_GL ?= 1 setzen

    Leider bin ich da bei video.c auf diese Fehler gelaufen:

    warning: implicit declaration of function ‘glewInit’; did you mean ‘glutInit’? [-Wimplicit-function-declaration]

    972 | GLenum err = glewInit();

    error: GLEW_OK’ undeclared (first use in this function); did you mean ‘GL_OR’?

    974 | if (err != GLEW_OK) {

    error: eglDisplay’ undeclared (first use in this function); did you mean ‘EGLDisplay’?

    847 | eglMakeCurrent(eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, eglSharedContext);

    error: eglSharedContext’ undeclared (first use in this function); did you mean ‘glxSharedContext’?

    847 | eglMakeCurrent(eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, eglSharedContext);


    Vermutlich sind ein paar includes falsch?

  • Stimmt, resize scheint nicht zu funktionieren. Da ich TV immer im Vollbild schaue ist mir das noch nicht aufgefallen :)


    Ich fürchte das kann ich auch nicht beheben.

    Danke schon mal fürs testen.

    Ich habe jetzt mal ohne libplacebo übersetzt dann geht es erstmal mit dem resizing.

    Allerdings dauerte es ein paar Sekunden bis das Bild wiederkam.

    Aber: der "Deta" ging auch schief: GLXBadContextTag.... GLXMakeCurrent...


    Ich habe das parallel gefunden:

    https://github.com/mpv-player/mpv/issues/8360


    Nachdem ich einen neueren Nvidia Treiber von hier

    https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa

    installiert habe, gab es keinen Unterschied.


    vlc funktioniert übrigens, dort ist libplacebo v4.192.1

  • Update zu meinen Beobachtungen:


    Ohne Placebo:

    Wenn ich vdr ohne "-D" starte geht ein "DETA"/"ATTA", danach kommt wieder die Fehlermeldung "GLXBadContextTag" und vdr hängt komplett.

    Das heißt für mich, alle, die softhdcuvid benutzen (ohne placebo) habe das Problem, wenn das Plugin ab und zu mal detached werden soll. Resize geht aber (slowly).


    Mit Placebo:

    Mit lib placebo tritt das Problem auch auf, äussert sich aber anders: da crashed der resize sofort .


    Ohne Placebo:

    jojo61 Wenn ich in video.c Zeile 1230 den Befehlt: glxMakeCurrent auskommentiere tritt obiger Fehler nicht auf!

    Zabrimus Du könntest das ausprobieren, ob dann Dein ATTA/DETA Problem weg ist. (Bei mir ging das nach zwei Zyklen erst los).
    Du übersetzt ja auch ohne libplacebo?!

    Dann funktioniert sowohl rezise (slowly), fullscreen und zurück per Mausklick.

    Entsprechend geht auch "DETA"/"ATTA" beliebig oft.


    Warum braucht man eigentlich: glXMakeCurrent(XlibDisplay, None, NULL);

    Wenn danach eh alles platt gemacht wird?

    Oder muss man die anderen Contexte begraben und dann glXMakeCurrent aufrufen? Sorry für die blöden Fragen.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!