diff --git a/src/bin/projectclip.h b/src/bin/projectclip.h --- a/src/bin/projectclip.h +++ b/src/bin/projectclip.h @@ -140,7 +140,7 @@ bool isReady() const; /** @brief Returns this clip's producer. */ - Mlt::Producer *thumbProducer(); + std::shared_ptr< Mlt::Producer > thumbProducer(); /** @brief Recursively disable/enable bin effects. */ void setBinEffectsEnabled(bool enabled) override; @@ -223,7 +223,7 @@ const QString getFileHash(); /** @brief Store clip url temporarily while the clip controller has not been created. */ QString m_temporaryUrl; - Mlt::Producer *m_thumbsProducer; + std::shared_ptr m_thumbsProducer; QMutex m_producerMutex; QMutex m_thumbMutex; QFuture m_thumbThread; diff --git a/src/bin/projectclip.cpp b/src/bin/projectclip.cpp --- a/src/bin/projectclip.cpp +++ b/src/bin/projectclip.cpp @@ -138,7 +138,6 @@ m_requestedThumbs.clear(); m_thumbMutex.unlock(); m_thumbThread.waitForFinished(); - delete m_thumbsProducer; audioFrameCache.clear(); // delete all timeline producers std::map>::iterator itr = m_timelineProducers.begin(); @@ -366,7 +365,7 @@ return true; } -Mlt::Producer *ProjectClip::thumbProducer() +std::shared_ptr ProjectClip::thumbProducer() { QMutexLocker locker(&m_producerMutex); if (m_thumbsProducer) { @@ -381,13 +380,13 @@ } Clip clip(*prod.get()); if (KdenliveSettings::gpu_accel()) { - m_thumbsProducer = clip.softClone(ClipController::getPassPropertiesList()); + m_thumbsProducer = std::make_shared(clip.softClone(ClipController::getPassPropertiesList())); Mlt::Filter scaler(*prod->profile(), "swscale"); Mlt::Filter converter(*prod->profile(), "avcolor_space"); m_thumbsProducer->attach(scaler); m_thumbsProducer->attach(converter); } else { - m_thumbsProducer = clip.clone(); + m_thumbsProducer = std::make_shared(clip.clone()); } return m_thumbsProducer; } @@ -732,7 +731,7 @@ void ProjectClip::doExtractImage() { // TODO refac: we can probably move that into a ThumbJob - Mlt::Producer *prod = thumbProducer(); + std::shared_ptr prod = thumbProducer(); if (prod == nullptr || !prod->is_valid()) { return; } diff --git a/src/jobs/thumbjob.cpp b/src/jobs/thumbjob.cpp --- a/src/jobs/thumbjob.cpp +++ b/src/jobs/thumbjob.cpp @@ -72,7 +72,7 @@ // Don't create thumbnail for audio clips return true; } - m_prod = m_binClip->originalProducer(); + m_prod = m_binClip->thumbProducer(); if ((m_prod == nullptr) || !m_prod->is_valid()) { return false; }