Posts by Maniac

    Das Problem im OsdProvider ist, das er vorher schon weg ist, die cOsd Instanz aber unabhängig davon weiterläuft. Ich hab auch schon versucht mir die Handles in der cOsdProvider Instanz zu speichern und bei aktivem Osd und gültigem Handle ein delete aufzurufen, dann wird das cOsd auch beendet, leider gibt es teilweise trotzdem noch einen Segfault. Aus mir unerfindlcihen Gründen gibts dann aber auch keinen core Dump, obwohl die Ausgabe kommt das er erstellt wurde und VDR auch als root lief. Eventuell liegt das irgendwo an systemd, generell werden da aber auch coredumps im Journal abgelegt.
    Ohne aktives OSD komme ich immer sauber zum VDR zurück.


    osEnd im ProcessKey bei kStop habe ich drin, allerdings habe ich nur das ProcessKey con cControl und nicht das des Menüs, und da bewirkt er anscheinend nichts.

    Ich bin gerade dabei einen Bug aus vdr-mpv zu entfernen, und zwar wenn das OSD beim beenden noch geöffnet ist, versucht VDR es weiterhin darzustellen.


    Ich habe gerade schon im VDR Code gesucht, aber leider finde ich nichts um dem VDR mitzuteilen das er einfach das derzeit offene Menü schliessen möchte. Einen Pointer auf das Menü habe ich leider auch nicht. Nur eine Instanz von cOsd die das ganze über die mpv API ausgibt (was natürlich beim Beenden fehlschlägt da mpv dabei beendet wird).


    Hat jemand einen Tip wo ich hier weiter suchen kann?

    Hast du für die Sound-Wiedergabe etwas angeschlossen das AC3 dekodieren kann? Aktuell wird noch fest auf Passthrough gestellt, in der nächsten Version wird das aber über das Plugin-Setup abschaltbar sein.
    In der 0.0.2 geht's leider nur im Code. Dazu einfach in der player.c bei Zeile 235 die folgenden beiden Zeilen entfernen:


    Code
    1. check_error(mpv_set_option_string(ctx, "ad", "-spdif:mp3,-spdif:aac,spdif:*"));
    2. check_error(mpv_set_option_string(ctx, "ad-spdif-dtshd", "yes"));

    Ich vermute ja. mpv hatte wohl schon des öfteren ähnliche Bugmeldungen die auf die verschiedenen locales zurückzuführen sind und daher verweigert es mittlerweile über die API den Start wenn LC_NUMERIC != "C".


    Ich hatte das damals einfach übernommen ohne groß nachzudenken als es Pflicht wurde. Beim genaueren Nachdenken, nachdem ich jetzt das Problem gefunden habe, bin ich mir auch unwohl dabei überhaupt länger als minimal nötig auf "C" zu laufen, nicht das es noch weitere Auswirkungen auf VDR oder andere Plugins hat.


    Ich setze es es jetzt einfach kurz auf "C" erstelle den mpv context, und setze es wieder auf de_DE.utf8 damit funktioniert es jetzt. Bei mpv konnte ich auf den ersten Blick auch keine Fehler feststellen, bevor es Pflicht wurde hatte ich es auch ohne "C" laufen und nichts feststellen können.

    Ich glaubs nicht, es ist die LC_NUMERIC. Nachdem beenden von mpv und zurücksetzen funktioniert es wieder, solange mpv läuft ist das OSD aber noch kaputt.


    Jetzt fehlt mir nur noch eine Lösung wie ich das Menü auch während mpv läuft vernünftig hinbekomme.

    Ich hab gerade einfach mal über den Debug im Skin die Werte für areaheight und areawidth direkt ausgeben lassen. Es ist 504 und 81 bei mir. Das bedeutet ja das die Berechnung ansich funktioniert, da sie ja für CreatePixmap vorhanden sind. Nur wenn es dann für die Items umgerechnet werden soll geht es aus irgendeinem Grund schief.


    Im mpv Plugin kann ich auch nichts mehr finden was dafür noch die Ursache sein kann. Irgendwie scheint hier auch der mpv direkt reinzuspielen. Wenn ich das mpv-Plugin ohne mpv Start einfach 10 Sekunden schlafen lasse nachdem der Player mit pmExtern aktiviert wurde und dann wieder auf TV-Bild zurückgehe funktioniert es weiterhin. Wenn mpv startet tritt der Fehler auf.


    Kann das ein local-Problem sein? Beim start läuft VDR auf LC_NUMERIC="de_DE.utf8", vor dem mpv start setze ich das ganze auf LC_NUMERIC="C"


    Edit: Hab die LC_NUMERIC angepasst, die offene Konsole war aus irgendeinem Grund auf POSIX und nicht auf de_DE.utf8. Ich mache nochmal nen neuen Test das beim Player-Stop zurückzusetzen.

    MakePrimaryDevice:0 kannst du ignorieren, das rutscht noch irgendwo ins Log, tut aber nichts. In der nächsten Version wird es sowieso weg sein, zum Start wird da nicht mehr gewechselt nur noch zum Beenden damit softhddevice einen neuen OsdProvider erstellt. Wenn ich da noch eine Möglichkeit finde das ohne MakePrimary zu tun würde das auch noch wegfallen.


    Kannst du das Plugin mal mit Debug kompilieren, dann kommen alle mpv Ausgaben ins Log, ich vermute mal das mpv aus irgendeinem Grund nicht sauber starten möchte.


    Hast du den Parameter -r übergeben um die Framerate zu wechseln? Das hat mit sehr alten NVidia-Treibern schon beim play-Plugin Probleme gemacht, da der Recover nicht sauber lief.



    @Alle: Nutzt jemand mpv zusammen mit skindesigner und funktioniert bei euch, nachdem ihr mpv einmal gestartet hattet das Hauptmenü von nopacity(skindesigner-Version) noch vernünftig? Falls ja, welche VDR, softhddevice, skindesigner und mpv Version nutzt ihr? Ich jage hier seit gestern einem Bug hinterher dessen Ursache sich noch gut versteckt.

    CreateOsd liefert vernünftige Werte (1800x1015 in meinem Fall).


    CreatePixmap bin ich mir nicht sicher, aber vor allem Draw mit 0 wundert mich etwas.


    Der erste Wert hinter View und Draw ist jeweils Width, der zweite Height.


    Edit: Werte sollten Ok sein, hab sie mit vorher verglichen. Testweise habe ich in der Skin XML gerade mal für die Menüicons das areaheight*0.8 durch den festen Wert 65 ersetzt, damit hab ich immer die Icons. Das würde ich aber maximal als Workaround bezeichnen.


    Wo kommt das areaheght her? Wird das irgendwo berechnet? Wenn ja welche Parameter werden dafür benutzt? Wo passiert das im skindesigner?

    Ich hab gerade noch eine Stelle entdeckt bei der es nachdem mpv benutzt wurde zu Problemen kommt.


    Im EPG Info wird das Poster nicht mehr an der rechten Seite angezeigt sondern auf der linken Seite. Der Text liegt dann über dem Poster und geht bis kurz vor den Scrollbalken, also auch in den Bereich der normalerweise für das Poster genutzt wird. Das Poster wird dann auch etwas größer dargstellt als normal.

    Ich versuche gerade rauszufinden warum im skindesigner width und height mit 0 berechnet wird, daher bin ich auf der Suche nach der Stelle wo die Berechnung stattfindet um testen zu können, welche Variablen dafür verantwortlich sind um dann zu sehen warum diese Variablen nicht vernünftig gesetzt sind. In mpv sehe ich nichts was das gerade direkt auslösen könnte, eventuell fehlt in mpv auch einfach nur was, was die variablen vernünftig setzt, die Skindesigner dann verwendet.


    Der eigene OSD Provider ist um die Daten abzufangen bevor sie an das Ausgabe Device gehen um diese dann an die Skin Api von mpv zu schieben damit mpv das OSD darstellt. Aber auch ohne den OSD Provider (der bereits bestehende von softhddevice bleibt erhalten), funktioniert es nicht nachdem mpv wieder beendet wurde. Beim mpv Plugin hat man bei diesem Test kein OSD.


    Ich muss mir mal ein anderes Plugin mit Playmode pm_Extern suchen und damit testen ob das gleiche passiert.

    Stimmt, da steige ich noch nicht ganz durch.


    Ich habe aber gerade festgestellt das, zumindest im mpv-Plugin cOsd OsdHeight() und OsdWidth() korrekt sind, aber Width() und Height() jeweils 0 liefern. Kann das eventuell das Problem verursachen?


    Edit: Ich sehe gerade im cOsd::Flush vom mpv-Plugin haben sie dann korrekte Werte.

    Mit dem Debug=true sehe ich im Log dann auch Height und Width = 0.


    Code
    1. Jun 14 14:34:10 vdr vdr[316]: [316] skindesigner: Debugging Function DrawImage, Container: x = 9, y = 426, Size: 504x81
    2. Jun 14 14:34:10 vdr vdr[316]: [316] skindesigner: --- Image Path: "standardicons/Recordings"
    3. Jun 14 14:34:10 vdr vdr[316]: [316] skindesigner: Vertical Align = 1
    4. Jun 14 14:34:10 vdr vdr[316]: [316] skindesigner: Image Type = 3
    5. Jun 14 14:34:10 vdr vdr[316]: [316] skindesigner: Height = 0
    6. Jun 14 14:34:10 vdr vdr[316]: [316] skindesigner: Width = 0
    7. Jun 14 14:34:10 vdr vdr[316]: [316] skindesigner: Y = 40
    8. Jun 14 14:34:10 vdr vdr[316]: [316] skindesigner: X = 10


    Im mpv-Plugin habe ich auch gerade mal ein Trace durch die einzelnen Funktionen eingebaut um sicher zu gehen das wirklich nichts mit OSD aufgerufen wird. Es findet kein primär Device switch mehr statt. Der cOsdProvider bleibt unangetastet, der OSD-Code vom mpv-Plugin wird nicht aufgerufen.
    Irgendwie hab ich jetzt den cPlayer(pmExtern_THIS_SHOULD_BE_AVOIDED) in Verdacht, also das dort irgendwas zurückgesetzt wird, was danach nicht wieder korrekt initialisiert wird.


    Edit: Ohne das mpv-Plugin testen klappt nicht, da skindesigner das Menü korrekt darstellt bis zum ersten Mal ein Film über das mpv-Plugin gestartet wurde.


    An welcher Stelle findet den die Berechnung von Height und Width für DrawImage für die Menü Items statt?

    Die Osd Größe wird zuminest nicht aktiv beeinflusst. Es findet aber ein Wechsel auf ein anderes primär Device mit eigenem cOsdProvider statt um das OSD in mpv umlenken zu können. Beim beenden von mpv wird aber wieder zurück gewechselt.


    Init habe ich so umgebaut das er immer neu einliest (dazu if in 181 und 183 immer auf true gesetzt). Zusätzlich noch Debug Output in SetOSDSize() eingefügt. Hier sehe ich aber das die Größe sowohl vor dem mpv start, während mpv läuft und nachdem beenden von mpv immer gleich bleibt.
    Die Icons werden aber weiterhin mit width 0 und height 0 geladen.


    Edit: Eigenartigerweise tritt das aber anscheinend nur im Menü auf, alle anderen Bilder werden mit der richtigen Größe geladen.


    Edit2: Ich hab gerade noch etwas festgestellt. Das VDR-Logo bleibt bei mpv start und beenden erst erhalten, wenn ich danach aber das Setup vom skindesigner-Plugin aufrufe und wieder verlasse, verschwindet das Logo auch. Wenn ich das im Code richtig sehe wird dann in Init auch ein Neuaufbau des Cache usw. angestosen aber ohne die SetSkin, SetOSDSize und SetOSDFonts aufgerufen werden. Irgendwas scheint dann nicht mehr zu passen. Welche (VDR)-Variablen nutzt du für die Größenberechnung, dann kann ich kontrollieren ob hier irgendetwas nicht passt.

    Irgendwas seltsames geht da vor. Ich hatte mir, nachdem ich nur den Cache-Teil geändert hatte, ein paar Debug-Ausgaben eingebaut und dann festgestellt das er bei if (width < 1 || width > 1920 || height < 1 || height > 1080) direkt rausspringt. Wenn ich das rausnehme habe ich wieder Icons, die aber viel zu groß sind und daher nur stückweise in dem Bereich dargestellt werden wo sie hingehören.


    Aus irgendendeinem Grund wird das ganze dann mit width 0 height 0 aufgerufen.

    Nachdem ich mit dem mpv Plugin einen Film gestartet habe. Das Menü ist auch nachdem beenden von mpv weiterhin "kaputt", es hilft nur ein VDR Neustart. Das Menü wird ganz normal über die Menü -Taste aufgerufen.


    Es sieht so aus, als ob die Grafiken auf den Menu Items aus irgendeinem Grund nicht mehr dargestellt werden. Das tritt auch in allen Untermenüs auf, die Kanallogos hingegen funktionieren wieder problemlos. Auch die anderen Grafiken wie VDR-Logo und die Farb-Tasten werden überall korrekt angezeigt.


    Gibt es die Möglichkeit den Cache auf einfache Weise im Code abzuschalten? Gibt es einen Debug-Mode den ich aktivieren könnte?

    Ich habe skindesigner gerade mal ausproviert. Ich habe aber ein sehr eigenartiges Verhalten in Verbindung mit mpv. Getestet habe ich mit nopacity als Skin, das Problem tritt auch bei anderen skins im Skindesigner auf. Bei den Standard-Skins, oder nopacity als Plugin tritt es nicht auf.


    Nachdem mpv gestartet wurde fehlen im Menü die Icons vor den einzelnen Einträgen, sowie das grafische Highlight der Einträge (sowohl aktiv als auch inaktiv), die Schrift wird beim aktiven Element grau angezeigt. Die anderen Grafiken, wie das VDR Logo und die HDD beim freien Platz werden aber weiter angezeigt. Auch an anderen Stellen konnte ich keinerlei Probleme feststellen.


    Ich habe im mpv-Plugin das ganze OSD-Zeug testweise entfernt, auch den Wechsel des primär Device hatte ich deaktiviert, es brachte aber leider keine Besserung.


    Hast du eine Idee woran es liegen kann?

    libavresample gehört zu ffmpeg.Wenn du mpv selber kompilierst nimm aber am besten eine neuere Version die 0.8.0 ist schon etwas älter, eventuell sind dort noch einige der Parameter anders, so dass manche Funktionien nicht richtig funktionieren oder im schlimmsten Fall mpv nicht startet.


    Öffentliches Git kommt noch. Aktuell liegt es nur in meinem privaten als Branch im play-Plugin. Ich will den indent noch Vereinheitlichen (aktuell ist noch eine Mischung aus johns und meinem Stil) und alles etwas aufräumen und dann sauber in ein neues Repository überführen, das dann öffentlich zugänglich wird.