X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fclipmanager.cpp;h=43aa3227ac7e84d11edf7af7040e20747675785c;hb=d49a300ddcb728d616a8c72c52f095551cc7100f;hp=58d6bedab4c3d8da3eff9076638f1323291728ac;hpb=096fad7b4c5b991e1146ca2ea5b6540f55095341;p=kdenlive diff --git a/src/clipmanager.cpp b/src/clipmanager.cpp index 58d6beda..43aa3227 100644 --- a/src/clipmanager.cpp +++ b/src/clipmanager.cpp @@ -127,16 +127,31 @@ void ClipManager::requestThumbs(const QString id, QList frames) void ClipManager::stopThumbs(const QString &id) { - if (m_requestedThumbs.isEmpty() || m_closing) return; + if (m_closing || (m_requestedThumbs.isEmpty() && m_audioThumbsQueue.isEmpty() && m_processingAudioThumbId != id)) return; + + // Abort video thumbs for this clip m_abortThumb = true; m_thumbsThread.waitForFinished(); m_thumbsMutex.lock(); m_requestedThumbs.remove(id); + m_audioThumbsQueue.removeAll(id); m_thumbsMutex.unlock(); m_abortThumb = false; + + // Abort audio thumbs for this clip + if (m_processingAudioThumbId == id) { + m_abortAudioThumb = true; + m_audioThumbsThread.waitForFinished(); + m_abortAudioThumb = false; + } + if (!m_thumbsThread.isRunning() && !m_requestedThumbs.isEmpty()) { m_thumbsThread = QtConcurrent::run(this, &ClipManager::slotGetThumbs); } + + if (!m_audioThumbsThread.isRunning() && !m_audioThumbsQueue.isEmpty()) { + m_audioThumbsThread = QtConcurrent::run(this, &ClipManager::slotGetAudioThumbs); + } } void ClipManager::slotGetThumbs() @@ -207,9 +222,9 @@ void ClipManager::slotGetAudioThumbs() mlt_audio_format audioFormat = mlt_audio_pcm; while (!m_abortAudioThumb && !m_audioThumbsQueue.isEmpty()) { m_thumbsMutex.lock(); - QString clipId = m_audioThumbsQueue.takeFirst(); + m_processingAudioThumbId = m_audioThumbsQueue.takeFirst(); m_thumbsMutex.unlock(); - DocClipBase *clip = getClipById(clipId); + DocClipBase *clip = getClipById(m_processingAudioThumbId); if (!clip || clip->audioThumbCreated()) continue; KUrl url = clip->fileURL(); QString hash = clip->getClipHash(); @@ -312,6 +327,7 @@ void ClipManager::slotGetAudioThumbs() clip->updateAudioThumbnail(storeIn); } } + m_processingAudioThumbId.clear(); } void ClipManager::setThumbsProgress(const QString &message, int progress)