mirror of
https://github.com/sle118/squeezelite-esp32.git
synced 2025-12-08 12:37:01 +03:00
handle pages with no terminated packet
This commit is contained in:
@@ -64,6 +64,7 @@ struct EXT_RAM_ATTR streamstate stream;
|
|||||||
static EXT_RAM_ATTR struct {
|
static EXT_RAM_ATTR struct {
|
||||||
enum { OGG_OFF, OGG_SYNC, OGG_HEADER, OGG_SEGMENTS, OGG_PAGE } state;
|
enum { OGG_OFF, OGG_SYNC, OGG_HEADER, OGG_SEGMENTS, OGG_PAGE } state;
|
||||||
u32_t want, miss, match;
|
u32_t want, miss, match;
|
||||||
|
u64_t granule;
|
||||||
u8_t* data, segments[255];
|
u8_t* data, segments[255];
|
||||||
#pragma pack(push, 1)
|
#pragma pack(push, 1)
|
||||||
struct {
|
struct {
|
||||||
@@ -128,7 +129,6 @@ static int _poll(SSL *ssl, struct pollfd *pollinfo, int timeout) {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static bool send_header(void) {
|
static bool send_header(void) {
|
||||||
char *ptr = stream.header;
|
char *ptr = stream.header;
|
||||||
int len = stream.header_len;
|
int len = stream.header_len;
|
||||||
@@ -232,7 +232,7 @@ static void stream_ogg(size_t n) {
|
|||||||
for (int i = 0; i < ogg.want; i++) ogg.miss += ogg.data[i];
|
for (int i = 0; i < ogg.want; i++) ogg.miss += ogg.data[i];
|
||||||
ogg.want = ogg.miss;
|
ogg.want = ogg.miss;
|
||||||
|
|
||||||
if (ogg.header.granule == 0) {
|
if (ogg.header.granule == 0 || (ogg.header.granule == -1 && ogg.granule == 0)) {
|
||||||
// granule 0 means a new stream, so let's look into it
|
// granule 0 means a new stream, so let's look into it
|
||||||
ogg.state = OGG_PAGE;
|
ogg.state = OGG_PAGE;
|
||||||
ogg.data = malloc(ogg.want);
|
ogg.data = malloc(ogg.want);
|
||||||
@@ -240,6 +240,7 @@ static void stream_ogg(size_t n) {
|
|||||||
// otherwise, jump over data
|
// otherwise, jump over data
|
||||||
ogg.state = OGG_SYNC;
|
ogg.state = OGG_SYNC;
|
||||||
ogg.data = NULL;
|
ogg.data = NULL;
|
||||||
|
ogg.granule = ogg.header.granule;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case OGG_PAGE: {
|
case OGG_PAGE: {
|
||||||
@@ -271,6 +272,7 @@ static void stream_ogg(size_t n) {
|
|||||||
stream.header[stream.header_len++] = len;
|
stream.header[stream.header_len++] = len;
|
||||||
memcpy(stream.header + stream.header_len, p, len);
|
memcpy(stream.header + stream.header_len, p, len);
|
||||||
stream.header_len += len;
|
stream.header_len += len;
|
||||||
|
LOG_INFO("metadata: %.*s", len, p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -280,6 +282,7 @@ static void stream_ogg(size_t n) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
free(ogg.data);
|
free(ogg.data);
|
||||||
|
ogg.data = NULL;
|
||||||
ogg.state = OGG_SYNC;
|
ogg.state = OGG_SYNC;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user