X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fclipmanager.cpp;h=4c7db5873a2d4e05f9e2ac422abeb005ab01699a;hb=bae96d4b906092465a7624195a55b6527529cd7c;hp=41df4c839f25b134488875227daf2a2b9d29ea57;hpb=c50bb6246e30215bcade0e8d699c3efd9bd342fc;p=kdenlive diff --git a/src/clipmanager.cpp b/src/clipmanager.cpp index 41df4c83..4c7db587 100644 --- a/src/clipmanager.cpp +++ b/src/clipmanager.cpp @@ -19,7 +19,7 @@ #include "clipmanager.h" -#include "addclipcommand.h" +#include "commands/addclipcommand.h" #include "kdenlivesettings.h" #include "docclipbase.h" #include "kdenlivedoc.h" @@ -46,7 +46,8 @@ ClipManager::ClipManager(KdenliveDoc *doc) : m_audioThumbsQueue(), m_doc(doc), m_generatingAudioId(), - m_abortThumb(false) + m_abortThumb(false), + m_closing(false) { m_clipIdCounter = 1; m_folderIdCounter = 1; @@ -65,11 +66,12 @@ ClipManager::ClipManager(KdenliveDoc *doc) : ClipManager::~ClipManager() { + m_closing = true; + m_abortThumb = true; + m_thumbsThread.waitForFinished(); m_thumbsMutex.lock(); m_requestedThumbs.clear(); m_thumbsMutex.unlock(); - m_abortThumb = true; - m_thumbsThread.waitForFinished(); m_audioThumbsQueue.clear(); m_generatingAudioId.clear(); m_thumbsMutex.lock(); @@ -84,11 +86,11 @@ ClipManager::~ClipManager() void ClipManager::clear() { + m_abortThumb = true; + m_thumbsThread.waitForFinished(); m_thumbsMutex.lock(); m_requestedThumbs.clear(); m_thumbsMutex.unlock(); - m_abortThumb = true; - m_thumbsThread.waitForFinished(); m_abortThumb = false; m_folderList.clear(); m_audioThumbsQueue.clear(); @@ -111,7 +113,6 @@ void ClipManager::clearCache() void ClipManager::requestThumbs(const QString id, QList frames) { - kDebug()<<"// Request thbs: "< frames) void ClipManager::stopThumbs(const QString &id) { + if (m_requestedThumbs.isEmpty() || m_closing) return; m_abortThumb = true; m_thumbsThread.waitForFinished(); m_thumbsMutex.lock(); @@ -137,12 +139,12 @@ void ClipManager::stopThumbs(const QString &id) void ClipManager::slotGetThumbs() { - QMap::const_iterator i = m_requestedThumbs.constBegin(); - while (i != m_requestedThumbs.constEnd() && !m_abortThumb) { - const QString producerId = i.key(); + QMap::iterator i = m_requestedThumbs.begin(); + while (i != m_requestedThumbs.end() && !m_abortThumb) { + QString producerId = i.key(); m_thumbsMutex.lock(); QList values = m_requestedThumbs.values(producerId); - m_requestedThumbs.remove(producerId); + i = m_requestedThumbs.erase(i); m_thumbsMutex.unlock(); qSort(values); DocClipBase *clip = getClipById(producerId); @@ -150,14 +152,6 @@ void ClipManager::slotGetThumbs() while (!values.isEmpty() && clip->thumbProducer() && !m_abortThumb) { clip->thumbProducer()->getThumb(values.takeFirst()); } - if (m_abortThumb) { - // keep the requested frames that were not processed - m_thumbsMutex.lock(); - foreach (int frame, values) - m_requestedThumbs.insertMulti(producerId, frame); - m_thumbsMutex.unlock(); - } - i = m_requestedThumbs.constBegin(); } }