From e44eb3032532a0b849fee4a11bbdc8e0f3c01709 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Mon, 2 Mar 2009 22:23:52 +0000 Subject: [PATCH] Enable 2 pass encoding for rendering. All you need to do is add "pass=2" to the rendering arguments svn path=/branches/KDE4/; revision=3082 --- renderer/kdenlive_render.cpp | 15 ++++++++++++++- renderer/renderjob.cpp | 17 +++++++++++++---- renderer/renderjob.h | 7 +++++++ 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/renderer/kdenlive_render.cpp b/renderer/kdenlive_render.cpp index 66d25174..807deb88 100644 --- a/renderer/kdenlive_render.cpp +++ b/renderer/kdenlive_render.cpp @@ -68,9 +68,22 @@ int main(int argc, char **argv) { args.takeFirst(); QString dest = args.at(0); args.takeFirst(); + bool dualpass = false; + bool doerase; + if (args.contains("pass=2")) { + // dual pass encoding + dualpass = true; + doerase = false; + args.replace(args.indexOf("pass=2"), "pass=1"); + } else doerase = erase; qDebug() << "//STARTING RENDERING: " << erase << "," << usekuiserver << "," << render << "," << profile << "," << rendermodule << "," << player << "," << src << "," << dest << "," << preargs << "," << args << "," << in << "," << out ; - RenderJob *job = new RenderJob(erase, usekuiserver, render, profile, rendermodule, player, src, dest, preargs, args, in, out); + RenderJob *job = new RenderJob(doerase, usekuiserver, render, profile, rendermodule, player, src, dest, preargs, args, in, out); job->start(); + if (dualpass) { + args.replace(args.indexOf("pass=1"), "pass=2"); + RenderJob *dualjob = new RenderJob(erase, usekuiserver, render, profile, rendermodule, player, src, dest, preargs, args, in, out); + QObject::connect(job, SIGNAL(renderingFinished()), dualjob, SLOT(start())); + } app.exec(); } else { fprintf(stderr, "Kdenlive video renderer for MLT.\nUsage: " diff --git a/renderer/renderjob.cpp b/renderer/renderjob.cpp index ba1804c1..f9a992da 100644 --- a/renderer/renderjob.cpp +++ b/renderer/renderjob.cpp @@ -44,6 +44,7 @@ RenderJob::RenderJob(bool erase, bool usekuiserver, const QString &renderer, con m_args << scenelist; if (in != -1) m_args << "in=" + QString::number(in); if (out != -1) m_args << "out=" + QString::number(out); + m_args << preargs; //qDebug()<<"PRE ARGS: "<setReadChannel(QProcess::StandardError); @@ -239,14 +244,15 @@ void RenderJob::slotIsOver(int exitcode, QProcess::ExitStatus status) { // m_logstream << "Rendering of " << m_dest << " aborted, resulting video will probably be corrupted." << endl; qDebug() << "Rendering of " << m_dest << " aborted, resulting video will probably be corrupted."; QProcess::startDetached("kdialog", args); + qApp->quit(); } else { - if (m_kdenliveinterface) { + if (!m_dualpass && m_kdenliveinterface) { m_dbusargs[1] = (int) - 1; m_dbusargs.append(QString()); m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, "setRenderingFinished", m_dbusargs); } QDBusConnectionInterface* interface = QDBusConnection::sessionBus().interface(); - if (interface && interface->isServiceRegistered("org.kde.knotify")) { + if (!m_dualpass && interface && interface->isServiceRegistered("org.kde.knotify")) { QDBusMessage m = QDBusMessage::createMethodCall("org.kde.knotify", "/Notify", "org.kde.KNotify", @@ -268,14 +274,17 @@ void RenderJob::slotIsOver(int exitcode, QProcess::ExitStatus status) { } // m_logstream << "Rendering of " << m_dest << " finished" << endl; qDebug() << "Rendering of " << m_dest << " finished"; - if (m_player != "-") { + if (!m_dualpass && m_player != "-") { // m_logstream << "Starting player" << endl; QStringList args; args << m_dest; QProcess::startDetached(m_player, args); } + if (m_dualpass) { + emit renderingFinished(); + deleteLater(); + } else qApp->quit(); } - qApp->quit(); } #include "renderjob.moc" diff --git a/renderer/renderjob.h b/renderer/renderjob.h index 64dd26e2..549a086e 100644 --- a/renderer/renderjob.h +++ b/renderer/renderjob.h @@ -31,9 +31,12 @@ class RenderJob : public QObject { Q_OBJECT + public: RenderJob(bool erase, bool usekuiserver, const QString &renderer, const QString &profile, const QString &rendermodule, const QString &player, const QString &scenelist, const QString &dest, const QStringList &preargs, const QStringList &args, int in = -1, int out = -1); ~RenderJob(); + +public slots: void start(); private slots: @@ -52,6 +55,7 @@ private: QString m_player; QStringList m_args; bool m_erase; + bool m_dualpass; QDBusInterface *m_jobUiserver; QDBusInterface *m_kdenliveinterface; QList m_dbusargs; @@ -62,6 +66,9 @@ private: QTemporaryFile m_logfile; /** \brief Used to write to the log file */ QTextStream m_logstream; + +signals: + void renderingFinished(); }; #endif -- 2.39.2