[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kdenlive] src: Cleanup thumbnails (prefer QImage over QPixmap)
From: Jean-Baptiste Mardelle <jb () kdenlive ! org>
Date: 2011-11-30 23:12:28
Message-ID: 20111130231228.11C4BA60A6 () git ! kde ! org
[Download RAW message or body]
Git commit 811f9353acff73a0006562b7814d3b673f420763 by Jean-Baptiste Mardelle.
Committed on 01/12/2011 at 00:11.
Pushed by mardelle into branch 'master'.
Cleanup thumbnails (prefer QImage over QPixmap)
M +3 -15 src/docclipbase.cpp
M +1 -10 src/docclipbase.h
M +2 -2 src/kdenlivedoc.cpp
M +1 -2 src/kdenlivedoc.h
M +5 -6 src/kthumb.cpp
M +1 -1 src/kthumb.h
M +2 -2 src/monitor.cpp
M +24 -22 src/projectlist.cpp
M +0 -2 src/projectlist.h
http://commits.kde.org/kdenlive/811f9353acff73a0006562b7814d3b673f420763
diff --git a/src/docclipbase.cpp b/src/docclipbase.cpp
index 2b36b8b..5d43417 100644
--- a/src/docclipbase.cpp
+++ b/src/docclipbase.cpp
@@ -251,17 +251,6 @@ void DocClipBase::setAudioThumbCreated(bool isDone)
m_audioThumbCreated = isDone;
}
-
-void DocClipBase::setThumbnail(const QPixmap & pixmap)
-{
- m_thumbnail = pixmap;
-}
-
-const QPixmap & DocClipBase::thumbnail() const
-{
- return m_thumbnail;
-}
-
void DocClipBase::updateAudioThumbnail(const audioByteArray& data)
{
//kDebug() << "CLIPBASE RECIEDVED AUDIO \
DATA*********************************************"; @@ -1193,12 +1182,11 @@ void \
DocClipBase::slotExtractImage(QList <int> frames) m_thumbProd->extractImage(frames);
}
-QPixmap DocClipBase::extractImage(int frame, int width, int height)
+QImage DocClipBase::extractImage(int frame, int width, int height)
{
- if (m_thumbProd == NULL) return QPixmap(width, height);
+ if (m_thumbProd == NULL) return QImage();
QMutexLocker locker(&m_producerMutex);
- QPixmap p = m_thumbProd->extractImage(frame, width, height);
- return p;
+ return m_thumbProd->extractImage(frame, width, height);
}
diff --git a/src/docclipbase.h b/src/docclipbase.h
index f4f31ce..64b78c1 100644
--- a/src/docclipbase.h
+++ b/src/docclipbase.h
@@ -161,15 +161,9 @@ Q_OBJECT public:
* it uses it as part of it's own composition. */
bool referencesClip(DocClipBase * clip) const;
- /** Sets the thumbnail to be used by this clip */
- void setThumbnail(const QPixmap & pixmap);
-
/** Returns the thumbnail producer used by this clip */
KThumb *thumbProducer();
- /** Returns the thumbnail used by this clip */
- const QPixmap & thumbnail() const;
-
/** Cache for every audio Frame with 10 Bytes */
/** format is frame -> channel ->bytes */
QMap<int, QMap<int, QByteArray> > m_audioFrameCache;
@@ -203,7 +197,7 @@ Q_OBJECT public:
bool hasAudioCodec(const QString &codec) const;
bool checkHash() const;
void setPlaceHolder(bool place);
- QPixmap extractImage(int frame, int width, int height);
+ QImage extractImage(int frame, int width, int height);
void clearThumbProducer();
void reloadThumbProducer();
void cleanupProducers();
@@ -223,9 +217,6 @@ private: // Private attributes
/** A list of snap markers; these markers are added to a clips snap-to points, \
and are displayed as necessary. */ QList < CommentedTime > m_snapMarkers;
-
- /** A thumbnail for this clip */
- QPixmap m_thumbnail;
GenTime m_duration;
KThumb *m_thumbProd;
diff --git a/src/kdenlivedoc.cpp b/src/kdenlivedoc.cpp
index 8102ca6..7a38a20 100644
--- a/src/kdenlivedoc.cpp
+++ b/src/kdenlivedoc.cpp
@@ -1377,9 +1377,9 @@ QPoint KdenliveDoc::getTracksCount() const
return QPoint(video, audio);
}
-void KdenliveDoc::cachePixmap(const QString &fileId, const QPixmap &pix) const
+void KdenliveDoc::cacheImage(const QString &fileId, const QImage &img) const
{
- pix.save(m_projectFolder.path(KUrl::AddTrailingSlash) + "thumbs/" + fileId + \
".png"); + img.save(m_projectFolder.path(KUrl::AddTrailingSlash) + "thumbs/" + \
fileId + ".png"); }
bool KdenliveDoc::checkDocumentClips(QDomNodeList infoproducers)
diff --git a/src/kdenlivedoc.h b/src/kdenlivedoc.h
index 9bd3ef5..5cab5ad 100644
--- a/src/kdenlivedoc.h
+++ b/src/kdenlivedoc.h
@@ -140,8 +140,7 @@ Q_OBJECT public:
* The returned duration might differ from the actual track duration!
* It is the one stored in the track's TrackInfo. */
int trackDuration(int ix);
-
- void cachePixmap(const QString &fileId, const QPixmap &pix) const;
+ void cacheImage(const QString &fileId, const QImage &img) const;
void setProjectFolder(KUrl url);
void setZone(int start, int end);
QPoint zone() const;
diff --git a/src/kthumb.cpp b/src/kthumb.cpp
index c7dcfeb..3ca94c6 100644
--- a/src/kthumb.cpp
+++ b/src/kthumb.cpp
@@ -122,15 +122,14 @@ void KThumb::getThumb(int frame)
emit thumbReady(frame, img);
}
-QPixmap KThumb::extractImage(int frame, int width, int height)
+QImage KThumb::extractImage(int frame, int width, int height)
{
if (m_producer == NULL) {
- QPixmap p(width, height);
- p.fill(Qt::black);
- return p;
+ QImage img(width, height, QImage::Format_ARGB32_Premultiplied);
+ img.fill(Qt::black);
+ return img;
}
- QImage img = getProducerFrame(frame, (int) (height * m_ratio + 0.5), width, \
height);
- return QPixmap::fromImage(img);
+ return getProducerFrame(frame, (int) (height * m_ratio + 0.5), width, height);
}
//static
diff --git a/src/kthumb.h b/src/kthumb.h
index 415f355..b85e077 100644
--- a/src/kthumb.h
+++ b/src/kthumb.h
@@ -63,7 +63,7 @@ Q_OBJECT public:
void clearProducer();
void updateThumbUrl(const QString &hash);
void extractImage(QList <int> frames);
- QPixmap extractImage(int frame, int width, int height);
+ QImage extractImage(int frame, int width, int height);
#if KDE_IS_VERSION(4,5,0)
/** @brief Request thumbnails for the frame range. */
void queryIntraThumbs(QList <int> missingFrames);
diff --git a/src/monitor.cpp b/src/monitor.cpp
index 7315bb9..e994710 100644
--- a/src/monitor.cpp
+++ b/src/monitor.cpp
@@ -503,9 +503,9 @@ void Monitor::mouseMoveEvent(QMouseEvent *event)
data.append(list.join(";").toUtf8());
mimeData->setData("kdenlive/clip", data);
drag->setMimeData(mimeData);
- QPixmap pix = m_currentClip->thumbnail();
+ /*QPixmap pix = m_currentClip->thumbnail();
drag->setPixmap(pix);
- drag->setHotSpot(QPoint(0, 50));
+ drag->setHotSpot(QPoint(0, 50));*/
drag->start(Qt::MoveAction);
//Qt::DropAction dropAction;
diff --git a/src/projectlist.cpp b/src/projectlist.cpp
index 7cf7c37..66842bc 100644
--- a/src/projectlist.cpp
+++ b/src/projectlist.cpp
@@ -1801,28 +1801,30 @@ void ProjectList::slotRefreshClipThumbnail(QTreeWidgetItem \
*it, bool update) return;
}
QPixmap pix;
+ QImage img;
int height = m_listView->iconSize().height();
int swidth = (int)(height * m_render->frameRenderWidth() / \
m_render->renderHeight()+ 0.5); int dwidth = (int)(height * m_render->dar() + 0.5);
if (clip->clipType() == AUDIO)
pix = KIcon("audio-x-generic").pixmap(QSize(dwidth, height));
else if (clip->clipType() == IMAGE)
- pix = QPixmap::fromImage(KThumb::getFrame(item->referencedClip()->getProducer(), \
0, swidth, dwidth, height)); + img = \
KThumb::getFrame(item->referencedClip()->getProducer(), 0, swidth, dwidth, height); \
else {
- pix = item->referencedClip()->extractImage(frame, dwidth, height);
+ img = item->referencedClip()->extractImage(frame, dwidth, height);
}
- if (!pix.isNull()) {
+ if (!pix.isNull() || !img.isNull()) {
monitorItemEditing(false);
+ if (!img.isNull()) pix = QPixmap::fromImage(img);
it->setData(0, Qt::DecorationRole, pix);
monitorItemEditing(true);
- QString clipId = item->getClipHash();
- if (!clipId.isEmpty()) {
+ QString hash = item->getClipHash();
+ if (!hash.isEmpty() && !img.isNull()) {
if (!isSubItem)
- m_doc->cachePixmap(clipId, pix);
+ m_doc->cacheImage(hash, img);
else
- m_doc->cachePixmap(clipId + '#' + QString::number(frame), pix);
+ m_doc->cacheImage(hash + '#' + QString::number(frame), img);
}
}
if (update)
@@ -1998,26 +2000,26 @@ bool ProjectList::generateImageProxy() const
void ProjectList::slotReplyGetImage(const QString &clipId, const QImage &img)
{
- QPixmap pix = QPixmap::fromImage(img);
- setThumbnail(clipId, pix);
+ ProjectItem *item = getItemById(clipId);
+ if (item && !img.isNull()) {
+ QPixmap pix = QPixmap::fromImage(img);
+ monitorItemEditing(false);
+ item->setData(0, Qt::DecorationRole, pix);
+ monitorItemEditing(true);
+ QString hash = item->getClipHash();
+ if (!hash.isEmpty()) m_doc->cacheImage(hash, img);
+ }
}
void ProjectList::slotReplyGetImage(const QString &clipId, const QString &name, int \
width, int height) {
- QPixmap pix = KIcon(name).pixmap(QSize(width, height));
- setThumbnail(clipId, pix);
-}
-
-void ProjectList::setThumbnail(const QString &clipId, const QPixmap &pix)
-{
+ // For clips that have a generic icon (like audio clips...)
ProjectItem *item = getItemById(clipId);
+ QPixmap pix = KIcon(name).pixmap(QSize(width, height));
if (item && !pix.isNull()) {
monitorItemEditing(false);
item->setData(0, Qt::DecorationRole, pix);
monitorItemEditing(true);
- //update();
- QString clipId = item->getClipHash();
- if (!clipId.isEmpty()) m_doc->cachePixmap(clipId, pix);
}
}
@@ -2215,10 +2217,10 @@ void ProjectList::addClipCut(const QString &id, int in, int \
out, const QString d m_listView->scrollToItem(sub);
m_listView->editItem(sub, 1);
}
- QPixmap p = clip->referencedClip()->extractImage(in, \
(int)(sub->sizeHint(0).height() * m_render->dar()), \
sub->sizeHint(0).height() - 2);
- sub->setData(0, Qt::DecorationRole, p);
- QString clipId = clip->getClipHash();
- if (!clipId.isEmpty()) m_doc->cachePixmap(clipId + '#' + \
QString::number(in), p); + QImage img = \
clip->referencedClip()->extractImage(in, (int)(sub->sizeHint(0).height() * \
m_render->dar()), sub->sizeHint(0).height() - 2); + sub->setData(0, \
Qt::DecorationRole, QPixmap::fromImage(img)); + QString hash = \
clip->getClipHash(); + if (!hash.isEmpty()) m_doc->cacheImage(hash + '#' + \
QString::number(in), img); monitorItemEditing(true);
}
emit projectModified();
diff --git a/src/projectlist.h b/src/projectlist.h
index 36e4387..05237d8 100644
--- a/src/projectlist.h
+++ b/src/projectlist.h
@@ -342,8 +342,6 @@ private:
/** @brief Process ffmpeg output to find out process progress. */
void processLogInfo(QList <ProjectItem *>items, int *duration, const QString \
&log); void monitorItemEditing(bool enable);
- /** @brief Set thumbnail for a project's clip. */
- void setThumbnail(const QString &clipId, const QPixmap &pix);
/** @brief Get cached thumbnail for a project's clip or create it if no cache. \
*/ void getCachedThumbnail(ProjectItem *item);
void getCachedThumbnail(SubProjectItem *item);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic