Ensure that data_offset is set correctly when there are partial

data packets before the first complete one.
Patch by Aaron Colwell [acolwell chromium org].

Originally committed as revision 25846 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Aaron Colwell 2010-11-29 19:02:28 +00:00 committed by Reimar Döffinger
parent 82f19afefe
commit 365d8e471d
1 changed files with 20 additions and 2 deletions

View File

@ -373,9 +373,27 @@ ogg_packet (AVFormatContext * s, int *str, int *dstart, int *dsize, int64_t *fpo
if (!os->header){
os->segp = segp;
os->psize = psize;
if (!ogg->headers)
s->data_offset = os->sync_pos;
// We have reached the first non-header packet. All header
// packets must be complete before the first non-header
// one, so everything that follows must be non-header.
ogg->headers = 1;
// Update the header state for all streams and
// compute the data_offset.
s->data_offset = os->sync_pos;
for (i = 0; i < ogg->nstreams; i++) {
struct ogg_stream *cur_os = ogg->streams + i;
// Set stream header state to 0 if its last packet
// was a header.
if (cur_os->header > 0)
cur_os->header = 0;
// if we have a partial non-header packet, its start is
// obviously at or after the data start
if (cur_os->incomplete)
s->data_offset = FFMIN(s->data_offset, cur_os->sync_pos);
}
}else{
os->pstart += os->psize;
os->psize = 0;