X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fprojecttree%2Fproxyclipjob.cpp;h=fe3b77c85c9cd045bd6c7fddc87b9b2ca29e797d;hb=HEAD;hp=7ef2906f05acd8d9de293f976065701fc88de426;hpb=fdfb73e2d7e350cf44cc501608ca365b12cce4ce;p=kdenlive diff --git a/src/projecttree/proxyclipjob.cpp b/src/projecttree/proxyclipjob.cpp index 7ef2906f..fe3b77c8 100644 --- a/src/projecttree/proxyclipjob.cpp +++ b/src/projecttree/proxyclipjob.cpp @@ -21,15 +21,18 @@ #include "proxyclipjob.h" #include "kdenlivesettings.h" #include "kdenlivedoc.h" +#include + #include -#include +#include -ProxyJob::ProxyJob(CLIPTYPE cType, const QString &id, QStringList parameters) : AbstractClipJob(PROXYJOB, cType, id, parameters), - m_jobDuration(0), - m_isFfmpegJob(true) +ProxyJob::ProxyJob(ClipType cType, const QString &id, const QStringList& parameters) + : AbstractClipJob(PROXYJOB, cType, id, parameters), + m_jobDuration(0), + m_isFfmpegJob(true) { - m_jobStatus = JOBWAITING; + m_jobStatus = JobWaiting; description = i18n("proxy"); m_dest = parameters.at(0); m_src = parameters.at(1); @@ -44,51 +47,51 @@ void ProxyJob::startJob() { // Special case: playlist clips (.mlt or .kdenlive project files) m_jobDuration = 0; - if (clipType == PLAYLIST) { + if (clipType == Playlist) { // change FFmpeg params to MLT format m_isFfmpegJob = false; QStringList mltParameters; mltParameters << m_src; - mltParameters << "-consumer" << "avformat:" + m_dest; - QStringList params = m_proxyParams.split('-', QString::SkipEmptyParts); - + mltParameters << QLatin1String("-consumer") << QLatin1String("avformat:") + m_dest; + QStringList params = m_proxyParams.split(QLatin1Char('-'), QString::SkipEmptyParts); + foreach(const QString &s, params) { QString t = s.simplified(); - if (t.count(' ') == 0) { - t.append("=1"); + if (t.count(QLatin1Char(' ')) == 0) { + t.append(QLatin1String("=1")); } - else t.replace(' ', '='); + else t.replace(QLatin1Char(' '), QLatin1String("=")); mltParameters << t; } - mltParameters.append(QString("real_time=-%1").arg(KdenliveSettings::mltthreads())); + mltParameters.append(QString::fromLatin1("real_time=-%1").arg(KdenliveSettings::mltthreads())); //TODO: currently, when rendering an xml file through melt, the display ration is lost, so we enforce it manualy double display_ratio; - if (m_src.startsWith("consumer:")) display_ratio = KdenliveDoc::getDisplayRatio(m_src.section(":", 1)); - else display_ratio = KdenliveDoc::getDisplayRatio(m_src); - mltParameters << "aspect=" + QLocale().toString(display_ratio); - + if (m_src.startsWith(QLatin1String("consumer:"))) display_ratio = KdenliveDoc::getDisplayRatio(m_src.section(QLatin1String(":"), 1)); + else display_ratio = KdenliveDoc::getDisplayRatio(m_src); + mltParameters << QLatin1String("aspect=") + QLocale().toString(display_ratio); + // Ask for progress reporting - mltParameters << "progress=1"; + mltParameters << QLatin1String("progress=1"); - m_jobProcess = new QProcess; + m_jobProcess = new QProcess; m_jobProcess->setProcessChannelMode(QProcess::MergedChannels); m_jobProcess->start(KdenliveSettings::rendererpath(), mltParameters); m_jobProcess->waitForStarted(); } - else if (clipType == IMAGE) { + else if (clipType == Image) { m_isFfmpegJob = false; // Image proxy QImage i(m_src); if (i.isNull()) { - m_errorMessage.append(i18n("Cannot load image %1.", m_src)); - setStatus(JOBCRASHED); - return; - } - + m_errorMessage.append(i18n("Cannot load image %1.", m_src)); + setStatus(JobCrashed); + return; + } + QImage proxy; - // Images are scaled to profile size. + // Images are scaled to profile size. //TODO: Make it be configurable? if (i.width() > i.height()) proxy = i.scaledToWidth(m_renderWidth); else proxy = i.scaledToHeight(m_renderHeight); @@ -98,47 +101,47 @@ void ProxyJob::startJob() QMatrix matrix; switch ( m_exif ) { - case 2: - matrix.scale( -1, 1 ); - break; - case 3: - matrix.rotate( 180 ); - break; - case 4: - matrix.scale( 1, -1 ); - break; - case 5: - matrix.rotate( 270 ); - matrix.scale( -1, 1 ); - break; - case 6: - matrix.rotate( 90 ); - break; - case 7: - matrix.rotate( 90 ); - matrix.scale( -1, 1 ); - break; - case 8: - matrix.rotate( 270 ); - break; + case 2: + matrix.scale( -1, 1 ); + break; + case 3: + matrix.rotate( 180 ); + break; + case 4: + matrix.scale( 1, -1 ); + break; + case 5: + matrix.rotate( 270 ); + matrix.scale( -1, 1 ); + break; + case 6: + matrix.rotate( 90 ); + break; + case 7: + matrix.rotate( 90 ); + matrix.scale( -1, 1 ); + break; + case 8: + matrix.rotate( 270 ); + break; } processed = proxy.transformed( matrix ); processed.save(m_dest); + } else { + proxy.save(m_dest); } - else proxy.save(m_dest); - setStatus(JOBDONE); - return; - } - else { + setStatus(JobDone); + return; + } else { m_isFfmpegJob = true; - QStringList parameters; - parameters << "-i" << m_src; + QStringList parameters; + parameters << QLatin1String("-i") << m_src; QString params = m_proxyParams; - foreach(const QString &s, params.split(' ')) + foreach(const QString &s, params.split(QLatin1Char(' '))) parameters << s; // Make sure we don't block when proxy file already exists - parameters << "-y"; + parameters << QLatin1String("-y"); parameters << m_dest; m_jobProcess = new QProcess; m_jobProcess->setProcessChannelMode(QProcess::MergedChannels); @@ -147,7 +150,7 @@ void ProxyJob::startJob() } while (m_jobProcess->state() != QProcess::NotRunning) { processLogInfo(); - if (m_jobStatus == JOBABORTED) { + if (m_jobStatus == JobAborted) { emit cancelRunningJob(m_clipId, cancelProperties()); m_jobProcess->close(); m_jobProcess->waitForFinished(); @@ -156,21 +159,21 @@ void ProxyJob::startJob() m_jobProcess->waitForFinished(400); } - if (m_jobStatus != JOBABORTED) { + if (m_jobStatus != JobAborted) { int result = m_jobProcess->exitStatus(); if (result == QProcess::NormalExit) { if (QFileInfo(m_dest).size() == 0) { // File was not created processLogInfo(); m_errorMessage.append(i18n("Failed to create proxy clip.")); - setStatus(JOBCRASHED); + setStatus(JobCrashed); } - else setStatus(JOBDONE); + else setStatus(JobDone); } else if (result == QProcess::CrashExit) { // Proxy process crashed QFile::remove(m_dest); - setStatus(JOBCRASHED); + setStatus(JobCrashed); } } @@ -180,24 +183,27 @@ void ProxyJob::startJob() void ProxyJob::processLogInfo() { - if (!m_jobProcess || m_jobStatus == JOBABORTED) return; - QString log = m_jobProcess->readAll(); - if (!log.isEmpty()) m_logDetails.append(log + '\n'); - else return; + if (!m_jobProcess || m_jobStatus == JobAborted) return; + QString log = QString::fromUtf8(m_jobProcess->readAll()); + if (!log.isEmpty()) + m_logDetails.append(log + QLatin1Char('\n')); + else + return; + int progress; if (m_isFfmpegJob) { // Parse FFmpeg output if (m_jobDuration == 0) { - if (log.contains("Duration:")) { - QString data = log.section("Duration:", 1, 1).section(',', 0, 0).simplified(); - QStringList numbers = data.split(':'); + if (log.contains(QLatin1String("Duration:"))) { + QString data = log.section(QLatin1String("Duration:"), 1, 1).section(QLatin1Char(','), 0, 0).simplified(); + QStringList numbers = data.split(QLatin1Char(':')); m_jobDuration = (int) (numbers.at(0).toInt() * 3600 + numbers.at(1).toInt() * 60 + numbers.at(2).toDouble()); } } - else if (log.contains("time=")) { - QString time = log.section("time=", 1, 1).simplified().section(' ', 0, 0); - if (time.contains(':')) { - QStringList numbers = time.split(':'); + else if (log.contains(QLatin1String("time="))) { + QString time = log.section(QLatin1String("time="), 1, 1).simplified().section(QLatin1Char(' '), 0, 0); + if (time.contains(QLatin1Char(':'))) { + QStringList numbers = time.split(QLatin1Char(':')); progress = numbers.at(0).toInt() * 3600 + numbers.at(1).toInt() * 60 + numbers.at(2).toDouble(); } else progress = (int) time.toDouble(); @@ -206,8 +212,8 @@ void ProxyJob::processLogInfo() } else { // Parse MLT output - if (log.contains("percentage:")) { - progress = log.section("percentage:", 1).simplified().section(' ', 0, 0).toInt(); + if (log.contains(QLatin1String("percentage:"))) { + progress = log.section(QLatin1String("percentage:"), 1).simplified().section(QLatin1Char(' '), 0, 0).toInt(); emit jobProgress(m_clipId, progress, jobType); } } @@ -225,7 +231,7 @@ const QString ProxyJob::destination() const stringMap ProxyJob::cancelProperties() { QMap props; - props.insert("proxy", "-"); + props.insert(QLatin1String("proxy"), QLatin1String("-")); return props; } @@ -233,15 +239,17 @@ const QString ProxyJob::statusMessage() { QString statusInfo; switch (m_jobStatus) { - case JOBWORKING: - statusInfo = i18n("Creating proxy"); - break; - case JOBWAITING: - statusInfo = i18n("Waiting - proxy"); - break; - default: - break; + case JobWorking: + statusInfo = i18n("Creating proxy"); + break; + case JobWaiting: + statusInfo = i18n("Waiting - proxy"); + break; + default: + break; } return statusInfo; } + +#include "proxyclipjob.moc"