changeset 2766:0609f405e000 libavcodec

make decoder a little bit more tolerant to missing NAL units
author michael
date Sun, 19 Jun 2005 23:33:09 +0000
parents e44ff53b1c85
children 49da251f2608
files h264.c
diffstat 1 files changed, 11 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/h264.c	Sun Jun 19 21:46:14 2005 +0000
+++ b/h264.c	Sun Jun 19 23:33:09 2005 +0000
@@ -3894,8 +3894,10 @@
         switch(mmco[i].opcode){
         case MMCO_SHORT2UNUSED:
             pic= remove_short(h, mmco[i].short_frame_num);
-            if(pic==NULL) return -1;
-            unreference_pic(h, pic);
+            if(pic)
+                unreference_pic(h, pic);
+            else if(s->avctx->debug&FF_DEBUG_MMCO)
+                av_log(h->s.avctx, AV_LOG_DEBUG, "mmco: remove_short() failure\n");
             break;
         case MMCO_SHORT2LONG:
             pic= remove_long(h, mmco[i].long_index);
@@ -3907,8 +3909,10 @@
             break;
         case MMCO_LONG2UNUSED:
             pic= remove_long(h, mmco[i].long_index);
-            if(pic==NULL) return -1;
-            unreference_pic(h, pic);
+            if(pic)
+                unreference_pic(h, pic);
+            else if(s->avctx->debug&FF_DEBUG_MMCO)
+                av_log(h->s.avctx, AV_LOG_DEBUG, "mmco: remove_long() failure\n");
             break;
         case MMCO_LONG:
             pic= remove_long(h, mmco[i].long_index);
@@ -4297,7 +4301,8 @@
         fill_default_ref_list(h);
     }
 
-    decode_ref_pic_list_reordering(h);
+    if(decode_ref_pic_list_reordering(h) < 0)
+        return -1;
 
     if(   (h->pps.weighted_pred          && (h->slice_type == P_TYPE || h->slice_type == SP_TYPE )) 
        || (h->pps.weighted_bipred_idc==1 && h->slice_type==B_TYPE ) )
@@ -7166,6 +7171,7 @@
     }
 #endif
     h->slice_num = 0;
+    s->current_picture_ptr= NULL;
     for(;;){
         int consumed;
         int dst_length;