Mercurial > libavformat.hg
diff utils.c @ 570:d82ccc7cff1c libavformat
set keyframe flag at a more central place instead of in every demuxer for containers which only store intra only streams
author | michael |
---|---|
date | Fri, 22 Oct 2004 01:51:17 +0000 |
parents | d141aa45ca86 |
children | 640706a29efb |
line wrap: on
line diff
--- a/utils.c Tue Oct 19 10:37:02 2004 +0000 +++ b/utils.c Fri Oct 22 01:51:17 2004 +0000 @@ -591,6 +591,27 @@ } } +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 @@ } } + 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) {