diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2005-06-19 23:33:09 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2005-06-19 23:33:09 +0000 |
commit | 806bb93fe2ce2e993c7d9f70117f5b6b6e24499b (patch) | |
tree | c09d26e707d4a7e97f835b5ebf25e7c995fa4665 | |
parent | 2fdf9cb2fb9f2f9c1bec53a5a72287bbf12471b7 (diff) | |
download | ffmpeg-806bb93fe2ce2e993c7d9f70117f5b6b6e24499b.tar.gz |
make decoder a little bit more tolerant to missing NAL units
Originally committed as revision 4385 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavcodec/h264.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/libavcodec/h264.c b/libavcodec/h264.c index f9c0bfc3d4..4594eb9bd8 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -3894,8 +3894,10 @@ static int execute_ref_pic_marking(H264Context *h, MMCO *mmco, int mmco_count){ 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 @@ static int execute_ref_pic_marking(H264Context *h, MMCO *mmco, int mmco_count){ 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 @@ static int decode_slice_header(H264Context *h){ 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 @@ static int decode_nal_units(H264Context *h, uint8_t *buf, int buf_size){ } #endif h->slice_num = 0; + s->current_picture_ptr= NULL; for(;;){ int consumed; int dst_length; |