X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fclipmanager.cpp;h=2960180f385b924461ab09594a0bd19547e9bb38;hb=0884bd8fe5e1fc3b93872cafea5f5a468dccf1c6;hp=e8bd52ae5916c6bc3e85637820cacc9754c6752b;hpb=56f69242fee94baa6a0ed504b9cc51e0b5eb04ae;p=kdenlive diff --git a/src/clipmanager.cpp b/src/clipmanager.cpp index e8bd52ae..2960180f 100644 --- a/src/clipmanager.cpp +++ b/src/clipmanager.cpp @@ -16,24 +16,38 @@ * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ -#include -#include -#include + +#include "clipmanager.h" #include "addclipcommand.h" #include "kdenlivesettings.h" -#include "clipmanager.h" #include "docclipbase.h" #include "kdenlivedoc.h" +#include + +#include +#include +#include + ClipManager::ClipManager(KdenliveDoc *doc): m_doc(doc), m_audioThumbsEnabled(false), m_audioThumbsQueue(QList ()), m_generatingAudioId(QString()) { m_clipIdCounter = 1; + m_folderIdCounter = 1; } ClipManager::~ClipManager() { qDeleteAll(m_clipList); } +void ClipManager::clear() { + qDeleteAll(m_clipList); + m_clipList.clear(); + m_clipIdCounter = 1; + m_folderIdCounter = 1; + m_folderList.clear(); + m_audioThumbsQueue.clear(); +} + void ClipManager::checkAudioThumbs() { if (m_audioThumbsEnabled == KdenliveSettings::audiothumbnails()) return; m_audioThumbsEnabled = KdenliveSettings::audiothumbnails(); @@ -45,7 +59,7 @@ void ClipManager::checkAudioThumbs() { if (m_generatingAudioId.isEmpty()) startAudioThumbsGeneration(); } else { m_audioThumbsQueue.clear(); - m_generatingAudioId = QString(); + m_generatingAudioId.clear(); } } @@ -60,7 +74,7 @@ void ClipManager::askForAudioThumb(const QString &id) { void ClipManager::startAudioThumbsGeneration() { if (!KdenliveSettings::audiothumbnails()) { m_audioThumbsQueue.clear(); - m_generatingAudioId = QString(); + m_generatingAudioId.clear(); return; } if (!m_audioThumbsQueue.isEmpty()) { @@ -69,14 +83,14 @@ void ClipManager::startAudioThumbsGeneration() { if (!clip || !clip->slotGetAudioThumbs()) endAudioThumbsGeneration(m_generatingAudioId); } else { - m_generatingAudioId = QString(); + m_generatingAudioId.clear(); } } void ClipManager::endAudioThumbsGeneration(const QString &requestedId) { if (!KdenliveSettings::audiothumbnails()) { m_audioThumbsQueue.clear(); - m_generatingAudioId = QString(); + m_generatingAudioId.clear(); return; } if (!m_audioThumbsQueue.isEmpty()) { @@ -84,7 +98,7 @@ void ClipManager::endAudioThumbsGeneration(const QString &requestedId) { startAudioThumbsGeneration(); } } else { - m_generatingAudioId = QString(); + m_generatingAudioId.clear(); } } @@ -92,14 +106,20 @@ void ClipManager::setThumbsProgress(const QString &message, int progress) { m_doc->setThumbsProgress(message, progress); } -QList ClipManager::documentClipList() { +QList ClipManager::documentClipList() const { return m_clipList; } +QMap ClipManager::documentFolderList() const { + return m_folderList; +} + void ClipManager::addClip(DocClipBase *clip) { m_clipList.append(clip); const QString id = clip->getId(); if (id.toInt() >= m_clipIdCounter) m_clipIdCounter = id.toInt() + 1; + const QString gid = clip->getProperty("groupid"); + if (!gid.isEmpty() && gid.toInt() >= m_folderIdCounter) m_folderIdCounter = gid.toInt() + 1; } void ClipManager::slotDeleteClip(const QString &clipId) { @@ -115,7 +135,9 @@ void ClipManager::slotDeleteClip(const QString &clipId) { void ClipManager::deleteClip(const QString &clipId) { for (int i = 0; i < m_clipList.count(); i++) { if (m_clipList.at(i)->getId() == clipId) { - m_clipList.removeAt(i); + DocClipBase *clip = m_clipList.takeAt(i); + delete clip; + clip = NULL; break; } } @@ -137,11 +159,54 @@ DocClipBase *ClipManager::getClipById(QString clipId) { return NULL; } +DocClipBase *ClipManager::getClipByResource(QString resource) { + for (int i = 0; i < m_clipList.count(); i++) { + if (m_clipList.at(i)->getProperty("resource") == resource) { + return m_clipList.at(i); + } + } + return NULL; +} + +void ClipManager::updatePreviewSettings() { + for (int i = 0; i < m_clipList.count(); i++) { + if (m_clipList.at(i)->clipType() == AV || m_clipList.at(i)->clipType() == VIDEO) { + if (m_clipList.at(i)->producerProperty("meta.media.0.codec.name") && strcmp(m_clipList.at(i)->producerProperty("meta.media.0.codec.name"), "h264") == 0) { + if (KdenliveSettings::dropbframes()) { + m_clipList[i]->setProducerProperty("skip_loop_filter", "all"); + m_clipList[i]->setProducerProperty("skip_frame", "bidir"); + } else { + m_clipList[i]->setProducerProperty("skip_loop_filter", ""); + m_clipList[i]->setProducerProperty("skip_frame", ""); + } + } + } + } +} + +void ClipManager::resetProducersList(QList prods) { + for (int i = 0; i < m_clipList.count(); i++) { + if (m_clipList.at(i)->numReferences() > 0) { + m_clipList.at(i)->deleteProducers(); + } + } + QString id; + for (int i = 0; i < prods.count(); i++) { + id = prods.at(i)->get("id"); + if (id.contains('_')) id = id.section('_', 0, 0); + DocClipBase *clip = getClipById(id); + if (clip) { + clip->setProducer(prods.at(i)); + kDebug() << "// // // REPLACE CLIP: " << id; + } + } +} + void ClipManager::slotAddClipList(const KUrl::List urls, const QString group, const QString &groupId) { QUndoCommand *addClips = new QUndoCommand(); addClips->setText(i18n("Add clips")); - foreach(const KUrl file, urls) { + foreach(const KUrl &file, urls) { if (KIO::NetAccess::exists(file, KIO::NetAccess::SourceSide, NULL)) { QDomDocument doc; QDomElement prod = doc.createElement("producer"); @@ -254,8 +319,23 @@ int ClipManager::getFreeClipId() { return m_clipIdCounter++; } +int ClipManager::getFreeFolderId() { + return m_folderIdCounter++; +} + int ClipManager::lastClipId() const { return m_clipIdCounter - 1; } +QString ClipManager::projectFolder() const { + return m_doc->projectFolder().path(); +} + +void ClipManager::addFolder(const QString &id, const QString &name) { + m_folderList.insert(id, name); +} + +void ClipManager::deleteFolder(const QString &id) { + m_folderList.remove(id); +}