From 024355831d34b6bb69789cdab65f9c9c7625280f Mon Sep 17 00:00:00 2001 From: lordmulder Date: Wed, 26 Feb 2014 17:39:36 +0100 Subject: [PATCH] Actually make encoding with x265 work, from y4m sources as well as from STDIN sources. Also various smaller fixes. --- src/encoder_abstract.cpp | 7 ++++++- src/encoder_x264.cpp | 4 ++-- src/encoder_x264.h | 2 +- src/encoder_x265.cpp | 16 ++++++++++------ src/encoder_x265.h | 2 +- src/source_avisynth.cpp | 6 ++++-- src/source_avisynth.h | 2 +- src/source_vapoursynth.cpp | 4 ++-- src/source_vapoursynth.h | 2 +- src/thread_encode.cpp | 26 ++++++++++++++++---------- src/tool_abstract.h | 2 +- src/version.h | 2 +- 12 files changed, 46 insertions(+), 29 deletions(-) diff --git a/src/encoder_abstract.cpp b/src/encoder_abstract.cpp index 537915f..24d70cb 100644 --- a/src/encoder_abstract.cpp +++ b/src/encoder_abstract.cpp @@ -214,7 +214,12 @@ bool AbstractEncoder::runEncodingPass(AbstractSource* pipedSource, const QString { if(!(bTimeout || bAborted)) { - log(tr("\nPROCESS EXITED WITH ERROR CODE: %1").arg(QString::number(processEncode.exitCode()))); + const int exitCode = processEncode.exitCode(); + if((exitCode < 0) || (exitCode >= 32)) + { + log(tr("\nFATAL ERROR: The encoder process has crashed, your encode probably is *incomplete* !!!")); + } + log(tr("\nPROCESS EXITED WITH ERROR CODE: %1").arg(QString::number(exitCode))); } processEncode.close(); processInput.close(); diff --git a/src/encoder_x264.cpp b/src/encoder_x264.cpp index ddd7285..fbacbb3 100644 --- a/src/encoder_x264.cpp +++ b/src/encoder_x264.cpp @@ -147,9 +147,9 @@ void X264Encoder::checkVersion_parseLine(const QString &line, QList &p } } -void X264Encoder::printVersion(const unsigned int &revision, const bool &modified) +QString X264Encoder::printVersion(const unsigned int &revision, const bool &modified) { - log(tr("\nx264 revision: %1 (core #%2)\n").arg(QString::number(revision % REV_MULT), QString::number(revision / REV_MULT)).append(modified ? tr(" - with custom patches!") : QString())); + return tr("x264 revision: %1 (core #%2)").arg(QString::number(revision % REV_MULT), QString::number(revision / REV_MULT)).append(modified ? tr(" - with custom patches!") : QString()); } bool X264Encoder::isVersionSupported(const unsigned int &revision, const bool &modified) diff --git a/src/encoder_x264.h b/src/encoder_x264.h index ba8a218..71c43a4 100644 --- a/src/encoder_x264.h +++ b/src/encoder_x264.h @@ -31,7 +31,7 @@ public: virtual const QString &getName(void); - virtual void printVersion(const unsigned int &revision, const bool &modified); + virtual QString printVersion(const unsigned int &revision, const bool &modified); virtual bool isVersionSupported(const unsigned int &revision, const bool &modified); protected: diff --git a/src/encoder_x265.cpp b/src/encoder_x265.cpp index f6a54c0..2622c3b 100644 --- a/src/encoder_x265.cpp +++ b/src/encoder_x265.cpp @@ -32,7 +32,7 @@ //x265 version info static const unsigned int X265_VERSION_X264_MINIMUM_VER = 7; -static const unsigned int X265_VERSION_X264_MINIMUM_REV = 167; +static const unsigned int X265_VERSION_X264_MINIMUM_REV = 232; // ------------------------------------------------------------ // Helper Macros @@ -116,6 +116,7 @@ void X265Encoder::checkVersion_init(QList &patterns, QStringList &cmdL void X265Encoder::checkVersion_parseLine(const QString &line, QList &patterns, unsigned int &coreVers, unsigned int &revision, bool &modified) { int offset = -1; + if((offset = patterns[0]->lastIndexIn(line)) >= 0) { bool ok1 = false, ok2 = false; @@ -124,11 +125,16 @@ void X265Encoder::checkVersion_parseLine(const QString &line, QList &p if(ok1) coreVers = temp1; if(ok2) revision = temp2; } + + if(!line.isEmpty()) + { + log(line); + } } -void X265Encoder::printVersion(const unsigned int &revision, const bool &modified) +QString X265Encoder::printVersion(const unsigned int &revision, const bool &modified) { - log(tr("\nx265 version: 0.%1+%2\n").arg(QString::number(revision / REV_MULT), QString::number(revision % REV_MULT))); + return tr("x265 version: 0.%1+%2").arg(QString::number(revision / REV_MULT), QString::number(revision % REV_MULT)); } bool X265Encoder::isVersionSupported(const unsigned int &revision, const bool &modified) @@ -215,12 +221,10 @@ void X265Encoder::buildCommandLine(QStringList &cmdLine, const bool &usePipe, co { if(frames < 1) throw "Frames not set!"; cmdLine << "--frames" << QString::number(frames); - cmdLine << "--demuxer" << "y4m"; - cmdLine << "--stdin" << "y4m" << "-"; + cmdLine << "--y4m" << "-"; } else { - cmdLine << "--index" << QDir::toNativeSeparators(indexFile); cmdLine << QDir::toNativeSeparators(m_sourceFile); } } diff --git a/src/encoder_x265.h b/src/encoder_x265.h index c3422e4..c3b4e07 100644 --- a/src/encoder_x265.h +++ b/src/encoder_x265.h @@ -31,7 +31,7 @@ public: virtual const QString &getName(void); - virtual void printVersion(const unsigned int &revision, const bool &modified); + virtual QString printVersion(const unsigned int &revision, const bool &modified); virtual bool isVersionSupported(const unsigned int &revision, const bool &modified); protected: diff --git a/src/source_avisynth.cpp b/src/source_avisynth.cpp index a697a3a..75e0d60 100644 --- a/src/source_avisynth.cpp +++ b/src/source_avisynth.cpp @@ -90,6 +90,7 @@ void AvisynthSource::checkVersion_parseLine(const QString &line, QList coreVers = temp1; revision = temp2; } + log(line); } else if((offset = patterns[1]->lastIndexIn(line)) >= 0) { @@ -103,6 +104,7 @@ void AvisynthSource::checkVersion_parseLine(const QString &line, QList revision = (temp2 * 10) + (temp3 % 10); } modified = true; + log(line); } } @@ -111,9 +113,9 @@ bool AvisynthSource::checkVersion_succeeded(const int &exitCode) return (exitCode == EXIT_SUCCESS) || (exitCode == 2); } -void AvisynthSource::printVersion(const unsigned int &revision, const bool &modified) +QString AvisynthSource::printVersion(const unsigned int &revision, const bool &modified) { - log(tr("Avs2YUV version: %1.%2.%3").arg(QString::number(revision / REV_MULT), QString::number((revision % REV_MULT) / 10),QString::number((revision % REV_MULT) % 10))); + return tr("Avs2YUV version: %1.%2.%3").arg(QString::number(revision / REV_MULT), QString::number((revision % REV_MULT) / 10),QString::number((revision % REV_MULT) % 10)); } bool AvisynthSource::isVersionSupported(const unsigned int &revision, const bool &modified) diff --git a/src/source_avisynth.h b/src/source_avisynth.h index b9f2638..5b9abea 100644 --- a/src/source_avisynth.h +++ b/src/source_avisynth.h @@ -32,7 +32,7 @@ public: virtual const QString &getName(void); virtual bool isSourceAvailable(void); - virtual void printVersion(const unsigned int &revision, const bool &modified); + virtual QString printVersion(const unsigned int &revision, const bool &modified); virtual bool isVersionSupported(const unsigned int &revision, const bool &modified); virtual void flushProcess(QProcess &processInput); diff --git a/src/source_vapoursynth.cpp b/src/source_vapoursynth.cpp index 0a085ec..ec643d7 100644 --- a/src/source_vapoursynth.cpp +++ b/src/source_vapoursynth.cpp @@ -97,9 +97,9 @@ void VapoursynthSource::checkVersion_parseLine(const QString &line, QListcheckVersion(encoderModified); + encoderRevision = m_encoder->checkVersion(encoderModified); CHECK_STATUS(m_abort, (ok = (encoderRevision != UINT_MAX))); - - //Print source versions - m_encoder->printVersion(encoderRevision, encoderModified); //Is encoder version suppoprted? CHECK_STATUS(m_abort, (ok = m_encoder->isVersionSupported(encoderRevision, encoderModified))); if(m_pipedSource) { + log("\nDetect video source version:\n"); + //Is source type available? CHECK_STATUS(m_abort, (ok = m_pipedSource->isSourceAvailable())); //Checking source version - bool sourceModified = false; - const unsigned int sourceRevision = m_pipedSource->checkVersion(sourceModified); + sourceRevision = m_pipedSource->checkVersion(sourceModified); CHECK_STATUS(m_abort, (ok = (sourceRevision != UINT_MAX))); - //Print source versions - m_pipedSource->printVersion(sourceRevision, sourceModified); - //Is source version supported? CHECK_STATUS(m_abort, (ok = m_pipedSource->isVersionSupported(sourceRevision, sourceModified))); } + //Print tool versions + log(QString("\n> %1").arg(m_encoder->printVersion(encoderRevision, encoderModified))); + if(m_pipedSource) + { + log(QString("> %1").arg(m_pipedSource->printVersion(sourceRevision, sourceModified))); + } + // ----------------------------------------------------------------------------------- // Detect Source Info // ----------------------------------------------------------------------------------- diff --git a/src/tool_abstract.h b/src/tool_abstract.h index 2904cb8..d9f9cae 100644 --- a/src/tool_abstract.h +++ b/src/tool_abstract.h @@ -49,7 +49,7 @@ public: virtual unsigned int checkVersion(bool &modified); virtual bool isVersionSupported(const unsigned int &revision, const bool &modified) = 0; - virtual void printVersion(const unsigned int &revision, const bool &modified) = 0; + virtual QString printVersion(const unsigned int &revision, const bool &modified) = 0; static const unsigned int REV_MULT = 10000; diff --git a/src/version.h b/src/version.h index 864dae9..76b2b88 100644 --- a/src/version.h +++ b/src/version.h @@ -26,7 +26,7 @@ #define VER_X264_MAJOR 2 #define VER_X264_MINOR 3 #define VER_X264_PATCH 3 -#define VER_X264_BUILD 805 +#define VER_X264_BUILD 807 #define VER_X264_PORTABLE_EDITION (0) -- 2.11.0