Browse Source

Improving m3u-feature

master
Torsten Stauder 4 years ago
parent
commit
dca7d3ed67
  1. 48
      src/SdCard.cpp
  2. 2
      src/revision.h

48
src/SdCard.cpp

@ -142,26 +142,59 @@ char **SdCard_ReturnPlaylist(const char *fileName, const uint32_t _playMode) {
} }
#endif #endif
snprintf(Log_Buffer, Log_BufferLength, "%s: %u", (char *) FPSTR(freeMemory), ESP.getFreeHeap());
Log_Println(Log_Buffer, LOGLEVEL_DEBUG);
if (files != NULL) { // If **ptr already exists, de-allocate its memory
Log_Println((char *) FPSTR(releaseMemoryOfOldPlaylist), LOGLEVEL_DEBUG);
--files;
freeMultiCharArray(files, strtoul(*files, NULL, 10));
snprintf(Log_Buffer, Log_BufferLength, "%s: %u", (char *) FPSTR(freeMemoryAfterFree), ESP.getFreeHeap());
Log_Println(Log_Buffer, LOGLEVEL_DEBUG);
}
// Parse m3u-playlist and create linear-playlist out of it // Parse m3u-playlist and create linear-playlist out of it
if (_playMode == WEBSTREAMS_LOCAL_M3U) { if (_playMode == WEBSTREAMS_LOCAL_M3U) {
if (fileOrDirectory && !fileOrDirectory.isDirectory() && fileOrDirectory.size() >= 0) {
enablePlaylistFromM3u = true; enablePlaylistFromM3u = true;
if (fileOrDirectory && !fileOrDirectory.isDirectory()) {
serializedPlaylist = (char *) x_calloc(2048, sizeof(char));
uint16_t allocCount = 1;
uint16_t allocSize = 1024;
if (psramInit()) {
allocSize = 65535; // There's enough PSRAM. So we don't have to care...
}
serializedPlaylist = (char *) x_calloc(allocSize, sizeof(char));
if (serializedPlaylist == NULL) { if (serializedPlaylist == NULL) {
Log_Println((char *) FPSTR(unableToAllocateMemForLinearPlaylist), LOGLEVEL_ERROR); Log_Println((char *) FPSTR(unableToAllocateMemForLinearPlaylist), LOGLEVEL_ERROR);
System_IndicateError(); System_IndicateError();
return files; return files;
} }
char buf; char buf;
char lastBuf = '0';
uint32_t fPos = 1; uint32_t fPos = 1;
serializedPlaylist[0] = '#'; serializedPlaylist[0] = '#';
while (fileOrDirectory.available() > 0) { while (fileOrDirectory.available() > 0) {
buf = fileOrDirectory.read(); buf = fileOrDirectory.read();
if (fPos+1 >= allocCount * allocSize) {
serializedPlaylist = (char *) realloc(serializedPlaylist, ++allocCount * allocSize);
Log_Println((char *) FPSTR(reallocCalled), LOGLEVEL_DEBUG);
if (serializedPlaylist == NULL) {
Log_Println((char *) FPSTR(unableToAllocateMemForLinearPlaylist), LOGLEVEL_ERROR);
System_IndicateError();
free(serializedPlaylist);
return files;
}
}
if (buf != '\n' && buf != '\r') { if (buf != '\n' && buf != '\r') {
serializedPlaylist[fPos++] = buf; serializedPlaylist[fPos++] = buf;
lastBuf = buf;
} else { } else {
if (lastBuf != '#') { // Strip empty lines from m3u
serializedPlaylist[fPos++] = '#'; serializedPlaylist[fPos++] = '#';
lastBuf = '#';
}
} }
} }
if (serializedPlaylist[fPos-1] == '#') { // Remove trailing delimiter if set if (serializedPlaylist[fPos-1] == '#') { // Remove trailing delimiter if set
@ -172,17 +205,6 @@ char **SdCard_ReturnPlaylist(const char *fileName, const uint32_t _playMode) {
} }
} }
snprintf(Log_Buffer, Log_BufferLength, "%s: %u", (char *) FPSTR(freeMemory), ESP.getFreeHeap());
Log_Println(Log_Buffer, LOGLEVEL_DEBUG);
if (files != NULL) { // If **ptr already exists, de-allocate its memory
Log_Println((char *) FPSTR(releaseMemoryOfOldPlaylist), LOGLEVEL_DEBUG);
--files;
freeMultiCharArray(files, strtoul(*files, NULL, 10));
snprintf(Log_Buffer, Log_BufferLength, "%s: %u", (char *) FPSTR(freeMemoryAfterFree), ESP.getFreeHeap());
Log_Println(Log_Buffer, LOGLEVEL_DEBUG);
}
// Don't read from cachefile or m3u-file. Means: read filenames from SD and make playlist of it // Don't read from cachefile or m3u-file. Means: read filenames from SD and make playlist of it
if (!readFromCacheFile && !enablePlaylistFromM3u) { if (!readFromCacheFile && !enablePlaylistFromM3u) {
Log_Println((char *) FPSTR(playlistGenModeUncached), LOGLEVEL_NOTICE); Log_Println((char *) FPSTR(playlistGenModeUncached), LOGLEVEL_NOTICE);

2
src/revision.h

@ -1,4 +1,4 @@
#ifndef __REVISION_H__ #ifndef __REVISION_H__
#define __REVISION_H__ #define __REVISION_H__
constexpr const char softwareRevision[] PROGMEM = "Software-revision: 20210720-1";
constexpr const char softwareRevision[] PROGMEM = "Software-revision: 20210720-2";
#endif #endif
Loading…
Cancel
Save