X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fclipmanager.cpp;h=22fee7559ab503448312ff01a5e4bc725704a000;hb=a3eee7be24126f5a3458d488f44cd61c66135e17;hp=9a394028a71f3f1d591be73959c9cb7355963d38;hpb=845a9839b16cd5f1153511cbb92658d3fbb07536;p=kdenlive diff --git a/src/clipmanager.cpp b/src/clipmanager.cpp index 9a394028..22fee755 100644 --- a/src/clipmanager.cpp +++ b/src/clipmanager.cpp @@ -45,12 +45,14 @@ #include #include +#include #include -ClipManager::ClipManager(KdenliveDoc *doc) : +ClipManager::ClipManager(KdenliveDoc *doc, QGLWidget *glContext) : QObject(), + m_mainGLContext(glContext), m_audioThumbsQueue(), m_doc(doc), m_abortThumb(false), @@ -165,6 +167,10 @@ void ClipManager::stopThumbs(const QString &id) void ClipManager::slotGetThumbs() { + // We are in a new thread, so we need a new OpenGL context for the remainder of the function. + QGLWidget ctx(0, m_mainGLContext); + ctx.makeCurrent(); + QMap::const_iterator i; int max; int done = 0; @@ -251,6 +257,10 @@ void ClipManager::askForAudioThumb(const QString &id) void ClipManager::slotGetAudioThumbs() { + // We are in a new thread, so we need a new OpenGL context for the remainder of the function. + QGLWidget ctx(0, m_mainGLContext); + ctx.makeCurrent(); + Mlt::Profile prof((char*) KdenliveSettings::current_profile().toUtf8().constData()); mlt_audio_format audioFormat = mlt_audio_s16; while (!m_abortAudioThumb && !m_audioThumbsQueue.isEmpty()) { @@ -335,12 +345,11 @@ void ClipManager::slotGetAudioThumbs() } int last_val = 0; - int val = 0; double framesPerSecond = mlt_producer_get_fps(producer.get_producer()); Mlt::Frame *mlt_frame; for (int z = (int) frame; z < (int)(frame + lengthInFrames) && producer.is_valid() && !m_abortAudioThumb; z++) { - val = (int)((z - frame) / (frame + lengthInFrames) * 100.0); + int val = (int)((z - frame) / (frame + lengthInFrames) * 100.0); if (last_val != val && val > 1) { setThumbsProgress(i18n("Creating audio thumbnail for %1", url.fileName()), val); last_val = val; @@ -404,7 +413,7 @@ QMap ClipManager::documentFolderList() const void ClipManager::addClip(DocClipBase *clip) { m_clipList.append(clip); - if (clip->clipType() != COLOR && clip->clipType() != SLIDESHOW && !clip->fileURL().isEmpty()) { + if (clip->clipType() != Color && clip->clipType() != SlideShow && !clip->fileURL().isEmpty()) { // listen for file change //kDebug() << "// LISTEN FOR: " << clip->fileURL().path(); m_fileWatcher.addFile(clip->fileURL().path()); @@ -434,7 +443,7 @@ void ClipManager::deleteClip(const QString &clipId) for (int i = 0; i < m_clipList.count(); ++i) { if (m_clipList.at(i)->getId() == clipId) { DocClipBase *clip = m_clipList.takeAt(i); - if (clip->clipType() != COLOR && clip->clipType() != SLIDESHOW && !clip->fileURL().isEmpty()) { + if (clip->clipType() != Color && clip->clipType() != SlideShow && !clip->fileURL().isEmpty()) { //if (m_clipList.at(i)->clipType() == IMAGE || m_clipList.at(i)->clipType() == AUDIO || (m_clipList.at(i)->clipType() == TEXT && !m_clipList.at(i)->fileURL().isEmpty())) { // listen for file change m_fileWatcher.removeFile(clip->fileURL().path()); @@ -574,7 +583,7 @@ void ClipManager::slotAddClipList(const KUrl::List &urls, const QMap name().startsWith("image/")) { - prod.setAttribute("type", (int) IMAGE); + prod.setAttribute("type", (int) Image); prod.setAttribute("in", 0); prod.setAttribute("out", m_doc->getFramePos(KdenliveSettings::image_duration()) - 1); if (KdenliveSettings::autoimagetransparency()) prod.setAttribute("transparency", 1); @@ -597,7 +606,7 @@ void ClipManager::slotAddClipList(const KUrl::List &urls, const QMap properties, c prod.setAttribute(i.key(), i.value()); ++i; } - prod.setAttribute("type", (int) SLIDESHOW); + prod.setAttribute("type", (int) SlideShow); uint id = m_clipIdCounter++; if (!group.isEmpty()) { prod.setAttribute("groupname", group); @@ -720,7 +729,7 @@ void ClipManager::slotAddTextClipFile(const QString &titleName, int duration, co prod.setAttribute("groupname", group); prod.setAttribute("groupid", groupId); } - prod.setAttribute("type", (int) TEXT); + prod.setAttribute("type", (int) Text); prod.setAttribute("transparency", "1"); prod.setAttribute("in", "0"); prod.setAttribute("out", duration - 1); @@ -741,7 +750,7 @@ void ClipManager::slotAddTextTemplateClip(QString titleName, const KUrl &path, c prod.setAttribute("groupname", group); prod.setAttribute("groupid", groupId); } - prod.setAttribute("type", (int) TEXT); + prod.setAttribute("type", (int) Text); prod.setAttribute("transparency", "1"); prod.setAttribute("in", "0"); @@ -818,15 +827,15 @@ QDomElement ClipManager::groupsXml() const groups.appendChild(group); QList children = m_groupsList.at(i)->childItems(); for (int j = 0; j < children.count(); j++) { - if (children.at(j)->type() == AVWIDGET || children.at(j)->type() == TRANSITIONWIDGET) { + if (children.at(j)->type() == AVWidget || children.at(j)->type() == TransitionWidget) { AbstractClipItem *item = static_cast (children.at(j)); ItemInfo info = item->info(); - if (item->type() == AVWIDGET) { + if (item->type() == AVWidget) { QDomElement clip = doc.createElement("clipitem"); clip.setAttribute("track", info.track); clip.setAttribute("position", info.startPos.frames(m_doc->fps())); group.appendChild(clip); - } else if (item->type() == TRANSITIONWIDGET) { + } else if (item->type() == TransitionWidget) { QDomElement clip = doc.createElement("transitionitem"); clip.setAttribute("track", info.track); clip.setAttribute("position", info.startPos.frames(m_doc->fps())); @@ -960,7 +969,7 @@ void ClipManager::listRemovableVolumes() bool ClipManager::isOnRemovableDevice(const KUrl &url) { - SolidVolumeInfo volume; + //SolidVolumeInfo volume; QString path = url.path(KUrl::RemoveTrailingSlash); int volumeMatch = 0; @@ -974,7 +983,7 @@ bool ClipManager::isOnRemovableDevice(const KUrl &url) if (length > volumeMatch) { volumeMatch = v.path.length(); - volume = v; + //volume = v; } } }