X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fdocclipbase.cpp;h=9e581942067f82e7311b64653ab5b4b0c5bda40e;hb=f3bb9f5eaab84ffe7bcf7716bb9f124aafe36e70;hp=b7fa0d20860e15dd894591d295d87bb91ee9d72b;hpb=d0835d9b0cb148d5d87c1e9037ecb8ae15c93f6f;p=kdenlive diff --git a/src/docclipbase.cpp b/src/docclipbase.cpp index b7fa0d20..9e581942 100644 --- a/src/docclipbase.cpp +++ b/src/docclipbase.cpp @@ -98,6 +98,8 @@ DocClipBase::~DocClipBase() m_audioTimer->stop(); delete m_audioTimer; } + qDeleteAll(m_toDeleteProducers); + m_toDeleteProducers.clear(); qDeleteAll(m_baseTrackProducers); m_baseTrackProducers.clear(); qDeleteAll(m_audioTrackProducers); @@ -163,11 +165,6 @@ const QString &DocClipBase::getId() const return m_id; } -void DocClipBase::setId(const QString &newId) -{ - m_id = newId; -} - const CLIPTYPE & DocClipBase::clipType() const { return m_clipType; @@ -416,9 +413,15 @@ void DocClipBase::clearThumbProducer() if (m_thumbProd) m_thumbProd->clearProducer(); } +void DocClipBase::reloadThumbProducer() +{ + if (m_thumbProd && !m_thumbProd->hasProducer()) + m_thumbProd->setProducer(getProducer()); +} + void DocClipBase::deleteProducers() { - m_thumbProd->clearProducer(); + if (m_thumbProd) m_thumbProd->clearProducer(); if (numReferences() > 0) { // Clip is used in timeline, delay producers deletion @@ -653,7 +656,12 @@ Mlt::Producer *DocClipBase::getCloneProducer() prod = cloneProducer(source); } if (prod) { - adjustProducerProperties(prod, getId() + "_monitor", false, false); + adjustProducerProperties(prod, getId() + "_", false, false); + if (!m_properties.contains("proxy_out")) { + // Adjust length in case... + if (m_properties.contains("duration")) prod->set("length", m_properties.value("duration").toInt()); + if (m_properties.contains("out"))prod->set("out", m_properties.value("out").toInt()); + } } return prod; } @@ -686,8 +694,9 @@ Mlt::Producer *DocClipBase::getProducer(int track) // Could not find a valid producer for that clip, check in return NULL; } - m_baseTrackProducers[track] = cloneProducer(m_baseTrackProducers.at(i)); - adjustProducerProperties(m_baseTrackProducers.at(track), QString(getId() + '_' + QString::number(track)), false, false); + Mlt::Producer *prod = cloneProducer(m_baseTrackProducers.at(i)); + adjustProducerProperties(prod, QString(getId() + '_' + QString::number(track)), false, false); + m_baseTrackProducers[track] = prod; } return m_baseTrackProducers.at(track); } @@ -696,6 +705,7 @@ Mlt::Producer *DocClipBase::getProducer(int track) Mlt::Producer *DocClipBase::cloneProducer(Mlt::Producer *source) { Mlt::Producer *result = NULL; + QString invalidClip = source->get("markup"); QString url = QString::fromUtf8(source->get("resource")); if (KIO::NetAccess::exists(KUrl(url), KIO::NetAccess::SourceSide, 0)) { result = new Mlt::Producer(*(source->profile()), url.toUtf8().constData()); @@ -1206,10 +1216,10 @@ bool DocClipBase::hasAudioCodec(const QString &codec) const } -void DocClipBase::slotExtractImage(int frame, int frame2) +void DocClipBase::slotExtractImage(QList frames) { if (m_thumbProd == NULL) return; - m_thumbProd->extractImage(frame, frame2); + m_thumbProd->extractImage(frames); } QPixmap DocClipBase::extractImage(int frame, int width, int height)