oggvorbis: move handling of first packets ts from parser to muxer.
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 4 May 2012 23:41:54 +0000 (01:41 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 4 May 2012 23:52:21 +0000 (01:52 +0200)
The parser does not have enough knowledge it seems to do it
correctly.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavcodec/vorbis_parser.c
libavformat/oggparsevorbis.c

index d1f0838..a0468cb 100644 (file)
@@ -226,8 +226,7 @@ int avpriv_vorbis_parse_frame(VorbisParseContext *s, const uint8_t *buf,
             previous_blocksize = s->blocksize[flag];
         }
         current_blocksize     = s->mode_blocksize[mode];
-        if(previous_blocksize)
-            duration              = (previous_blocksize + current_blocksize) >> 2;
+        duration              = (previous_blocksize + current_blocksize) >> 2;
         s->previous_blocksize = current_blocksize;
     }
 
index 02da127..fa03ed7 100644 (file)
@@ -323,7 +323,7 @@ static int vorbis_packet(AVFormatContext *s, int idx)
             }
             next_pkt += os->segments[seg];
         }
-        os->lastpts = os->lastdts   = os->granule - duration;
+        os->lastpts = os->lastdts   = os->granule - FFMIN(duration, os->granule);
         if(s->streams[idx]->start_time == AV_NOPTS_VALUE) {
             s->streams[idx]->start_time = os->lastpts;
             if (s->streams[idx]->duration)