PR #24372 opened by michaelni
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24372
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24372.patch

Decoding a 3032 frame 1920x1080 stream single threaded on x86_64
(gcc, mean +- stddev over 12 interleaved runs each):
full decode:   17.326 +- 0.768 s
metadata only:  0.127 +- 0.003 s
137x faster, p = 2e-16 (Welch)

Same idea as https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24342


>From 691170e8b59ea9dc2397798f907f47ca4b6e300f Mon Sep 17 00:00:00 2001
From: Michael Niedermayer <[email protected]>
Date: Sat, 5 Sep 2026 03:45:52 +0200
Subject: [PATCH 1/3] avcodec/decode: share the metadata-only decode check
 between decoders

---
 libavcodec/decode.h     | 11 +++++++++++
 libavcodec/h264_slice.c |  8 ++++----
 libavcodec/h264dec.c    |  5 +++--
 libavcodec/h264dec.h    | 11 -----------
 4 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/libavcodec/decode.h b/libavcodec/decode.h
index 215b862020..42f5e1e9df 100644
--- a/libavcodec/decode.h
+++ b/libavcodec/decode.h
@@ -77,6 +77,17 @@ int ff_decode_frame_props_from_pkt(const AVCodecContext 
*avctx,
  */
 int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame);
 
+static inline int ff_decode_skip_all_pixels(const AVCodecContext *avctx)
+{
+    return avctx->skip_pred >= AVDISCARD_ALL &&
+           avctx->skip_idct >= AVDISCARD_ALL &&
+           !avctx->err_recognition &&
+           !(avctx->flags2 & AV_CODEC_FLAG2_CHUNKS) &&
+           !(avctx->export_side_data & (AV_CODEC_EXPORT_DATA_MVS |
+                                        
AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS)) &&
+           !(avctx->debug & (FF_DEBUG_QP | FF_DEBUG_MB_TYPE));
+}
+
 /**
  * Make sure avctx.hw_frames_ctx is set. If it's not set, the function will
  * try to allocate it from hw_device_ctx. If that is not possible, an error
diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c
index cd17ed919a..c303cb33c1 100644
--- a/libavcodec/h264_slice.c
+++ b/libavcodec/h264_slice.c
@@ -223,7 +223,7 @@ static int alloc_picture(H264Context *h, H264Picture *pic)
         atomic_init(pic->decode_error_flags, 0);
     }
 
-    if (CONFIG_GRAY && !h->avctx->hwaccel && 
!ff_h264_skip_all_pixels(h->avctx) &&
+    if (CONFIG_GRAY && !h->avctx->hwaccel && 
!ff_decode_skip_all_pixels(h->avctx) &&
         h->flags & AV_CODEC_FLAG_GRAY && pic->f->data[2]) {
         int h_chroma_shift, v_chroma_shift;
         av_pix_fmt_get_chroma_sub_sample(pic->f->format,
@@ -526,7 +526,7 @@ static int h264_frame_start(H264Context *h)
     pic->needs_fg =
         h->sei.common.film_grain_characteristics &&
         h->sei.common.film_grain_characteristics->present &&
-        !ff_h264_skip_all_pixels(h->avctx) &&
+        !ff_decode_skip_all_pixels(h->avctx) &&
         !h->avctx->hwaccel &&
         !(h->avctx->export_side_data & AV_CODEC_EXPORT_DATA_FILM_GRAIN);
 
@@ -1580,7 +1580,7 @@ static int h264_field_start(H264Context *h, const 
H264SliceContext *sl,
                 if (h->short_ref[0]->field_picture)
                     ff_thread_report_progress(&h->short_ref[0]->tf, INT_MAX, 
1);
             } else if (!h->frame_recovered) {
-                if (!h->avctx->hwaccel && !ff_h264_skip_all_pixels(h->avctx))
+                if (!h->avctx->hwaccel && !ff_decode_skip_all_pixels(h->avctx))
                     color_frame(h->short_ref[0]->f, c);
                 h->short_ref[0]->gray = 1;
             }
@@ -2888,7 +2888,7 @@ int ff_h264_execute_decode_slices(H264Context *h)
     if (h->avctx->hwaccel || context_count < 1)
         return 0;
 
-    if (ff_h264_skip_all_pixels(avctx)) {
+    if (ff_decode_skip_all_pixels(avctx)) {
         h->mb_y = h->mb_height;
         goto finish;
     }
diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c
index 7eef18de2a..c38f95f48c 100644
--- a/libavcodec/h264dec.c
+++ b/libavcodec/h264dec.c
@@ -42,6 +42,7 @@
 #include "internal.h"
 #include "error_resilience.h"
 #include "avcodec.h"
+#include "decode.h"
 #include "h264.h"
 #include "h264dec.h"
 #include "h2645_parse.h"
@@ -831,7 +832,7 @@ end:
      * causes problems for the first MB line, too.
      */
     if (!FIELD_PICTURE(h) && h->current_slice && h->enable_er &&
-        !ff_h264_skip_all_pixels(h->avctx)) {
+        !ff_decode_skip_all_pixels(h->avctx)) {
 
         H264SliceContext *sl = h->slice_ctx;
         int use_last_pic = h->last_pic_for_ec.f->buf[0] && !sl->ref_count[0];
@@ -986,7 +987,7 @@ static int finalize_frame(H264Context *h, AVFrame *dst, 
H264Picture *out, int *g
         )
             return 0;
 
-        if (!h->avctx->hwaccel && !ff_h264_skip_all_pixels(h->avctx) &&
+        if (!h->avctx->hwaccel && !ff_decode_skip_all_pixels(h->avctx) &&
             (out->field_poc[0] == INT_MAX ||
              out->field_poc[1] == INT_MAX)
            ) {
diff --git a/libavcodec/h264dec.h b/libavcodec/h264dec.h
index 8ad2ccabfc..7bce897021 100644
--- a/libavcodec/h264dec.h
+++ b/libavcodec/h264dec.h
@@ -683,17 +683,6 @@ static av_always_inline int get_chroma_qp(const PPS *pps, 
int t, int qscale)
     return pps->chroma_qp_table[t][qscale];
 }
 
-static inline int ff_h264_skip_all_pixels(const AVCodecContext *avctx)
-{
-    return avctx->skip_pred >= AVDISCARD_ALL &&
-           avctx->skip_idct >= AVDISCARD_ALL &&
-           !avctx->err_recognition &&
-           !(avctx->flags2 & AV_CODEC_FLAG2_CHUNKS) &&
-           !(avctx->export_side_data & (AV_CODEC_EXPORT_DATA_MVS |
-                                        
AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS)) &&
-           !(avctx->debug & (FF_DEBUG_QP | FF_DEBUG_MB_TYPE));
-}
-
 int ff_h264_field_end(H264Context *h, H264SliceContext *sl, int in_setup);
 
 int ff_h264_ref_picture(H264Picture *dst, const H264Picture *src);
-- 
2.52.0


>From 53a62ba4efd10caa0e269834c700964ade45859c Mon Sep 17 00:00:00 2001
From: Michael Niedermayer <[email protected]>
Date: Sat, 5 Sep 2026 03:48:35 +0200
Subject: [PATCH 2/3] avcodec/hevc: support skip_pred and skip_idct at
 AVDISCARD_ALL

Decoding a 3032 frame 1920x1080 stream single threaded on x86_64
(gcc, mean +- stddev over 12 interleaved runs each):
full decode:   17.326 +- 0.768 s
metadata only:  0.127 +- 0.003 s
137x faster, p = 2e-16 (Welch)
---
 libavcodec/hevc/hevcdec.c | 4 ++++
 libavcodec/hevc/refs.c    | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/libavcodec/hevc/hevcdec.c b/libavcodec/hevc/hevcdec.c
index 475c2738b1..419606681e 100644
--- a/libavcodec/hevc/hevcdec.c
+++ b/libavcodec/hevc/hevcdec.c
@@ -3053,6 +3053,9 @@ static int decode_slice_data(HEVCContext *s, const 
HEVCLayerContext *l,
     if (s->avctx->hwaccel)
         return FF_HW_CALL(s->avctx, decode_slice, nal->raw_data, 
nal->raw_size);
 
+    if (ff_decode_skip_all_pixels(s->avctx))
+        return 0;
+
     if (s->avctx->profile == AV_PROFILE_HEVC_SCC) {
         av_log(s->avctx, AV_LOG_ERROR,
                "SCC profile is not yet implemented in hevc native decoder.\n");
@@ -3367,6 +3370,7 @@ static int hevc_frame_start(HEVCContext *s, 
HEVCLayerContext *l,
                                
s->sei.common.film_grain_characteristics->present) ||
                               s->sei.common.itut_t35.aom_film_grain.enable) &&
         !(s->avctx->export_side_data & AV_CODEC_EXPORT_DATA_FILM_GRAIN) &&
+        !ff_decode_skip_all_pixels(s->avctx) &&
         !s->avctx->hwaccel;
 
     ret = set_side_data(s);
diff --git a/libavcodec/hevc/refs.c b/libavcodec/hevc/refs.c
index 2df3a2ad56..84418d2104 100644
--- a/libavcodec/hevc/refs.c
+++ b/libavcodec/hevc/refs.c
@@ -470,7 +470,7 @@ static HEVCFrame *generate_missing_ref(HEVCContext *s, 
HEVCLayerContext *l, int
     if (!frame)
         return NULL;
 
-    if (!s->avctx->hwaccel) {
+    if (!s->avctx->hwaccel && !ff_decode_skip_all_pixels(s->avctx)) {
         int nb_planes = l->sps->chroma_format_idc ? 3 : 1;
         if (!l->sps->pixel_shift) {
             for (int i = 0; i < nb_planes; i++)
-- 
2.52.0


>From e8737d842aefb30220f09d173251f825c8040987 Mon Sep 17 00:00:00 2001
From: Michael Niedermayer <[email protected]>
Date: Sat, 5 Sep 2026 03:54:48 +0200
Subject: [PATCH 3/3] fate/hevc: test metadata-only decoding

---
 tests/fate/hevc.mak                  |   9 +
 tests/ref/fate/hevc-skip-pred        | 400 +++++++++++++++++++++++++++
 tests/ref/fate/hevc-skip-pred-fields |  28 ++
 tests/ref/fate/hevc-skip-pred-pts    | 192 +++++++++++++
 4 files changed, 629 insertions(+)
 create mode 100644 tests/ref/fate/hevc-skip-pred
 create mode 100644 tests/ref/fate/hevc-skip-pred-fields
 create mode 100644 tests/ref/fate/hevc-skip-pred-pts

diff --git a/tests/fate/hevc.mak b/tests/fate/hevc.mak
index 83330b3e08..255f248b1d 100644
--- a/tests/fate/hevc.mak
+++ b/tests/fate/hevc.mak
@@ -290,6 +290,15 @@ FATE_HEVC_FFPROBE-$(call DEMDEC, MOV, HEVC) += 
fate-hevc-dv-rpu
 fate-hevc-two-first-slice: CMD = threads=2 framemd5 -i 
$(TARGET_SAMPLES)/hevc/two_first_slice.mp4 -sws_flags bitexact -t 00:02.00 -an
 FATE_HEVC-$(call FRAMEMD5, MOV, HEVC) += fate-hevc-two-first-slice
 
+fate-hevc-skip-pred: CMD = probeframes -show_entries 
frame=key_frame,pts,pict_type -skip_pred all -skip_idct all 
$(TARGET_SAMPLES)/hevc-conformance/RAP_B_Bossen_1.bit
+FATE_HEVC_FFPROBE-$(call PARSERDEMDEC, HEVC, HEVC, HEVC) += fate-hevc-skip-pred
+
+fate-hevc-skip-pred-fields: CMD = probeframes -show_entries 
frame=key_frame,pts,pict_type,interlaced_frame,top_field_first -skip_pred all 
-skip_idct all $(TARGET_SAMPLES)/hevc/paired_fields.hevc
+FATE_HEVC_FFPROBE-$(call DEMDEC, HEVC, HEVC) += fate-hevc-skip-pred-fields
+
+fate-hevc-skip-pred-pts: CMD = probeframes -show_entries 
frame=key_frame,pts,pict_type -skip_pred all -skip_idct all 
$(TARGET_SAMPLES)/mov/elst_ends_betn_b_and_i.mp4
+FATE_HEVC_FFPROBE-$(call DEMDEC, MOV, HEVC) += fate-hevc-skip-pred-pts
+
 fate-hevc-cabac-tudepth: CMD = framecrc -i 
$(TARGET_SAMPLES)/hevc/cbf_cr_cb_TUDepth_4_circle.h265 -pix_fmt yuv444p
 FATE_HEVC-$(call FRAMECRC, HEVC, HEVC) += fate-hevc-cabac-tudepth
 
diff --git a/tests/ref/fate/hevc-skip-pred b/tests/ref/fate/hevc-skip-pred
new file mode 100644
index 0000000000..c4a12dc6dc
--- /dev/null
+++ b/tests/ref/fate/hevc-skip-pred
@@ -0,0 +1,400 @@
+[FRAME]
+key_frame=1
+pts=N/A
+pict_type=I
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=1
+pts=N/A
+pict_type=I
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=1
+pts=N/A
+pict_type=I
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=1
+pts=N/A
+pict_type=I
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+[/FRAME]
diff --git a/tests/ref/fate/hevc-skip-pred-fields 
b/tests/ref/fate/hevc-skip-pred-fields
new file mode 100644
index 0000000000..25985a5eeb
--- /dev/null
+++ b/tests/ref/fate/hevc-skip-pred-fields
@@ -0,0 +1,28 @@
+[FRAME]
+key_frame=1
+pts=N/A
+pict_type=I
+interlaced_frame=1
+top_field_first=1
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+interlaced_frame=1
+top_field_first=0
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+interlaced_frame=1
+top_field_first=1
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=N/A
+pict_type=B
+interlaced_frame=1
+top_field_first=0
+[/FRAME]
diff --git a/tests/ref/fate/hevc-skip-pred-pts 
b/tests/ref/fate/hevc-skip-pred-pts
new file mode 100644
index 0000000000..f42026ebbb
--- /dev/null
+++ b/tests/ref/fate/hevc-skip-pred-pts
@@ -0,0 +1,192 @@
+[FRAME]
+key_frame=1
+pts=0
+pict_type=I
+[SIDE_DATA]
+side_data_type=H.26[45] User Data Unregistered SEI message
+[/SIDE_DATA]
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=512
+pict_type=B
+[SIDE_DATA]
+side_data_type=H.26[45] User Data Unregistered SEI message
+[/SIDE_DATA]
+[/FRAME]
+[FRAME]
+key_frame=1
+pts=1024
+pict_type=I
+[SIDE_DATA]
+side_data_type=H.26[45] User Data Unregistered SEI message
+[/SIDE_DATA]
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=1536
+pict_type=B
+[SIDE_DATA]
+side_data_type=H.26[45] User Data Unregistered SEI message
+[/SIDE_DATA]
+[/FRAME]
+[FRAME]
+key_frame=1
+pts=2048
+pict_type=I
+[SIDE_DATA]
+side_data_type=H.26[45] User Data Unregistered SEI message
+[/SIDE_DATA]
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=2560
+pict_type=B
+[SIDE_DATA]
+side_data_type=H.26[45] User Data Unregistered SEI message
+[/SIDE_DATA]
+[/FRAME]
+[FRAME]
+key_frame=1
+pts=3072
+pict_type=I
+[SIDE_DATA]
+side_data_type=H.26[45] User Data Unregistered SEI message
+[/SIDE_DATA]
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=3584
+pict_type=B
+[SIDE_DATA]
+side_data_type=H.26[45] User Data Unregistered SEI message
+[/SIDE_DATA]
+[/FRAME]
+[FRAME]
+key_frame=1
+pts=4096
+pict_type=I
+[SIDE_DATA]
+side_data_type=H.26[45] User Data Unregistered SEI message
+[/SIDE_DATA]
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=4608
+pict_type=B
+[SIDE_DATA]
+side_data_type=H.26[45] User Data Unregistered SEI message
+[/SIDE_DATA]
+[/FRAME]
+[FRAME]
+key_frame=1
+pts=5120
+pict_type=I
+[SIDE_DATA]
+side_data_type=H.26[45] User Data Unregistered SEI message
+[/SIDE_DATA]
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=5632
+pict_type=B
+[SIDE_DATA]
+side_data_type=H.26[45] User Data Unregistered SEI message
+[/SIDE_DATA]
+[/FRAME]
+[FRAME]
+key_frame=1
+pts=6144
+pict_type=I
+[SIDE_DATA]
+side_data_type=H.26[45] User Data Unregistered SEI message
+[/SIDE_DATA]
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=6656
+pict_type=B
+[SIDE_DATA]
+side_data_type=H.26[45] User Data Unregistered SEI message
+[/SIDE_DATA]
+[/FRAME]
+[FRAME]
+key_frame=1
+pts=7168
+pict_type=I
+[SIDE_DATA]
+side_data_type=H.26[45] User Data Unregistered SEI message
+[/SIDE_DATA]
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=7680
+pict_type=B
+[SIDE_DATA]
+side_data_type=H.26[45] User Data Unregistered SEI message
+[/SIDE_DATA]
+[/FRAME]
+[FRAME]
+key_frame=1
+pts=8192
+pict_type=I
+[SIDE_DATA]
+side_data_type=H.26[45] User Data Unregistered SEI message
+[/SIDE_DATA]
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=8704
+pict_type=B
+[SIDE_DATA]
+side_data_type=H.26[45] User Data Unregistered SEI message
+[/SIDE_DATA]
+[/FRAME]
+[FRAME]
+key_frame=1
+pts=9216
+pict_type=I
+[SIDE_DATA]
+side_data_type=H.26[45] User Data Unregistered SEI message
+[/SIDE_DATA]
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=9728
+pict_type=B
+[SIDE_DATA]
+side_data_type=H.26[45] User Data Unregistered SEI message
+[/SIDE_DATA]
+[/FRAME]
+[FRAME]
+key_frame=1
+pts=10240
+pict_type=I
+[SIDE_DATA]
+side_data_type=H.26[45] User Data Unregistered SEI message
+[/SIDE_DATA]
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=10752
+pict_type=B
+[SIDE_DATA]
+side_data_type=H.26[45] User Data Unregistered SEI message
+[/SIDE_DATA]
+[/FRAME]
+[FRAME]
+key_frame=1
+pts=11264
+pict_type=I
+[SIDE_DATA]
+side_data_type=H.26[45] User Data Unregistered SEI message
+[/SIDE_DATA]
+[/FRAME]
+[FRAME]
+key_frame=0
+pts=11776
+pict_type=B
+[SIDE_DATA]
+side_data_type=H.26[45] User Data Unregistered SEI message
+[/SIDE_DATA]
+[/FRAME]
-- 
2.52.0

_______________________________________________
ffmpeg-devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to