mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-29 22:00:58 +02:00
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:
parent
82f19afefe
commit
365d8e471d
@ -373,9 +373,27 @@ ogg_packet (AVFormatContext * s, int *str, int *dstart, int *dsize, int64_t *fpo
|
|||||||
if (!os->header){
|
if (!os->header){
|
||||||
os->segp = segp;
|
os->segp = segp;
|
||||||
os->psize = psize;
|
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;
|
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{
|
}else{
|
||||||
os->pstart += os->psize;
|
os->pstart += os->psize;
|
||||||
os->psize = 0;
|
os->psize = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user