[FFmpeg-devel] [PATCH] avcodec/h264: Put the removed SPS handling code back

Michael Niedermayer michael at niedermayer.cc
Tue May 3 15:57:39 CEST 2016


reverts one hunk from 7966ddfc0bb7ee87dc2606b7b146701db6f6c717
The new code from 7966ddfc0bb7ee87dc2606b7b146701db6f6c717 only covers extradata based SPS

Fixes: ffplay -ss 13 58af5798-fa2c-42a2-997d-dc8e49de2d8a.flv

Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
---
 libavcodec/h264.c |   20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index 113c96f..7784026 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -1490,9 +1490,23 @@ again:
                 break;
             case NAL_SPS:
                 init_get_bits(&h->gb, ptr, bit_length);
-                ret = ff_h264_decode_seq_parameter_set(h, 0);
-                if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE))
-                    goto end;
+                if (ff_h264_decode_seq_parameter_set(h, 0) >= 0)
+                    break;
+                if (h->is_avc ? nalsize : 1) {
+                    av_log(h->avctx, AV_LOG_DEBUG,
+                           "SPS decoding failure, trying again with the complete NAL\n");
+                    if (h->is_avc)
+                        av_assert0(next_avc - buf_index + consumed == nalsize);
+                    if ((next_avc - buf_index + consumed - 1) >= INT_MAX/8)
+                        break;
+                    init_get_bits(&h->gb, &buf[buf_index + 1 - consumed],
+                                  8*(next_avc - buf_index + consumed - 1));
+                    if (ff_h264_decode_seq_parameter_set(h, 0) >= 0)
+                        break;
+                }
+                init_get_bits(&h->gb, ptr, bit_length);
+                ff_h264_decode_seq_parameter_set(h, 1);
+
                 break;
             case NAL_PPS:
                 init_get_bits(&h->gb, ptr, bit_length);
-- 
1.7.9.5



More information about the ffmpeg-devel mailing list