Browse code

avcodec/h264: Allow partial escaping

Fixes Ticket3923

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 033a5334badd8af48f13c6fd1e6827f8e3f2c2f3)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>

Michael Niedermayer authored on 2014/09/07 08:42:28
Showing 1 changed files
... ...
@@ -634,7 +634,7 @@ const uint8_t *ff_h264_decode_nal(H264Context *h, const uint8_t *src,
634 634
 
635 635
 #define STARTCODE_TEST                                                  \
636 636
     if (i + 2 < length && src[i + 1] == 0 && src[i + 2] <= 3) {         \
637
-        if (src[i + 2] != 3) {                                          \
637
+        if (src[i + 2] != 3 && src[i + 2] != 0) {                       \
638 638
             /* startcode, so we must be past the end */                 \
639 639
             length = i;                                                 \
640 640
         }                                                               \
... ...
@@ -707,7 +707,7 @@ const uint8_t *ff_h264_decode_nal(H264Context *h, const uint8_t *src,
707 707
         if (src[si + 2] > 3) {
708 708
             dst[di++] = src[si++];
709 709
             dst[di++] = src[si++];
710
-        } else if (src[si] == 0 && src[si + 1] == 0) {
710
+        } else if (src[si] == 0 && src[si + 1] == 0 && src[si + 2] != 0) {
711 711
             if (src[si + 2] == 3) { // escape
712 712
                 dst[di++]  = 0;
713 713
                 dst[di++]  = 0;