]> git.sesse.net Git - kdenlive/blobdiff - src/projectlist.cpp
sync with v0.9 branch
[kdenlive] / src / projectlist.cpp
index cd8dc2fbd8acd7c674b1f5d45155024244c26e61..ee1feaaf196f8c2264153d9b0ee1c00ea7a8d278 100644 (file)
@@ -2380,8 +2380,9 @@ void ProjectList::slotReplyGetFileProperties(const QString &clipId, Mlt::Produce
         return;
     }
     if (replace) toReload = clipId;
-    if (!toReload.isEmpty())
+    if (!toReload.isEmpty()) {
         emit clipNeedsReload(toReload);
+    }
 }
 
 bool ProjectList::adjustProjectProfileToItem(ProjectItem *item)
@@ -3008,10 +3009,11 @@ void ProjectList::slotTranscodeClipJob(const QString &condition, QString params,
     params = ui.extra_params->toPlainText().simplified();
     KdenliveSettings::setAdd_new_clip(ui.add_clip->isChecked());
     int index = 0;
-    foreach(const QString &id, ids) {
-        ProjectItem *item = getItemById(id);
+    i = ids.constBegin();
+    while (i != ids.constEnd()) {
+        ProjectItem *item = getItemById(i.key());
         if (!item || !item->referencedClip()) continue;
-        QString src = item->clipUrl().path();
+        QString src = i.value();
         QString dest;
         if (ids.count() > 1) {
            dest = destinations.at(index);
@@ -3027,13 +3029,14 @@ void ProjectList::slotTranscodeClipJob(const QString &condition, QString params,
         jobParams << duration;
         jobParams << QString::number(KdenliveSettings::add_new_clip());
         jobParams << params;
-        CutClipJob *job = new CutClipJob(item->clipType(), id, jobParams);
+        CutClipJob *job = new CutClipJob(item->clipType(), i.key(), jobParams);
         if (job->isExclusive() && hasPendingJob(item, job->jobType)) {
             delete job;
             continue;
         }
         m_jobList.append(job);
         setJobStatus(item, job->jobType, JOBWAITING, 0, job->statusMessage());
+       ++i;
     }
     delete d;
     slotCheckJobProcess();
@@ -3600,6 +3603,44 @@ void ProjectList::startClipFilterJob(const QString &filterName, const QString &c
     else {
         destination = ids.values();
     }
+    if (filterName == "framebuffer") {
+       Mlt::Profile profile;
+       QStringList keys = ids.keys();
+       int ix = 0;
+       foreach(const QString &url, destination) {
+           QString prodstring = QString("framebuffer:" + url + "?-1");
+           Mlt::Producer *reversed = new Mlt::Producer(profile, prodstring.toUtf8().constData());
+           if (!reversed || !reversed->is_valid()) {
+               emit displayMessage(i18n("Cannot reverse clip"), -2, ErrorMessage);
+               continue;
+           }
+           QString dest = url + ".mlt";
+           if (QFile::exists(dest)) {
+               if (KMessageBox::questionYesNo(this, i18n("File %1 already exists.\nDo you want to overwrite it?", dest)) == KMessageBox::No) continue;
+           }
+           Mlt::Consumer *cons = new Mlt::Consumer(profile, "xml", dest.toUtf8().constData());
+           if (cons == NULL || !cons->is_valid()) {
+               emit displayMessage(i18n("Cannot render reversed clip"), -2, ErrorMessage);
+               continue;
+           }
+           Mlt::Playlist list;
+           list.insert_at(0, reversed, 0);
+           delete reversed;
+           cons->connect(list);
+           cons->run();
+           delete cons;
+           QString groupId;
+           QString groupName;
+           DocClipBase *base = m_doc->clipManager()->getClipById(keys.at(ix));
+           if (base) {
+               groupId = base->getProperty("groupid");
+               groupName = base->getProperty("groupname");
+           }
+           emit addClip(dest, groupId, groupName);
+           ix++;
+       }
+       return;
+    }
     
     if (filterName == "motion_est") {
        // Show config dialog