]> git.sesse.net Git - kdenlive/blobdiff - src/projectlist.cpp
Fix proxy clips for playlists distortion
[kdenlive] / src / projectlist.cpp
index 201e2cfd4221ee2949f855cc3dbefe70300bd107..d60e3081db98577306709b5a425629c4e1a0344e 100644 (file)
@@ -2111,12 +2111,12 @@ void ProjectList::slotRefreshClipThumbnail(QTreeWidgetItem *it, bool update)
         int dwidth = (int)(height  * m_render->dar() + 0.5);
         if (clip->clipType() == AUDIO)
             pix = KIcon("audio-x-generic").pixmap(QSize(dwidth, height));
-        else if (clip->clipType() == IMAGE)
+        else if (clip->clipType() == IMAGE) {
             img = KThumb::getFrame(item->referencedClip()->getProducer(), 0, swidth, dwidth, height);
+       }
         else {
             img = item->referencedClip()->extractImage(frame, dwidth, height);
         }
-
         if (!pix.isNull() || !img.isNull()) {
             monitorItemEditing(false);
             if (!img.isNull()) {
@@ -2724,8 +2724,12 @@ void ProjectList::slotCreateProxy(const QString id)
         slotGotProxy(path);
         return;
     }
-
-    ProxyJob *job = new ProxyJob(item->clipType(), id, QStringList() << path << item->clipUrl().path() << item->referencedClip()->producerProperty("_exif_orientation") << m_doc->getDocumentProperty("proxyparams").simplified() << QString::number(m_render->frameRenderWidth()) << QString::number(m_render->renderHeight()));
+    QString sourcePath = item->clipUrl().path();
+    if (item->clipType() == PLAYLIST) {
+       // Special case: playlists use the special 'consumer' producer to support resizing
+       sourcePath.prepend("consumer:");
+    }
+    ProxyJob *job = new ProxyJob(item->clipType(), id, QStringList() << path << sourcePath << item->referencedClip()->producerProperty("_exif_orientation") << m_doc->getDocumentProperty("proxyparams").simplified() << QString::number(m_render->frameRenderWidth()) << QString::number(m_render->renderHeight()));
     if (job->isExclusive() && hasPendingJob(item, job->jobType)) {
         delete job;
         return;
@@ -2760,7 +2764,7 @@ void ProjectList::slotCutClipJob(const QString &id, QPoint zone)
     Ui::CutJobDialog_UI ui;
     ui.setupUi(d);
     ui.extra_params->setVisible(false);
-    ui.add_clip->setChecked(KdenliveSettings::add_clip_cut());
+    ui.add_clip->setChecked(KdenliveSettings::add_new_clip());
     ui.file_url->fileDialog()->setOperationMode(KFileDialog::Saving);
     ui.extra_params->setMaximumHeight(QFontMetrics(font()).lineSpacing() * 5);
     ui.file_url->setUrl(KUrl(dest));
@@ -2793,11 +2797,11 @@ void ProjectList::slotCutClipJob(const QString &id, QPoint zone)
         }
     }
     QString extraParams = ui.extra_params->toPlainText().simplified();
-    KdenliveSettings::setAdd_clip_cut(ui.add_clip->isChecked());
+    KdenliveSettings::setAdd_new_clip(ui.add_clip->isChecked());
     delete d;
 
     QStringList jobParams;
-    jobParams << dest << item->clipUrl().path() << timeIn << timeOut << QString::number(duration) << QString::number(KdenliveSettings::add_clip_cut());
+    jobParams << dest << item->clipUrl().path() << timeIn << timeOut << QString::number(duration) << QString::number(KdenliveSettings::add_new_clip());
     if (!extraParams.isEmpty()) jobParams << extraParams;
     CutClipJob *job = new CutClipJob(item->clipType(), id, jobParams);
     if (job->isExclusive() && hasPendingJob(item, job->jobType)) {
@@ -2841,7 +2845,7 @@ void ProjectList::slotTranscodeClipJob(const QString &condition, QString params,
     ui.extra_params->setVisible(false);
     d->adjustSize();
     ui.button_more->setIcon(KIcon("configure"));
-    ui.add_clip->setChecked(KdenliveSettings::add_clip_cut());
+    ui.add_clip->setChecked(KdenliveSettings::add_new_clip());
     ui.extra_params->setPlainText(params.simplified().section(' ', 0, -2));
     QString mess = desc;
     mess.append(' ' + i18np("(%1 clip)", "(%1 clips)", ids.count()));
@@ -2851,14 +2855,17 @@ void ProjectList::slotTranscodeClipJob(const QString &condition, QString params,
         return;
     }
     params = ui.extra_params->toPlainText().simplified();
-    KdenliveSettings::setAdd_clip_cut(ui.add_clip->isChecked());
-    
+    KdenliveSettings::setAdd_new_clip(ui.add_clip->isChecked());
+    int index = 0;
     foreach(const QString &id, ids) {
         ProjectItem *item = getItemById(id);
         if (!item || !item->referencedClip()) continue;
         QString src = item->clipUrl().path();
         QString dest;
-        if (ids.count() > 1) dest = params.section(' ', -1).replace("%1", src);
+        if (ids.count() > 1) {
+           dest = destinations.at(index);
+           index++;
+       }
         else dest = ui.file_url->url().path();
         QStringList jobParams;
         jobParams << dest << src << QString() << QString();
@@ -2867,7 +2874,7 @@ void ProjectList::slotTranscodeClipJob(const QString &condition, QString params,
         int max = item->clipMaxDuration();
         QString duration = QString::number(max);
         jobParams << duration;
-        jobParams << QString::number(KdenliveSettings::add_clip_cut());
+        jobParams << QString::number(KdenliveSettings::add_new_clip());
         jobParams << params;
         CutClipJob *job = new CutClipJob(item->clipType(), id, jobParams);
         if (job->isExclusive() && hasPendingJob(item, job->jobType)) {
@@ -3459,15 +3466,17 @@ void ProjectList::processClipJob(QStringList ids, const QString&destination, boo
     foreach(const QString&id, ids) {
         ProjectItem *item = getItemById(id);
         if (!item) continue;
+       QStringList jobArgs;
+       jobArgs << preParams;
         if (ids.count() == 1) {
-            consumer += ':' + destination;
+            jobArgs << consumer + ':' + destination;
         }
         else {
-            consumer += ':' + destination + item->clipUrl().fileName() + ".mlt";
+            jobArgs << consumer + ':' + destination + item->clipUrl().fileName() + ".mlt";
         }
-        preParams << consumer << jobParams;
+        jobArgs << jobParams;
         
-        MeltJob *job = new MeltJob(item->clipType(), id, preParams);
+        MeltJob *job = new MeltJob(item->clipType(), id, jobArgs);
         if (autoAdd) {
             job->setAddClipToProject(true);
             kDebug()<<"// ADDING TRUE";