diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2014-02-27 11:16:23 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-02-27 11:16:23 +0100 |
commit | 649686d89bfa4d1d82661e2f05ae215b81c9d56e (patch) | |
tree | 9b4aa5419a8ae4af5203383f6cbcd0206a69c0aa /libavcodec | |
parent | 33a2b45c2e180c94fa7277d73f9e9595e6617e56 (diff) | |
download | ffmpeg-649686d89bfa4d1d82661e2f05ae215b81c9d56e.tar.gz |
avcodec/h264_refs: remove lost frames instead of disfavoring them
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/h264_refs.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/libavcodec/h264_refs.c b/libavcodec/h264_refs.c index f3d3ae0cc4..253cd85029 100644 --- a/libavcodec/h264_refs.c +++ b/libavcodec/h264_refs.c @@ -75,7 +75,7 @@ static int build_def_list(Picture *def, int def_len, int index = 0; while (i[0] < len || i[1] < len) { - while (i[0] < len && !(in[i[0]] && (in[i[0]]->reference & sel) && (!in[i[0]]->invalid_gap || sel==3))) + while (i[0] < len && !(in[i[0]] && (in[i[0]]->reference & sel))) i[0]++; while (i[1] < len && !(in[i[1]] && (in[i[1]]->reference & (sel ^ 3)))) i[1]++; @@ -752,6 +752,15 @@ int ff_h264_execute_ref_pic_marking(H264Context *h, MMCO *mmco, int mmco_count) } } + for (i = 0; i<h->short_ref_count; i++) { + pic = h->short_ref[i]; + if (pic->invalid_gap) { + int d = (h->cur_pic_ptr->frame_num - pic->frame_num) & ((1 << h->sps.log2_max_frame_num)-1); + if (d > h->sps.ref_frame_count) + remove_short(h, pic->frame_num, 0); + } + } + print_short_term(h); print_long_term(h); |