]> git.sesse.net Git - kdenlive/commitdiff
Allow transcoding of several clips
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 26 May 2009 22:16:18 +0000 (22:16 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 26 May 2009 22:16:18 +0000 (22:16 +0000)
svn path=/trunk/kdenlive/; revision=3431

src/cliptranscode.cpp
src/cliptranscode.h
src/mainwindow.cpp
src/mainwindow.h

index e9ccc376c2211076579be27210edd84521ccf21b..3386edf6981f1d771dcacad9d049d1b4025ef784 100644 (file)
 #include <KMessageBox>
 
 
-ClipTranscode::ClipTranscode(const KUrl &src, const QString &params, QWidget * parent) :
-        QDialog(parent)
+ClipTranscode::ClipTranscode(KUrl::List urls, const QString &params, QWidget * parent) :
+        QDialog(parent), m_urls(urls)
 {
     setFont(KGlobalSettings::toolBarFont());
     m_view.setupUi(this);
     setAttribute(Qt::WA_DeleteOnClose);
     setWindowTitle(i18n("Transcode Clip"));
 
-    QString fileName = src.path(); //.section('.', 0, -1);
-    QString newFile = params.section(' ', -1).replace("%1", fileName);
-    KUrl dest(newFile);
-    m_view.source_url->setUrl(src);
-    m_view.dest_url->setUrl(dest);
-    connect(m_view.source_url, SIGNAL(textChanged(const QString &)), this, SLOT(slotUpdateParams()));
+    if (m_urls.count() == 1) {
+        QString fileName = m_urls.at(0).path(); //.section('.', 0, -1);
+        QString newFile = params.section(' ', -1).replace("%1", fileName);
+        KUrl dest(newFile);
+        m_view.source_url->setUrl(m_urls.at(0));
+        m_view.dest_url->setUrl(dest);
+        m_view.urls_list->setHidden(true);
+        connect(m_view.source_url, SIGNAL(textChanged(const QString &)), this, SLOT(slotUpdateParams()));
+    } else {
+        m_view.label_source->setHidden(true);
+        m_view.label_dest->setHidden(true);
+        m_view.source_url->setHidden(true);
+        m_view.dest_url->setHidden(true);
+        for (int i = 0; i < m_urls.count(); i++)
+            m_view.urls_list->addItem(m_urls.at(i).path());
+    }
     if (!params.isEmpty()) {
         m_view.label_profile->setHidden(true);
         m_view.profile_list->setHidden(true);
@@ -57,8 +67,6 @@ ClipTranscode::ClipTranscode(const KUrl &src, const QString &params, QWidget * p
         }
     }
 
-    kDebug() << "//PARAMS: " << params << "\n\nNAME: " << newFile;
-
     connect(m_view.button_start, SIGNAL(clicked()), this, SLOT(slotStartTransCode()));
 
     m_transcodeProcess.setProcessChannelMode(QProcess::MergedChannels);
@@ -81,8 +89,18 @@ void ClipTranscode::slotStartTransCode()
         return;
     }
     QStringList parameters;
-    parameters << "-i" << m_view.source_url->url().path();
+    if (m_view.urls_list->count() > 0) {
+        m_view.source_url->setUrl(m_urls.takeFirst());
+        slotUpdateParams(-1);
+        QList<QListWidgetItem *> matching = m_view.urls_list->findItems(m_view.source_url->url().path(), Qt::MatchExactly);
+        if (matching.count() > 0) {
+            matching.at(0)->setFlags(Qt::ItemIsSelectable);
+            m_view.urls_list->setCurrentItem(matching.at(0));
+        }
+    }
+    QString source_url = m_view.source_url->url().path();
 
+    parameters << "-i" << source_url;
     if (QFile::exists(m_view.dest_url->url().path())) {
         if (KMessageBox::questionYesNo(this, i18n("File %1 already exists.\nDo you want to overwrite it?", m_view.dest_url->url().path())) == KMessageBox::No) return;
         parameters << "-y";
@@ -92,7 +110,7 @@ void ClipTranscode::slotStartTransCode()
     params = params.section(' ', 0, -2);
     parameters << params.split(' ') << m_view.dest_url->url().path();
 
-    kDebug() << "/// FFMPEG ARGS: " << parameters;
+    //kDebug() << "/// FFMPEG ARGS: " << parameters;
 
     m_transcodeProcess.start("ffmpeg", parameters);
     m_view.button_start->setEnabled(false);
@@ -114,7 +132,11 @@ void ClipTranscode::slotTranscodeFinished(int exitCode, QProcess::ExitStatus exi
     if (exitCode == 0 && exitStatus == QProcess::NormalExit) {
         m_view.log->setHtml(m_view.log->toPlainText() + "<br><b>" + i18n("Transcoding finished."));
         if (m_view.auto_add->isChecked()) emit addClip(m_view.dest_url->url());
-        if (m_view.auto_close->isChecked()) accept();
+        if (m_view.urls_list->count() > 0 && m_urls.count() > 0) {
+            m_transcodeProcess.close();
+            slotStartTransCode();
+            return;
+        } else if (m_view.auto_close->isChecked()) accept();
     } else {
         m_view.log->setHtml(m_view.log->toPlainText() + "<br><b>" + i18n("Transcoding FAILED!"));
     }
@@ -124,13 +146,15 @@ void ClipTranscode::slotTranscodeFinished(int exitCode, QProcess::ExitStatus exi
 
 void ClipTranscode::slotUpdateParams(int ix)
 {
-    if (ix == -1) ix = m_view.profile_list->currentIndex();
     QString fileName = m_view.source_url->url().path();
-    QString params = m_view.profile_list->itemData(ix).toString();
-    QString newFile = params.section(' ', -1).replace("%1", fileName);
-    KUrl dest(newFile);
-    m_view.dest_url->setUrl(dest);
-    m_view.params->setPlainText(params.simplified());
+    if (ix != -1) {
+        QString params = m_view.profile_list->itemData(ix).toString();
+        m_view.params->setPlainText(params.simplified());
+    }
+
+    QString newFile = m_view.params->toPlainText().simplified().section(' ', -1).replace("%1", fileName);
+    m_view.dest_url->setUrl(KUrl(newFile));
+
 }
 
 #include "cliptranscode.moc"
index 2a885278650890a67db8e6db34a4b11e940ce3e5..e46fc53a000f7377bc33bd2246110d90495203b2 100644 (file)
@@ -33,7 +33,7 @@ class ClipTranscode : public QDialog
     Q_OBJECT
 
 public:
-    ClipTranscode(const KUrl &src, const QString &params, QWidget * parent = 0);
+    ClipTranscode(KUrl::List urls, const QString &params, QWidget * parent = 0);
     ~ClipTranscode();
 
 
@@ -46,6 +46,7 @@ private slots:
 private:
     Ui::ClipTranscode_UI m_view;
     QProcess m_transcodeProcess;
+    KUrl::List m_urls;
 
 signals:
     void addClip(KUrl url);
index 59fbf3e847ab758926e96b650eb23bb365856770..ccf544b8af1f1e3a0a7c99553b27afc6c78e13e1 100644 (file)
@@ -2678,17 +2678,16 @@ void MainWindow::loadTranscoders()
     }
 }
 
-void MainWindow::slotTranscode(QString url)
+void MainWindow::slotTranscode(KUrl::List urls)
 {
     QString params;
-    if (url.isEmpty()) {
-        url = m_projectList->currentClipUrl();
+    if (urls.isEmpty()) {
+        urls.append(m_projectList->currentClipUrl());
         QAction *action = qobject_cast<QAction *>(sender());
         params = action->data().toString();
-
     }
-    if (url.isEmpty()) return;
-    ClipTranscode *d = new ClipTranscode(url, params);
+    if (urls.isEmpty()) return;
+    ClipTranscode *d = new ClipTranscode(urls, params);
     connect(d, SIGNAL(addClip(KUrl)), this, SLOT(slotAddProjectClip(KUrl)));
     d->show();
     //QProcess::startDetached("ffmpeg", parameters);
@@ -2696,9 +2695,9 @@ void MainWindow::slotTranscode(QString url)
 
 void MainWindow::slotTranscodeClip()
 {
-    KUrl url = KFileDialog::getOpenUrl(KUrl("kfiledialog:///projectfolder"));
-    if (url.isEmpty()) return;
-    slotTranscode(url.path());
+    KUrl::List urls = KFileDialog::getOpenUrls(KUrl("kfiledialog:///projectfolder"));
+    if (urls.isEmpty()) return;
+    slotTranscode(urls);
 }
 
 #include "mainwindow.moc"
index f5b7851f5c205614d66c2e9d88ab5d176b860899..1e5ebc25b1c7ba6b788a05f9cfa40ff5ef5047c7 100644 (file)
@@ -298,7 +298,7 @@ private slots:
     void slotUpdateClipType(QAction *action);
     void slotShowTimeline(bool show);
     void slotMaximizeCurrent(bool show);
-    void slotTranscode(QString url = QString());
+    void slotTranscode(KUrl::List urls = KUrl::List());
     void slotTranscodeClip();
 
 signals: