X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=plugins%2Fsampleplugin%2Fsampleplugin.cpp;h=3c27a26d2344cd988cfddd16510dc33e88b13f7f;hb=7effb944762e06530bf3fb826c6dde064a27d436;hp=2d40a04116aa4af09cfa5a7a6224c66432bdbcbb;hpb=cffb34aa7d334ab8cc284c1fd8c10ea59a06b11f;p=kdenlive diff --git a/plugins/sampleplugin/sampleplugin.cpp b/plugins/sampleplugin/sampleplugin.cpp index 2d40a041..3c27a26d 100644 --- a/plugins/sampleplugin/sampleplugin.cpp +++ b/plugins/sampleplugin/sampleplugin.cpp @@ -21,99 +21,101 @@ #include "sampleplugin.h" #include "ui_countdown_ui.h" -#include -#include #include #include +#include #include -#include -#include +#include -QStringList SamplePlugin::generators(const QStringList producers) const +QStringList SamplePlugin::generators(const QStringList &producers) const { QStringList result; - if (producers.contains("pango")) result << i18n("Countdown"); - if (producers.contains("noise")) result << i18n("Noise"); + 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() + "/noise"; - } else prePath = projectFolder.path() + "/counter"; + 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(prePath + counter + ".mlt")) { + 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; + QPointer d = new QDialog; Ui::CountDown_UI view; - view.setupUi(&d); + view.setupUi(d); if (generator == i18n("Noise")) { - d.setWindowTitle(tr("Create Noise Clip")); + d->setWindowTitle(i18n("Create Noise Clip")); view.font_label->setHidden(true); view.font->setHidden(true); } else { - d.setWindowTitle(tr("Create Countdown Clip")); + d->setWindowTitle(i18n("Create Countdown Clip")); view.font->setValue(height); } // Set single file mode. Default seems to be File::ExistingOnly. view.path->setMode(KFile::File); - QString clipFile = prePath + counter + ".mlt"; + QString clipFile = prePath + counter + QLatin1String(".mlt"); view.path->setUrl(KUrl(clipFile)); - if (d.exec() == QDialog::Accepted) { - QDomDocument doc; - QDomElement mlt = doc.createElement("mlt"); - QDomElement playlist = doc.createElement("playlist"); + 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")) { - QDomElement prod = doc.createElement("producer"); - prod.setAttribute("mlt_service", "noise"); - prod.setAttribute("in", "0"); - prod.setAttribute("out", QString::number((int) fps * view.duration->value())); - prod.setAttribute("resource", "<producer>"); - playlist.appendChild(prod); - } else { + 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 - QDomElement prod = doc.createElement("producer"); - prod.setAttribute("mlt_service", "pango"); - prod.setAttribute("in", "0"); - prod.setAttribute("out", QString::number((int) fps)); - prod.setAttribute("text", QString::number(view.duration->value() - i)); - prod.setAttribute("resource", "<producer>"); - //FIXME: the font and pad values are approximate, the pango producer seems unable - // to produce a predictable frame size. - prod.setAttribute("font", QString::number(view.font->value()) + "px"); - //prod.setAttribute("pad", 50); - playlist.appendChild(prod); + 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"); } } - mlt.appendChild(playlist); - doc.appendChild(mlt); - 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(); - if (file.error() != QFile::NoError) { - KMessageBox::error(0, i18n("Cannot write to file %1", view.path->url().path())); - file.close(); - return KUrl(); + + args << QLatin1String("-consumer")<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"))); } - file.close(); - return view.path->url(); } - return KUrl(); + delete d; + return result; } Q_EXPORT_PLUGIN2(kdenlive_sampleplugin, SamplePlugin) + +#include "sampleplugin.moc"