}
if (xml.hasAttribute("cutzones")) {
- QStringList cuts = xml.attribute("cutzones").split(";", QString::SkipEmptyParts);
+ QStringList cuts = xml.attribute("cutzones").split(';', QString::SkipEmptyParts);
for (int i = 0; i < cuts.count(); i++) {
QString z = cuts.at(i);
addCutZone(z.section('-', 0, 0).toInt(), z.section('-', 1, 1).toInt(), z.section('-', 2, 2));
}
// 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++) {
return prod;
}
+
Mlt::Producer *DocClipBase::getProducer(int track)
{
QMutexLocker locker(&m_producerMutex);