diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index 83464826ea90a5f7a24598a82d592f210a44f7b8..dbedcb48ce21b0e9be36f17e92d713940c1699f8 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -3150,10 +3150,12 @@ static void idr(H264Context *h){
             break; \
         }
 
-    for(i=0; i<h->long_ref_count; i++){
-        h->long_ref[i]->reference=0;
-        CHECK_DELAY(h->long_ref[i]);
-        h->long_ref[i]= NULL;
+    for(i=0; i<16; i++){
+        if (h->long_ref[i] != NULL) {
+            h->long_ref[i]->reference=0;
+            CHECK_DELAY(h->long_ref[i]);
+            h->long_ref[i]= NULL;
+        }
     }
     h->long_ref_count=0;
 
@@ -3263,6 +3265,7 @@ static int execute_ref_pic_marking(H264Context *h, MMCO *mmco, int mmco_count){
             
             h->long_ref[ mmco[i].long_index ]= remove_short(h, mmco[i].short_frame_num);
             h->long_ref[ mmco[i].long_index ]->long_ref=1;
+            h->long_ref_count++;
             break;
         case MMCO_LONG2UNUSED:
             pic= remove_long(h, mmco[i].long_index);