[FFmpeg-cvslog] r25809 - trunk/libavcodec/h264.c

bcoudurier subversion
Tue Nov 23 02:16:37 CET 2010


Author: bcoudurier
Date: Tue Nov 23 02:16:37 2010
New Revision: 25809

Log:
In h264 decoder, fix decoding when nal end sequence is present

Modified:
   trunk/libavcodec/h264.c

Modified: trunk/libavcodec/h264.c
==============================================================================
--- trunk/libavcodec/h264.c	Tue Nov 23 02:10:21 2010	(r25808)
+++ trunk/libavcodec/h264.c	Tue Nov 23 02:16:37 2010	(r25809)
@@ -2783,14 +2783,9 @@ static int decode_nal_units(H264Context 
             nalsize = 0;
             for(i = 0; i < h->nal_length_size; i++)
                 nalsize = (nalsize << 8) | buf[buf_index++];
-            if(nalsize <= 1 || nalsize > buf_size - buf_index){
-                if(nalsize == 1){
-                    buf_index++;
-                    continue;
-                }else{
-                    av_log(h->s.avctx, AV_LOG_ERROR, "AVC: nal size %d\n", nalsize);
-                    break;
-                }
+            if(nalsize <= 0 || nalsize > buf_size - buf_index){
+                av_log(h->s.avctx, AV_LOG_ERROR, "AVC: nal size %d\n", nalsize);
+                break;
             }
             next_avc= buf_index + nalsize;
         } else {
@@ -2990,6 +2985,7 @@ static int decode_frame(AVCodecContext *
     s->flags2= avctx->flags2;
 
    /* end of stream, output what is still in the buffers */
+ out:
     if (buf_size == 0) {
         Picture *out;
         int i, out_idx;
@@ -3018,6 +3014,11 @@ static int decode_frame(AVCodecContext *
     if(buf_index < 0)
         return -1;
 
+    if (!s->current_picture_ptr && h->nal_unit_type == NAL_END_SEQUENCE) {
+        buf_size = 0;
+        goto out;
+    }
+
     if(!(s->flags2 & CODEC_FLAG2_CHUNKS) && !s->current_picture_ptr){
         if (avctx->skip_frame >= AVDISCARD_NONREF || s->hurry_up) return 0;
         av_log(avctx, AV_LOG_ERROR, "no frame!\n");



More information about the ffmpeg-cvslog mailing list