[FFmpeg-cvslog] h264_parser: Fix POC parsing for the case where MMCO_RESET is absent.

Yusuke Nakamura git at videolan.org
Wed Oct 16 12:44:33 CEST 2013


ffmpeg | branch: master | Yusuke Nakamura <muken.the.vfrmaniac at gmail.com> | Mon Sep 16 18:34:27 2013 +0900| [b81dbd6cb7522bea96d78a52f8a4c25a47b820c9] | committer: Anton Khirnov

h264_parser: Fix POC parsing for the case where MMCO_RESET is absent.

The prev_ values were not set after parsing POC.
Increase length of the buffer decoded to parse enough safely.

Signed-off-by: Anton Khirnov <anton at khirnov.net>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b81dbd6cb7522bea96d78a52f8a4c25a47b820c9
---

 libavcodec/h264_parser.c |   14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/libavcodec/h264_parser.c b/libavcodec/h264_parser.c
index ef5da98..75e09f4 100644
--- a/libavcodec/h264_parser.c
+++ b/libavcodec/h264_parser.c
@@ -132,8 +132,8 @@ static inline int parse_nal_units(AVCodecParserContext *s,
         case NAL_SLICE:
         case NAL_IDR_SLICE:
             // Do not walk the whole buffer just to decode slice header
-            if (src_length > 20)
-                src_length = 20;
+            if (src_length > 60)
+                src_length = 60;
             break;
         }
         ptr = ff_h264_decode_nal(h, buf, &dst_length, &consumed, src_length);
@@ -219,8 +219,18 @@ static inline int parse_nal_units(AVCodecParserContext *s,
                     h->delta_poc[1] = get_se_golomb(&h->gb);
             }
 
+            /* Decode POC of this picture. */
+            field_poc[0] = field_poc[1] = INT_MAX;
             ff_init_poc(h, field_poc, &s->output_picture_number);
 
+            /* Set up the prev_ values for decoding POC of the next picture. */
+            h->prev_frame_num        = h->frame_num;
+            h->prev_frame_num_offset = h->frame_num_offset;
+            if (h->nal_ref_idc != 0) {
+                h->prev_poc_msb = h->poc_msb;
+                h->prev_poc_lsb = h->poc_lsb;
+            }
+
             if (h->sps.pic_struct_present_flag) {
                 switch (h->sei_pic_struct) {
                 case SEI_PIC_STRUCT_TOP_FIELD:



More information about the ffmpeg-cvslog mailing list