From: Marco Gittler Date: Wed, 24 Nov 2010 09:46:47 +0000 (+0000) Subject: fix signal/slots for QVector X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=83471f30916e27fe2caa49080096aaf4572a75dd;p=kdenlive fix signal/slots for QVector used now for audiosignal.cpp but looks a bit slower (so only commented out first) svn path=/trunk/kdenlive/; revision=5117 --- diff --git a/src/audiosignal.cpp b/src/audiosignal.cpp index e277a9a3..edf17702 100644 --- a/src/audiosignal.cpp +++ b/src/audiosignal.cpp @@ -50,6 +50,21 @@ AudioSignal::AudioSignal(QWidget *parent): QWidget(parent) } +void AudioSignal::slotReceiveAudio(const QVector& 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; diff --git a/src/audiosignal.h b/src/audiosignal.h index f216bdf1..5a2680a7 100644 --- a/src/audiosignal.h +++ b/src/audiosignal.h @@ -39,6 +39,7 @@ protected: void paintEvent(QPaintEvent*); public slots: void showAudio(const QByteArray); + void slotReceiveAudio(const QVector&,int,int,int); private slots: void slotSwitchAudioMonitoring(bool isOn); signals: diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 822097c9..eb4a2f31 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -112,12 +112,13 @@ static const char version[] = VERSION; static const int ID_TIMELINE_POS = 0; - namespace Mlt { class Producer; }; +Q_DECLARE_METATYPE(QVector) + 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 > (); // 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&,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&,const int&,const int&, const int&)), + m_audiosignal, SLOT(slotReceiveAudio(const QVector&,const int&,const int&,const int&))); } if (m_clipMonitor) { qDebug() << "clip monitor connected"; b &= connect(m_clipMonitor->render, SIGNAL(audioSamplesSignal(const QVector&,int,int,int)), m_audioSpectrum, SLOT(slotReceiveAudio(const QVector&,int,int,int))); + b &= connect(m_clipMonitor->render, SIGNAL(audioSamplesSignal(const QVector&,int,int,int)), + m_audiosignal, SLOT(slotReceiveAudio(const QVector&,int,int,int))); } Q_ASSERT(b); diff --git a/src/renderer.cpp b/src/renderer.cpp index d075f765..c4d1cbd2 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -49,7 +49,6 @@ #include - 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 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."; } }