]> git.sesse.net Git - kdenlive/blobdiff - src/docclipbase.cpp
First step for implementation of proxy editing (for testing purpose only)
[kdenlive] / src / docclipbase.cpp
index 4dcf2cd5722b734d2f9b76a918a985ab6992a036..df2a4ec9ac108583ac41722501234acdf07dd51e 100644 (file)
@@ -34,6 +34,7 @@
 #include <KDebug>
 
 #include <QCryptographicHash>
+#include <QtConcurrentRun>
 
 #include <cstdio>
 
@@ -594,7 +595,7 @@ Mlt::Producer *DocClipBase::producer(int track)
             return NULL;
         }
         if (m_properties.contains("force_aspect_num") && m_properties.contains("force_aspect_den") && m_properties.contains("frame_size"))
-            m_baseTrackProducers[track]->set("force_aspect_raio", getPixelAspect(m_properties));
+            m_baseTrackProducers[track]->set("force_aspect_ratio", getPixelAspect(m_properties));
         if (m_properties.contains("force_fps")) m_baseTrackProducers[track]->set("force_fps", m_properties.value("force_fps").toDouble());
         if (m_properties.contains("force_progressive")) m_baseTrackProducers[track]->set("force_progressive", m_properties.value("force_progressive").toInt());
         if (m_properties.contains("force_tff")) m_baseTrackProducers[track]->set("force_tff", m_properties.value("force_tff").toInt());
@@ -602,10 +603,7 @@ Mlt::Producer *DocClipBase::producer(int track)
         if (m_properties.contains("video_index")) m_baseTrackProducers[track]->set("video_index", m_properties.value("video_index").toInt());
         if (m_properties.contains("audio_index")) m_baseTrackProducers[track]->set("audio_index", m_properties.value("audio_index").toInt());
         m_baseTrackProducers[track]->set("id", QString(getId() + '_' + QString::number(track)).toUtf8().data());
-        if (KdenliveSettings::dropbframes() && m_baseTrackProducers.at(i)->get("skip_loop_filter") && strcmp(m_baseTrackProducers.at(i)->get("skip_loop_filter"), "all") == 0) {
-            m_baseTrackProducers[track]->set("skip_loop_filter", "all");
-            m_baseTrackProducers[track]->set("skip_frame", "bidir");
-        }
+
         if (m_properties.contains("force_colorspace")) m_baseTrackProducers[track]->set("force_colorspace", m_properties.value("force_colorspace").toInt());
         if (m_properties.contains("full_luma")) m_baseTrackProducers[track]->set("set.force_full_luma", m_properties.value("full_luma").toInt());
     }
@@ -1082,3 +1080,34 @@ 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 path = proxyFolder.path(KUrl::AddTrailingSlash) + "proxy/" + 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);
+    }
+}
+