]> git.sesse.net Git - kdenlive/blobdiff - src/docclipbase.cpp
* Allow to edit transparent background for images in group properties
[kdenlive] / src / docclipbase.cpp
index 7c2c31f80ed6cfcfea398ede2b0682b69bc8ac1a..a299a57d2f27af47e2835224aca60329cafc5d84 100644 (file)
@@ -31,7 +31,7 @@
 #include "slideshowclip.h"
 
 #include <KIO/NetAccess>
-#include <KStandarddirs>
+#include <KStandardDirs>
 #include <KDebug>
 
 #include <QCryptographicHash>
@@ -53,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;
@@ -657,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;
@@ -1081,12 +1081,11 @@ 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
@@ -1106,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);
     }
 }