]> git.sesse.net Git - kdenlive/blobdiff - plugins/sampleplugin/sampleplugin.cpp
Start to add QLatin1String
[kdenlive] / plugins / sampleplugin / sampleplugin.cpp
index a816322a2d6082c1009c91b97fe35bafad69cbbd..3c27a26d2344cd988cfddd16510dc33e88b13f7f 100644 (file)
  *   along with this program; if not, write to the                         *
  *   Free Software Foundation, Inc.,                                       *
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA          *
- ***************************************************************************/ 
+ ***************************************************************************/
 
-#include <QtGui>
-#include <QDialog>
-#include <QDomDocument>
 
-#include <KUrlRequester>
-#include <KIntSpinBox>
+#include "sampleplugin.h"
+#include "ui_countdown_ui.h"
+
 #include <KDebug>
 #include <KMessageBox>
+#include <KApplication>
 
-#include "sampleplugin.h"
-#include "ui_countdown_ui.h"
+#include <QDialog>
+#include <QProcess>
 
- QStringList SamplePlugin::generators() const
- {
-     return QStringList() << tr("Countdown");
- }
+QStringList SamplePlugin::generators(const QStringList &producers) const
+{
+    QStringList result;
+    if (producers.contains(QLatin1String("pango"))) result << i18n("Countdown");
+    if (producers.contains(QLatin1String("noise"))) result << i18n("Noise");
+    return result;
+}
 
 
-KUrl SamplePlugin::generatedClip(const QString &generator, const KUrl &projectFolder, const QStringList &lumaNames, const QStringList &lumaFiles, const double fps, const int width, const int height) {
+KUrl SamplePlugin::generatedClip(const QString &renderer, const QString &generator, const KUrl &projectFolder, const QStringList &/*lumaNames*/, const QStringList &/*lumaFiles*/, const double fps, const int /*width*/, const int height)
+{
+    QString prePath;
+    if (generator == i18n("Noise")) {
+        prePath = projectFolder.path() + QLatin1String("/noise");
+    } else prePath = projectFolder.path() + QLatin1String("/counter");
     int ct = 0;
-    QString counter = QString::number(ct).rightJustified(5, '0', false);
-    while (QFile::exists(projectFolder.path() + "/counter" + counter + ".westley")) {
+    QString counter = QString::number(ct).rightJustified(5, QLatin1Char('0'), false);
+    while (QFile::exists(prePath + counter + QLatin1String(".mlt"))) {
         ct++;
-        counter = QString::number(ct).rightJustified(5, '0', false);
+        counter = QString::number(ct).rightJustified(5, QLatin1Char('0'), false);
     }
-    QDialog d;
-    d.setWindowTitle(tr("Create Countdown Clip"));
+    QPointer<QDialog> d = new QDialog;
     Ui::CountDown_UI view;
-    view.setupUi(&d);
-    QString clipFile = projectFolder.path() + "/counter" + counter + ".westley";
-    view.path->setPath(clipFile);
-    if (d.exec() == QDialog::Accepted) {
-       QDomDocument doc;
-       QDomElement westley = doc.createElement("westley");
-       QDomElement playlist = doc.createElement("playlist");
-       for (int i = 0; i < view.duration->value(); i++) {
-           // Create the producers
-           QDomElement prod = doc.createElement("producer");
-           prod.setAttribute("mlt_service", "pango");
-           prod.setAttribute("in", "0");
-           prod.setAttribute("out", QString::number((int) fps));
-           prod.setAttribute("markup", QString::number(view.duration->value() - i));
-           playlist.appendChild(prod);
-       }
-       westley.appendChild(playlist);
-       doc.appendChild(westley);
-       QFile file(view.path->url().path());
-       if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
-           kWarning() << "//////  ERROR writing to file: " << view.path->url().path();
-           KMessageBox::error(0, i18n("Cannot write to file %1", view.path->url().path()));
-           return KUrl();
-       }
-       QTextStream out(&file);
-       out << doc.toString();
-       file.close();
-       return view.path->url();
+    view.setupUi(d);
+    if (generator == i18n("Noise")) {
+        d->setWindowTitle(i18n("Create Noise Clip"));
+        view.font_label->setHidden(true);
+        view.font->setHidden(true);
+    } else {
+        d->setWindowTitle(i18n("Create Countdown Clip"));
+        view.font->setValue(height);
     }
-    return KUrl();
+
+    // Set single file mode. Default seems to be File::ExistingOnly.
+    view.path->setMode(KFile::File);
+
+    QString clipFile = prePath + counter + QLatin1String(".mlt");
+    view.path->setUrl(KUrl(clipFile));
+    KUrl result;
+    
+    if (d->exec() == QDialog::Accepted) {
+        QProcess generatorProcess;
+
+        // Disable VDPAU so that rendering will work even if there is a Kdenlive instance using VDPAU
+#if QT_VERSION >= 0x040600
+        QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
+        env.insert(QLatin1String("MLT_NO_VDPAU"), QLatin1String("1"));
+        generatorProcess.setProcessEnvironment(env);
+#else
+        QStringList env = QProcess::systemEnvironment();
+        env << QLatin1String("MLT_NO_VDPAU=1");
+        generatorProcess.setEnvironment(env);
+#endif
+        QStringList args;
+        if (generator == i18n("Noise")) {
+            args << QLatin1String("noise:") << QLatin1String("in=0") << QLatin1String("out=") + QString::number((int) fps * view.duration->value());
+        }
+        else {
+            // Countdown producer
+            for (int i = 0; i < view.duration->value(); i++) {
+                // Create the producers
+                args << QLatin1String("pango:") << QLatin1String("in=0") << QLatin1String("out=") + QString::number((int) fps * view.duration->value());
+                args << QLatin1String("text=") + QString::number(view.duration->value() - i);
+                args << QLatin1String("font=") + QString::number(view.font->value()) + QLatin1String("px");
+            }
+        }
+
+        args << QLatin1String("-consumer")<<QString::fromLatin1("xml:%1").arg(view.path->url().path());
+        generatorProcess.start(renderer, args);
+        if (generatorProcess.waitForFinished()) {
+            if (generatorProcess.exitStatus() == QProcess::CrashExit) {
+                kDebug() << "/// Generator failed: ";
+                QString error = QString::fromLocal8Bit(generatorProcess.readAllStandardError());
+                KMessageBox::sorry(kapp->activeWindow(), i18n("Failed to generate clip:\n%1", error, i18n("Generator Failed")));
+            }
+            else {
+                result = view.path->url();
+            }
+        } else {
+            kDebug() << "/// Generator failed: ";
+            QString error = QString::fromLocal8Bit(generatorProcess.readAllStandardError());
+            KMessageBox::sorry(kapp->activeWindow(), i18n("Failed to generate clip:\n%1", error, i18n("Generator Failed")));
+        }
+    }
+    delete d;
+    return result;
 }
 
 Q_EXPORT_PLUGIN2(kdenlive_sampleplugin, SamplePlugin)
+
+#include "sampleplugin.moc"