PR #20921 opened by Zhao Zhili (quink) URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20921 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20921.patch
h->context_initialized is zero after flush, which triggers call to ff_get_format unconditionally. ff_get_format can be heavy with ff_hwaccel_uninit and hwaccel_init. For example, it takes 20 ms on macOS with videotoolbox. ff_get_format should not be called if nothing changed. ff_get_format is guarantee to be called at the first time and when video information changed with (must_reinit || needs_reinit). Fix #20760. >From 239f14c80fa93587dbb2681ae0a5dfb670a24e93 Mon Sep 17 00:00:00 2001 From: Zhao Zhili <[email protected]> Date: Fri, 14 Nov 2025 23:46:04 +0800 Subject: [PATCH] avcodec/h264_slice: don't force ff_get_format unconditionally after flush h->context_initialized is zero after flush, which triggers call to ff_get_format unconditionally. ff_get_format can be heavy with ff_hwaccel_uninit and hwaccel_init. For example, it takes 20 ms on macOS with videotoolbox. ff_get_format should not be called if nothing changed. ff_get_format is guarantee to be called at the first time and when video information changed with (must_reinit || needs_reinit). Fix #20760. --- libavcodec/h264_slice.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c index 7e53e38cca..4bce9b9228 100644 --- a/libavcodec/h264_slice.c +++ b/libavcodec/h264_slice.c @@ -1150,7 +1150,7 @@ static int h264_init_ps(H264Context *h, const H264SliceContext *sl, int first_sl if (flush_changes) ff_h264_flush_change(h); - if ((ret = get_pixel_format(h, 1)) < 0) + if ((ret = get_pixel_format(h, must_reinit || needs_reinit)) < 0) return ret; h->avctx->pix_fmt = ret; -- 2.49.1 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]
