[FIXED] Fortschritts- und Schnittmarkenanzeige funktioniert bei langen Aufnahmen nicht

  • Hallo,


    da ich zur Zeit Olympia zeitversetzt schaue, laufen bei ziemlich lange Aufnahmen auf. Dabei ist mir aufgefallen das die Fortschritts- und Schnittmarkenanzeige irgendwann nicht mehr funktioniert.


    Das scheint bei allen Skins aufzutreten, also wohl ein Problem im Core zu sein. In meiner Beispielaufnahme war die Grenze mit VDR Classic Skin bei 6:12:49.27 erreicht. Ab 6:12:50.09 wird der Forschrittsbalken nicht mehr korrekt angezeigt. Mit SkinNopacity liegt Grenze bei der gleichen Aufnahme komischer Weise bei 6:30:18.01.


    Mein Stand ist yaVDR Testing aktuell V2.04.


    Vielleicht kann das mal jemand verifizieren.


    Tschüß Frank

  • Wenn du magst könntest du nochmal meinen Skin flatPlus ausprobieren, da dort nicht die Schnitmarken/Fortschritsanzeige vom Core verwendet werden sondern selbst gezeichnet werden. Damit könnte das Problem vielleicht weiter auf den Core eingegrenzt werden.


    Grüße
    Martin

  • Hallo,


    auch mit diesem Skin zeigt sich das gleiche Bild. Nur liegt hier die Grenze bei 6:18:39.33.


    Der Fehler wird wahrscheinlich bei einem Überlauf bei der Berechnung der Skalierung auftreten. Wenn ich bei SkinNopacity den Rand in der Anzeige vergrößere verschiebt sich die Grenze nach hinten.


    Tschüß Frank

  • Vielleicht mal mit ffmpeg prüfen, ob die tatsächliche Aufnahmelänge mit der im VDR übereinstimmt? Oder mal den index neu generieren lassen.

    - Client1: Thermaltake DH 102 mit 7" TouchTFT * Debian Stretch/vdr-2.4.0/graphtft/MainMenuHooks-Patch * Zotac H55-ITX WiFi * Core i3 540 * 4GB RAM ** Zotac GT630 * 1 TB System HDD * 4 GB RAM * Harmony 900 * satip-Plugin

    - Client2: Alfawise H96 Pro Plus * KODI
    - Server: Intel Pentium G3220 * DH87RL * 16GB RAM * 4x4TB 3.5" WD RED + 1x500GB 2.5" * satip-Plugin
    - SAT>IP: Inverto iLNB

  • Hallo,

    Vielleicht mal mit ffmpeg prüfen, ob die tatsächliche Aufnahmelänge mit der im VDR übereinstimmt? Oder mal den index neu generieren lassen.


    Die Länge passt schon. Auch wenn nichts mehr angezeigt wird, kann man im hinteren Bereich Schnittmarken setzen, verschieben und zwischen ihnen springen.
    marks sieht so aus:

    Code
    1. 6:12:50.09
    2. 6:18:39.33
    3. 6:30:18.01


    Tschüß Frank

  • Hallo,


    in SkinFlatplus finde ich dies hier:

    Code
    1. int cFlatBaseRender::ProgressBarMarkPos(int P, int Total) {
    2. return P * progressBarWidth / Total;
    3. }

    P erreicht hier Werte von über 1200000 und wird mit der Displaybreite multipliziert. Der 32-bit Integer läuft dabei über. Man könnte hier einfach mit 64-bit Integer rechnen.


    Ich fürchte so einen ähnlichen Fehler haben alle Skins, denn so hohe Indexwerte kommen ja eher selten vor.


    Tschüß Frank

  • Für Skins, die VDRs Fortschrittsanzeige verwenden, könnte das hier helfen:



    Bitte mal ausprobieren.


    Klaus

  • Hallo Klaus,


    du warst schneller. :tup


    Ich wollte gerade meinen Patch hier posten:


    Damit klappt es. EDIT auch bei SkinNopacity.


    Einige Skins (z.B. SkinFlatplus), die diese Funktion nicht nutzen, müssen wohl noch gepatcht werden.


    Tschüß Frank

  • Wenn ich diesen Fix in die 2.0.6 einfließen lasse (was ich konkret vor habe), dann müsste ich fast mal APIVERSNUM hochzählen, was ja bislang noch auf 20000 steht. Allerdings würden alle Plugins auch mit dieser Änderung noch ohne Neuübersetzen laufen, da keine virtuellen Schnittstellen verändert sind. Und von dem Fix würden auch nur Skin-Plugins profitieren, neu übersetzt müssten aber *alle* werden.
    Mir persönlich ist es relativ egal, aber ich möchte halt nicht unnötigen Aufwand produzieren.
    Daher mal die Frage wie das hier so gesehen wird.


    Klaus

  • Moin!


    Für yaVDR ist das kein Problem, ich hab da ein Script, was der Reihe nach alle Plugins aus dem PPA herunterladen, Versionsnummer hochzählen und wieder hochladen kann. Mache ich sowieso gerne, wenn ich eine neue vdr-Version verpacke, um allen Eventualitäten aus dem Weg zu gehen.


    Ob die API-Version hochgezählt wird oder nicht, ist mir relativ egal, da aber die Signatur der Funktion nicht verändert wird, müsste es meiner Meinung nach nicht unbedingt sein.


    Lars.

  • kls
    Ich habe mir das heute noch einmal angeschaut und ich hole mir ja die Position des Markers über cMark.Position()
    Dies ist ja ein int. Ich weiß nun nicht welche Werte hier auftreten können aber ist es vielleicht notwendig schon den "int position" in der cMark Klasse als int64 zu ändern? Oder können hier nicht so große Werte vorkommen? Dies hätte natürlich weitreichende Folgen innerhalb des VDRs. Ich wollte nur nachfragen, wenn jetzt schon eine Änderung gemacht werden muss ob es dann gleich komplett durchgezogen werden sollte?


    Ansonsten wenn der Überlauf nur bei der Multiplikation mit der Progressbar Width vorkommt reicht natürlich die kleine Änderung.


    Grüße
    Martin

  • Die Position wird in Frames gezählt. Bei 32 Bit 'int' können das also maximal etwa 2 Milliarden Frames sein, was bei 50 fps etwas über 42 Millionen Sekunden entspricht, was wiederum knapp 12000 Stunden, also knapp 500 Tage sind. Das dürfte wohl reichen ;-).
    Der Überlauf passiert echt nur kurz in der Umrechnung, denn es wird ja gleich wieder durch 'total' geteilt.


    Klaus