diff --git a/.gitignore b/.gitignore index 2c6becc4..30df9357 100644 --- a/.gitignore +++ b/.gitignore @@ -33,6 +33,3 @@ # Build Directory build*/ - -# Data -src/data/ffmpeg diff --git a/src/AnimeEffects.pro b/src/AnimeEffects.pro index 774e51f2..b2d18b46 100644 --- a/src/AnimeEffects.pro +++ b/src/AnimeEffects.pro @@ -12,15 +12,19 @@ CONFIG += ordered # copy directory win32 { copydata.commands = $(COPY_DIR) $$shell_path($$PWD/data) $$shell_path($$OUT_PWD/data) -first.depends = $(first) copydata +copytools.commands = $(COPY_DIR) $$shell_path($$PWD/../tools) $$shell_path($$OUT_PWD/tools) +first.depends = $(first) copydata copytools export(first.depends) export(copydata.commands) -QMAKE_EXTRA_TARGETS += first copydata +export(copytools.commands) +QMAKE_EXTRA_TARGETS += first copydata copytools } unix { copydata.commands = rsync -ru $$shell_path($$PWD/data) $$shell_path($$OUT_PWD) -first.depends = $(first) copydata +copytools.commands = rsync -ru $$shell_path($$PWD/../tools) $$shell_path($$OUT_PWD) +first.depends = $(first) copydata copytools export(first.depends) export(copydata.commands) -QMAKE_EXTRA_TARGETS += first copydata +export(copytools.commands) +QMAKE_EXTRA_TARGETS += first copydata copytools } diff --git a/src/ctrl/Exporter.cpp b/src/ctrl/Exporter.cpp index c892962a..0bf64bd2 100644 --- a/src/ctrl/Exporter.cpp +++ b/src/ctrl/Exporter.cpp @@ -66,6 +66,7 @@ Exporter::Exporter(core::Project& aProject) , mVideoParam() , mVideoExporting() , mFFMpeg() + , mFFMpegErrorOccurred() , mExporting(false) , mIndex(0) , mDigitCount(0) @@ -124,12 +125,17 @@ bool Exporter::execute(const CommonParam& aCommon, const VideoParam& aVideo) mVideoParam = aVideo; mVideoExporting = true; mOriginTimeInfo = mProject.currentTimeInfo(); + mFFMpegErrorOccurred = false; { #if defined(_WIN32) || defined(_WIN64) - const QString program(".\\data\\ffmpeg\\bin\\ffmpeg.exe"); + const QFileInfo localEncoderInfo("./tools/ffmpeg.exe"); + const bool hasLocalEncoder = localEncoderInfo.exists() && localEncoderInfo.isExecutable(); + const QString program = hasLocalEncoder ? QString(".\\tools\\ffmpeg") : QString("ffmpeg"); #else - const QString program("ffmpeg"); + const QFileInfo localEncoderInfo("./tools/ffmpeg"); + const bool hasLocalEncoder = localEncoderInfo.exists() && localEncoderInfo.isExecutable(); + const QString program = hasLocalEncoder ? QString("./tools/ffmpeg") : QString("ffmpeg"); #endif const QString out = " \"" + filePath.absoluteFilePath() + "\""; const QString ifps = " -r " + QString::number(mCommonParam.fps); @@ -159,7 +165,15 @@ bool Exporter::execute(const CommonParam& aCommon, const VideoParam& aVideo) { qDebug() << QString(process->readAll().data()); }); + mFFMpeg->connect(process, &QProcess::errorOccurred, [=](QProcess::ProcessError aError) + { + qDebug() << "error occurred" << aError; + this->mFFMpegErrorOccurred = true; + }); + mFFMpeg->start(command, QIODevice::ReadWrite); + + if (mFFMpegErrorOccurred) return false; } return execute(); @@ -364,6 +378,11 @@ bool Exporter::exportImage(const QImage& aFboImage, int aIndex) aFboImage.save(&buffer, "PNG"); buffer.close(); mFFMpeg->write(byteArray); + + if (mFFMpegErrorOccurred) + { + return false; + } } else { diff --git a/src/ctrl/Exporter.h b/src/ctrl/Exporter.h index 59dfe49f..c8da5550 100644 --- a/src/ctrl/Exporter.h +++ b/src/ctrl/Exporter.h @@ -91,6 +91,7 @@ class Exporter VideoParam mVideoParam; bool mVideoExporting; QScopedPointer mFFMpeg; + bool mFFMpegErrorOccurred; bool mExporting; int mIndex; diff --git a/tools/.gitignore b/tools/.gitignore new file mode 100644 index 00000000..e5953b58 --- /dev/null +++ b/tools/.gitignore @@ -0,0 +1,4 @@ +!*.exe + +# ignore ffmpeg for license fear +ffmpeg*