]> git.sesse.net Git - kdenlive/commitdiff
fix signal/slots for QVector<int16_t>
authorMarco Gittler <marco@gitma.de>
Wed, 24 Nov 2010 09:46:47 +0000 (09:46 +0000)
committerMarco Gittler <marco@gitma.de>
Wed, 24 Nov 2010 09:46:47 +0000 (09:46 +0000)
used now for audiosignal.cpp but looks a bit slower (so only commented
out first)

svn path=/trunk/kdenlive/; revision=5117

src/audiosignal.cpp
src/audiosignal.h
src/mainwindow.cpp
src/renderer.cpp

index e277a9a36aa23aa810fcf074f228057ceb87b3f5..edf17702898e4e8eeb737a6117da08304a17090c 100644 (file)
@@ -50,6 +50,21 @@ AudioSignal::AudioSignal(QWidget *parent): QWidget(parent)
 }
 
 
+void AudioSignal::slotReceiveAudio(const QVector<int16_t>& data, int freq ,int num_channels ,int samples){
+
+       int num_samples = samples > 200 ? 200 : samples;
+
+
+    QByteArray channels;
+    for (int i = 0; i < num_channels; i++) {
+        long val = 0;
+        for (int s = 0; s < num_samples; s ++) {
+            val += abs(data[i+s*num_channels] / 128);
+        }
+        channels.append(val / num_samples);
+    }
+       showAudio(channels);
+}
 void AudioSignal::showAudio(const QByteArray arr)
 {
     channels = arr;
index f216bdf1da05de5216f38f8c59c60f929dacc22b..5a2680a7d540b81326ae89ee6dae99ab11328007 100644 (file)
@@ -39,6 +39,7 @@ protected:
     void paintEvent(QPaintEvent*);
 public slots:
     void showAudio(const QByteArray);
+    void slotReceiveAudio(const QVector<int16_t>&,int,int,int);
 private slots:
   void slotSwitchAudioMonitoring(bool isOn);
 signals:
index 822097c91b2544ae6d8a06b3e49e28276718a802..eb4a2f315158b42a1cfe84c11a3dae678afa7aa8 100644 (file)
 static const char version[] = VERSION;
 
 static const int ID_TIMELINE_POS = 0;
-
 namespace Mlt
 {
 class Producer;
 };
 
+Q_DECLARE_METATYPE(QVector<int16_t>)
+
 EffectsList MainWindow::videoEffects;
 EffectsList MainWindow::audioEffects;
 EffectsList MainWindow::customEffects;
@@ -134,7 +135,7 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString &
     m_findActivated(false),
     m_stopmotion(NULL)
 {
-
+       qRegisterMetaType<QVector<int16_t> > ();
     // Create DBus interface
     new MainWindowAdaptor(this);
     QDBusConnection dbus = QDBusConnection::sessionBus();
@@ -278,12 +279,12 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString &
     m_audiosignalDock->setWidget(m_audiosignal);
     addDockWidget(Qt::TopDockWidgetArea, m_audiosignalDock);
     connect(m_audiosignal, SIGNAL(updateAudioMonitoring()), m_monitorManager, SLOT(slotUpdateAudioMonitoring()));
-    if (m_projectMonitor) {
+    /*if (m_projectMonitor) {
         connect(m_projectMonitor->render, SIGNAL(showAudioSignal(const QByteArray&)), m_audiosignal, SLOT(showAudio(const QByteArray&)));
     }
     if (m_clipMonitor) {
         connect(m_clipMonitor->render, SIGNAL(showAudioSignal(const QByteArray&)), m_audiosignal, SLOT(showAudio(const QByteArray&)));
-    }
+    }*/
 
     m_audioSpectrum = new AudioSpectrum(m_projectMonitor, m_clipMonitor);
     m_audioSpectrumDock = new QDockWidget(i18n("AudioSpectrum"), this);
@@ -297,11 +298,15 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString &
                 m_audioSpectrum, SLOT(slotReceiveAudio(const QVector<int16_t>&,const int&,const int&,const int&)));
         b &= connect(m_projectMonitor->render, SIGNAL(showAudioSignal(const QByteArray&)),
                      m_audioSpectrum, SLOT(slotReceiveAudioTemp(const QByteArray&)));
+        connect(m_projectMonitor->render, SIGNAL(audioSamplesSignal(const QVector<int16_t>&,const int&,const int&, const int&)),
+                     m_audiosignal, SLOT(slotReceiveAudio(const QVector<int16_t>&,const int&,const int&,const int&)));
     }
     if (m_clipMonitor) {
         qDebug() << "clip monitor connected";
         b &= connect(m_clipMonitor->render, SIGNAL(audioSamplesSignal(const QVector<int16_t>&,int,int,int)),
                 m_audioSpectrum, SLOT(slotReceiveAudio(const QVector<int16_t>&,int,int,int)));
+        b &= connect(m_clipMonitor->render, SIGNAL(audioSamplesSignal(const QVector<int16_t>&,int,int,int)),
+                m_audiosignal, SLOT(slotReceiveAudio(const QVector<int16_t>&,int,int,int)));
     }
     Q_ASSERT(b);
 
index d075f765a9784a9cb7a8aa6db11654a51d4a03d9..c4d1cbd28046616ca64daf873b4484f44eb8904f 100644 (file)
@@ -49,7 +49,6 @@
 
 #include <QDebug>
 
-
 static void kdenlive_callback(void* /*ptr*/, int level, const char* fmt, va_list vl)
 {
     if (level > MLT_LOG_ERROR) return;
@@ -1476,11 +1475,11 @@ void Render::showAudio(Mlt::Frame& frame)
 
     QVector<int16_t> sampleVector(samples);
     memcpy(sampleVector.data(), data, samples*sizeof(int16_t));
-    qDebug() << samples << " samples. Freq=" << freq << ", channels=" << num_channels;
+    //qDebug() << samples << " samples. Freq=" << freq << ", channels=" << num_channels;
 
     if (!data)
         return;
-    int num_samples = samples > 200 ? 200 : samples;
+    /*int num_samples = samples > 200 ? 200 : samples;
 
 
     QByteArray channels;
@@ -1490,16 +1489,15 @@ void Render::showAudio(Mlt::Frame& frame)
             val += abs(data[i+s*num_channels] / 128);
         }
         channels.append(val / num_samples);
-    }
+    }*/
 
-    qDebug() << channels.size() <<  ": size.";
     if (samples > 0) {
-        emit showAudioSignal(channels);
-        qDebug() << "Emitting audioSamplesSignal with " << samples << " samples.";
+        //emit showAudioSignal(channels);
+        //qDebug() << "Emitting audioSamplesSignal with " << samples << " samples.";
         emit audioSamplesSignal(sampleVector, freq, num_channels, samples);
     } else {
-        emit showAudioSignal(QByteArray());
-        qDebug() << "Not emitting audioSamplesSignal.";
+        //emit showAudioSignal(QByteArray());
+        //qDebug() << "Not emitting audioSamplesSignal.";
     }
 }