From fe5c5bccce4afa5d70306151c3d9e76f68157b66 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Fri, 4 May 2012 22:45:57 +0200 Subject: oggvorbisdec: Apply timestamp calculation always when timestamps arent known. Signed-off-by: Michael Niedermayer --- libavformat/oggparsevorbis.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'libavformat/oggparsevorbis.c') diff --git a/libavformat/oggparsevorbis.c b/libavformat/oggparsevorbis.c index 57af4a1807..02da12799d 100644 --- a/libavformat/oggparsevorbis.c +++ b/libavformat/oggparsevorbis.c @@ -296,7 +296,7 @@ static int vorbis_packet(AVFormatContext *s, int idx) here we parse the duration of each packet in the first page and compare the total duration to the page granule to find the encoder delay and set the first timestamp */ - if (!os->lastpts) { + if ((!os->lastpts || os->lastpts == AV_NOPTS_VALUE) && !(os->flags & OGG_FLAG_EOS)) { int seg, d; uint8_t *last_pkt = os->buf + os->pstart; uint8_t *next_pkt = last_pkt; @@ -324,9 +324,11 @@ static int vorbis_packet(AVFormatContext *s, int idx) next_pkt += os->segments[seg]; } os->lastpts = os->lastdts = os->granule - duration; - s->streams[idx]->start_time = os->lastpts; - if (s->streams[idx]->duration) - s->streams[idx]->duration -= s->streams[idx]->start_time; + if(s->streams[idx]->start_time == AV_NOPTS_VALUE) { + s->streams[idx]->start_time = os->lastpts; + if (s->streams[idx]->duration) + s->streams[idx]->duration -= s->streams[idx]->start_time; + } priv->final_pts = AV_NOPTS_VALUE; avpriv_vorbis_parse_reset(&priv->vp); } -- cgit v1.2.3