From: Jean-Baptiste Mardelle Date: Sun, 9 Mar 2008 14:03:37 +0000 (+0000) Subject: start of an external process using dcop communication X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=e481ec98705111774ae7da6411ae6d16551b0b3f;p=kdenlive start of an external process using dcop communication svn path=/branches/KDE4/; revision=2026 --- diff --git a/renderer/CMakeLists.txt b/renderer/CMakeLists.txt new file mode 100644 index 00000000..de832e1c --- /dev/null +++ b/renderer/CMakeLists.txt @@ -0,0 +1,16 @@ + + +set(kdenlive_render_SRCS + kdenlive_render.cpp + renderjob.cpp +) + +kde4_add_executable(kdenlive_render ${kdenlive_render_SRCS}) + +target_link_libraries(kdenlive_render + ${QT_QTCORE_LIBRARY} + ${QT_QTDBUS_LIBRARY} +) + +install(TARGETS kdenlive_render DESTINATION ${BIN_INSTALL_DIR}) + diff --git a/renderer/kdenlive_render.cpp b/renderer/kdenlive_render.cpp new file mode 100644 index 00000000..77e3beea --- /dev/null +++ b/renderer/kdenlive_render.cpp @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2006-2008 Trolltech ASA. All rights reserved. +** +** This file is part of the tools applications of the Qt Toolkit. +** +** This file may be used under the terms of the GNU General Public +** License versions 2.0 or 3.0 as published by the Free Software +** Foundation and appearing in the files LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Alternatively you may (at +** your option) use any later version of the GNU General Public +** License if such license has been publicly approved by Trolltech ASA +** (or its successors, if any) and the KDE Free Qt Foundation. In +** addition, as a special exception, Trolltech gives you certain +** additional rights. These rights are described in the Trolltech GPL +** Exception version 1.2, which can be found at +** http://www.trolltech.com/products/qt/gplexception/ and in the file +** GPL_EXCEPTION.txt in this package. +** +** Please review the following information to ensure GNU General +** Public Licensing requirements will be met: +** http://trolltech.com/products/qt/licenses/licensing/opensource/. If +** you are unsure which license is appropriate for your use, please +** review the following information: +** http://trolltech.com/products/qt/licenses/licensing/licensingoverview +** or contact the sales department at sales@trolltech.com. +** +** In addition, as a special exception, Trolltech, as the sole +** copyright holder for Qt Designer, grants users of the Qt/Eclipse +** Integration plug-in the right for the Qt/Eclipse Integration to +** link to functionality provided by Qt Designer and its related +** libraries. +** +** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. Trolltech reserves all rights not expressly +** granted herein. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ + + +#include +#include +#include + +#include "renderjob.h" + +int main(int argc, char **argv) +{ + QCoreApplication app(argc, argv); + QStringList args = app.arguments(); + args.takeFirst(); + QString player; + if (args.count() == 3) player = args.at(2); + //fprintf(stderr, "ARGS: %s %s", qPrintable(args.at(0)), qPrintable(args.at(1))); + RenderJob *job = new RenderJob(args.at(0), args.at(1), player); + job->start(); + app.exec(); +} + diff --git a/renderer/renderjob.cpp b/renderer/renderjob.cpp new file mode 100644 index 00000000..3d559422 --- /dev/null +++ b/renderer/renderjob.cpp @@ -0,0 +1,77 @@ +/*************************************************************************** + * Copyright (C) 2007 by Jean-Baptiste Mardelle (jb@kdenlive.org) * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * + ***************************************************************************/ + + +#include + +#include "renderjob.h" + +static QDBusConnection connection(QLatin1String("")); + +RenderJob::RenderJob(QString scenelist, QString dest, QString player) : QObject() { + m_scenelist = scenelist; + m_dest = dest; + m_player = player; + m_progress = 0; + m_renderProcess = new QProcess; + m_prog = "inigo"; + m_args << scenelist << "-consumer" << "avformat:" + m_dest << "progress=1"; + connect(m_renderProcess, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(slotIsOver(int, QProcess::ExitStatus))); + connect(m_renderProcess, SIGNAL(readyReadStandardError()), this, SLOT(receivedStderr())); + m_renderProcess->setReadChannel(QProcess::StandardError); +} + + +RenderJob::~RenderJob() { + delete m_renderProcess; +} + +void RenderJob::receivedStderr() { + QString result = QString(m_renderProcess->readAllStandardError()); + result = result.simplified(); + result = result.section(" ", -1); + int pro = result.toInt(); + if (pro > m_progress) { + m_progress = pro; + QDBusReply reply = m_jobUiserver->call("setPercent", (uint) m_progress); + } +} + +void RenderJob::start() { + QDBusInterface kuiserver("org.kde.JobViewServer", "/JobViewServer", "org.kde.JobViewServer", QDBusConnection::sessionBus()); + QDBusReply reply = kuiserver.call("requestView", "kdenlive", "kdenlive", 1); + //kDebug()<<"///// JOB REPLY: "<call("setInfoMessage", tr("Rendering %1").arg(m_dest)); + m_renderProcess->start(m_prog, m_args); +} + + +void RenderJob::slotIsOver(int exitcode, QProcess::ExitStatus status) { + QDBusReply reply = m_jobUiserver->call("terminate", ""); + if (!m_player.isEmpty()) { + QStringList args; + args< +#include +#include + +class RenderJob : public QObject { + Q_OBJECT +public: + RenderJob(QString scenelist, QString dest, QString player); + ~RenderJob(); + void start(); + +private slots: + void slotIsOver(int exitcode, QProcess::ExitStatus status); + void receivedStderr(); + +private: + QString m_scenelist; + QString m_dest; + int m_progress; + QProcess *m_renderProcess; + QString m_prog; + QString m_player; + QStringList m_args; + QDBusInterface *m_jobUiserver; +}; + +#endif