# HG changeset patch # User michael # Date 1119223989 0 # Node ID 0609f405e000ce7287b2b0cdee6fe76e218f2946 # Parent e44ff53b1c8586b8a64ef0fdee12bb9783e264b2 make decoder a little bit more tolerant to missing NAL units diff -r e44ff53b1c85 -r 0609f405e000 h264.c --- 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;