]> git.sesse.net Git - kdenlive/commitdiff
enables most parts of audio thumb
authorMarco Gittler <marco@gitma.de>
Sat, 23 Feb 2008 19:29:22 +0000 (19:29 +0000)
committerMarco Gittler <marco@gitma.de>
Sat, 23 Feb 2008 19:29:22 +0000 (19:29 +0000)
svn path=/branches/KDE4/; revision=1913

src/kthumb.cpp
src/kthumb.h

index 663a0eb24b5896881598376be1a4107f6cae56bb..f778a853c1a7cd73e577b96db4e819236ba251c5 100644 (file)
 
 #include <qxml.h>
 #include <qimage.h>
-#include <qlabel.h>
-#include <qthread.h>
-#include <qapplication.h>
 
+#include <QThread>
+#include <QApplication>
+#include <QCryptographicHash>
 
 
 #include "renderer.h"
 #include "kthumb.h"
 #include "kdenlivesettings.h"
 
-/*
-    void MyThread::init(KUrl url, QString target, double frame, double frameLength, int frequency, int channels, int arrayWidth)
+void MyThread::init(KUrl url, QString target, double frame, double frameLength, int frequency, int channels, int arrayWidth)
     {
        stop_me = false;
        m_isWorking = false;
-       f.setName(target);
+       f.setFileName(target);
        m_url = url;
        m_frame = frame;
        m_frameLength = frameLength;
 
     void MyThread::run()
     {
-               if (!f.open( IO_WriteOnly )) {
-                       kdDebug()<<"++++++++  ERROR WRITING TO FILE: "<<f.name()<<endl;
-                       kdDebug()<<"++++++++  DISABLING AUDIO THUMBS"<<endl;
-                       KdenliveSettings::setAudiothumbnails(false);
+                if (!f.open( QIODevice::WriteOnly )) {
+                       kDebug()<<"++++++++  ERROR WRITING TO FILE: "<<f.fileName()<<endl;
+                       kDebug()<<"++++++++  DISABLING AUDIO THUMBS"<<endl;
+                       //TODO KdenliveSettings::setAudiothumbnails(false);
                        return;
                }
                m_isWorking = true;
-               char *tmp = KRender::decodedString(m_url.path());
-               Mlt::Producer m_producer(tmp);
-               delete tmp;
+               Mlt::Profile prof((char*) KdenliveSettings::current_profile().data());
+               Mlt::Producer m_producer(prof, m_url.path().toAscii().data());
+               
 
-               if (KdenliveSettings::normaliseaudiothumbs()) {
+               /*TODO if (KdenliveSettings::normaliseaudiothumbs()) {
                    Mlt::Filter m_convert("volume");
                    m_convert.set("gain", "normalise");
                    m_producer.attach(m_convert);
-               }
+               }*/
 
-               if (qApp->mainWidget()) 
+               /*TODO if (qApp->mainWidget()) 
                    QApplication::postEvent(qApp->mainWidget(), new ProgressEvent(-1, 10005));
-
+       */
                int last_val = 0;
                int val = 0;
                for (int z=(int) m_frame;z<(int) (m_frame+m_frameLength) && m_producer.is_valid();z++){
                        if (stop_me) break;
                        val=(int)((z-m_frame)/(m_frame+m_frameLength)*100.0);
                        if (last_val!=val & val > 1){
-                               QApplication::postEvent(qApp->mainWidget(), new ProgressEvent(val, 10005));
+                               //TODO QApplication::postEvent(qApp->mainWidget(), new ProgressEvent(val, 10005));
                                last_val=val;
                        }
                                m_producer.seek( z );
                                        int16_t* m_pcm = mlt_frame->get_audio(m_audioFormat, m_frequency, m_channels, m_samples ); 
 
                                        for (int c=0;c< m_channels;c++){
-                                               QByteArray m_array(m_arrayWidth);
+                                               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] =  qAbs((*( m_pcm + c + i * m_samples / m_array.size() ))>>8);
                                                }
-                                               f.writeBlock(m_array);
+                                               f.write(m_array);
                                        }
                                } else{
-                                       f.writeBlock(QByteArray(m_arrayWidth));
+                                       f.write(QByteArray(m_arrayWidth,'\x00'));
                                }
                                if (mlt_frame)
                                        delete mlt_frame;
                m_isWorking = false;
                if (stop_me) {
                    f.remove();
-                   QApplication::postEvent(qApp->mainWidget(), new ProgressEvent(-1, 10005));
+                  //TODO  QApplication::postEvent(qApp->mainWidget(), new ProgressEvent(-1, 10005));
                }
-               else QApplication::postEvent(qApp->mainWidget(), new ProgressEvent(0, 10005));
+               //TODO else QApplication::postEvent(qApp->mainWidget(), new ProgressEvent(0, 10005));
     }
 
 
 #define _R(y,u,v) (0x2568*(y)                          + 0x3343*(u)) /0x2000
 #define _G(y,u,v) (0x2568*(y) - 0x0c92*(v) - 0x1a1e*(u)) /0x2000
 #define _B(y,u,v) (0x2568*(y) + 0x40cf*(v))                                          /0x2000
-*/
+
 KThumb::KThumb(KUrl url, int width, int height, QObject * parent, const char *name):QObject(parent), m_url(url), m_width(width), m_height(height)
 {
   kDebug()<<"+++++++++++  CREATING THMB PROD FOR: "<<url;
@@ -300,10 +300,10 @@ void KThumb::getThumbs(KUrl url, int startframe, int endframe, int width, int he
     if (m_frame) delete m_frame;
     emit thumbReady(endframe, image);
 }
-
+*/
 void KThumb::stopAudioThumbs()
 {
-       if (thumbProducer.running ()) thumbProducer.stop_me = true;
+       if (thumbProducer.isRunning ()) thumbProducer.stop_me = true;
 }
 
 
@@ -316,7 +316,7 @@ void KThumb::removeAudioThumb()
 }
 
 void KThumb::getAudioThumbs(KUrl url, int channel, double frame, double frameLength, int arrayWidth){
-       if ((thumbProducer.running () && thumbProducer.isWorking()) || channel == 0) {
+       if ((thumbProducer.isRunning () && thumbProducer.isWorking()) || channel == 0) {
            return;
        }
 
@@ -326,22 +326,25 @@ void KThumb::getAudioThumbs(KUrl url, int channel, double frame, double frameLen
        int m_channels = channel;
        if (m_url != url) {
                m_url = url;
-               KMD5 context ((KFileItem(m_url,"text/plain", S_IFREG).timeString() + m_url.fileName()).ascii());
-               m_thumbFile = KdenliveSettings::currenttmpfolder() + context.hexDigest().data() + ".thumb";
+               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";
        }
        QFile f(m_thumbFile);
-       if (f.open( IO_ReadOnly )) {
+       if (f.open( QIODevice::ReadOnly )) {
                QByteArray channelarray = f.readAll();
                f.close();
                if (channelarray.size() != arrayWidth*(frame+frameLength)*m_channels) {
-                       kdDebug()<<"--- BROKEN THUMB FOR: "<<m_url.filename()<<" ---------------------- "<<endl;
+                       kDebug()<<"--- BROKEN THUMB FOR: "<<m_url.fileName()<<" ---------------------- "<<endl;
                        f.remove();
                        return;
                }
                
                for (int z=(int) frame;z<(int) (frame+frameLength);z++) {
                        for (int c=0;c< m_channels;c++){
-                               QByteArray m_array(arrayWidth);
+                               QByteArray m_array;
+                               m_array.resize(arrayWidth);
                                for (int i = 0; i < arrayWidth; i++)
                                        m_array[i] = channelarray[z*arrayWidth*m_channels + c*arrayWidth + i];
                                storeIn[z][c] = m_array;
@@ -350,11 +353,11 @@ void KThumb::getAudioThumbs(KUrl url, int channel, double frame, double frameLen
                emit audioThumbReady(storeIn);
        }
        else {
-               if (thumbProducer.running()) return;
+               if (thumbProducer.isRunning()) return;
                thumbProducer.init(m_url, m_thumbFile, frame, frameLength, m_frequency, m_channels, arrayWidth);
                thumbProducer.start(QThread::LowestPriority );
        }
 }
-*/
+
 
 
index f249b071a9037f94425cb419449fcd92cb9c7a90..56ebd56016919f8966b64eca9a3b7c3b2fe31a8a 100644 (file)
@@ -45,7 +45,7 @@ namespace Mlt {
 };
 
 
-  /*  class MyThread : public QThread {
+  class MyThread : public QThread {
 
     public:
         virtual void run();
@@ -64,7 +64,7 @@ namespace Mlt {
        bool m_isWorking;
     };
 
-*/
+
 class KThumb:public QObject {
   Q_OBJECT public:
 
@@ -76,13 +76,13 @@ public slots:
        void extractImage( int frame, int frame2);
        static QPixmap getImage(KUrl url, int width, int height);
 /*     void getImage(KUrl url, int frame, int width, int height);
-       void getThumbs(KUrl url, int startframe, int endframe, int width, int height);
+       void getThumbs(KUrl url, int startframe, int endframe, int width, int height);*/
        void stopAudioThumbs();
        void removeAudioThumb();
        void getAudioThumbs(KUrl url, int channel, double frame, double frameLength, int arrayWidth);
-*/
+
 private:
-//     MyThread thumbProducer;
+       MyThread thumbProducer;
        KUrl m_url;
        QString m_thumbFile;
        int m_width;