]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/hevc_parser.c
aacenc: reorder coding tools
[ffmpeg] / libavcodec / hevc_parser.c
index f970de54747b01742220a4b50187ea78fc2c3495..35cace5e3cf469d9768c85969af2aa775f1243f1 100644 (file)
@@ -410,19 +410,30 @@ static int hevc_split(AVCodecContext *avctx, const uint8_t *buf, int buf_size)
 {
     const uint8_t *ptr = buf, *end = buf + buf_size;
     uint32_t state = -1;
-    int has_ps = 0, nut;
+    int has_vps = 0;
+    int has_sps = 0;
+    int has_pps = 0;
+    int nut;
 
     while (ptr < end) {
         ptr = avpriv_find_start_code(ptr, end, &state);
         if ((state >> 8) != START_CODE)
             break;
         nut = (state >> 1) & 0x3F;
-        if (nut >= NAL_VPS && nut <= NAL_PPS)
-            has_ps = 1;
-        else if (has_ps)
-            return ptr - 4 - buf;
-        else // no parameter set at the beginning of the stream
-            return 0;
+        if (nut == NAL_VPS)
+            has_vps = 1;
+        else if (nut == NAL_SPS)
+            has_sps = 1;
+        else if (nut == NAL_PPS)
+            has_pps = 1;
+        else if ((nut != NAL_SEI_PREFIX || has_pps) &&
+                  nut != NAL_AUD) {
+            if (has_vps && has_sps) {
+                while (ptr - 4 > buf && ptr[-5] == 0)
+                    ptr--;
+                return ptr - 4 - buf;
+            }
+        }
     }
     return 0;
 }