Mercurial > libavcodec.hg
changeset 6019:42de24a34fd2 libavcodec
Fix brain-dead parts of r11216, specifically:
Actually unreference removed pics
And check for too many reference frames as originally intended, not equal
to max reference frames.
author | heydowns |
---|---|
date | Fri, 14 Dec 2007 22:49:30 +0000 |
parents | 9d1654835629 |
children | c531defb03ee |
files | h264.c |
diffstat | 1 files changed, 4 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/h264.c Fri Dec 14 06:25:23 2007 +0000 +++ b/h264.c Fri Dec 14 22:49:30 2007 +0000 @@ -3612,8 +3612,7 @@ s->current_picture_ptr->reference |= s->picture_structure; } - if (h->sps.ref_frame_count && - h->long_ref_count + h->short_ref_count == h->sps.ref_frame_count){ + if (h->long_ref_count + h->short_ref_count > h->sps.ref_frame_count){ /* We have too many reference frames, probably due to corrupted * stream. Need to discard one frame. Prevents overrun of the @@ -3629,10 +3628,13 @@ break; assert(i < 16); + pic = h->long_ref[i]; remove_long_at_index(h, i); } else { + pic = h->short_ref[h->short_ref_count - 1]; remove_short_at_index(h, h->short_ref_count - 1); } + unreference_pic(h, pic, 0); } print_short_term(h);