> From b686906d82d36b14236ce677bdf881f48a67bc02 Mon Sep 17 00:00:00 2001 > From: =?UTF-8?q?Cl=C3=A9ment=20B=C5=93sch?= <ubi...@gmail.com> > Date: Tue, 5 Apr 2011 00:29:01 +0200 > Subject: [PATCH] oggdec: fix streaming with continuous audio streams > (issue2337) >
New update following Luca's review on IRC: initmode renamed to page_begin, and doxygen comment added. -- Clément B.
From b129b2c17a8a4814a4a8ef70b2e6072b4ae33df7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20B=C5=93sch?= <ubi...@gmail.com> Date: Tue, 5 Apr 2011 00:29:01 +0200 Subject: [PATCH] oggdec: fix streaming with continuous audio streams (issue2337) --- libavformat/oggdec.c | 16 ++++++++++++++++ libavformat/oggdec.h | 1 + 2 files changed, 17 insertions(+), 0 deletions(-) diff --git a/libavformat/oggdec.c b/libavformat/oggdec.c index cd866d4..5cf4faa 100644 --- a/libavformat/oggdec.c +++ b/libavformat/oggdec.c @@ -164,6 +164,7 @@ ogg_new_stream (AVFormatContext * s, uint32_t serial) os->bufsize = DECODER_BUFFER_SIZE; os->buf = av_malloc(os->bufsize); os->header = -1; + os->page_begin = 1; st = av_new_stream (s, idx); if (!st) @@ -241,12 +242,27 @@ ogg_read_page (AVFormatContext * s, int *str) idx = ogg_find_stream (ogg, serial); if (idx < 0){ + for (i = 0; i < ogg->nstreams; i++) { + if (!ogg->streams[i].page_begin) { + int n; + + for (n = 0; n < ogg->nstreams; n++) { + av_free(ogg->streams[n].buf); + av_free(ogg->streams[n].private); + } + ogg->curidx = -1; + ogg->nstreams = 0; + break; + } + } idx = ogg_new_stream (s, serial); if (idx < 0) return -1; } os = ogg->streams + idx; + if (!(flags & OGG_FLAG_BOS)) + os->page_begin = 0; os->page_pos = avio_tell(bc) - 27; if(os->psize > 0) diff --git a/libavformat/oggdec.h b/libavformat/oggdec.h index 7d66cd5..785cd81 100644 --- a/libavformat/oggdec.h +++ b/libavformat/oggdec.h @@ -75,6 +75,7 @@ struct ogg_stream { int incomplete; ///< whether we're expecting a continuation in the next page int page_end; ///< current packet is the last one completed in the page int keyframe_seek; + int page_begin; ///< set to 1 if the stream only received a begin-of-stream packet, otherwise 0 void *private; }; -- 1.7.4.2
pgpIqz99qIDIe.pgp
Description: PGP signature
_______________________________________________ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel