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?

1 „Gefällt mir“

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:

5 „Gefällt mir“