> 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

Attachment: pgpIqz99qIDIe.pgp
Description: PGP signature

_______________________________________________
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to