From 33de4dd98e00be58ead695ac538338b766d16edc Mon Sep 17 00:00:00 2001 From: lordmulder Date: Fri, 21 Oct 2016 11:59:41 +0200 Subject: [PATCH] Clean up version detection code. --- src/encoder_nvenc.cpp | 21 ++++++--------------- src/encoder_x264.cpp | 27 +++++++++++---------------- src/encoder_x265.cpp | 20 +++++++------------- 3 files changed, 24 insertions(+), 44 deletions(-) diff --git a/src/encoder_nvenc.cpp b/src/encoder_nvenc.cpp index 468467b..c2059cf 100644 --- a/src/encoder_nvenc.cpp +++ b/src/encoder_nvenc.cpp @@ -30,6 +30,7 @@ #include "model_clipInfo.h" //MUtils +#include #include //Qt @@ -39,7 +40,7 @@ #include //x265 version info -static const unsigned int VERSION_NVENCC_MINIMUM_VER = 211; +static const unsigned int VERSION_NVENCC_MINIMUM_VER = 301; static const unsigned int VERSION_NVENCC_MINIMUM_API = 70; // ------------------------------------------------------------ @@ -248,27 +249,17 @@ QString NVEncEncoder::getName(void) const void NVEncEncoder::checkVersion_init(QList &patterns, QStringList &cmdLine) { cmdLine << "--version"; - patterns << new QRegExp("\\bNVEncC\\s+\\(\\w+\\)\\s+(\\d)\\.(\\d+)\\s+by\\s+rigaya\\s+\\[NVENC\\s+API\\s+v(\\d+)\\.(\\d+)\\]", Qt::CaseInsensitive); + patterns << new QRegExp("\\bNVEncC\\s+\\(x\\d+\\)\\s+(\\d)\\.(\\d+).*\\[NVENC\\s+API\\s+v(\\d+)\\.(\\d+)\\]", Qt::CaseInsensitive); } void NVEncEncoder::checkVersion_parseLine(const QString &line, QList &patterns, unsigned int &core, unsigned int &build, bool &modified) { - int offset = -1; - - if((offset = patterns[0]->lastIndexIn(line)) >= 0) + if(patterns[0]->lastIndexIn(line) >= 0) { - bool ok[4] = { false, false, false, false }; unsigned int temp[4]; - temp[0] = patterns[0]->cap(1).toUInt(&ok[0]); - temp[1] = patterns[0]->cap(2).toUInt(&ok[1]); - temp[2] = patterns[0]->cap(2).toUInt(&ok[2]); - temp[3] = patterns[0]->cap(2).toUInt(&ok[3]); - if(ok[0] && ok[1]) + if(MUtils::regexp_parse_uint32(*patterns[0], temp, 4)) { core = (100 * temp[0]) + temp[1]; - } - if (ok[2] && ok[3]) - { build = (10 * temp[2]) + temp[3]; } } @@ -289,7 +280,7 @@ QString NVEncEncoder::printVersion(const unsigned int &revision, const bool &mod unsigned int core, build; splitRevision(revision, core, build); - return tr("NVEncC version: %1.%2").arg(QString::number(core / 100), QString::number(core % 100).leftJustified(2, QLatin1Char('0'))); + return tr("NVEncC version: %1.%2 [API: %3.%4]").arg(QString::number(core / 100), QString::number(core % 100).leftJustified(2, QLatin1Char('0')), QString::number(build / 10), QString::number(build % 10)); } bool NVEncEncoder::isVersionSupported(const unsigned int &revision, const bool &modified) diff --git a/src/encoder_x264.cpp b/src/encoder_x264.cpp index 84182ce..d9a7eca 100644 --- a/src/encoder_x264.cpp +++ b/src/encoder_x264.cpp @@ -30,6 +30,7 @@ #include "model_clipInfo.h" //MUtils +#include #include //Qt @@ -235,28 +236,22 @@ void X264Encoder::checkVersion_init(QList &patterns, QStringList &cmdL void X264Encoder::checkVersion_parseLine(const QString &line, QList &patterns, unsigned int &core, unsigned int &build, bool &modified) { - int offset = -1; - - if((offset = patterns[0]->lastIndexIn(line)) >= 0) + if(patterns[0]->lastIndexIn(line) >= 0) { - bool ok1 = false, ok2 = false; - unsigned int temp1 = patterns[0]->cap(2).toUInt(&ok1); - unsigned int temp2 = patterns[0]->cap(3).toUInt(&ok2); - if(ok1 && ok2 && (temp1 > 0) && (temp2 > 0)) + unsigned int temp[3]; + if(MUtils::regexp_parse_uint32(*patterns[0], temp, 3)) { - core = temp1; - build = temp2; + core = temp[1]; + build = temp[2]; } } - else if((offset = patterns[1]->lastIndexIn(line)) >= 0) + else if(patterns[1]->lastIndexIn(line) >= 0) { - bool ok1 = false, ok2 = false; - unsigned int temp1 = patterns[1]->cap(2).toUInt(&ok1); - unsigned int temp2 = patterns[1]->cap(3).toUInt(&ok2); - if(ok1 && ok2 && (temp1 > 0) && (temp2 > 0)) + unsigned int temp[3]; + if (MUtils::regexp_parse_uint32(*patterns[1], temp, 3)) { - core = temp1; - build = temp2; + core = temp[1]; + build = temp[2]; } modified = true; } diff --git a/src/encoder_x265.cpp b/src/encoder_x265.cpp index 22ec6b5..0a586e0 100644 --- a/src/encoder_x265.cpp +++ b/src/encoder_x265.cpp @@ -30,6 +30,7 @@ #include "model_clipInfo.h" //MUtils +#include #include //Qt @@ -40,7 +41,7 @@ //x265 version info static const unsigned int VERSION_X265_MINIMUM_VER = 21; -static const unsigned int VERSION_X265_MINIMUM_REV = 20; +static const unsigned int VERSION_X265_MINIMUM_REV = 25; // ------------------------------------------------------------ // Helper Macros @@ -235,24 +236,17 @@ void X265Encoder::checkVersion_parseLine(const QString &line, QList &p if((offset = patterns[0]->lastIndexIn(line)) >= 0) { - bool ok[3] = { false, false, false }; unsigned int temp[3]; - temp[0] = patterns[0]->cap(1).toUInt(&ok[0]); - temp[1] = patterns[0]->cap(2).toUInt(&ok[1]); - temp[2] = patterns[0]->cap(3).toUInt(&ok[2]); - if(ok[0] && ok[1]) + if(MUtils::regexp_parse_uint32(*patterns[0], temp, 3)) { - core = (10 * temp[0]) + temp[1]; + core = (10 * temp[0]) + temp[1]; + build = temp[2]; } - if(ok[2]) build = temp[2]; } else if((offset = patterns[1]->lastIndexIn(line)) >= 0) { - bool ok[2] = { false, false }; unsigned int temp[2]; - temp[0] = patterns[1]->cap(1).toUInt(&ok[0]); - temp[1] = patterns[1]->cap(2).toUInt(&ok[1]); - if(ok[0] && ok[1]) + if (MUtils::regexp_parse_uint32(*patterns[0], temp, 2)) { core = (10 * temp[0]) + temp[1]; } @@ -280,7 +274,7 @@ bool X265Encoder::isVersionSupported(const unsigned int &revision, const bool &m if((core < VERSION_X265_MINIMUM_VER) || ((core == VERSION_X265_MINIMUM_VER) && (build < VERSION_X265_MINIMUM_REV))) { - log(tr("\nERROR: Your version of x265 is too old! (Minimum required revision is 0.%1+%2)").arg(QString::number(VERSION_X265_MINIMUM_VER), QString::number(VERSION_X265_MINIMUM_REV))); + log(tr("\nERROR: Your version of x265 is too old! (Minimum required revision is %1.%2+%3)").arg(QString::number(VERSION_X265_MINIMUM_VER / 10), QString::number(VERSION_X265_MINIMUM_VER % 10), QString::number(VERSION_X265_MINIMUM_REV))); return false; } else if(core > VERSION_X265_MINIMUM_VER) -- 2.11.4.GIT