mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
set keyframe flag at a more central place instead of in every demuxer for containers which only store intra only streams
Originally committed as revision 3620 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
a7b42d28da
commit
5ba7c3d7c9
@ -164,7 +164,6 @@ static int au_read_packet(AVFormatContext *s,
|
|||||||
if (av_new_packet(pkt, MAX_SIZE))
|
if (av_new_packet(pkt, MAX_SIZE))
|
||||||
return AVERROR_IO;
|
return AVERROR_IO;
|
||||||
pkt->stream_index = 0;
|
pkt->stream_index = 0;
|
||||||
pkt->flags |= PKT_FLAG_KEY;
|
|
||||||
|
|
||||||
ret = get_buffer(&s->pb, pkt->data, pkt->size);
|
ret = get_buffer(&s->pb, pkt->data, pkt->size);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
@ -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){
|
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 mask = lsb_bits < 64 ? (1LL<<lsb_bits)-1 : -1LL;
|
||||||
int64_t delta= last_ts - mask/2;
|
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 ? */
|
/* do we have a video B frame ? */
|
||||||
presentation_delayed = 0;
|
presentation_delayed = 0;
|
||||||
if (st->codec.codec_type == CODEC_TYPE_VIDEO) {
|
if (st->codec.codec_type == CODEC_TYPE_VIDEO) {
|
||||||
|
@ -331,7 +331,6 @@ static int wav_read_packet(AVFormatContext *s,
|
|||||||
if (av_new_packet(pkt, size))
|
if (av_new_packet(pkt, size))
|
||||||
return AVERROR_IO;
|
return AVERROR_IO;
|
||||||
pkt->stream_index = 0;
|
pkt->stream_index = 0;
|
||||||
pkt->flags |= PKT_FLAG_KEY;
|
|
||||||
|
|
||||||
ret = get_buffer(&s->pb, pkt->data, pkt->size);
|
ret = get_buffer(&s->pb, pkt->data, pkt->size);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user