Bestimmte MP3s brechen ab

So, hier der Bug Report mit den Testdateien :slight_smile:. Laufend auf der aktuelle Dev (mit nur den notwendigen Änderungen, dass es auf meiner Testplatform läuft), kann ich den Absturzt reproduzierbar triggern.

JSBach_testfile_no_cover
Das ist die Ausgangsdatei, dass es nicht an dem MP3 selber liegt (15s Johann Sebastian Bach, Double Violin Concerto 1st Movement)

760k Cover Image

JSBach_testfile_cover_756k
Diese Datei stürzt mit der folgenden Fehlerausgabe ab:

Log
D [171602] Gebe Speicher der alten Playlist frei (Freier Speicher: 51732 Bytes)
D [171602] Freier Speicher nach Aufräumen: 51732 Bytes
D [171620] Freier Speicher: 47340 Bytes
N [171620] Playlist-Generierung
I [171620] Dateimodus erkannt.
N [171621] Modus: Einzelner Track
I [171641] info        : Closing audio file
N [171642] Neue Playlist mit 1 Titel(n) empfangen
D [171642] Free heap: 61264
I [171648] info        : buffers freed, free Heap: 84640 bytes
I [171648] info        : Reading file: "/Test/JSBach_testfile_cover_756k.mp3"
I [171673] info        : MP3Decoder has been initialized, free Heap: 56860 bytes , free stack 2504 DWORDs
N [171676] '/Test/JSBach_testfile_cover_756k.mp3' wird abgespielt (1 von 1)
I [171696] info        : Content-Length: 1117565
I [171696] info        : ID3 framesSize: 779690
I [171696] info        : ID3 version: 2.3
I [171714] info        : ID3 normal frames
I [171745] id3data     : Album: Double Violin Concerto
I [171776] id3data     : Artist: J.S. Bach
D [171812] no cover image for SD-card audio
I [171816] id3data     : ContentType: Classical
I [171847] id3data     : Title: 1st Movement
I [171878] id3data     : Track: 1
Guru Meditation Error: Core  1 panic'ed (StoreProhibited). Exception was unhandled.

Core  1 register dump:
PC      : 0x4009b74c  PS      : 0x00060933  A0      : 0x8009bd86  A1      : 0x3ffeda70
A2      : 0x3f800014  A3      : 0x3f8ae94c  A4      : 0xd96da95f  A5      : 0xbdfcad5d  
A6      : 0x00060720  A7      : 0x00000001  A8      : 0x00000015  A9      : 0x0000000f
A10     : 0xc05816f0  A11     : 0x000003f4  A12     : 0x3f800038  A13     : 0x3f800078  
A14     : 0x00060923  A15     : 0x00000000  SAR     : 0x0000001b  EXCCAUSE: 0x0000001d
EXCVADDR: 0xd96da96b  LBEG    : 0x400852a9  LEND    : 0x400852b1  LCOUNT  : 0x00000027  


Backtrace: 0x4009b749:0x3ffeda70 0x4009bd83:0x3ffeda90 0x4009bec0:0x3ffedab0 0x40085d10:0x3ffedad0 0x40085d25:0x3ffedb00 0x4016723d:0x3ffedb20 0x400dcf97:0x3ffedb40 0x400e2e5e:0x3ffedb60 0x400e2feb:0x3ffedc20 0x4021f29b:0x3ffedc40 0x40220d99:0x3ffedc60 0x40113bc5:0x3ffedcb0 0x40113be9:0x3ffedcf0 0x40204872:0x3ffedd10 0x402048f1:0x3ffedd40 0x40205176:0x3ffedd60

  #0  0x4009b749:0x3ffeda70 in remove_free_block at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\heap/heap_tlsf.c:206
      (inlined by) block_locate_free at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\heap/heap_tlsf.c:442
      (inlined by) tlsf_malloc at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\heap/heap_tlsf.c:849
  #1  0x4009bd83:0x3ffeda90 in multi_heap_malloc_impl at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\heap/multi_heap.c:187
  #2  0x4009bec0:0x3ffedab0 in multi_heap_malloc at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\heap/multi_heap_poisoning.c:234
      (inlined by) multi_heap_malloc at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\heap/multi_heap_poisoning.c:223
  #3  0x40085d10:0x3ffedad0 in heap_caps_malloc_base at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\heap/heap_caps.c:175
      (inlined by) heap_caps_malloc_base at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\heap/heap_caps.c:120
  #4  0x40085d25:0x3ffedb00 in heap_caps_malloc at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\heap/heap_caps.c:195
  #5  0x4016723d:0x3ffedb20 in ps_malloc at C:/Users/Laszlo/.platformio/packages/framework-arduinoespressif32/cores/esp32/esp32-hal-psram.c:109
  #6  0x400dcf97:0x3ffedb40 in SpiRamAllocator::allocate(unsigned int) at src/Web.cpp:89
      (inlined by) ArduinoJson::V6213PB2::AllocatorOwner<SpiRamAllocator>::allocate(unsigned int) at .pio/libdeps/testrig/ArduinoJson/src/ArduinoJson/Document/BasicJsonDocument.hpp:20
      (inlined by) ArduinoJson::V6213PB2::BasicJsonDocument<SpiRamAllocator>::allocPool(unsigned int) at .pio/libdeps/testrig/ArduinoJson/src/ArduinoJson/Document/BasicJsonDocument.hpp:139
      (inlined by) ArduinoJson::V6213PB2::BasicJsonDocument<SpiRamAllocator>::BasicJsonDocument(unsigned int, SpiRamAllocator) at .pio/libdeps/testrig/ArduinoJson/src/ArduinoJson/Document/BasicJsonDocument.hpp:46
  #7  0x400e2e5e:0x3ffedb60 in processJsonRequest(char*) at src/Web.cpp:943
  #8  0x400e2feb:0x3ffedc20 in onWebsocketEvent(AsyncWebSocket*, AsyncWebSocketClient*, AwsEventType, void*, unsigned char*, unsigned int) at src/Web.cpp:1044
      (inlined by) onWebsocketEvent at src/Web.cpp:1021
  #9  0x4021f29b:0x3ffedc40 in std::_Function_handler<void (AsyncWebSocket*, AsyncWebSocketClient*, AwsEventType, void*, unsigned char*, unsigned int), void (*)(AsyncWebSocket*, AsyncWebSocketClient*, AwsEventType, void*, unsigned char*, unsigned int)>::_M_invoke(std::_Any_data const&, AsyncWebSocket*&&, AsyncWebSocketClient*&&, AwsEventType&&, void*&&, unsigned char*&&, unsigned int&&) at c:\users\laszlo\.platformio\packages\toolchain-xtensa-esp32\xtensa-esp32-elf\include\c++\8.4.0\bits/std_function.h:297
  #10 0x40220d99:0x3ffedc60 in std::function<void (AsyncWebSocket*, AsyncWebSocketClient*, AwsEventType, void*, unsigned char*, unsigned int)>::operator()(AsyncWebSocket*, AsyncWebSocketClient*, AwsEventType, void*, unsigned char*, unsigned int) const at c:\users\laszlo\.platformio\packages\toolchain-xtensa-esp32\xtensa-esp32-elf\include\c++\8.4.0\bits/std_function.h:687
      (inlined by) AsyncWebSocket::_handleEvent(AsyncWebSocketClient*, AwsEventType, void*, unsigned char*, unsigned int) at .pio/libdeps/testrig/ESP Async WebServer/src/AsyncWebSocket.cpp:864
  #11 0x40113bc5:0x3ffedcb0 in AsyncWebSocketClient::_onData(void*, unsigned int) at .pio/libdeps/testrig/ESP Async WebServer/src/AsyncWebSocket.cpp:684
  #12 0x40113be9:0x3ffedcf0 in std::_Function_handler<void (void*, AsyncClient*, void*, unsigned int), AsyncWebSocketClient::AsyncWebSocketClient(AsyncWebServerRequest*, AsyncWebSocket*)::{lambda(void*, AsyncClient*, void*, unsigned int)#7}>::_M_invoke(std::_Any_data const&, void*&&, AsyncClient*&&, std::_Any_data const&, unsigned int&&) at .pio/libdeps/testrig/ESP Async WebServer/src/AsyncWebSocket.cpp:483
      (inlined by) _M_invoke at c:\users\laszlo\.platformio\packages\toolchain-xtensa-esp32\xtensa-esp32-elf\include\c++\8.4.0\bits/std_function.h:297
  #13 0x40204872:0x3ffedd10 in std::function<void (void*, AsyncClient*, void*, unsigned int)>::operator()(void*, AsyncClient*, void*, unsigned int) const at c:\users\laszlo\.platformio\packages\toolchain-xtensa-esp32\xtensa-esp32-elf\include\c++\8.4.0\bits/std_function.h:687
      (inlined by) AsyncClient::_recv(tcp_pcb*, pbuf*, signed char) at .pio/libdeps/testrig/AsyncTCP@src-b1b5fe1257067f03f2d57f92cc6925a2/src/AsyncTCP.cpp:934
  #14 0x402048f1:0x3ffedd40 in AsyncClient::_s_recv(void*, tcp_pcb*, pbuf*, signed char) at .pio/libdeps/testrig/AsyncTCP@src-b1b5fe1257067f03f2d57f92cc6925a2/src/AsyncTCP.cpp:1210
  #15 0x40205176:0x3ffedd60 in _async_service_task(void*) at .pio/libdeps/testrig/AsyncTCP@src-b1b5fe1257067f03f2d57f92cc6925a2/src/AsyncTCP.cpp:162
      (inlined by) _async_service_task at .pio/libdeps/testrig/AsyncTCP@src-b1b5fe1257067f03f2d57f92cc6925a2/src/AsyncTCP.cpp:197

800k Cover Image

JSBach_testfile_cover_800k

Log
N [502266] Neue Playlist mit 1 Titel(n) empfangen
D [502276] Free heap: 85224
I [502330] info        : PSRAM found, inputBufferSize: 638965 bytes
I [502331] info        : buffers freed, free Heap: 85224 bytes
I [502331] info        : Reading file: "/Test/JSBach_testfile_cover_800k.mp3"
I [502363] info        : MP3Decoder has been initialized, free Heap: 57464 bytes , free stack 2952 DWORDs
N [502367] '/Test/JSBach_testfile_cover_800k.mp3' wird abgespielt (1 von 1)
I [502386] info        : Content-Length: 1161259
I [502386] info        : ID3 framesSize: 823384
I [502387] info        : ID3 version: 2.3
I [502405] info        : ID3 normal frames
I [502436] id3data     : Album: Double Violin Concerto
D [502463] no cover image for SD-card audio
I [502475] id3data     : Artist: J.S. Bach
I [502507] id3data     : ContentType: Classical
I [502537] id3data     : Title: 1st Movement
I [502570] id3data     : Track: 1
[502723][E][Audio.h:356] bigEndian(): range overflow
[502756][E][Audio.h:356] bigEndian(): range overflow
Guru Meditation Error: Core  1 panic'ed (LoadStoreAlignment). Exception was unhandled.

Core  1 register dump:
PC      : 0x4009b74c  PS      : 0x00060433  A0      : 0x8009bd86  A1      : 0x3ffedb00
A2      : 0x3f800014  A3      : 0x3f8ae93c  A4      : 0x40480dd1  A5      : 0xf11f014b  
A6      : 0x00060220  A7      : 0x00000001  A8      : 0x00000015  A9      : 0x0000000f
A10     : 0xc05816f0  A11     : 0x000003f4  A12     : 0x3f800038  A13     : 0x3f800078  
A14     : 0x00060423  A15     : 0x00000000  SAR     : 0x0000001b  EXCCAUSE: 0x00000009
EXCVADDR: 0x40480ddd  LBEG    : 0x400852a9  LEND    : 0x400852b1  LCOUNT  : 0x00000027  


Backtrace: 0x4009b749:0x3ffedb00 0x4009bd83:0x3ffedb20 0x4009bec0:0x3ffedb40 0x40085d10:0x3ffedb60 0x40085d25:0x3ffedb90 0x4016723d:0x3ffedbb0 0x400dcf97:0x3ffedbd0 0x400e2e5e:0x3ffedbf0 0x400e2feb:0x3ffedcb0 0x4021f29b:0x3ffedcd0 0x40220d99:0x3ffedcf0 0x40113bc5:0x3ffedd40 0x40113be9:0x3ffedd80 0x40204872:0x3ffedda0 0x402048f1:0x3ffeddd0 0x40205176:0x3ffeddf0

  #0  0x4009b749:0x3ffedb00 in remove_free_block at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\heap/heap_tlsf.c:206
      (inlined by) block_locate_free at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\heap/heap_tlsf.c:442
      (inlined by) tlsf_malloc at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\heap/heap_tlsf.c:849
  #1  0x4009bd83:0x3ffedb20 in multi_heap_malloc_impl at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\heap/multi_heap.c:187
  #2  0x4009bec0:0x3ffedb40 in multi_heap_malloc at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\heap/multi_heap_poisoning.c:234     
      (inlined by) multi_heap_malloc at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\heap/multi_heap_poisoning.c:223
  #3  0x40085d10:0x3ffedb60 in heap_caps_malloc_base at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\heap/heap_caps.c:175
      (inlined by) heap_caps_malloc_base at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\heap/heap_caps.c:120
  #4  0x40085d25:0x3ffedb90 in heap_caps_malloc at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\heap/heap_caps.c:195
  #5  0x4016723d:0x3ffedbb0 in ps_malloc at C:/Users/Laszlo/.platformio/packages/framework-arduinoespressif32/cores/esp32/esp32-hal-psram.c:109
  #6  0x400dcf97:0x3ffedbd0 in SpiRamAllocator::allocate(unsigned int) at src/Web.cpp:89
      (inlined by) ArduinoJson::V6213PB2::AllocatorOwner<SpiRamAllocator>::allocate(unsigned int) at .pio/libdeps/testrig/ArduinoJson/src/ArduinoJson/Document/BasicJsonDocument.hpp:20
      (inlined by) ArduinoJson::V6213PB2::BasicJsonDocument<SpiRamAllocator>::allocPool(unsigned int) at .pio/libdeps/testrig/ArduinoJson/src/ArduinoJson/Document/BasicJsonDocument.hpp:139
      (inlined by) ArduinoJson::V6213PB2::BasicJsonDocument<SpiRamAllocator>::BasicJsonDocument(unsigned int, SpiRamAllocator) at .pio/libdeps/testrig/ArduinoJson/src/ArduinoJson/Document/BasicJsonDocument.hpp:46
  #7  0x400e2e5e:0x3ffedbf0 in processJsonRequest(char*) at src/Web.cpp:943
  #8  0x400e2feb:0x3ffedcb0 in onWebsocketEvent(AsyncWebSocket*, AsyncWebSocketClient*, AwsEventType, void*, unsigned char*, unsigned int) at src/Web.cpp:1044
      (inlined by) onWebsocketEvent at src/Web.cpp:1021
  #9  0x4021f29b:0x3ffedcd0 in std::_Function_handler<void (AsyncWebSocket*, AsyncWebSocketClient*, AwsEventType, void*, unsigned char*, unsigned int), void (*)(AsyncWebSocket*, AsyncWebSocketClient*, AwsEventType, void*, unsigned char*, unsigned int)>::_M_invoke(std::_Any_data const&, AsyncWebSocket*&&, AsyncWebSocketClient*&&, AwsEventType&&, void*&&, unsigned char*&&, unsigned int&&) at c:\users\laszlo\.platformio\packages\toolchain-xtensa-esp32\xtensa-esp32-elf\include\c++\8.4.0\bits/std_function.h:297
  #10 0x40220d99:0x3ffedcf0 in std::function<void (AsyncWebSocket*, AsyncWebSocketClient*, AwsEventType, void*, unsigned char*, unsigned int)>::operator()(AsyncWebSocket*, AsyncWebSocketClient*, AwsEventType, void*, unsigned char*, unsigned int) const at c:\users\laszlo\.platformio\packages\toolchain-xtensa-esp32\xtensa-esp32-elf\include\c++\8.4.0\bits/std_function.h:687
      (inlined by) AsyncWebSocket::_handleEvent(AsyncWebSocketClient*, AwsEventType, void*, unsigned char*, unsigned int) at .pio/libdeps/testrig/ESP Async WebServer/src/AsyncWebSocket.cpp:864
  #11 0x40113bc5:0x3ffedd40 in AsyncWebSocketClient::_onData(void*, unsigned int) at .pio/libdeps/testrig/ESP Async WebServer/src/AsyncWebSocket.cpp:684 
  #12 0x40113be9:0x3ffedd80 in std::_Function_handler<void (void*, AsyncClient*, void*, unsigned int), AsyncWebSocketClient::AsyncWebSocketClient(AsyncWebServerRequest*, AsyncWebSocket*)::{lambda(void*, AsyncClient*, void*, unsigned int)#7}>::_M_invoke(std::_Any_data const&, void*&&, AsyncClient*&&, std::_Any_data const&, unsigned int&&) at .pio/libdeps/testrig/ESP Async WebServer/src/AsyncWebSocket.cpp:483
      (inlined by) _M_invoke at c:\users\laszlo\.platformio\packages\toolchain-xtensa-esp32\xtensa-esp32-elf\include\c++\8.4.0\bits/std_function.h:297   
  #13 0x40204872:0x3ffedda0 in std::function<void (void*, AsyncClient*, void*, unsigned int)>::operator()(void*, AsyncClient*, void*, unsigned int) const at c:\users\laszlo\.platformio\packages\toolchain-xtensa-esp32\xtensa-esp32-elf\include\c++\8.4.0\bits/std_function.h:687
      (inlined by) AsyncClient::_recv(tcp_pcb*, pbuf*, signed char) at .pio/libdeps/testrig/AsyncTCP@src-b1b5fe1257067f03f2d57f92cc6925a2/src/AsyncTCP.cpp:934
  #14 0x402048f1:0x3ffeddd0 in AsyncClient::_s_recv(void*, tcp_pcb*, pbuf*, signed char) at .pio/libdeps/testrig/AsyncTCP@src-b1b5fe1257067f03f2d57f92cc6925a2/src/AsyncTCP.cpp:1210
  #15 0x40205176:0x3ffeddf0 in _async_service_task(void*) at .pio/libdeps/testrig/AsyncTCP@src-b1b5fe1257067f03f2d57f92cc6925a2/src/AsyncTCP.cpp:162     
      (inlined by) _async_service_task at .pio/libdeps/testrig/AsyncTCP@src-b1b5fe1257067f03f2d57f92cc6925a2/src/AsyncTCP.cpp:197

Interessant hier ist, dass vor dem Absturz 2x der Fehler „bigEndian(): range overflow“ eingetragen wird.

@Wolle Eine minimale Version, die den Absturz zeigt habe ich hier zusammengeschuster:

Log
[   638][E][main.cpp:50] setup(): Starting playback of: /JSBach_testfile_no_cover.mp3
[ 15928][V][ssl_client.cpp:321] stop_ssl_socket(): Cleaning SSL connection.
[ 15939][E][main.cpp:50] setup(): Starting playback of: /JSBach_testfile_cover_756k.mp3

assert failed: tlsf_free IDF\components\heap\heap_tlsf.c:964 (!block_is_free(block) && "block already marked as free")


Backtrace: 0x40084651:0x3ffd0a20 0x4008e0e9:0x3ffd0a40 0x400928f1:0x3ffd0a60 0x4009198d:0x3ffd0b90 0x40092388:0x3ffd0bb0 0x400924c2:0x3ffd0bd0 0x40085499:0x3ffd0bf0 0x40092921:0x3ffd0c10 0x400d329a:0x3ffd0c30 0x400fbb0a:0x3ffd0c70

  #0  0x40084651:0x3ffd0a20 in panic_abort at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\esp_system/panic.c:408
  #1  0x4008e0e9:0x3ffd0a40 in esp_system_abort at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\esp_system/esp_system.c:137
  #2  0x400928f1:0x3ffd0a60 in __assert_func at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\newlib/assert.c:85
  #3  0x4009198d:0x3ffd0b90 in block_merge_prev at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\heap/heap_tlsf.c:343
      (inlined by) tlsf_free at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\heap/heap_tlsf.c:966
  #4  0x40092388:0x3ffd0bb0 in multi_heap_free_impl at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\heap/multi_heap.c:212
  #5  0x400924c2:0x3ffd0bd0 in multi_heap_free at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\heap/multi_heap_poisoning.c:266
  #6  0x40085499:0x3ffd0bf0 in heap_caps_free at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\heap/heap_caps.c:382
  #7  0x40092921:0x3ffd0c10 in free at C:\Users\Laszlo\.platformio\packages\framework-espidf\components\newlib/heap.c:39
  #8  0x400d329a:0x3ffd0c30 in setup() at src/main.cpp:57
  #9  0x400fbb0a:0x3ffd0c70 in loopTask(void*) at C:/Users/Laszlo/.platformio/packages/framework-arduinoespressif32/cores/esp32/main.cpp:42

Eigenartig, in meiner Testumgebung laufen beide Dateien prima. Kannst du das bitte nochmal testen mit „full clean“, vielleicht gibt es noch alte Datenreste? oder in platform.ini steht nicht der #master?

Sehr cool, kann ich bestätigen. Hatte nicht gesehen, dass da neue Commits bei dir sind und natürlich nicht daran gedacht, dass wir platformio.ini gepinnt haben.

Mit dem aktuellen HEAD bei #2a0ab81 fallen weder meine MP3 noch meine Testfiles aus. Ich habe weder auf der minimalen Version noch auf ESPuino Abstürze nach der Änderung.

Der letzte Audio-Bugfix kam vor 5 Stunden & wir haben ihn vor 3 Stunden übernommen. Schneller ging’s nicht :wink: