Mercurial > libavformat.hg
changeset 5637:37e2c3e635b3 libavformat
Fix playback with invalid files that don't set the continuation flag for
pages that continue packets started in prior pages.
Fixes issue1248
author | conrad |
---|---|
date | Mon, 08 Feb 2010 10:13:03 +0000 |
parents | 7309cd6645b6 |
children | a3e321e7ca38 |
files | oggdec.c oggdec.h |
diffstat | 2 files changed, 5 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/oggdec.c Sun Feb 07 19:10:04 2010 +0000 +++ b/oggdec.c Mon Feb 08 10:13:03 2010 +0000 @@ -122,6 +122,7 @@ os->lastdts = AV_NOPTS_VALUE; os->nsegs = 0; os->segp = 0; + os->incomplete = 0; } ogg->curidx = -1; @@ -268,7 +269,7 @@ for (i = 0; i < nsegs; i++) size += os->segments[i]; - if (flags & OGG_FLAG_CONT){ + if (flags & OGG_FLAG_CONT || os->incomplete){ if (!os->psize){ while (os->segp < os->nsegs){ int seg = os->segments[os->segp++]; @@ -356,6 +357,7 @@ if (!complete && os->segp == os->nsegs){ ogg->curidx = -1; + os->incomplete = 1; } }while (!complete); @@ -366,6 +368,7 @@ #endif ogg->curidx = idx; + os->incomplete = 0; if (os->header < 0){ int hdr = os->codec->header (s, idx);
--- a/oggdec.h Sun Feb 07 19:10:04 2010 +0000 +++ b/oggdec.h Mon Feb 08 10:13:03 2010 +0000 @@ -71,6 +71,7 @@ int header; int nsegs, segp; uint8_t segments[255]; + 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 void *private; };