On Fri, Apr 08, 2011 at 01:30:12PM +0200, Luca Barbato wrote:
> On 4/8/11 12:58 PM, Clément Bœsch wrote:
> >On Thu, Apr 07, 2011 at 10:32:23AM +0200, Luca Barbato wrote:
> >>On 04/07/2011 10:23 AM, Clément Bœsch wrote:
> >>>---
> >>>  libavformat/oggdec.c |   16 ++++++++++++++++
> >>>  libavformat/oggdec.h |    1 +
> >>>  2 files changed, 17 insertions(+), 0 deletions(-)
> >>>
> >>
> >>Looks fine, I hope there aren't ogg files that break because somebody
> >>decided putting streams around would be fun.
> >>
> >
> >Let me know what I could/should/have to test for this to get approved. It
> >works here with my webradio, and with ogg with multiple audio channels. Of
> >course, it's certainly not enough to assert it does not break anything.
> >
> 
> I'd push it this night or tomorrow night.
> 

Thanks for pushing it, but I just realized this code might be overkill; we
can reuse the ogg headers attribute. Patch attached. Also, I'm still
unable to reload the metadata on track change…

-- 
Clément B.
From 417111b8e66986d51f9c08d61aefdf79a01cf348 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment=20B=C5=93sch?= <[email protected]>
Date: Sun, 10 Apr 2011 09:26:43 +0200
Subject: [PATCH] oggdec: simplify audio chained ogg streams support

---
 libavformat/oggdec.c |    8 +-------
 libavformat/oggdec.h |    1 -
 2 files changed, 1 insertions(+), 8 deletions(-)

diff --git a/libavformat/oggdec.c b/libavformat/oggdec.c
index 5cf4faa..ce1152d 100644
--- a/libavformat/oggdec.c
+++ b/libavformat/oggdec.c
@@ -164,7 +164,6 @@ 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)
@@ -242,8 +241,7 @@ 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) {
+        if (ogg->headers) {
                 int n;
 
                 for (n = 0; n < ogg->nstreams; n++) {
@@ -252,8 +250,6 @@ ogg_read_page (AVFormatContext * s, int *str)
                 }
                 ogg->curidx   = -1;
                 ogg->nstreams = 0;
-                break;
-            }
         }
         idx = ogg_new_stream (s, serial);
         if (idx < 0)
@@ -261,8 +257,6 @@ ogg_read_page (AVFormatContext * s, int *str)
     }
 
     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 785cd81..7d66cd5 100644
--- a/libavformat/oggdec.h
+++ b/libavformat/oggdec.h
@@ -75,7 +75,6 @@ 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.4

Attachment: pgpeX8jCqbaSV.pgp
Description: PGP signature

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to