FFmpeg: enable multi-threaded encoding of multiple frames, for a ~20% speedup.
authorMal Duffin <mal_cando>
Tue, 11 Dec 2018 19:38:01 +0000 (20:38 +0100)
committerBrecht Van Lommel <brechtvanlommel@gmail.com>
Tue, 11 Dec 2018 19:44:10 +0000 (20:44 +0100)
This enables ffmpeg to encode each frame in its own thread. However in most
cases Blender does not pass frames to ffmpeg fast enough to actually use the
more than two threads. In some tests the speed was measured to be about 20%.
If other parts of the video sequencer get optimized, this should improve.

Differential Revision: https://developer.blender.org/D4031

source/blender/blenkernel/intern/writeffmpeg.c

index 06f11301acbc731d4d5f48b9d4cce40493c85904..27c26a93bf528ea27547c98365474133d566b5c6 100644 (file)
@@ -543,6 +543,9 @@ static AVStream *alloc_video_stream(FFMpegContext *context, RenderData *rd, int
        /* Set up the codec context */
 
        c = st->codec;
        /* Set up the codec context */
 
        c = st->codec;
+       c->thread_count = 0;
+       c->thread_type = FF_THREAD_FRAME;
+
        c->codec_id = codec_id;
        c->codec_type = AVMEDIA_TYPE_VIDEO;
 
        c->codec_id = codec_id;
        c->codec_type = AVMEDIA_TYPE_VIDEO;
 
@@ -703,6 +706,9 @@ static AVStream *alloc_audio_stream(FFMpegContext *context, RenderData *rd, int
        st->id = 1;
 
        c = st->codec;
        st->id = 1;
 
        c = st->codec;
+       c->thread_count = 0;
+       c->thread_type = FF_THREAD_FRAME;
+
        c->codec_id = codec_id;
        c->codec_type = AVMEDIA_TYPE_AUDIO;
 
        c->codec_id = codec_id;
        c->codec_type = AVMEDIA_TYPE_AUDIO;