From: <j-...@us...> - 2008-12-13 01:59:41
|
Revision: 2780 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2780&view=rev Author: j-b-m Date: 2008-12-13 01:39:37 +0000 (Sat, 13 Dec 2008) Log Message: ----------- Start caching of project tree thumbnails for faster project opening Modified Paths: -------------- branches/KDE4/src/docclipbase.cpp branches/KDE4/src/docclipbase.h branches/KDE4/src/kdenlivedoc.cpp branches/KDE4/src/kdenlivedoc.h branches/KDE4/src/mainwindow.cpp branches/KDE4/src/projectitem.cpp branches/KDE4/src/projectitem.h branches/KDE4/src/projectlist.cpp branches/KDE4/src/projectlist.h Modified: branches/KDE4/src/docclipbase.cpp =================================================================== --- branches/KDE4/src/docclipbase.cpp 2008-12-13 00:09:54 UTC (rev 2779) +++ branches/KDE4/src/docclipbase.cpp 2008-12-13 01:39:37 UTC (rev 2780) @@ -548,6 +548,14 @@ } } +QString DocClipBase::getClipHash() const { + QString hash; + if (m_clipType == SLIDESHOW) hash = QCryptographicHash::hash(m_properties.value("resource").toAscii().data(), QCryptographicHash::Md5); + else if (m_clipType == COLOR) hash = QCryptographicHash::hash(m_properties.value("colour").toAscii().data(), QCryptographicHash::Md5); + else hash = m_properties.value("file_hash"); + return hash; +} + void DocClipBase::setProperty(const QString &key, const QString &value) { m_properties.insert(key, value); if (key == "resource") { Modified: branches/KDE4/src/docclipbase.h =================================================================== --- branches/KDE4/src/docclipbase.h 2008-12-13 00:09:54 UTC (rev 2779) +++ branches/KDE4/src/docclipbase.h 2008-12-13 01:39:37 UTC (rev 2780) @@ -113,34 +113,11 @@ void setProducer(Mlt::Producer *producer); Mlt::Producer *producer(int track = -1); - /*virtual DocClipAVFile *toDocClipAVFile() { - return 0; - } - - virtual DocClipTextFile *toDocClipTextFile() { - return 0; - } - - virtual bool isDocClipTextFile() const { - return false; - } - - virtual bool isDocClipVirtual() const { - return false; - } - - virtual DocClipVirtual *toDocClipVirtual() { - return 0; - }*/ - /** Returns true if this clip is a project clip, false otherwise. Overridden in DocClipProject, * where it returns true. */ bool isProjectClip() const { return false; } - // Appends scene times for this clip to the passed vector. - /* virtual void populateSceneTimes(QList < GenTime > - &toPopulate) const = 0;*/ /** Reads in the element structure and creates a clip out of it.*/ // Returns an XML document that describes part of the current scene. @@ -188,6 +165,7 @@ /** Free cache data */ void slotClearAudioCache(); void askForAudioThumbs(); + QString getClipHash() const; private: // Private attributes /** The name of this clip */ Modified: branches/KDE4/src/kdenlivedoc.cpp =================================================================== --- branches/KDE4/src/kdenlivedoc.cpp 2008-12-13 00:09:54 UTC (rev 2779) +++ branches/KDE4/src/kdenlivedoc.cpp 2008-12-13 01:39:37 UTC (rev 2780) @@ -169,7 +169,6 @@ if (m_fps == 30000.0 / 1001.0) m_timecode.setFormat(30, true); else m_timecode.setFormat((int) m_fps); - connect(m_autoSaveTimer, SIGNAL(timeout()), this, SLOT(slotAutoSave())); } @@ -1195,7 +1194,7 @@ kDebug() << attrname << " = " << attributes.item(i).nodeValue(); } clip->setProperties(properties); - emit addProjectClip(clip); + emit addProjectClip(clip, false); } } @@ -1348,5 +1347,10 @@ return result; } +void KdenliveDoc::cachePixmap(const QString &fileId, const QPixmap &pix) const { + pix.save(m_projectFolder.path() + "/thumbs/" + fileId + ".png"); +} + + #include "kdenlivedoc.moc" Modified: branches/KDE4/src/kdenlivedoc.h =================================================================== --- branches/KDE4/src/kdenlivedoc.h 2008-12-13 00:09:54 UTC (rev 2779) +++ branches/KDE4/src/kdenlivedoc.h 2008-12-13 01:39:37 UTC (rev 2780) @@ -115,6 +115,7 @@ QString getTracksInfo() const; void switchTrackVideo(int ix, bool hide); void switchTrackAudio(int ix, bool hide); + void cachePixmap(const QString &fileId, const QPixmap &pix) const; private: KUrl m_url; @@ -160,7 +161,7 @@ void slotAutoSave(); signals: - void addProjectClip(DocClipBase *); + void addProjectClip(DocClipBase *, bool getInfo = true); void addProjectFolder(const QString, const QString &, bool, bool edit = false); void signalDeleteProjectClip(const QString &); void updateClipDisplay(const QString&); Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-12-13 00:09:54 UTC (rev 2779) +++ branches/KDE4/src/mainwindow.cpp 2008-12-13 01:39:37 UTC (rev 2780) @@ -1312,7 +1312,7 @@ disconnect(m_activeDocument, SIGNAL(guidesUpdated()), this, SLOT(slotGuidesUpdated())); - disconnect(m_activeDocument, SIGNAL(addProjectClip(DocClipBase *)), m_projectList, SLOT(slotAddClip(DocClipBase *))); + disconnect(m_activeDocument, SIGNAL(addProjectClip(DocClipBase *, bool)), m_projectList, SLOT(slotAddClip(DocClipBase *, bool))); disconnect(m_activeDocument, SIGNAL(addProjectFolder(const QString, const QString &, bool, bool)), m_projectList, SLOT(slotAddFolder(const QString, const QString &, bool, bool))); disconnect(m_activeDocument, SIGNAL(signalDeleteProjectClip(const QString &)), m_projectList, SLOT(slotDeleteClip(const QString &))); disconnect(m_activeDocument, SIGNAL(updateClipDisplay(const QString &)), m_projectList, SLOT(slotUpdateClip(const QString &))); @@ -1364,7 +1364,7 @@ connect(m_projectMonitor, SIGNAL(renderPosition(int)), trackView, SLOT(moveCursorPos(int))); connect(m_projectMonitor, SIGNAL(zoneUpdated(QPoint)), trackView, SLOT(slotSetZone(QPoint))); connect(m_projectMonitor, SIGNAL(durationChanged(int)), trackView, SLOT(setDuration(int))); - connect(doc, SIGNAL(addProjectClip(DocClipBase *)), m_projectList, SLOT(slotAddClip(DocClipBase *))); + connect(doc, SIGNAL(addProjectClip(DocClipBase *, bool)), m_projectList, SLOT(slotAddClip(DocClipBase *, bool))); connect(doc, SIGNAL(addProjectFolder(const QString, const QString &, bool, bool)), m_projectList, SLOT(slotAddFolder(const QString, const QString &, bool, bool))); connect(doc, SIGNAL(signalDeleteProjectClip(const QString &)), m_projectList, SLOT(slotDeleteClip(const QString &))); connect(doc, SIGNAL(updateClipDisplay(const QString &)), m_projectList, SLOT(slotUpdateClip(const QString &))); Modified: branches/KDE4/src/projectitem.cpp =================================================================== --- branches/KDE4/src/projectitem.cpp 2008-12-13 00:09:54 UTC (rev 2779) +++ branches/KDE4/src/projectitem.cpp 2008-12-13 01:39:37 UTC (rev 2780) @@ -133,6 +133,11 @@ m_clip->setProperties(props); } +QString ProjectItem::getClipHash() const { + if (m_clip == NULL) return QString(); + return m_clip->getClipHash(); +} + void ProjectItem::setProperty(const QString &key, const QString &value) { if (m_clip == NULL) return; m_clip->setProperty(key, value); Modified: branches/KDE4/src/projectitem.h =================================================================== --- branches/KDE4/src/projectitem.h 2008-12-13 00:09:54 UTC (rev 2779) +++ branches/KDE4/src/projectitem.h 2008-12-13 01:39:37 UTC (rev 2780) @@ -63,6 +63,7 @@ void clearProperty(const QString &key); const QString groupName() const; void setGroupName(const QString name); + QString getClipHash() const; private: QString m_groupname; Modified: branches/KDE4/src/projectlist.cpp =================================================================== --- branches/KDE4/src/projectlist.cpp 2008-12-13 00:09:54 UTC (rev 2779) +++ branches/KDE4/src/projectlist.cpp 2008-12-13 01:39:37 UTC (rev 2780) @@ -360,6 +360,7 @@ } void ProjectList::requestClipInfo(const QDomElement xml, const QString id) { + kDebug() << " PRG LIST REQUEST CLP INFO: " << id; m_infoQueue.insert(id, xml); listView->setEnabled(false); if (m_infoQueue.count() == 1) QTimer::singleShot(300, this, SLOT(slotProcessNextClipInQueue())); @@ -404,7 +405,11 @@ } requestClipInfo(clip->toXML(), clip->getId()); } else { - requestClipThumbnail(item->clipId()); + QString cachedPixmap = m_doc->projectFolder().path() + "/thumbs/" + item->getClipHash() + ".png"; + if (QFile::exists(cachedPixmap)) { + //kDebug()<<"// USING CACHED PIX: "<<cachedPixmap; + item->setIcon(0, QPixmap(cachedPixmap)); + } else requestClipThumbnail(item->clipId()); item->changeDuration(item->referencedClip()->producer()->get_playtime()); } item->setData(1, UsageRole, QString::number(item->numReferences())); @@ -598,6 +603,7 @@ if (clip->clipType() == AUDIO) pix = KIcon("audio-x-generic").pixmap(QSize(width, height)); else pix = item->referencedClip()->thumbProducer()->extractImage(item->referencedClip()->getClipThumbFrame(), width, height); item->setIcon(0, pix); + m_doc->cachePixmap(item->getClipHash(), pix); if (update) emit projectModified(); if (!m_thumbnailQueue.isEmpty()) QTimer::singleShot(300, this, SLOT(slotProcessNextThumbnail())); } @@ -615,7 +621,10 @@ void ProjectList::slotReplyGetImage(const QString &clipId, int pos, const QPixmap &pix, int w, int h) { ProjectItem *item = getItemById(clipId); - if (item) item->setIcon(0, pix); + if (item) { + item->setIcon(0, pix); + m_doc->cachePixmap(item->getClipHash(), pix); + } } ProjectItem *ProjectList::getItemById(const QString &id) { Modified: branches/KDE4/src/projectlist.h =================================================================== --- branches/KDE4/src/projectlist.h 2008-12-13 00:09:54 UTC (rev 2779) +++ branches/KDE4/src/projectlist.h 2008-12-13 01:39:37 UTC (rev 2780) @@ -117,7 +117,7 @@ void setDocument(KdenliveDoc *doc); void slotReplyGetImage(const QString &clipId, int pos, const QPixmap &pix, int w, int h); void slotReplyGetFileProperties(const QString &clipId, Mlt::Producer *producer, const QMap < QString, QString > &properties, const QMap < QString, QString > &metadata); - void slotAddClip(DocClipBase *clip, bool getProperties = true); + void slotAddClip(DocClipBase *clip, bool getProperties); void slotDeleteClip(const QString &clipId); void slotUpdateClip(const QString &id); void slotRefreshClipThumbnail(const QString &clipId, bool update = true); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |