mpv-Plugin: Crash beim Anzeigen des OSD

  • Habe seit gestern das mpv-Plugin installiert [mpv (0.0.6-GIT331e328): mpv player plugin] , Quelle: https://github.com/ua0lnj/vdr-plugin-mpv


    Start mit '--plugin=mpv -a alsa -v gpu -b /video/movies -g'. Als Ausgabedevice nutze ich das softhdcuvid-Plugin. VDR ist handkompiliert auf einem gentoo-System.


    Video läuft, Ton kommt. Springen kann ich und mit Back komme ich zurück zum VDR. Fast perfekt also, wenn da nicht das OSD-Problem wäre.

    Beim Druck auf 'Ok' sollte ja vermutlich ein Fortschritts-Balken kommen. Kommt leider nicht, sondern vdr schmiert ab.


    Vielleicht habe ich etwas vergessen einzukompilieren. Bin für Hinweise dankbar.

    Christian


    Code
    1. Aug 07 14:28:54 vdr vdr[15625]: [15867] animator thread thread started (pid=15625, tid=15867, prio=high)
    2. Aug 07 14:28:54 vdr kernel: vdr[15625]: segfault at 7fa0087fd000 ip 00007fa0d78c45cf sp 00007ffcbc2fc0e0 error 6 in libvdr-mpv.so.2.4.3[7fa0d78b8000+10000]
    3. Aug 07 14:28:54 vdr kernel: Code: d2 66 2e 0f 1f 84 00 00 00 00 00 4c 89 d1 4c 89 d8 66 2e 0f 1f 84 00 00 00 00 00 44 0f b6 00 48 8b bb e8 00 00 00 48 83 c0 04 <44> 88 04 0f 44 0f b6 40 fd 48 8b bb e8 00 00 00 44 88 44 0f 01 44
    4. Aug 07 14:28:55 vdr systemd[1]: vdr.service: Main process exited, code=dumped, status=11/SEGV
    5. Aug 07 14:28:55 vdr systemd[1]: vdr.service: Failed with result 'core-dump'.


    Backtrace:


    Code
    1. (gdb) bt
    2. #0 0x00007fa0d78c45cf in cMpvOsd::WriteToMpv(int, int, int, int, int, int, unsigned char const*)
    3. (argb=<optimized out>, h=<optimized out>, w=<optimized out>, y=<optimized out>, x=<optimized out>, sh=<optimized out>, sw=<optimized out>, this=<optimized out>) at osd.c:91
    4. #1 cMpvOsd::WriteToMpv(int, int, int, int, int, int, unsigned char const*) (this=0x55988a55e7f0, sw=1878, sh=1059, x=<optimized out>, y=<optimized out>, w=<optimized out>, h=1296, argb=0x55988a62c300 "") at osd.c:77
    5. #2 0x00007fa0d78c477b in cMpvOsd::Flush() (this=0x55988a55e7f0) at /usr/local/src/vdr-2.4.4/include/vdr/osd.h:694
    6. #3 0x00007fa0d78bd083 in cMpvControl::ShowProgress() (this=0x559886097c40) at control.c:103
    7. #4 0x00007fa0d78bdd37 in cMpvControl::ProcessKey(eKeys) (this=0x559886097c40, key=<optimized out>) at control.c:240
    8. #5 0x00005598743e20e4 in main(int, char**) (argc=<optimized out>, argv=<optimized out>) at vdr.c:1413
    9. (gdb)
  • tried

    -h gpu [as recommended]

    -h cuda

    without change


    Code
    1. mpv:
    2. [ebuild R ] media-video/mpv-0.32.0-r1::gentoo USE="X alsa cli cuda dvd egl iconv jpeg libass libmpv lua opengl uchardet xv zlib (-aqua) -archive -bluray -cdda (-coreaudio) -cplugins -debug (-doc) -drm -dvb -gamepad -gbm -jack -javascript -lcms -libcaca -luajit -openal -oss -pulseaudio (-raspberry-pi) -rubberband -samba -sdl (-selinux) -test -tools -vaapi -vdpau -vulkan -wayland -zimg" PYTHON_TARGETS="python3_7 -python3_6 -python3_8" 0 KiB


    Christian

  • /tmp is writable by vdr and gets used by other plugins. EDIT: 0.0.6-GIT443be36 didn't help.


    /var/log/mpv.txt is attached


    BTW: compiler throws a warning:

    Code
    1. control.c: In Elementfunktion »void cMpvControl::ShowProgress()«:
    2. control.c:88:42: Warnung: Ausgabe der »%d«-Direktive könnte abgeschnitten sein, beim Schreiben von 1 bis 11 Bytes in eine Region der Größe 8 [-Wformat-truncation=]
    3. 88 | snprintf (buffer, sizeof(buffer), " (%d/%d)", Player->CurrentChapter(), Player->NumChapters());
    4. | ^~
    5. control.c:88:39: Anmerkung: Direktiven-Argument im Bereich [-2147483647, 2147483647]
    6. 88 | snprintf (buffer, sizeof(buffer), " (%d/%d)", Player->CurrentChapter(), Player->NumChapters());
    7. | ^~~~~~~~~~

    Since it is in ShowProgress: could that be a problem or can it be ignored? I'm no coder...


    Christian

  • This is strange.

    [ 0.112][v][vd] Codec list:

    [ 0.112][v][vd] h264 - H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10

    [ 0.112][v][vd] h264_v4l2m2m (h264) - V4L2 mem2mem H.264 decoder wrapper

    [ 0.112][v][vd] h264_cuvid (h264) - Nvidia CUVID H264 decoder

    [ 0.112][v][vd] Opening decoder h264

    [ 0.112][v][vd] No hardware decoding available for this codec.

    [ 0.112][v][vd] Using software decoding.

    Use -v gpu -h cuda.


    What plugin write this:

    animator thread thread started


    Try to remove any plugins, there may be some conflict.

  • OK, changed to cuda and now we are 'Using hardware decoding (cuda).'.

    No change in crash.


    I tracked it down to louis skindesigner-plugin with the estuary4vdr-skin. metrixhd of same plugin works as expected, as well as LCARS with skindesigner disabled.

    So you are right, there is some conflict.


    Christian

  • lnj ,


    do you have a fix for the skin? or can you share some more information about the problem (which parameter did the crash)? Then maybe I can fix it.

    In the moment I haven't such a instalation with mpv here, So I cant reproduce it myself.


    Did you use the latest version of skindesigner (1.2.8.4). If so, can you please check it with 1.2.8.2.

    I made some changes in the skins xml-files after 1.2.8.2. It is sufficient here to override the xml-files of the estuardy skin with the older version.


    Grüße

    kamel5

    VDR 2.4.4: ASUS Prime X470-PRO, Ryzen 7 2700, 32GB, 6TB HD, GT630, Fedora 32 Kernel 5.9 X86_64, Devicebonding 2 x 1 auf 2, TT6400, DVBSky S952 V3

  • I haven't looked at the skin code yet, I made sure the MPV plugin would not crash.

    When osd is created, memory is allocated according to OsdWidth (), cOsd :: Left (), OsdHeight (), cOsd :: Top ().

    But when displaying OSD, ViewPort () parameters may be different and OSD data is out of allocated memory.

    looks like it is ViewPort().Y() and ViewPort().Height().

    This problem does not exist with the metrixhd skin.

  • This is a bug in estuary4vdr-skin, OSD parameters exceed the allocated memory area.

    I prevented the plugin from crashing, but this may result in OSD corruption.

    new version works fine, 'Ok'-button will no more trigger a crash and shows the progress-bar.


    Can also confirm that the OSD gets corrupted, but that is the same as before. When leaving a mpv-video the skin gets corrupted. Some backgrounds and icons seem to be gone until the next vdr-restart.

    This is cosmetic and not important for me. As kamel5 said, the skin is broken. But well... I like it anyway.


    Thanks for your help!


    Christian