Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH] ffmpeg CLI multithreading
@ 2023-11-04  7:56 Anton Khirnov
  2023-11-04  7:56 ` [FFmpeg-devel] [PATCH 01/24] lavf/mux: do not apply max_interleave_delta to subtitles Anton Khirnov
                   ` (26 more replies)
  0 siblings, 27 replies; 51+ messages in thread
From: Anton Khirnov @ 2023-11-04  7:56 UTC (permalink / raw)
  To: ffmpeg-devel

Hi,
after ~2 years of work and ~700+ preparatory commits, here is finally
the first "fully functional" version of multithreaded ffmpeg CLI. In
quotes because due to the scale of the changes I'm sure some things got
broken and I didn't notice - more testing very much welcome.

One thing which is most definitely broken is the
-fix_sub_duration_heartbeat option, which in its current form makes
assumptions about synchronization between distant components
(encoders/muxers -> decoders), which makes it fundamentally
non-deterministic when each of these components runs asynchronously
(note that its behaviour is unpredictable even now, it's just
deterministic across runs with the same options). I'm currently
disabling the option in 16/24, better suggestions on what to do with it
are welcome.

Runtime overhead of the threading seems to be negligible in typical
cases, though it may become significant when there is very little work
per packet. You should see significantly better CPU
utilization/wallclock speedup on multicore systems whenever transcoding
isn't dominated by a a single component and the components aren't
themselves already multithreaded.

The set is structured similarly to the previous RFC:
* 01-09/24 are preparatory fixes and could be pushed on their own well
  before the rest of the series; thanks to Paul for writing 02/24
* 10-17/24 move the two remaining components (encoding and filtering)
  into threads (as before it's "fake" threading where the main thread
  waits for the other thread to be done, and is thus not truly parallel)
  and do other preparatory changes - these may introduce significant
  temporary overhead and/or break some corner cases, so should be pushed
  when the whole set is ready;
* 18/24, the biggest individual patch, adds the transcode scheduler; as
  of that patch it does not yet do anything;
* 19-24/24 convert the individual components to use the scheduler; the
  conversion is split for review purposes, but will have to be squashed
  for the final push.

Some more information is in my recent VDD talk [1]. You can also fetch
the code from the 'ffmpeg_threading' branch in [2].

Reviews, testing, and constructive comments are all very much welcome.

[1] https://youtu.be/Z4DS3jiZhfo?t=1221
[2] git://git.khirnov.net/libav

Cheers,
-- 
Anton Khirnov

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 51+ messages in thread

end of thread, other threads:[~2023-11-17 11:52 UTC | newest]

Thread overview: 51+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-04  7:56 [FFmpeg-devel] [PATCH] ffmpeg CLI multithreading Anton Khirnov
2023-11-04  7:56 ` [FFmpeg-devel] [PATCH 01/24] lavf/mux: do not apply max_interleave_delta to subtitles Anton Khirnov
2023-11-04  7:56 ` [FFmpeg-devel] [PATCH 02/24] lavfi/af_amix: make sure the output does not depend on input ordering Anton Khirnov
2023-11-04  7:56 ` [FFmpeg-devel] [PATCH 03/24] lavc/8bps: fix exporting palette after 63767b79a570404628b2521b83104108b7b6884c Anton Khirnov
2023-11-04  7:56 ` [FFmpeg-devel] [PATCH 04/24] fftools/ffmpeg: move a few inline function into a new header Anton Khirnov
2023-11-04  7:56 ` [FFmpeg-devel] [PATCH 05/24] fftools/thread_queue: do not return elements for receive-finished streams Anton Khirnov
2023-11-04  7:56 ` [FFmpeg-devel] [PATCH 06/24] fftools/thread_queue: count receive-finished streams as finished Anton Khirnov
2023-11-04  7:56 ` [FFmpeg-devel] [PATCH 07/24] fftools/ffmpeg: rework keeping track of file duration for -stream_loop Anton Khirnov
2023-11-04  7:56 ` [FFmpeg-devel] [PATCH 08/24] fftools/ffmpeg_filter: remove an unnecessary sub2video_push_ref() call Anton Khirnov
2023-11-04 14:19   ` Nicolas George
2023-11-09 10:42     ` Anton Khirnov
2023-11-09 10:47       ` Nicolas George
2023-11-09 21:29         ` Anton Khirnov
2023-11-17  9:44           ` Nicolas George
2023-11-17 11:52             ` Anton Khirnov
2023-11-04  7:56 ` [FFmpeg-devel] [PATCH 09/24] fftools/ffmpeg_filter: track input/output index in {Input, Output}FilterPriv Anton Khirnov
2023-11-04  7:56 ` [FFmpeg-devel] [PATCH 10/24] fftools/ffmpeg_filter: move filtering to a separate thread Anton Khirnov
2023-11-04 19:54   ` Michael Niedermayer
2023-11-09 11:45     ` [FFmpeg-devel] [PATCH v2 " Anton Khirnov
2023-11-04  7:56 ` [FFmpeg-devel] [PATCH 11/24] fftools/ffmpeg_filter: buffer sub2video heartbeat frames like other frames Anton Khirnov
2023-11-04  7:56 ` [FFmpeg-devel] [PATCH 12/24] fftools/ffmpeg_filter: reindent Anton Khirnov
2023-11-04  7:56 ` [FFmpeg-devel] [PATCH 13/24] fftools/ffmpeg_mux: add muxing thread private data Anton Khirnov
2023-11-04  7:56 ` [FFmpeg-devel] [PATCH 14/24] fftools/ffmpeg_mux: move bitstream filtering to the muxer thread Anton Khirnov
2023-11-04 13:39   ` James Almer
2023-11-09 11:41     ` Anton Khirnov
2023-11-09 11:47       ` James Almer
2023-11-09 12:00         ` Anton Khirnov
2023-11-04  7:56 ` [FFmpeg-devel] [PATCH 15/24] fftools/ffmpeg_demux: switch from AVThreadMessageQueue to ThreadQueue Anton Khirnov
2023-11-04  7:56 ` [FFmpeg-devel] [PATCH 16/24] fftools/ffmpeg: disable -fix_sub_duration_heartbeat Anton Khirnov
2023-11-04  7:56 ` [FFmpeg-devel] [PATCH 17/24] fftools/ffmpeg_enc: move encoding to a separate thread Anton Khirnov
2023-11-04  7:56 ` [FFmpeg-devel] [PATCH 18/24] fftools/ffmpeg: add thread-aware transcode scheduling infrastructure Anton Khirnov
2023-11-04 13:53   ` James Almer
2023-11-09 11:06     ` Anton Khirnov
2023-11-04 18:44   ` Michael Niedermayer
2023-11-09 11:36     ` [FFmpeg-devel] [PATCH v2 " Anton Khirnov
2023-11-11 15:21       ` [FFmpeg-devel] [PATCH v3 " Anton Khirnov
2023-11-09 11:39     ` [FFmpeg-devel] [PATCH " Anton Khirnov
2023-11-04  7:56 ` [FFmpeg-devel] [PATCH 19/24] fftools/ffmpeg_demux: convert to the scheduler Anton Khirnov
2023-11-04  7:56 ` [FFmpeg-devel] [PATCH 20/24] fftools/ffmpeg_dec: " Anton Khirnov
2023-11-04 18:30   ` Michael Niedermayer
2023-11-11 15:24     ` Anton Khirnov
2023-11-04  7:56 ` [FFmpeg-devel] [PATCH 21/24] fftools/ffmpeg_filter: " Anton Khirnov
2023-11-04  7:56 ` [FFmpeg-devel] [PATCH 22/24] fftools/ffmpeg_enc: " Anton Khirnov
2023-11-04  7:56 ` [FFmpeg-devel] [PATCH 23/24] fftools/ffmpeg_mux: " Anton Khirnov
2023-11-04  7:56 ` [FFmpeg-devel] [PATCH 24/24] ffmpeg: switch to scheduler Anton Khirnov
2023-11-09 11:46 ` [FFmpeg-devel] [PATCH] ffmpeg CLI multithreading Anton Khirnov
2023-11-09 12:46   ` Paul B Mahol
2023-11-11 20:10 ` Michael Niedermayer
2023-11-17 10:46   ` Anton Khirnov
2023-11-13 12:34 ` Jan Ekström
2023-11-13 12:38   ` James Almer

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git