From 78baf7661ff6ef451f918d0e78745b9c350863d2 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Sat, 14 Mar 2020 23:27:41 +1100 Subject: [PATCH] audiorenderer: split audio rendering up into chunks for better parallelism --- app/render/backend/audiorenderbackend.cpp | 12 ++++++++++++ app/render/backend/audiorenderbackend.h | 2 ++ 2 files changed, 14 insertions(+) diff --git a/app/render/backend/audiorenderbackend.cpp b/app/render/backend/audiorenderbackend.cpp index 2200328c7..70dec1bb2 100644 --- a/app/render/backend/audiorenderbackend.cpp +++ b/app/render/backend/audiorenderbackend.cpp @@ -100,6 +100,18 @@ void AudioRenderBackend::ConnectWorkerToThis(RenderWorker *worker) connect(arw, &AudioRenderWorker::ConformUnavailable, this, &AudioRenderBackend::ConformUnavailable, Qt::QueuedConnection); } +TimeRange AudioRenderBackend::PopNextFrameFromQueue() +{ + TimeRange range = cache_queue_.first(); + + // Limit range per worker to 2 seconds (FIXME: arbitrary, should be tweaked, maybe even in config?) + range.set_out(qMin(range.out(), range.in() + rational(2))); + + cache_queue_.RemoveTimeRange(range); + + return range; +} + void AudioRenderBackend::ConformUnavailable(StreamPtr stream, const TimeRange &range, const rational &stream_time, const AudioRenderingParams& params) { ConformWaitInfo info = {stream, params, range, stream_time}; diff --git a/app/render/backend/audiorenderbackend.h b/app/render/backend/audiorenderbackend.h index 897efa8d7..5724e4e16 100644 --- a/app/render/backend/audiorenderbackend.h +++ b/app/render/backend/audiorenderbackend.h @@ -47,6 +47,8 @@ protected: virtual void ConnectWorkerToThis(RenderWorker* worker) override; + virtual TimeRange PopNextFrameFromQueue() override; + QHash copy_map_; private: