X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Flib%2Faudio%2FaudioEnvelope.cpp;h=e57335a353408ef0d97352657a065d51f6d670f0;hb=e0fa1332f109b6455207ea701da386b2fddddf09;hp=203806fc3a891601215cbb8af84c906a711006e4;hpb=be9c9dec39d5434a1788f041c3cf20b7c8fde21c;p=kdenlive diff --git a/src/lib/audio/audioEnvelope.cpp b/src/lib/audio/audioEnvelope.cpp index 203806fc..e57335a3 100644 --- a/src/lib/audio/audioEnvelope.cpp +++ b/src/lib/audio/audioEnvelope.cpp @@ -11,22 +11,31 @@ #include "audioEnvelope.h" #include "audioStreamInfo.h" +#include #include #include #include #include -AudioEnvelope::AudioEnvelope(Mlt::Producer *producer, int offset, int length) : +AudioEnvelope::AudioEnvelope(const QString &url, Mlt::Producer *producer, int offset, int length) : m_envelope(NULL), m_offset(offset), m_length(length), m_envelopeSize(producer->get_length()), m_envelopeMax(0), + m_envelopeMean(0), + m_envelopeStdDev(0), m_envelopeStdDevCalculated(false), m_envelopeIsNormalized(false) { // make a copy of the producer to avoid audio playback issues - m_producer = new Mlt::Producer(*(producer->profile()), producer->get("resource")); + QString path = QString::fromUtf8(producer->get("resource")); + if (path == "" || path == "" || path == "") + path = url; + m_producer = new Mlt::Producer(*(producer->profile()), path.toUtf8().constData()); + if (!m_producer || !m_producer->is_valid()) { + qDebug()<<"// Cannot create envelope for producer: "<= 0); @@ -89,7 +98,7 @@ void AudioEnvelope::loadEnvelope() int count = 0; m_producer->seek(m_offset); m_producer->set_speed(1.0); // This is necessary, otherwise we don't get any new frames in the 2nd run. - for (int i = 0; i < m_envelopeSize; i++) { + for (int i = 0; i < m_envelopeSize; ++i) { frame = m_producer->get_frame(i); position = mlt_frame_get_position(frame->get_frame()); @@ -134,7 +143,7 @@ int64_t AudioEnvelope::loadStdDev() } m_envelopeStdDev = 0; - for (int i = 0; i < m_envelopeSize; i++) { + for (int i = 0; i < m_envelopeSize; ++i) { m_envelopeStdDev += sqrt((m_envelope[i]-m_envelopeMean)*(m_envelope[i]-m_envelopeMean)/m_envelopeSize); } m_envelopeStdDevCalculated = true; @@ -153,7 +162,7 @@ void AudioEnvelope::normalizeEnvelope(bool clampTo0) m_envelopeMax = 0; int64_t newMean = 0; - for (int i = 0; i < m_envelopeSize; i++) { + for (int i = 0; i < m_envelopeSize; ++i) { m_envelope[i] -= m_envelopeMean; @@ -182,6 +191,10 @@ QImage AudioEnvelope::drawEnvelope() QImage img(m_envelopeSize, 400, QImage::Format_ARGB32); img.fill(qRgb(255,255,255)); + + if (m_envelopeMax == 0) + return img; + double fy; for (int x = 0; x < img.width(); x++) { fy = m_envelope[x]/double(m_envelopeMax) * img.height();