os->segp = segp;
os->psize = psize;
- // 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.
+ // We have reached the first non-header packet in this stream.
+ // Unfortunately more header packets may still follow for others,
+ // so we reset this later unless we are done with the headers
+ // for all streams.
ogg->headers = 1;
// Update the header state for all streams and
// compute the data_offset.
- s->data_offset = os->sync_pos;
+ if (!s->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;
+ ogg->headers = 0;
// if we have a partial non-header packet, its start is
// obviously at or after the data start