| OLD | NEW |
| (Empty) | |
| 1 diff -wurp -N orig/libavformat/oggdec.c ffmpeg-mt/libavformat/oggdec.c |
| 2 --- orig/libavformat/oggdec.c 2010-11-29 08:28:58 -0800 |
| 3 +++ ffmpeg-mt/libavformat/oggdec.c 2010-11-29 08:29:07 -0800 |
| 4 @@ -383,9 +383,27 @@ ogg_packet (AVFormatContext * s, int *st |
| 5 if (!os->header){ |
| 6 os->segp = segp; |
| 7 os->psize = psize; |
| 8 - if (!ogg->headers) |
| 9 - s->data_offset = os->sync_pos; |
| 10 + |
| 11 + // We've reached the first non-header packet. All header |
| 12 + // packets must be complete before the first non-header |
| 13 + // one, so everything that follows must be non-header. |
| 14 ogg->headers = 1; |
| 15 + |
| 16 + // Update the header state for all streams and |
| 17 + // compute the data_offset. |
| 18 + s->data_offset = os->sync_pos; |
| 19 + for (i = 0; i < ogg->nstreams; i++) { |
| 20 + struct ogg_stream *cur_os = ogg->streams + i; |
| 21 + // Set stream header state to 0 if its last packet |
| 22 + // was a header. |
| 23 + if (cur_os->header > 0) |
| 24 + cur_os->header = 0; |
| 25 + |
| 26 + // if we have a partial non-header packet, its start is |
| 27 + // obviously at or after the data start. |
| 28 + if (cur_os->incomplete) |
| 29 + s->data_offset = FFMIN(s->data_offset, cur_os->sync_pos); |
| 30 + } |
| 31 }else{ |
| 32 os->pstart += os->psize; |
| 33 os->psize = 0; |
| OLD | NEW |