ffmpeg/fftools
Niklas Haas 5418fbb7f4 fftools/ffmpeg_sched: prevent demuxers from getting stuck
When the furthest-behind stream is being fed by a demuxer that is also
feeding packets to a choked filter graph, we need to unchoke that filter
graph to prevent the demuxer from getting stuck trying to write packets to
the choked filter graph.

This situation can also apply recursively - if the demuxer is also writing
to a filtergraph that is also reading from a choked demuxer, there is a
similar deadlock.

Solve all such deadlocks by just brute-force recursively unchoking all
nodes that can somehow prevent this demuxer from writing packets. This
should normally not result in any change in behavior, unless audio/video
streams are badly desynchronized, in which case it may result in extra
memory usage from the too-far-ahead stream buffering packets inside the
muxer. (But this is, of course, preferable to a deadlock)

Fixes: https://code.ffmpeg.org/FFmpeg/FFmpeg/issues/20611
Backported-From: 133a0bcb13
2025-11-13 13:38:43 +01:00
..
cmdutils.c fftools/cmdutils: don't try to load arguments from file if not needed 2025-09-08 02:13:09 +02:00
cmdutils.h fftools/ffmpeg: add support for multiview video 2024-09-23 17:15:02 +02:00
ffmpeg.c fftools/ffmpeg: fix gracefully shutdown 2025-09-14 00:31:17 +02:00
ffmpeg.h fftools/ffmpeg: add support for multiview video 2024-09-23 17:15:02 +02:00
ffmpeg_dec.c fftools/ffmpeg: add support for multiview video 2024-09-23 17:15:02 +02:00
ffmpeg_demux.c fftools/ffmpeg_demux: ensure the display_rotation option is honored 2025-09-10 09:31:58 -03:00
ffmpeg_enc.c fftools/ffmpeg_mux_init: apply encoder options manually 2024-07-03 11:38:52 +02:00
ffmpeg_filter.c fftools/ffmpeg_filter: also remove display matrix side data from buffered frames 2025-03-04 10:29:16 -03:00
ffmpeg_hw.c avutil/common: Don't auto-include mem.h 2024-03-31 00:08:43 +01:00
ffmpeg_mux.c fftools/ffmpeg_mux_init: make encoder_opts local to ost_add() 2024-07-03 11:38:52 +02:00
ffmpeg_mux.h fftools/ffmpeg: replace MATCH_PER_STREAM_OPT(.., str, ..) with a function 2024-08-13 10:28:54 +02:00
ffmpeg_mux_init.c fftools/ffmpeg_mux_init: Use 64bit for score computation in map_auto_video() 2025-09-08 02:13:31 +02:00
ffmpeg_opt.c fftools/ffmpeg: add support for multiview video 2024-09-23 17:15:02 +02:00
ffmpeg_sched.c fftools/ffmpeg_sched: prevent demuxers from getting stuck 2025-11-13 13:38:43 +01:00
ffmpeg_sched.h fftools/ffmpeg_sched: allow decoders to have multiple outputs 2024-09-23 17:15:02 +02:00
ffmpeg_utils.h fftools/ffmpeg: prefer real errors over EOF in err_merge() 2024-07-24 08:20:21 +02:00
ffplay.c fftools/ffplay: fix crash when vk renderer is null 2024-11-06 16:50:56 +08:00
ffplay_renderer.c fftools/ffplay_renderer: use correct NULL value for Vulkan type 2024-06-25 00:19:03 +02:00
ffplay_renderer.h fftools/ffplay: add hwaccel decoding support 2023-11-15 01:20:11 +08:00
ffprobe.c lavu/frame: add side data storing view ID for multi-view video 2024-09-23 17:11:38 +02:00
fftools.manifest fftools: add DPI awareness manifest 2022-08-13 14:42:52 +02:00
fftoolsres.rc fftools: add DPI awareness manifest 2022-08-13 14:42:52 +02:00
fopen_utf8.h avutil/common: Don't auto-include mem.h 2024-03-31 00:08:43 +01:00
Makefile fftools/ffmpeg: add thread-aware transcode scheduling infrastructure 2023-12-12 08:24:18 +01:00
objpool.c fftools/objpool: Don't use return with expression when returning void 2022-07-23 18:58:35 +02:00
objpool.h fftools: add an object pool 2022-07-23 11:53:19 +02:00
opt_common.c fftools/opt_common: add missing newline after printing codecs 2024-09-09 13:03:04 +02:00
opt_common.h fftools/cmdutils: hide some information listing options from basic help 2024-01-20 10:37:32 +01:00
sync_queue.c fftools/ffmpeg_demux, sync_queue: Constify a bit 2024-03-02 02:51:59 +01:00
sync_queue.h fftools/sync_queue: add debug logging 2023-05-28 10:47:59 +02:00
thread_queue.c fftools/thread_queue: count receive-finished streams as finished 2023-11-14 18:18:26 +01:00
thread_queue.h fftools: add a multistream thread-safe queue 2022-07-23 11:53:19 +02:00