From dfac9665a2f92ca0878cd7e19860d19c1a4fe5c5 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Sun, 9 Mar 2008 18:16:19 +0000 Subject: [PATCH] Use detached rendering process, render progress is shown in KDE's Job Viewer. svn path=/branches/KDE4/; revision=2029 --- renderer/kdenlive_render.cpp | 48 +++++++++++++++++++----------------- renderer/renderjob.cpp | 19 ++++++++------ renderer/renderjob.h | 3 ++- src/customtrackview.cpp | 6 ++--- src/mainwindow.cpp | 12 +++++---- 5 files changed, 50 insertions(+), 38 deletions(-) diff --git a/renderer/kdenlive_render.cpp b/renderer/kdenlive_render.cpp index 938ba0fe..ef4c0b1b 100644 --- a/renderer/kdenlive_render.cpp +++ b/renderer/kdenlive_render.cpp @@ -48,32 +48,36 @@ #include "renderjob.h" -int main(int argc, char **argv) -{ +int main(int argc, char **argv) { QCoreApplication app(argc, argv); QStringList args = app.arguments(); if (!args.isEmpty()) args.takeFirst(); if (args.count() >= 4) { - QString render = args.at(0); - args.takeFirst(); - QString player = args.at(0); - args.takeFirst(); - QString src = args.at(0); - args.takeFirst(); - QString dest = args.at(0); - args.takeFirst(); - RenderJob *job = new RenderJob(render, player, src, dest, args); - job->start(); - app.exec(); - } - else { - fprintf(stderr, "Kdenlive video renderer for MLT.\nUsage: " - "kdenlive_render [renderer] [player] [src] [dest] [[arg1] [arg2] ...]\n" - " render: path to inigo rendrer\n" - " player: path to video player to play when rendering is over, use '-' to disable playing\n" - " src: source file (usually westley playlist)\n" - " dest: destination file\n" - " args: space separated libavformat arguments\n"); + bool erase = false; + if (args.at(0) == "-erase") { + erase = true; + args.takeFirst(); + } + QString render = args.at(0); + args.takeFirst(); + QString player = args.at(0); + args.takeFirst(); + QString src = args.at(0); + args.takeFirst(); + QString dest = args.at(0); + args.takeFirst(); + RenderJob *job = new RenderJob(erase, render, player, src, dest, args); + job->start(); + app.exec(); + } else { + fprintf(stderr, "Kdenlive video renderer for MLT.\nUsage: " + "kdenlive_render [-erase] [renderer] [player] [src] [dest] [[arg1] [arg2] ...]\n" + " -erase: if that parameter is present, src file will be erased at the end\n" + " render: path to inigo rendrer\n" + " player: path to video player to play when rendering is over, use '-' to disable playing\n" + " src: source file (usually westley playlist)\n" + " dest: destination file\n" + " args: space separated libavformat arguments\n"); } } diff --git a/renderer/renderjob.cpp b/renderer/renderjob.cpp index 33f00496..09b6ed42 100644 --- a/renderer/renderjob.cpp +++ b/renderer/renderjob.cpp @@ -24,14 +24,15 @@ static QDBusConnection connection(QLatin1String("")); -RenderJob::RenderJob(QString renderer, QString player, QString scenelist, QString dest, QStringList args) : QObject() { +RenderJob::RenderJob(bool erase, QString renderer, QString player, QString scenelist, QString dest, QStringList args) : QObject() { m_scenelist = scenelist; m_dest = dest; m_player = player; m_progress = 0; + m_erase = erase; m_renderProcess = new QProcess; m_prog = renderer; - m_args << scenelist << "-consumer" << "avformat:" + m_dest << "progress=1"<setReadChannel(QProcess::StandardError); @@ -49,7 +50,7 @@ void RenderJob::receivedStderr() { int pro = result.toInt(); if (pro > m_progress) { m_progress = pro; - QDBusReply reply = m_jobUiserver->call("setPercent", (uint) m_progress); + QDBusReply reply = m_jobUiserver->call("setPercent", (uint) m_progress); } } @@ -65,10 +66,14 @@ void RenderJob::start() { void RenderJob::slotIsOver(int exitcode, QProcess::ExitStatus status) { QDBusReply reply = m_jobUiserver->call("terminate", ""); - if (!m_player.isEmpty()) { - QStringList args; - args<start(); } } else if (opMode == RESIZEEND) { - setCursor(KCursor("right_side", Qt::SizeHorCursor)); + setCursor(KCursor("right_side", Qt::SizeHorCursor)); if (m_visualTip == NULL) { QPolygon polygon; polygon << QPoint(clip->rect().x() + clip->rect().width(), clip->rect().y() + clip->rect().height() / 2 - size * 2); @@ -337,7 +337,7 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event) { emit clipItemSelected(m_dragItem); m_clickPoint = mapToScene(event->pos()).x() - m_dragItem->startPos().frames(m_document->fps()) * m_scale; m_operationMode = m_dragItem->operationMode(item->mapFromScene(mapToScene(event->pos())), m_scale); - if (m_operationMode == MOVE) setCursor(Qt::ClosedHandCursor); + if (m_operationMode == MOVE) setCursor(Qt::ClosedHandCursor); if (m_operationMode == MOVE || m_operationMode == RESIZESTART) m_startPos = QPointF(m_dragItem->startPos().frames(m_document->fps()), m_dragItem->track()); else if (m_operationMode == RESIZEEND) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 5a3303e2..b2692476 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -58,9 +58,9 @@ #define ID_STATUS_MSG 1 #define ID_EDITMODE_MSG 2 #define ID_TIMELINE_MSG 3 -#define ID_TIMELINE_BUTTONS 4 -#define ID_TIMELINE_POS 5 -#define ID_TIMELINE_FORMAT 6 +#define ID_TIMELINE_BUTTONS 5 +#define ID_TIMELINE_POS 6 +#define ID_TIMELINE_FORMAT 7 MainWindow::MainWindow(QWidget *parent) : KXmlGuiWindow(parent), @@ -476,12 +476,14 @@ void MainWindow::slotRenderProject() { KUrl exportFile = KUrl(KFileDialog::getSaveFileName()); if (exportFile.isEmpty()) return; KTemporaryFile temp; + temp.setAutoRemove(false); temp.setSuffix(".westley"); if (temp.open()) { kDebug() << "/////// STARTING EXPORT: " << temp.fileName() << ", TO: " << exportFile.path(); m_projectMonitor->saveSceneList(temp.fileName()); - RenderJob *rj = new RenderJob(KUrl(temp.fileName()), exportFile); - rj->start(); + QStringList args; + args << "-erase" << "inigo" << "kmplayer" << temp.fileName() << exportFile.path(); + QProcess::startDetached("kdenlive_render", args); } } -- 2.39.2