]> git.sesse.net Git - kdenlive/commitdiff
audio thumb drawn
authorMarco Gittler <marco@gitma.de>
Sun, 24 Feb 2008 20:34:42 +0000 (20:34 +0000)
committerMarco Gittler <marco@gitma.de>
Sun, 24 Feb 2008 20:34:42 +0000 (20:34 +0000)
svn path=/branches/KDE4/; revision=1922

src/clipitem.cpp
src/clipitem.h
src/docclipbase.cpp
src/docclipbase.h
src/kthumb.cpp

index 0f78a45abcd91754503712c5a30dd06d7981965e..84ddcd48c7ab7aace0afe7a79d145052917991c3 100644 (file)
@@ -62,7 +62,8 @@ ClipItem::ClipItem(DocClipBase *clip, int track, int startpos, const QRectF & re
   if (m_clipType == VIDEO || m_clipType == AV) {
     m_hasThumbs = true;
     connect(this, SIGNAL(getThumb(int, int)), clip->thumbProducer(), SLOT(extractImage(int, int)));
-    connect(clip->thumbProducer(), SIGNAL(thumbReady(int, QPixmap)), this, SLOT(slotThumbReady(int, QPixmap)));
+    connect(clip->thumbProducer(), SIGNAL(thumbReady(int, QPixmap)), this, SLOT(slotThumbReady(int, QPixmap))); 
+    connect(clip, SIGNAL (gotAudioData()), this, SLOT (slotGotAudioData()));
     QTimer::singleShot(300, this, SLOT(slotFetchThumbs()));
 
     startThumbTimer = new QTimer(this);
@@ -112,6 +113,10 @@ void ClipItem::slotThumbReady(int frame, QPixmap pix)
   update();
 }
 
+void ClipItem::slotGotAudioData(){
+  update();
+}
+
 int ClipItem::type () const
 {
   return 70000;
@@ -238,11 +243,21 @@ int ClipItem::endPos()
                                }
                        }
         }*/
+               QPen audiopen;
+               audiopen.setWidth(0);
+               painter->setPen(audiopen);
                QRectF re=path.boundingRect();
+
+               QMap<int,QPainterPath > channelPaths;
+               QMap<int,QPainterPath > negativeChannelPaths;
+               for (int i=0;i<channels;i++){
+                       channelPaths[i].moveTo(re.x(),re.y()+re.height()*i/channels+ (re.height()/channels)/2);
+                       negativeChannelPaths[i].moveTo(re.x(),re.y()+re.height()*i/channels+ (re.height()/channels)/2);
+               }
+                
                for (int samples=re.x();samples<re.x()+re.width();samples++){
                        double frame=(double)(samples-re.x())/pixelForOneFrame;
                        int sample=(frame-(int)(frame))*20 ;// AUDIO_FRAME_SIZE
-                       
                        if (frame<0 || sample< 0 || sample>19 )
                                continue;
                        QMap<int,QByteArray> frame_channel_data=baseClip()->audioFrameChache[(int)frame];
@@ -250,12 +265,17 @@ int ClipItem::endPos()
                        for (int channel=0;channel<channels && frame_channel_data[channel].size()> 0;channel++){
                                
                                int y=re.y()+re.height()*channel/channels+ (re.height()/channels)/2;
-                               painter->drawLine(samples , y+frame_channel_data[channel][sample],samples+1, y+frame_channel_data[channel][sample] );
-                               //painter->drawLine(samples , y+samples-10,samples+1, y+samples-10 );
-                               
+                               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 i=0;i<channels;i++){
+                       //painter->drawPath(channelPaths[i].united(negativeChannelPaths[i]));//or singleif looks better
+                       painter->drawPath(channelPaths[i]);
+               }
         }
+        
+        
     // draw start / end fades
     double scale = br.width() / m_cropDuration;
     QBrush fades;
index e6c73855cd2565d821741e649939b5bef74ed626..46252e108261cf7903a66a7d6ffdef13de79a2f4 100644 (file)
@@ -117,6 +117,7 @@ class ClipItem : public QObject, public QGraphicsRectItem
     void slotFetchThumbs();
     void slotGetStartThumb();
     void slotGetEndThumb();
+    void slotGotAudioData();
 
   signals:
     void getThumb(int, int);
index 6e08b16ea051dce11072eab2bc5afb22ef567192..6d00f9afda869e3e64f3a2e48ce0471038d60626 100644 (file)
@@ -241,6 +241,7 @@ void DocClipBase::updateAudioThumbnail(QMap<int,QMap<int,QByteArray> > data)
 {
     audioFrameChache = data;
     m_audioThumbCreated = true;
+    emit gotAudioData();
 }
 
 QList < GenTime > DocClipBase::snapMarkers() const
@@ -406,7 +407,7 @@ QString DocClipBase::getTypeName(CLIPTYPE type)
 }
 
 void DocClipBase::slotGetAudioThumbs(){
-       kDebug() << "getting audio data";
+       
        if (m_audioThumbCreated){
                if (m_audioTimer!=NULL)
                        m_audioTimer->stop();
@@ -414,7 +415,7 @@ void DocClipBase::slotGetAudioThumbs(){
                if (m_audioTimer!=NULL)
                        m_audioTimer->start(2000);
                double lengthInFrames=duration().frames(/*framesPerSecond()*/25);
-               m_thumbProd->getAudioThumbs(fileURL(), 1, 0, lengthInFrames /*must be number of frames*/, 20);  
+               m_thumbProd->getAudioThumbs(fileURL(), 2, 0, lengthInFrames /*must be number of frames*/, 20);  
        }
 }
 
index 17c56579c22d59aeb6fb57c8e8462b64442932d1..2de28b88e6a8a907ab0c5e6ad77b0a4ec8de84cb 100644 (file)
@@ -238,6 +238,7 @@ class DocClipBase:public QObject {
        uint getProjectThumbFrame() const;
        signals:
                void getAudioThumbs();
+       void gotAudioData();
 };
 
 #endif
index 9657399170c2ba4c3a9b7de3ca6e34ad3b8a3287..e1bed87d9e60cccbb53bb091bea5be009e29ec31 100644 (file)
@@ -89,8 +89,6 @@ void MyThread::init(KUrl url, QString target, double frame, double frameLength,
                int val = 0;
                kDebug() << "for " << m_frame << " " << m_frameLength << " " << m_producer.is_valid();
                for (int z=(int) m_frame;z<(int) (m_frame+m_frameLength) && m_producer.is_valid();z++){
-                       kDebug() << "starting audithumb for frame " << z;
-                       
                        if (stop_me) break;
                        val=(int)((z-m_frame)/(m_frame+m_frameLength)*100.0);
                        if (last_val!=val & val > 1){
@@ -111,7 +109,7 @@ void MyThread::init(KUrl url, QString target, double frame, double frameLength,
                                                QByteArray m_array;
                                                m_array.resize(m_arrayWidth);
                                                for (uint i = 0; i < m_array.size(); i++){
-                                                       m_array[i] =  qAbs((*( m_pcm + c + i * m_samples / m_array.size() ))>>8);
+                                                       m_array[i] =  ( (*( m_pcm + c + i * m_samples / m_array.size() )) >> 9 ) +127/2 ;
                                                }
                                                f.write(m_array);
                                                
@@ -330,9 +328,7 @@ void KThumb::getAudioThumbs(KUrl url, int channel, double frame, double frameLen
        //FIXME: Hardcoded!!! 
        int m_frequency = 48000;
        int m_channels = channel;
-
        m_thumbFile="/tmp/testfile";
-       /*FIXME WHY crash here ??????
        if (m_url != url) {
                m_url = url;
                QCryptographicHash context(QCryptographicHash::Sha1);
@@ -340,7 +336,7 @@ void KThumb::getAudioThumbs(KUrl url, int channel, double frame, double frameLen
                
                m_thumbFile = KdenliveSettings::currenttmpfolder() + context.result().toHex() + ".thumb";
                
-       }*/
+       }
        
        QFile f(m_thumbFile);
        if (f.open( QIODevice::ReadOnly )) {
@@ -363,10 +359,10 @@ void KThumb::getAudioThumbs(KUrl url, int channel, double frame, double frameLen
                emit audioThumbReady(storeIn);
        }
        else {
-               /*if (thumbProducer.isRunning()) return;
+               if (thumbProducer.isRunning()) return;
                thumbProducer.init(m_url, m_thumbFile, frame, frameLength, m_frequency, m_channels, arrayWidth);
                thumbProducer.start(QThread::LowestPriority );
-               */
+               
        }
 }