diff --git a/app/render/backend/renderbackend.cpp b/app/render/backend/renderbackend.cpp index b3bbe23a2..6e469e07e 100644 --- a/app/render/backend/renderbackend.cpp +++ b/app/render/backend/renderbackend.cpp @@ -139,6 +139,10 @@ void RenderBackend::SetViewerNode(ViewerOutput *viewer_node) &PlaybackCache::Invalidated, this, &RenderBackend::AutoCacheAudioInvalidated); + + foreach (const WorkerData& worker, workers_) { + worker.worker->ClearDecoders(); + } } if (viewer_node) { diff --git a/app/render/backend/renderworker.cpp b/app/render/backend/renderworker.cpp index 3c0be8ca8..7c3e2bddd 100644 --- a/app/render/backend/renderworker.cpp +++ b/app/render/backend/renderworker.cpp @@ -164,6 +164,11 @@ void RenderWorker::RenderAudio(RenderTicketPtr ticket, ViewerOutput* viewer, con emit FinishedJob(); } +void RenderWorker::ClearDecoders() +{ + decoder_cache_.clear(); +} + NodeValueTable RenderWorker::GenerateBlockTable(const TrackOutput *track, const TimeRange &range) { if (track->track_type() == Timeline::kTrackTypeAudio) { diff --git a/app/render/backend/renderworker.h b/app/render/backend/renderworker.h index 067a9d9ef..84f9fbe94 100644 --- a/app/render/backend/renderworker.h +++ b/app/render/backend/renderworker.h @@ -107,6 +107,8 @@ public: void RenderAudio(RenderTicketPtr ticket, ViewerOutput* viewer, const TimeRange& range); + void ClearDecoders(); + protected: virtual void TextureToFrame(const QVariant& texture, FramePtr frame, const QMatrix4x4 &mat) const = 0;