diff mbox series

[FFmpeg-devel,11/23] lavc/hevc/parser: only split packets on NALUs with nuh_layer_id=0

Message ID 20240914111036.17164-12-anton@khirnov.net
State New
Headers show
Series [FFmpeg-devel,01/23] compat: drop gcc, suncc, and pthreads stdatomic emulation | expand

Checks

Context Check Description
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Anton Khirnov Sept. 14, 2024, 10:45 a.m. UTC
A packet should contain a full access unit, which for multilayer video
should contain all the layers.
---
 libavcodec/hevc/parser.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/libavcodec/hevc/parser.c b/libavcodec/hevc/parser.c
index 8c7444a162..16b40e2b10 100644
--- a/libavcodec/hevc/parser.c
+++ b/libavcodec/hevc/parser.c
@@ -262,7 +262,7 @@  static int hevc_find_frame_end(AVCodecParserContext *s, const uint8_t *buf,
     int i;
 
     for (i = 0; i < buf_size; i++) {
-        int nut;
+        int nut, layer_id;
 
         pc->state64 = (pc->state64 << 8) | buf[i];
 
@@ -270,6 +270,11 @@  static int hevc_find_frame_end(AVCodecParserContext *s, const uint8_t *buf,
             continue;
 
         nut = (pc->state64 >> 2 * 8 + 1) & 0x3F;
+
+        layer_id = (pc->state64 >> 11) & 0x3F;
+        if (layer_id > 0)
+            continue;
+
         // Beginning of access unit
         if ((nut >= HEVC_NAL_VPS && nut <= HEVC_NAL_EOB_NUT) || nut == HEVC_NAL_SEI_PREFIX ||
             (nut >= 41 && nut <= 44) || (nut >= 48 && nut <= 55)) {