]> git.sesse.net Git - kdenlive/blobdiff - src/lib/audio/audioEnvelope.cpp
audioEnvelope.cpp: check for division by zero
[kdenlive] / src / lib / audio / audioEnvelope.cpp
index a7c02a2fe619022b7fd57a02680c3a536d586b38..d47695933f27ae096db05c464ee61b875240018b 100644 (file)
 
 AudioEnvelope::AudioEnvelope(Mlt::Producer *producer, int offset, int length) :
     m_envelope(NULL),
-    m_producer(producer),
     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"));
     m_info = new AudioInfo(m_producer);
 
     Q_ASSERT(m_offset >= 0);
@@ -40,6 +44,7 @@ AudioEnvelope::~AudioEnvelope()
         delete[] m_envelope;
     }
     delete m_info;
+    delete m_producer;
 }
 
 
@@ -179,6 +184,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();