]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
parser hevc: fix for FunBox 4K, fixes #3853
authorJaroslav Kysela <perex@perex.cz>
Wed, 2 Nov 2016 08:37:30 +0000 (09:37 +0100)
committerJaroslav Kysela <perex@perex.cz>
Wed, 2 Nov 2016 08:37:30 +0000 (09:37 +0100)
src/parsers/parser_hevc.c
src/parsers/parsers.c

index 901523314b8b708f9c2b9b5ec53d325af845145e..5fa1b86b5e3a695742aaec9f5dc5e9e8c8f2c197 100644 (file)
@@ -1677,6 +1677,7 @@ hevc_decode_slice_header(struct elementary_stream *st, bitstream_t *bs,
     u = ilog2((v - 1) << 1);
     if (u >= v)
       return -1;
+    skip_bits(bs, u);
   }
 
   if (dependent_slice_segment)
index f73bd3e229c9478515781706622ba384dd39124f..2924d875061f63dd980fea0f25e088a93cc1d2a0 100644 (file)
@@ -1596,8 +1596,11 @@ parse_hevc(service_t *t, elementary_stream_t *st, size_t len,
   case HEVC_NAL_IDR_W_RADL:
   case HEVC_NAL_IDR_N_LP:
   case HEVC_NAL_CRA_NUT:
+    if (st->es_curpkt != NULL)
+      break;
+
     l2 = len - 3 > 64 ? 64 : len - 3;
-    void *f = h264_nal_deescape(&bs, buf + 3, len - 3);
+    void *f = h264_nal_deescape(&bs, buf + 3, l2);
     r = hevc_decode_slice_header(st, &bs, &pkttype);
     free(f);
     if (r < 0)
@@ -1658,7 +1661,7 @@ parse_hevc(service_t *t, elementary_stream_t *st, size_t len,
   }
 
   if(is_ssc(next_startcode) ||
-     ((next_startcode >> 1) & 0x3f) == HEVC_NAL_TRAIL_R) {
+     ((next_startcode >> 1) & 0x3f) == HEVC_NAL_AUD) {
     /* Complete frame - new start code or delimiter */
     if (st->es_incomplete)
       return PARSER_HEADER;