From ce80c5029e3885836ac3077a2219093e251c4993 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Tue, 16 Sep 2014 20:25:01 +0200 Subject: [PATCH] oggdec: recognize "begin of stream" packets and restart decoding --- sys/src/cmd/audio/oggdec/oggdec.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/sys/src/cmd/audio/oggdec/oggdec.c b/sys/src/cmd/audio/oggdec/oggdec.c index 0df9b15f3..68159fcb2 100644 --- a/sys/src/cmd/audio/oggdec/oggdec.c +++ b/sys/src/cmd/audio/oggdec/oggdec.c @@ -139,7 +139,10 @@ int main(){ fprintf(stderr,"Input does not appear to be an Ogg bitstream.\n"); exit(1); } - + + +BOS:/* Begin of stream */ + /* Get the serial number and set up the rest of decode. */ /* serialno first; use it to set up a logical stream */ ogg_stream_init(&os,ogg_page_serialno(&og)); @@ -248,6 +251,14 @@ int main(){ fprintf(stderr,"Corrupt or missing data in bitstream; " "continuing...\n"); }else{ + if(ogg_page_bos(&og)){ /* got new start of stream */ + ogg_stream_clear(&os); + vorbis_block_clear(&vb); + vorbis_dsp_clear(&vd); + vorbis_comment_clear(&vc); + vorbis_info_clear(&vi); + goto BOS; + } ogg_stream_pagein(&os,&og); /* can safely ignore errors at this point */ while(1){