| 487 | | while (!ogg_read_page (s, &i)){ |
| 488 | | if (ogg->streams[i].granule != -1 && ogg->streams[i].granule != 0 && |
| 489 | | ogg->streams[i].codec) |
| 490 | | idx = i; |
| 491 | | } |
| | 488 | /* Seek back from the end of the file until we find the duration of all of the streams */ |
| | 489 | streams_found = 0; |
| | 490 | while (streams_found < ogg->nstreams && search_start > 0) { |
| | 491 | url_fseek (&s->pb, search_start, SEEK_SET); |
| | 492 | while (!ogg_read_page (s, &i) && url_ftell (&s->pb) < search_end) { |
| | 493 | if (ogg->streams[i].granule != -1 && ogg->streams[i].granule != 0 && |
| | 494 | ogg->streams[i].codec) |
| | 495 | { |
| | 496 | duration = ogg_gptopts (s, i, ogg->streams[i].granule); |
| | 497 | if (s->streams[i]->duration == AV_NOPTS_VALUE) { |
| | 498 | s->streams[i]->duration = duration; |
| | 499 | streams_found++; |
| | 500 | } else if (duration > s->streams[i]->duration) { |
| | 501 | s->streams[i]->duration = duration; |
| | 502 | } |
| | 503 | } |
| | 504 | } |
| | 505 | search_start -= MAX_PAGE_SIZE; |
| | 506 | search_end -= MAX_PAGE_SIZE; |
| | 507 | } |
| 501 | | while (!ogg_read_page (s, &i)) { |
| 502 | | if (i == idx && ogg->streams[i].granule != -1 && ogg->streams[i].granule != 0) |
| 503 | | break; |
| 504 | | } |
| 505 | | if (i == idx) { |
| 506 | | s->streams[idx]->start_time = ogg_gptopts (s, idx, ogg->streams[idx].granule); |
| 507 | | s->streams[idx]->duration -= s->streams[idx]->start_time; |
| 508 | | } |
| | 514 | streams_found = 0; |
| | 515 | /* Reset the start time to AV_NOPTS_VALUE, just in case it isn't already */ |
| | 516 | for (i = 0; i < ogg->nstreams; i++) { |
| | 517 | s->streams[i]->start_time = AV_NOPTS_VALUE; |
| | 518 | } |
| | 519 | while (!ogg_read_page (s, &i) && streams_found < ogg->nstreams) { |
| | 520 | if (s->streams[i]->start_time == AV_NOPTS_VALUE && ogg->streams[i].granule != -1) { |
| | 521 | streams_found++; |
| | 522 | s->streams[i]->start_time = ogg_gptopts (s, i, ogg->streams[i].granule); |
| | 523 | s->streams[i]->duration -= s->streams[i]->start_time; |
| | 524 | } |
| | 525 | } |