From: Marco Gittler Date: Sun, 24 Feb 2008 23:49:32 +0000 (+0000) Subject: audito thumbs are cached X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=f66e14aa6a646790dc613e884a602a1a72acf8a2;p=kdenlive audito thumbs are cached svn path=/branches/KDE4/; revision=1929 --- diff --git a/src/clipitem.cpp b/src/clipitem.cpp index 84ddcd48..e33a2930 100644 --- a/src/clipitem.cpp +++ b/src/clipitem.cpp @@ -34,7 +34,7 @@ #include "kdenlivesettings.h" ClipItem::ClipItem(DocClipBase *clip, int track, int startpos, const QRectF & rect, int duration) - : QGraphicsRectItem(rect), m_clip(clip), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_track(track), m_startPos(startpos), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), m_startFade(0), m_endFade(0), m_effectsCounter(0) +: QGraphicsRectItem(rect), m_clip(clip), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_track(track), m_startPos(startpos), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), m_startFade(0), m_endFade(0), m_effectsCounter(0),audioThumbWasDrawn(false) { //setToolTip(name); kDebug()<<"******* CREATING NEW TML CLIP, DUR: "<setPen(audiopen); QRectF re=path.boundingRect(); - - QMap channelPaths; - QMap negativeChannelPaths; - for (int i=0;i19 ) - continue; - QMap frame_channel_data=baseClip()->audioFrameChache[(int)frame]; + if ( (!audioThumbWasDrawn || framePixelWidth!=pixelForOneFrame ) && !baseClip()->audioFrameChache.isEmpty()){ + QMap positiveChannelPaths; + QMap negativeChannelPaths; + QPainter pixpainter(&audioThumbCachePic); + pixpainter.setRenderHint(QPainter::Antialiasing,true); + for (int i=0;i 0;channel++){ + for (int samples=0;samples19 ) + continue; + QMap frame_channel_data=baseClip()->audioFrameChache[(int)frame]; - int y=re.y()+re.height()*channel/channels+ (re.height()/channels)/2; - channelPaths[channel].lineTo(samples,y+( (int)frame_channel_data[channel][sample] -127/2 ) * (re.height()/channels) / 64 ); - negativeChannelPaths[channel].lineTo(samples,y-( (int)frame_channel_data[channel][sample] -127/2 ) * (re.height()/channels) / 64 ); + for (int channel=0;channel 0;channel++){ + + int y=audioThumbCachePic.height()*channel/channels+ (/*re.height()*/audioThumbCachePic.height()/channels)/2; + + positiveChannelPaths[channel].lineTo(samples,y+( (int)frame_channel_data[channel][sample] -127/2 ) * (audioThumbCachePic.height()/channels) / 64 ); + negativeChannelPaths[channel].lineTo(samples,y-( (int)frame_channel_data[channel][sample] -127/2 ) * (audioThumbCachePic.height()/channels) / 64 ); + } } - } - for (int i=0;idrawPath(channelPaths[i].united(negativeChannelPaths[i]));//or singleif looks better - painter->drawPath(channelPaths[i]); - } - } + for (int i=0;idrawPixmap(re.x(),re.y(),audioThumbCachePic); + } + // draw start / end fades diff --git a/src/clipitem.h b/src/clipitem.h index 46252e10..ba04cadc 100644 --- a/src/clipitem.h +++ b/src/clipitem.h @@ -111,7 +111,9 @@ class ClipItem : public QObject, public QGraphicsRectItem int m_effectsCounter; EffectsList m_effectList; - + QPixmap audioThumbCachePic; + bool audioThumbWasDrawn; + double framePixelWidth; private slots: void slotThumbReady(int frame, QPixmap pix); void slotFetchThumbs(); diff --git a/src/kthumb.cpp b/src/kthumb.cpp index 5e40db6e..2c0938d2 100644 --- a/src/kthumb.cpp +++ b/src/kthumb.cpp @@ -76,11 +76,11 @@ void MyThread::init(KUrl url, QString target, double frame, double frameLength, Mlt::Producer m_producer(prof, m_url.path().toAscii().data()); - /*TODO if (KdenliveSettings::normaliseaudiothumbs()) { - Mlt::Filter m_convert("volume"); + /*TODO if (KdenliveSettings::normaliseaudiothumbs()) {*/ + Mlt::Filter m_convert(prof,"volume"); m_convert.set("gain", "normalise"); m_producer.attach(m_convert); - }*/ + //} /*TODO if (qApp->mainWidget()) QApplication::postEvent(qApp->mainWidget(), new ProgressEvent(-1, 10005)); @@ -142,6 +142,7 @@ KThumb::KThumb(KUrl url, int width, int height, QObject * parent, const char *na QCryptographicHash context(QCryptographicHash::Sha1); context.addData((KFileItem(m_url,"text/plain", S_IFREG).timeString() + m_url.fileName()).toAscii().data()); m_thumbFile = KdenliveSettings::currenttmpfolder() + context.result().toHex() + ".thumb"; + kDebug() << "thumbfile=" << m_thumbFile; } KThumb::~KThumb()