Beiträge von blau-sls

    Wahrscheinlich hilft es Dir nicht weiter, aber bis einschließlich 5.10.23 hatte ich mit folgender Vorgehensweise und den oben schon erwähnten vc4-hdmi.conf und /boot/config.txt Ton über HDMI:



    Irgendwann lief's dann direkt mit dem von RaspOS ausgelieferten Kernel, sodass das Bauen eines eigenen Kernels für mich nicht mehr notwendig war.

    Ich hab Ton über HDMI bei softhddevice-drm mit dem aktuellen 5.10'er kernel von raspbian ohne jegliche Modifikationen und folgender /boot/config.txt:



    Wenn ich mich recht erinnere, war das entscheidende die geänderte /usr/share/alsa/cards/vc4-hdmi.conf.

    So wie das z.B. nafets227's Skript aus diesem Thread macht.

    Da will etwas einen Systemaufruf absetzen und das gelingt nicht.
    Wenn du an der Stelle das Kommando ausgeben würdest (wäre wohl auch eine sinnvolle VDR-Änderung), könnte man mehr erfahren:

    Code
    dsyslog("%s", Command);


    ... vor dem LOG_ERROR sollte das tun.


    Und ich sach' schon mal: Permashift ist unschuldig! :o)


    Hallo Eike,


    zunächst mal vielen Dank für Dein tolles Plugin! Ist bei uns seit einigen Monaten im täglichen Einsatz und wir möchten es nicht mehr missen.


    Allerdings hatte ich in der Vergangenheit auch öfter Mal das Problem, dass sich der VDR wegen Speichermangel nicht mehr ausschalten ließ. Diese Woche hab ich die Ursache herausgefunden und muss Dir leider mitteilen, dass - zumindest bei mir - da doch ein Fehler in Permashift die Ursache war.


    Da ich keine Signatur habe: Ich benutze ein 32-Bit Ubuntu-Precise und baue meinen VDR aus den yavdr-Quellpaketen selbst. Darin eingebaut habe ich Dein Permashift-1.0.0. Mein System hat 3 DVB-Receiver.


    Der Fehler passiert bei mir folgendermaßen:

    • Ich schaue Live. Dabei benutzt VDR device 3 und im receiver thread ist ein Ringbuffer eingehängt, auf den m_bufferReceiver zeigt.
    • Dann benutze ich permashift, um live zurückzuspoolen, und gehe irgendwann aus dem Abspielen dieser Aufnahme wieder raus, ohne die Aufnahme zu beenden
    • Wenn ich anschließend, während die Aufnahme noch läuft, live auf ein Programm auf einem anderen Transponder schalte, startet VDR einen receiver thread auf device 1 (device 3 braucht er ja für die Aufnahme) und permashift legt einen neuen Ringbuffer an, auf den m_bufferReceiver zeigt.
    • Irgendwann endet die oben gestartete Aufnahme. Dabei ruft das darin eingehängte bufferReceiver-Objekt die Funktion BufferDeleted auf.
    • Damit wird m_bufferReceiver auf NULL gesetzt. Und das ist falsch, denn m_bufferReciever ist ja inzwischen eigentlich für den Ringbuffer in device 1 zuständig
    • Schalte ich nun wieder auf einen anderen Transponder, benutzt VDR wieder einen receiver thread auf device 3 und würde normalerweise den receiver thread für device 1 beenden.
    • Da jedoch m_bufferReceiver auf NULL gesetzt wurde, wird der Ringbuffer für device 1 nicht angehalten und deshalb beendet sich der receiver thread auf device 1 auch nicht.

    Langer Rede kurzer Sinn: BufferDeleted darf m_bufferReceiver nur dann auf NULL setzen, wenn die Funktion von dem Objekt aufgerufen wurde, auf die m_bufferReceiver auch zeigt. Das kann man mit folgendem kleinen Patch erreichen:



    Damit läufts bei mir nun seit 3 Tagen intensiven Testens, ohne dass nochmal Speichermangel gemeldet wurde.


    Gruß
    Rainer