[markad] überarbeiteter Decoder

  • Auch markad hat ein Problem mit Ubuntu 22.04, genauer gesagt mit dessen ffmpeg Version.

    Wenn man --cut und --fullencode nutzt, ist die MP2 Tonspur weg. Somit:


    Die Version 3.0.22 ist auf vdr-plugin-markad verfügbar.

    Code
    - fix encoding of mp2 audio with ffmpeg >= 4.4
    - fix some possible null pointer dereference
    - some minor bug fixes and optimizations, see git
  • Die Version 3.0.23 ist auf vdr-plugin-markad verfügbar. Diesmal insbesondere Fixes für die neue ffmpeg channel layout API.

    Code
    - some fixes for the new ffmpeg channel layout API
    - adjustments for vdr 2.6 error counter
    - declare ffmpeg 3.2.18 from Debian 9 Stretch as deprecated
    - some minor bug fixes and optimizations, see git
  • Hallo,

    ich portiere gerade den vdr samt markad plugin für OpenEmbedded-Linux (aka openatv, enigma boxen).

    vdr läuft soweit aber das markad crashed mit segmentation fault.

    Vollständiger Log und weitere Dateien sind im Anhang.

    Ausgeführt auf einer Gigablue UE 4K.

    Vieleicht hat jemand eine Idee was da schief läuft:


    Code
    Thu Jun 16 21:50:39 [21185] ERROR: segmentation fault
    Thu Jun 16 21:50:39 [21185] ERROR: [bt] Execution path:
    Thu Jun 16 21:50:39 [21185] ERROR: [bt] markad() [0x198ac]
    Thu Jun 16 21:50:39 [21185] ERROR: [bt] /lib/libc.so.6(__default_sa_restorer+0) [0xb61cb8e0]
    Thu Jun 16 21:50:39 [21185] ERROR: [bt] markad(_ZN6cIndex3AddEiiii+0x4c) [0x359a0]
    Thu Jun 16 21:50:39 [21185] ERROR: [bt] markad(_ZN8cDecoder13GetNextPacketEb+0x2d4) [0x2cb58]
    Thu Jun 16 21:50:39 [21185] ERROR: [bt] markad(_ZN17cMarkAdStandalone12ProcessFilesEv+0x404) [0x24624]
    Thu Jun 16 21:50:39 [21185] ERROR: [bt] markad(main+0x1430) [0x192a8]
    Thu Jun 16 21:50:39 [21185] ERROR: [bt] /lib/libc.so.6(__libc_start_main+0x158) [0xb61b7d7c]
  • Erster Verdacht: Da läuft auf deinem 32 Bit System eine Variable über. Ist das Problem nur bei dieser Aufnahme oder bei allen ?

    Mal ein Versuch: Bitte in /command/debug.h den Kommentar in der Zeile "// #define DEBUG_INDEX" entfernen, neu bauen und dann die markad.log nochmals posten.

  • Erster Verdacht: Da läuft auf deinem 32 Bit System eine Variable über. Ist das Problem nur bei dieser Aufnahme oder bei allen ?

    Mal ein Versuch: Bitte in /command/debug.h den Kommentar in der Zeile "// #define DEBUG_INDEX" entfernen, neu bauen und dann die markad.log nochmals posten.

    Hab es gerade nochmal mit einer zweiten Aufnahme probiert. Abbruch an selber Stelle wieder direkt beim ersten Packet.

  • Hab es gerade nochmal mit einer zweiten Aufnahme probiert. Abbruch an selber Stelle wieder direkt beim ersten Packet.

    Das macht es einfacher, wenn es ein grundsätzliches Problem ist.

    Das knallt ja schon beim Aufruf.

    Bitte nochmals mit dem Stand ein Log erzeugen. Ich habe kein 32 Bit System mehr, das wird jetzt "stochern im Nebel".

  • Hier die relevanten Logzeilen:

  • Das sieht gut aus.

    Das "stochern in Nebel geht weiter": Vielleicht liegt es am Aufruf der Funktion mit der int64 Variable, das dein Compiler nicht mag.

    Bitte nochmals mit dem aktuellen Stand aus o.g. Branch testen.

  • Hab mal die alte markad Version 0.1.6 mit dem patch "improvements for markad for recent ffmpeg versions" portiert.

    Die läuft auf den beiden Aufnahmen mit Parameter --cDecoder einwandfrei durch.

    Klar, da gab es die Index Funktion, die bei dir crashed noch nicht.



    Mit dem neuen Branch leider nach wie vor selbes Resultat.

    Was ist denn das für ein Compilier bei dir ? Bitte nochmals mit dem aktuellen Stand testen, ich sehe immer noch nicht die Codezeile, die da den Crash verursacht.

  • Compilierung erfolgt unter amd64 ubuntu-20.04 mit der cross-compile OE-Toolchain für die arm basierte Platform mit gcc.


    Hier der neue Log:



    "indexVector.push_back(newIndex)" crashed.

  • Das ist doch in Bug im Cross Compiler ???

    Das Element wird zwar auf dem Stack allokiert, sollte aber kein Problem sein, da push_back eh das Element in den Heap kopiert. Mein Verdacht ist nun, dein Cross Compiler verhält sich hier anders.

    Teste bitte mal nochmals mit dem aktuellen Git Stand. Vorsicht: Das ist nur mal ein Quick and Diry Test und hat sicher noch einen Memory Leak drin.

  • Mit dem neusten Git Stand selbes Ergebnis.

    Ich denke das Problem ist weder in der class vector noch im Compiler zu suchen.

    Beides sind zu fundamentale Funktionen.

    Sieht für mich eher danach aus, das der heap vorher corrupted wird und es nur den vector bzw. die recordingIndex reference trifft.

    Gibt es kein Analysetool mit dem man solche Fehler sucht?

  • Vieleicht hilft das weiter?

    Ja, ich denke schon. Ich bekomme in meiner Build Umgebung keine Warning.


    Dort meldet der gcc zum source index.cpp schon eine warning bezüglich vector.

    Nein, die Warning kommt nicht aus meiner Source, sondern aus einer C++ Standard Lib, die ich include. Hier scheinen deine Libs und dein Compiler nicht zusammen zu passen. Kannst du mal mit einem älterem Compiler oder mit neueren C++ Libs testen ?

    So tief bin ich da auch nicht drin. Hat jemand eine Idee, wo man hier noch ansetzen könnte ?

  • Puh da jetzt die Toolchain bezüglich gcc oder libs zu ändern feht mir auch das know how.

    Ob die warnings wirklich mit unserem crash in Bezug stehen ist ja auch nicht klar.

    Gibts denn keine Tools die wir hier bezüglich detection of heap corruption an den start bringen können?

    Der Fehler wird nicht im gcc oder class vector stecken. Viel zu fundamental. Un dein Code ist hier auch sauber programmiert.

    Da geht vorher was in die Hose.

  • Kannst du mal direkt auf dem Zielsystem zu kompilieren, vielleicht ändert das was.

    Die Funktion ist eine Basisfunktion und wird sicher von jedem genutzt und keiner bekommt hier einen Crash. Da muss bei dir was besonderes sein, was das Problem verursacht.

    Da geht vorher was in die Hose.

    Viel vorher gibt es nicht, das crashed ja ziemlich am Anfang.

  • Bitte teste mal diesen Code. Da allokiere ich den Speicher für das neue Element im Vektor vor dem push_back. Mal sehen, ob das was ändert. Falls es neue Compiler Warnings bei dir gibt, bitte die auch posten.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!