set keyframe flag at a more central place instead of in every demuxer for containers...
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 22 Oct 2004 01:51:17 +0000 (01:51 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 22 Oct 2004 01:51:17 +0000 (01:51 +0000)
Originally committed as revision 3620 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/au.c
libavformat/utils.c
libavformat/wav.c

index 1721902..1709c87 100644 (file)
@@ -164,7 +164,6 @@ static int au_read_packet(AVFormatContext *s,
     if (av_new_packet(pkt, MAX_SIZE))
         return AVERROR_IO;
     pkt->stream_index = 0;
-    pkt->flags |= PKT_FLAG_KEY;    
 
     ret = get_buffer(&s->pb, pkt->data, pkt->size);
     if (ret < 0)
index 672c43e..1c0dd29 100644 (file)
@@ -591,6 +591,27 @@ static void compute_frame_duration(int *pnum, int *pden, AVStream *st,
     }
 }
 
+static int is_intra_only(AVCodecContext *enc){
+    if(enc->codec_type == CODEC_TYPE_AUDIO){
+        return 1;
+    }else if(enc->codec_type == CODEC_TYPE_VIDEO){
+        switch(enc->codec_id){
+        case CODEC_ID_MJPEG:
+        case CODEC_ID_MJPEGB:
+        case CODEC_ID_LJPEG:
+        case CODEC_ID_RAWVIDEO:
+        case CODEC_ID_DVVIDEO:
+        case CODEC_ID_HUFFYUV:
+        case CODEC_ID_ASV1:
+        case CODEC_ID_ASV2:
+        case CODEC_ID_VCR1:
+            return 1;
+        default: break;
+        }
+    }
+    return 0;
+}
+
 static int64_t lsb2full(int64_t lsb, int64_t last_ts, int lsb_bits){
     int64_t mask = lsb_bits < 64 ? (1LL<<lsb_bits)-1 : -1LL;
     int64_t delta= last_ts - mask/2;
@@ -617,6 +638,9 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
         }
     }
 
+    if(is_intra_only(&st->codec))
+        pkt->flags |= PKT_FLAG_KEY;
+
     /* do we have a video B frame ? */
     presentation_delayed = 0;
     if (st->codec.codec_type == CODEC_TYPE_VIDEO) {
index 2d28b8f..4528c83 100644 (file)
@@ -331,7 +331,6 @@ static int wav_read_packet(AVFormatContext *s,
     if (av_new_packet(pkt, size))
         return AVERROR_IO;
     pkt->stream_index = 0;
-    pkt->flags |= PKT_FLAG_KEY;    
 
     ret = get_buffer(&s->pb, pkt->data, pkt->size);
     if (ret < 0)