|  | @@ -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:
 |