]> git.sesse.net Git - kdenlive/blobdiff - src/docclipbase.cpp
First work on rotoscoping GUI
[kdenlive] / src / docclipbase.cpp
index 485fe907627cd4aabd8dd53992e4f2504d6c0a3a..b0a5ed18392618c321d5492aabd9a0654c72382d 100644 (file)
 #include "slideshowclip.h"
 
 #include <KIO/NetAccess>
+#include <KStandardDirs>
 #include <KDebug>
 
 #include <QCryptographicHash>
+#include <QtConcurrentRun>
 
 #include <cstdio>
 
@@ -1079,3 +1081,36 @@ bool DocClipBase::hasAudioCodec(const QString &codec) const
     return prod->get(property) == codec;
 }
 
+void DocClipBase::generateProxy(KUrl proxyFolder)
+{
+    if (m_proxyThread.isRunning()) return;
+    QStringList parameters;
+    parameters << "-i" << m_properties.value("resource");
+    QString params = KdenliveSettings::proxyparams().simplified();
+    foreach(QString s, params.split(' '))
+    parameters << s;
+    // Make sure we don't block when proxy file already exists
+    parameters << "-y";
+    if (m_properties.value("file_hash").isEmpty()) getFileHash(m_properties.value("resource"));
+    QString proxydir=proxyFolder.path( KUrl::AddTrailingSlash) + "proxy/";
+    KStandardDirs::makeDir(proxydir);
+    QString path = proxydir + m_properties.value("file_hash") + ".avi";
+    setProperty("proxy", path.toUtf8().data());
+    if (QFile::exists(path)) {
+        emit proxyReady(m_id, true);
+        return;
+    }
+    parameters << path;
+    m_proxyThread = QtConcurrent::run(this, &DocClipBase::slotGenerateProxy, parameters);
+}
+
+void DocClipBase::slotGenerateProxy(QStringList parameters)
+{
+    int result = QProcess::execute("ffmpeg", parameters);
+    if (result == 0) emit proxyReady(m_id, true);
+    else {
+        resetProducerProperty("proxy");
+        emit proxyReady(m_id, false);
+    }
+}
+