mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-25 12:40:01 +00:00
lavf: move the packet keyframe setting code.
compute_pkt_fields() is for unreliable estimates or guessing. The keyframe information from the parser is (at least in theory) reliable, so it should be used even when the other guessing is disabled with the AVFMT_FLAG_NOFILLIN flag. Therefore, move setting the packet keyframe flag based on parser information from compute_pkt_fields() to read_frame_internal().
This commit is contained in:
parent
9677247b0a
commit
655b24c01c
@ -984,14 +984,6 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
|
||||
/* update flags */
|
||||
if(is_intra_only(st->codec))
|
||||
pkt->flags |= AV_PKT_FLAG_KEY;
|
||||
else if (pc) {
|
||||
pkt->flags = 0;
|
||||
/* keyframe computation */
|
||||
if (pc->key_frame == 1)
|
||||
pkt->flags |= AV_PKT_FLAG_KEY;
|
||||
else if (pc->key_frame == -1 && pc->pict_type == AV_PICTURE_TYPE_I)
|
||||
pkt->flags |= AV_PKT_FLAG_KEY;
|
||||
}
|
||||
if (pc)
|
||||
pkt->convergence_duration = pc->convergence_duration;
|
||||
}
|
||||
@ -1053,6 +1045,10 @@ static int read_frame_internal(AVFormatContext *s, AVPacket *pkt)
|
||||
pkt->pts = st->parser->pts;
|
||||
pkt->dts = st->parser->dts;
|
||||
pkt->pos = st->parser->pos;
|
||||
if (st->parser->key_frame == 1 ||
|
||||
(st->parser->key_frame == -1 &&
|
||||
st->parser->pict_type == AV_PICTURE_TYPE_I))
|
||||
pkt->flags |= AV_PKT_FLAG_KEY;
|
||||
if(pkt->data == st->cur_pkt.data && pkt->size == st->cur_pkt.size){
|
||||
s->cur_st = NULL;
|
||||
pkt->destruct= st->cur_pkt.destruct;
|
||||
|
Loading…
Reference in New Issue
Block a user