Commit d99246be authored by Jean-Baptiste Mardelle's avatar Jean-Baptiste Mardelle
Browse files

Fix rendering when using proxies with speed effect:

http://kdenlive.org/mantis/view.php?id=2103

svn path=/trunk/kdenlive/; revision=5555
parent 193e14dd
......@@ -241,6 +241,19 @@ QString EffectsList::property(QDomElement effect, const QString &name)
return QString();
}
// static
void EffectsList::removeProperty(QDomElement effect, const QString &name)
{
QDomNodeList params = effect.elementsByTagName("property");
for (int i = 0; i < params.count(); i++) {
QDomElement e = params.item(i).toElement();
if (e.attribute("name") == name) {
effect.removeChild(params.item(i));
break;
}
}
}
void EffectsList::append(QDomElement e)
{
m_baseElement.appendChild(importNode(e, true));
......
......@@ -72,8 +72,12 @@ public:
static bool hasGeometryKeyFrames(QDomElement effect);
static void setParameter(QDomElement effect, const QString &name, const QString &value);
static QString parameter(QDomElement effect, const QString &name);
/** @brief Change the value of a 'property' element from the effect node. */
static void setProperty(QDomElement effect, const QString &name, const QString &value);
/** @brief Get the value of a 'property' element from the effect node. */
static QString property(QDomElement effect, const QString &name);
/** @brief Delete a 'property' element from the effect node. */
static void removeProperty(QDomElement effect, const QString &name);
void clearList();
private:
......
......@@ -3821,18 +3821,48 @@ void MainWindow::slotPrepareRendering(bool scriptExport, bool zoneOnly, const QS
// replace proxy clips with originals
QMap <QString, QString> proxies = m_projectList->getProxies();
QMapIterator<QString, QString> i(proxies);
QDomNodeList producers = doc.elementsByTagName("producer");
QString producerResource;
QString suffix;
for (uint n = 0; n < producers.length(); n++) {
QDomElement e = producers.item(n).toElement();
producerResource = EffectsList::property(e, "resource");
if (producerResource.contains('?')) {
suffix = "?" + producerResource.section('?', 1);
producerResource = producerResource.section('?', 0, 0);
}
else suffix.clear();
if (!producerResource.isEmpty()) {
if (proxies.contains(producerResource)) {
EffectsList::setProperty(e, "resource", proxies.value(producerResource) + suffix);
// We need to delete the "aspect_ratio" property because proxy clips
// sometimes have different ratio than original clips
EffectsList::removeProperty(e, "aspect_ratio");
}
else if (!root.isEmpty() && producerResource.startsWith(root) && proxies.contains(producerResource.remove(0, root.count() + 1))) {
EffectsList::setProperty(e, "resource", proxies.value(producerResource.remove(0, root.count() + 1)) + suffix);
// We need to delete the "aspect_ratio" property because proxy clips
// sometimes have different ratio than original clips
EffectsList::removeProperty(e, "aspect_ratio");
}
}
}
/*QMapIterator<QString, QString> i(proxies);
while (i.hasNext()) {
i.next();
// Replace all keys with their values (proxy path with original path)
QString key = i.key();
playlistContent.replace(key, i.value());
if (!root.isEmpty() && key.startsWith(root)) {
// in case ther resource path in MLT playlist is relative
// in case the resource path in MLT playlist is relative
key.remove(0, root.count() + 1);
playlistContent.replace(key, i.value());
}
}
}*/
playlistContent = doc.toString();
}
// Do save scenelist
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment