]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/utils.c
Prevent invalid timestamps from being stored.
[ffmpeg] / libavformat / utils.c
index 845c87e63e5f3c230b1b01b83fdcfc5e8291e477..d2ed35d9380c0fd7a5985b9ff446913d9387da81 100644 (file)
@@ -538,6 +538,9 @@ static int get_audio_frame_size(AVCodecContext *enc, int size)
 {
     int frame_size;
 
+    if(enc->codec_id == CODEC_ID_VORBIS)
+        return -1;
+
     if (enc->frame_size <= 1) {
         int bits_per_sample = av_get_bits_per_sample(enc->codec_id);
 
@@ -1726,6 +1729,10 @@ static int has_codec_parameters(AVCodecContext *enc)
     switch(enc->codec_type) {
     case CODEC_TYPE_AUDIO:
         val = enc->sample_rate && enc->channels;
+        if(!enc->frame_size &&
+           (enc->codec_id == CODEC_ID_VORBIS ||
+            enc->codec_id == CODEC_ID_AAC))
+            return 0;
         break;
     case CODEC_TYPE_VIDEO:
         val = enc->width && enc->pix_fmt != PIX_FMT_NONE;
@@ -2442,6 +2449,9 @@ static int compute_pkt_fields2(AVStream *st, AVPacket *pkt){
         }
     }
 
+    if(pkt->pts == AV_NOPTS_VALUE && pkt->dts != AV_NOPTS_VALUE && delay==0)
+        pkt->pts= pkt->dts;
+
     //XXX/FIXME this is a temporary hack until all encoders output pts
     if((pkt->pts == 0 || pkt->pts == AV_NOPTS_VALUE) && pkt->dts == AV_NOPTS_VALUE && !delay){
         pkt->dts=