if (!m_properties.contains("name")) m_properties.insert("name", url.fileName());
m_thumbProd = new KThumb(clipManager, url, m_id, m_properties.value("file_hash"));
- if (m_clipType & (AV | AUDIO | PLAYLIST)) getAudioThumbs();
+
+ // Setup timer to trigger audio thumbs creation
+ m_audioTimer.setSingleShot(true);
+ m_audioTimer.setInterval(800);
+ connect(&m_audioTimer, SIGNAL(timeout()), m_thumbProd, SLOT(slotCreateAudioThumbs()));
+
}
DocClipBase::~DocClipBase()
{
+ m_audioTimer.stop();
delete m_thumbProd;
+ m_thumbProd = NULL;
qDeleteAll(m_toDeleteProducers);
m_toDeleteProducers.clear();
qDeleteAll(m_baseTrackProducers);
}
+bool DocClipBase::hasAudioThumb() const
+{
+ if (m_clipType == AUDIO || m_clipType == AV || m_clipType == PLAYLIST) return true;
+ return false;
+}
+
void DocClipBase::slotClearAudioCache()
{
m_audioFrameCache.clear();
}
// virtual
-QDomElement DocClipBase::toXML() const
+QDomElement DocClipBase::toXML(bool hideTemporaryProperties) const
{
QDomDocument doc;
QDomElement clip = doc.createElement("producer");
QMapIterator<QString, QString> i(m_properties);
while (i.hasNext()) {
i.next();
+ if (hideTemporaryProperties && i.key().startsWith("_")) continue;
if (!i.value().isEmpty()) clip.setAttribute(i.key(), i.value());
}
doc.appendChild(clip);
{
if (m_thumbProd) m_thumbProd->clearProducer();
- if (numReferences() > 0) {
+ if (numReferences() > 0 && (!m_baseTrackProducers.isEmpty() || m_videoOnlyProducer || !m_audioTrackProducers.isEmpty())) {
// Clip is used in timeline, delay producers deletion
if (m_videoOnlyProducer) m_toDeleteProducers.append(m_videoOnlyProducer);
for (int i = 0; i < m_baseTrackProducers.count(); i++) {
}
}*/
- qDeleteAll(m_toDeleteProducers);
- m_toDeleteProducers.clear();
- m_replaceMutex.unlock();
+ if (!isClean()) {
+ qDeleteAll(m_toDeleteProducers);
+ m_toDeleteProducers.clear();
+ m_replaceMutex.unlock();
+ }
}
bool DocClipBase::isClean() const
m_thumbProd->setProducer(producer);
}
else m_thumbProd->setProducer(producer);
+ getAudioThumbs();
}
bool updated = false;
if (id.contains('_')) {
return prod;
}
+
Mlt::Producer *DocClipBase::getProducer(int track)
{
QMutexLocker locker(&m_producerMutex);
if (m_audioThumbCreated) {
return false;
}
- QTimer::singleShot(800, m_thumbProd, SLOT(slotCreateAudioThumbs()));
+ m_audioTimer.start();
return true;
}