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]
