]> git.sesse.net Git - kdenlive/blobdiff - src/docclipbase.cpp
* Allow to edit transparent background for images in group properties
[kdenlive] / src / docclipbase.cpp
index df2a4ec9ac108583ac41722501234acdf07dd51e..a299a57d2f27af47e2835224aca60329cafc5d84 100644 (file)
@@ -31,6 +31,7 @@
 #include "slideshowclip.h"
 
 #include <KIO/NetAccess>
+#include <KStandardDirs>
 #include <KDebug>
 
 #include <QCryptographicHash>
@@ -52,7 +53,8 @@ DocClipBase::DocClipBase(ClipManager *clipManager, QDomElement xml, const QStrin
         m_audioThumbCreated(false),
         m_id(id),
         m_placeHolder(xml.hasAttribute("placeholder")),
-        m_properties()
+        m_properties(),
+        m_abortProxy(false)
 {
     int type = xml.attribute("type").toInt();
     m_clipType = (CLIPTYPE) type;
@@ -656,7 +658,6 @@ const char *DocClipBase::producerProperty(const char *name) const
 void DocClipBase::slotRefreshProducer()
 {
     if (m_baseTrackProducers.count() == 0) return;
-    kDebug() << "////////////   REFRESH CLIP !!!!!!!!!!!!!!!!";
     if (m_clipType == SLIDESHOW) {
         /*Mlt::Producer producer(*(m_clipProducer->profile()), getProperty("resource").toUtf8().data());
         delete m_clipProducer;
@@ -1080,18 +1081,19 @@ bool DocClipBase::hasAudioCodec(const QString &codec) const
     return prod->get(property) == codec;
 }
 
-void DocClipBase::generateProxy(KUrl proxyFolder)
+void DocClipBase::generateProxy(KUrl proxyFolder, QString params)
 {
     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 path = proxyFolder.path(KUrl::AddTrailingSlash) + "proxy/" + m_properties.value("file_hash") + ".avi";
+    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);
@@ -1103,10 +1105,39 @@ void DocClipBase::generateProxy(KUrl proxyFolder)
 
 void DocClipBase::slotGenerateProxy(QStringList parameters)
 {
-    int result = QProcess::execute("ffmpeg", parameters);
+    QProcess myProcess;
+    myProcess.start("ffmpeg", parameters);
+    myProcess.waitForStarted();
+    int result = -1;
+    while (myProcess.state() != QProcess::NotRunning) {
+        // building proxy file
+        if (m_abortProxy) {
+            QString path = getProperty("proxy");
+            myProcess.close();
+            myProcess.waitForFinished();
+            QFile::remove(path);
+            m_abortProxy = false;
+            result = 1;
+        }
+        myProcess.waitForFinished(500);
+    }
+    myProcess.waitForFinished();
+    if (result == -1) result = myProcess.exitStatus();
     if (result == 0) emit proxyReady(m_id, true);
     else {
-        resetProducerProperty("proxy");
+        clearProperty("proxy");
+        emit proxyReady(m_id, false);
+    }
+}
+
+void DocClipBase::abortProxy()
+{
+    if (m_proxyThread.isRunning()) {
+        // Proxy is being created, abort
+        m_abortProxy = true;
+    }
+    else {
+        clearProperty("proxy");
         emit proxyReady(m_id, false);
     }
 }