Mercurial > libavformat.hg
comparison oggdec.c @ 5957:986168b721ca libavformat
oggdec: Fix duration calculation if the last page in a file has no granule
author | conrad |
---|---|
date | Fri, 16 Apr 2010 12:21:35 +0000 |
parents | 4d8244eae68f |
children | ad447f146859 |
comparison
equal
deleted
inserted
replaced
5956:4d8244eae68f | 5957:986168b721ca |
---|---|
429 | 429 |
430 static int | 430 static int |
431 ogg_get_length (AVFormatContext * s) | 431 ogg_get_length (AVFormatContext * s) |
432 { | 432 { |
433 struct ogg *ogg = s->priv_data; | 433 struct ogg *ogg = s->priv_data; |
434 int idx = -1, i; | 434 int i; |
435 int64_t size, end; | 435 int64_t size, end; |
436 | 436 |
437 if(url_is_streamed(s->pb)) | 437 if(url_is_streamed(s->pb)) |
438 return 0; | 438 return 0; |
439 | 439 |
449 ogg_save (s); | 449 ogg_save (s); |
450 url_fseek (s->pb, end, SEEK_SET); | 450 url_fseek (s->pb, end, SEEK_SET); |
451 | 451 |
452 while (!ogg_read_page (s, &i)){ | 452 while (!ogg_read_page (s, &i)){ |
453 if (ogg->streams[i].granule != -1 && ogg->streams[i].granule != 0 && | 453 if (ogg->streams[i].granule != -1 && ogg->streams[i].granule != 0 && |
454 ogg->streams[i].codec) | 454 ogg->streams[i].codec) { |
455 idx = i; | 455 s->streams[i]->duration = |
456 } | 456 ogg_gptopts (s, i, ogg->streams[i].granule, NULL); |
457 | 457 if (s->streams[i]->start_time != AV_NOPTS_VALUE) |
458 if (idx != -1){ | 458 s->streams[i]->duration -= s->streams[i]->start_time; |
459 s->streams[idx]->duration = | 459 } |
460 ogg_gptopts (s, idx, ogg->streams[idx].granule, NULL); | |
461 if (s->streams[idx]->start_time != AV_NOPTS_VALUE) | |
462 s->streams[idx]->duration -= s->streams[idx]->start_time; | |
463 } | 460 } |
464 | 461 |
465 ogg_restore (s, 0); | 462 ogg_restore (s, 0); |
466 | 463 |
467 return 0; | 464 return 0; |