X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fprojecttree%2Fcutclipjob.cpp;h=a5ed89f98f2de1cf64566a47398f2725c187c809;hb=c24658bd34221d735f0641c924b890e1a6be7101;hp=993c9ebb0a9359addaa174ea134d8072effe5f34;hpb=aa048670f5db361381a1cb29d7f57903a83419d7;p=kdenlive diff --git a/src/projecttree/cutclipjob.cpp b/src/projecttree/cutclipjob.cpp index 993c9ebb..a5ed89f9 100644 --- a/src/projecttree/cutclipjob.cpp +++ b/src/projecttree/cutclipjob.cpp @@ -23,11 +23,11 @@ #include "kdenlivedoc.h" #include -#include +#include -CutClipJob::CutClipJob(CLIPTYPE cType, const QString &id, QStringList parameters) : AbstractClipJob(CUTJOB, cType, id, parameters) +CutClipJob::CutClipJob(ClipType cType, const QString &id, const QStringList ¶meters) : AbstractClipJob(CUTJOB, cType, id, parameters) { - jobStatus = JOBWAITING; + m_jobStatus = JobWaiting; m_dest = parameters.at(0); m_src = parameters.at(1); m_start = parameters.at(2); @@ -35,18 +35,20 @@ CutClipJob::CutClipJob(CLIPTYPE cType, const QString &id, QStringList parameters if (m_start.isEmpty()) { // this is a transcoding job description = i18n("Transcode clip"); + } else { + description = i18n("Cut clip"); } - else description = i18n("Cut clip"); m_jobDuration = parameters.at(4).toInt(); - addClipToProject = parameters.at(5).toInt(); + m_addClipToProject = parameters.at(5).toInt(); + replaceClip = false; if (parameters.count() == 7) m_cutExtraParams = parameters.at(6).simplified(); } -QProcess *CutClipJob::startJob(bool *ok) +void CutClipJob::startJob() { // Special case: playlist clips (.mlt or .kdenlive project files) - if (clipType == AV || clipType == AUDIO || clipType == VIDEO) { - QStringList parameters; + if (clipType == AV || clipType == Audio || clipType == Video) { + QStringList parameters; parameters << "-i" << m_src; if (!m_start.isEmpty()) parameters << "-ss" << m_start <<"-t" << m_end; @@ -60,29 +62,54 @@ QProcess *CutClipJob::startJob(bool *ok) parameters << m_dest; m_jobProcess = new QProcess; m_jobProcess->setProcessChannelMode(QProcess::MergedChannels); - kDebug()<<"// STARTING CIUT JOS: "<start("ffmpeg", parameters); + m_jobProcess->start(KdenliveSettings::ffmpegpath(), parameters); m_jobProcess->waitForStarted(); - QString log = m_jobProcess->readAll(); - if (!log.isEmpty()) m_errorMessage.append(log + '\n'); - return m_jobProcess; + while (m_jobProcess->state() != QProcess::NotRunning) { + processLogInfo(); + if (m_jobStatus == JobAborted) { + m_jobProcess->close(); + m_jobProcess->waitForFinished(); + QFile::remove(m_dest); + } + m_jobProcess->waitForFinished(400); + } + + 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 file.")); + setStatus(JobCrashed); + } else { + setStatus(JobDone); + } + } else if (result == QProcess::CrashExit) { + // Proxy process crashed + QFile::remove(m_dest); + setStatus(JobCrashed); + } + } + delete m_jobProcess; + return; + } else { + m_errorMessage = i18n("Cannot process this clip type."); } - else m_errorMessage = i18n("Cannot process this clip type."); - *ok = false; - return NULL; + setStatus(JobCrashed); + return; } -int CutClipJob::processLogInfo() +void CutClipJob::processLogInfo() { - if (!m_jobProcess || m_jobDuration == 0 || jobStatus == JOBABORTED) return JOBABORTED; + if (!m_jobProcess || m_jobDuration == 0 || m_jobStatus == JobAborted) return; QString log = m_jobProcess->readAll(); - kDebug()<<"// PROgress: "<