diff --git a/components/squeezelite/opus.c b/components/squeezelite/opus.c index 6280332f..ec13d62d 100644 --- a/components/squeezelite/opus.c +++ b/components/squeezelite/opus.c @@ -138,7 +138,9 @@ static int get_opus_packet(void) { size_t bytes = min(_buf_used(streambuf), _buf_cont_read(streambuf)); while (!(status = OG(&go, stream_packetout, &u->state, &u->packet)) && bytes) { - do { + + // if sync_pageout (or sync_pageseek) is not called here, sync builds ups + while (!(status = OG(&go, sync_pageout, &u->sync, &u->page)) && bytes) { size_t consumed = min(bytes, 4096); char* buffer = OG(&gu, sync_buffer, &u->sync, consumed); memcpy(buffer, streambuf->readp, consumed); @@ -146,7 +148,7 @@ static int get_opus_packet(void) { _buf_inc_readp(streambuf, consumed); bytes -= consumed; - } while (!(status = OG(&gu, sync_pageseek, &u->sync, &u->page)) && bytes); + } // if we have a new page, put it in if (status) OG(&go, stream_pagein, &u->state, &u->page); @@ -184,7 +186,7 @@ static int read_opus_header(void) { switch (u->status) { case OGG_SYNC: u->status = OGG_ID_HEADER; - OG(&gu, stream_reset_serialno, &u->state, OG(&gu, page_serialno, &u->page)); + OG(&gu, stream_init, &u->state, OG(&gu, page_serialno, &u->page)); fetch = false; break; case OGG_ID_HEADER: @@ -208,7 +210,7 @@ static int read_opus_header(void) { fetch = true; break; case OGG_COMMENT_HEADER: - // skip pakets to consume VorbisComment. With opus, header packets align on pages + // skip packets to consume VorbisComment. With opus, header packets align on pages status = OG(&gu, page_packets, &u->page); break; default: diff --git a/components/squeezelite/vorbis.c b/components/squeezelite/vorbis.c index a5f9d47e..b0078bb4 100644 --- a/components/squeezelite/vorbis.c +++ b/components/squeezelite/vorbis.c @@ -138,7 +138,9 @@ static int get_ogg_packet(void) { size_t bytes = min(_buf_used(streambuf), _buf_cont_read(streambuf)); while (!(status = OG(&go, stream_packetout, &v->state, &v->packet)) && bytes) { - do { + + // if sync_pageout (or sync_pageseek) is not called first, sync buffers build ups + while (!(status = OG(&go, sync_pageout, &u->sync, &u->page)) && bytes) { size_t consumed = min(bytes, 4096); char* buffer = OG(&gv, sync_buffer, &v->sync, consumed); memcpy(buffer, streambuf->readp, consumed); @@ -146,7 +148,7 @@ static int get_ogg_packet(void) { _buf_inc_readp(streambuf, consumed); bytes -= consumed; - } while (!(status = OG(&go, sync_pageseek, &v->sync, &v->page)) && bytes); + } // if we have a new page, put it in if (status) OG(&go, stream_pagein, &v->state, &v->page);