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.
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.
Die Version 3.0.23 ist auf vdr-plugin-markad verfügbar. Diesmal insbesondere Fixes für die neue ffmpeg channel layout API.
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:
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.
Anbei die neu erstellte Logdatei mit #define DEBUG_INDEX enabled.
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:
Thu Jun 16 23:20:54 [26711] DEBUG: ------- frameTimeOffset_ms 20 INT_MAX 2147483647
Thu Jun 16 23:20:54 [26711] DEBUG: cDecoder::GetNextPacket(): filenumber 1, frameNumber 0, ptsTimeOffset_ms 0, frameTimeOffset_ms 20
Thu Jun 16 23:20:54 [26711] ERROR: segmentation fault
Thu Jun 16 23:20:54 [26711] ERROR: [bt] Execution path:
Thu Jun 16 23:20:54 [26711] ERROR: [bt] markad() [0x198ac]
Thu Jun 16 23:20:54 [26711] ERROR: [bt] /lib/libc.so.6(__default_sa_restorer+0) [0xb62328e0]
Thu Jun 16 23:20:54 [26711] ERROR: [bt] markad(_ZN6cIndex3AddEiiii+0x88) [0x35a1c]
Thu Jun 16 23:20:54 [26711] ERROR: [bt] markad(_ZN8cDecoder13GetNextPacketEb+0x308) [0x2cb8c]
Thu Jun 16 23:20:54 [26711] ERROR: [bt] markad(_ZN17cMarkAdStandalone12ProcessFilesEv+0x404) [0x24624]
Thu Jun 16 23:20:54 [26711] ERROR: [bt] markad(main+0x1430) [0x192a8]
Thu Jun 16 23:20:54 [26711] ERROR: [bt] /lib/libc.so.6(__libc_start_main+0x158) [0xb621ed7c]
Display More
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.
Teste jetzt nochmal deinen neuen Branch.
Mit dem neuen Branch leider nach wie vor selbes Resultat.
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:
Fri Jun 17 10:25:59 [2986] DEBUG: ------- frameTimeOffset_ms 20 INT_MAX 2147483647
Fri Jun 17 10:25:59 [2986] DEBUG: ----- before GetLastFrameNumber
Fri Jun 17 10:25:59 [2986] DEBUG: ----- after GetLastFrameNumber
Fri Jun 17 10:25:59 [2986] DEBUG: cDecoder::GetNextPacket(): filenumber 1, frameNumber 0, ptsTimeOffset_ms 0, frameTimeOffset_ms 20
Fri Jun 17 10:25:59 [2986] DEBUG: ----- 1
Fri Jun 17 10:25:59 [2986] DEBUG: ----- 2
Fri Jun 17 10:25:59 [2986] DEBUG: ----- 3
Fri Jun 17 10:25:59 [2986] DEBUG: ----- 4
Fri Jun 17 10:25:59 [2986] DEBUG: ----- 5
Fri Jun 17 10:25:59 [2986] DEBUG: ----- 6
Fri Jun 17 10:25:59 [2986] ERROR: segmentation fault
Fri Jun 17 10:25:59 [2986] ERROR: [bt] Execution path:
Fri Jun 17 10:25:59 [2986] ERROR: [bt] markad() [0x198ac]
Fri Jun 17 10:25:59 [2986] ERROR: [bt] /lib/libc.so.6(__default_sa_restorer+0) [0xb62068e0]
Fri Jun 17 10:25:59 [2986] ERROR: [bt] markad(_ZN6cIndex3AddEiiii+0x17c) [0x35b10]
Fri Jun 17 10:25:59 [2986] ERROR: [bt] markad(_ZN8cDecoder13GetNextPacketEb+0x308) [0x2cb8c]
Fri Jun 17 10:25:59 [2986] ERROR: [bt] markad(_ZN17cMarkAdStandalone12ProcessFilesEv+0x404) [0x24624]
Fri Jun 17 10:25:59 [2986] ERROR: [bt] markad(main+0x1430) [0x192a8]
Fri Jun 17 10:25:59 [2986] ERROR: [bt] /lib/libc.so.6(__libc_start_main+0x158) [0xb61f2d7c]
Display More
"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?
Ich habe mal den log zum build des markad angehängt.
Dort meldet der gcc zum source index.cpp schon eine warning bezüglich vector.
Vieleicht hilft das weiter?
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 ?
C -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -rdynamic -Wextra -c -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D__STDC_CONSTANT_MACROS -D__USE_XOPEN_EXTENDED evaluate.cpp
In file included from /home/dev/build-enviroment/builds/openatv/release/gb7252/tmp/work/cortexa15hf-neon-vfpv4-oe-linux-gnueabi/vdr-plugin-markad/3.0.23-r0/recipe-sysroot/usr/include/c++/9.2.0/vector:72,
from index.h:13,
from index.cpp:8:
/home/dev/build-enviroment/builds/openatv/release/gb7252/tmp/work/cortexa15hf-neon-vfpv4-oe-linux-gnueabi/vdr-plugin-markad/3.0.23-r0/recipe-sysroot/usr/include/c++/9.2.0/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(std::vector<_Tp, _Alloc>::iterator, _Args&& ...) [with _Args = {const cIndex::sPTS_RingbufferElement&}; _Tp = cIndex::sPTS_RingbufferElement; _Alloc = std::allocator<cIndex::sPTS_RingbufferElement>]':
/home/dev/build-enviroment/builds/openatv/release/gb7252/tmp/work/cortexa15hf-neon-vfpv4-oe-linux-gnueabi/vdr-plugin-markad/3.0.23-r0/recipe-sysroot/usr/include/c++/9.2.0/bits/vector.tcc:426:7: note: parameter passing for argument of type 'std::vector<cIndex::sPTS_RingbufferElement>::iterator' {aka '__gnu_cxx::__normal_iterator<cIndex::sPTS_RingbufferElement*, std::vector<cIndex::sPTS_RingbufferElement> >'} changed in GCC 7.1
426 | vector<_Tp, _Alloc>::
| ^~~~~~~~~~~~~~~~~~~
In file included from /home/dev/build-enviroment/builds/openatv/release/gb7252/tmp/work/cortexa15hf-neon-vfpv4-oe-linux-gnueabi/vdr-plugin-markad/3.0.23-r0/recipe-sysroot/usr/include/c++/9.2.0/vector:67,
from index.h:13,
from index.cpp:8:
/home/dev/build-enviroment/builds/openatv/release/gb7252/tmp/work/cortexa15hf-neon-vfpv4-oe-linux-gnueabi/vdr-plugin-markad/3.0.23-r0/recipe-sysroot/usr/include/c++/9.2.0/bits/stl_vector.h: In member function 'void cIndex::AddPTS(int, int64_t)':
/home/dev/build-enviroment/builds/openatv/release/gb7252/tmp/work/cortexa15hf-neon-vfpv4-oe-linux-gnueabi/vdr-plugin-markad/3.0.23-r0/recipe-sysroot/usr/include/c++/9.2.0/bits/stl_vector.h:1195:4: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator<cIndex::sPTS_RingbufferElement*, std::vector<cIndex::sPTS_RingbufferElement> >' changed in GCC 7.1
1195 | _M_realloc_insert(end(), __x);
| ^~~~~~~~~~~~~~~~~
Display More
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.
Don’t have an account yet? Register yourself now and be a part of our community!