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);