h2645_parse: only read avc length code at the correct position
authorHendrik Leppkes <h.leppkes@gmail.com>
Thu, 7 Jul 2016 18:18:26 +0000 (20:18 +0200)
committerHendrik Leppkes <h.leppkes@gmail.com>
Fri, 8 Jul 2016 13:20:16 +0000 (15:20 +0200)
Reading it from any other position would result in a wrong size being
read, instead fallback to the re-sync mechanic in the else clause.

libavcodec/h2645_parse.c

index 9979b63..26f2e85 100644 (file)
@@ -258,7 +258,7 @@ int ff_h2645_packet_split(H2645Packet *pkt, const uint8_t *buf, int length,
         int extract_length = 0;
         int skip_trailing_zeros = 1;
 
-        if (buf >= next_avc) {
+        if (buf == next_avc) {
             int i;
             for (i = 0; i < nal_length_size; i++)
                 extract_length = (extract_length << 8) | buf[i];
@@ -271,6 +271,9 @@ int ff_h2645_packet_split(H2645Packet *pkt, const uint8_t *buf, int length,
             }
             next_avc = buf + extract_length;
         } else {
+            if (buf > next_avc)
+                av_log(logctx, AV_LOG_WARNING, "Exceeded next NALFF position, re-syncing.\n");
+
             /* search start code */
             while (buf[0] != 0 || buf[1] != 0 || buf[2] != 1) {
                 ++buf;