diff --git a/app/codec/ffmpeg/ffmpegdecoder.cpp b/app/codec/ffmpeg/ffmpegdecoder.cpp index 3e0398c6f..f5cd7e2f7 100644 --- a/app/codec/ffmpeg/ffmpegdecoder.cpp +++ b/app/codec/ffmpeg/ffmpegdecoder.cpp @@ -47,7 +47,8 @@ FFmpegDecoder::FFmpegDecoder() : scale_ctx_(nullptr), pkt_(nullptr), frame_(nullptr), - opts_(nullptr) + opts_(nullptr), + multithreading_(false) { } @@ -125,8 +126,8 @@ bool FFmpegDecoder::Open() return false; } - // enable multithreading on decoding - error_code = av_dict_set(&opts_, "threads", "auto", 0); + // Set multithreading setting + error_code = av_dict_set(&opts_, "threads", multithreading_ ? "auto" : "1", 0); // Handle failure to set multithreaded decoding if (error_code < 0) { @@ -524,6 +525,11 @@ bool FFmpegDecoder::SupportsAudio() return true; } +void FFmpegDecoder::SetMultithreading(bool e) +{ + multithreading_ = e; +} + void FFmpegDecoder::ConformInternal(SwrContext* resampler, WaveOutput* output, const char* in_data, int in_sample_count) { // Determine how many samples the output will be diff --git a/app/codec/ffmpeg/ffmpegdecoder.h b/app/codec/ffmpeg/ffmpegdecoder.h index 2d80ffbaf..e88010957 100644 --- a/app/codec/ffmpeg/ffmpegdecoder.h +++ b/app/codec/ffmpeg/ffmpegdecoder.h @@ -61,6 +61,8 @@ public: virtual bool SupportsVideo() override; virtual bool SupportsAudio() override; + void SetMultithreading(bool e); + private: void ConformInternal(SwrContext *resampler, WaveOutput *output, const char *in_data, int in_sample_count); @@ -145,6 +147,8 @@ private: QVector frame_index_; + bool multithreading_; + }; #endif // FFMPEGDECODER_H