rendermanager: use multithreading for waveforms

This commit is contained in:
itsmattkc
2022-09-27 22:06:05 -07:00
parent af8c0942f0
commit fe159bdd73
2 changed files with 12 additions and 3 deletions
+9 -2
View File
@@ -55,7 +55,11 @@ RenderManager::RenderManager(QObject *parent) :
video_thread_ = CreateThread(context_);
dry_run_thread_ = CreateThread();
audio_thread_ = CreateThread();
waveform_thread_ = CreateThread();
waveform_threads_.resize(QThread::idealThreadCount());
for (size_t i=0; i<waveform_threads_.size(); i++) {
waveform_threads_[i] = CreateThread();
}
}
decoder_clear_timer_ = new QTimer(this);
@@ -135,7 +139,10 @@ RenderTicketPtr RenderManager::RenderAudio(const RenderAudioParams &params)
ticket->setProperty("mode", params.mode);
if (params.generate_waveforms) {
waveform_thread_->AddTicket(ticket);
size_t thread_index = last_waveform_thread_%waveform_threads_.size();
RenderThread *thread = waveform_threads_[thread_index];
thread->AddTicket(ticket);
last_waveform_thread_++;
} else {
audio_thread_->AddTicket(ticket);
}
+3 -1
View File
@@ -230,7 +230,9 @@ private:
RenderThread *video_thread_;
RenderThread *dry_run_thread_;
RenderThread *audio_thread_;
RenderThread *waveform_thread_;
std::vector<RenderThread *> waveform_threads_;
size_t last_waveform_thread_;
std::list<RenderThread *> render_threads_;