Mercurial > libavformat.hg
changeset 5829:8e97be5c4b94 libavformat
oggdec: Pass packets to header() until the stream is done with them
This fixes some old ogm files that had the 3rd vorbis header after a data
packet in another stream. This is invalid in ogg, but this change shouldn't
affect the behaviour of any valid file.
author | conrad |
---|---|
date | Fri, 12 Mar 2010 05:17:01 +0000 |
parents | 925e7a7b3227 |
children | f8093c5208f6 |
files | oggdec.c oggdec.h |
diffstat | 2 files changed, 6 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/oggdec.c Fri Mar 12 05:16:57 2010 +0000 +++ b/oggdec.c Fri Mar 12 05:17:01 2010 +0000 @@ -364,21 +364,19 @@ ogg->curidx = idx; os->incomplete = 0; - if (!ogg->headers){ - int hdr = os->codec->header (s, idx); - os->header = os->seq; - if (!hdr){ + if (os->header) { + os->header = os->codec->header (s, idx); + if (!os->header){ os->segp = segp; os->psize = psize; + if (!ogg->headers) + s->data_offset = os->sync_pos; ogg->headers = 1; - s->data_offset = os->sync_pos; }else{ os->pstart += os->psize; os->psize = 0; } - } - - if (os->header > -1 && os->seq > os->header){ + } else { os->pflags = 0; os->pduration = 0; if (os->codec && os->codec->packet) @@ -405,7 +403,6 @@ break; } - os->seq++; if (os->segp == os->nsegs) ogg->curidx = -1;