Improved x264 version detection.

This commit is contained in:
LoRd_MuldeR 2012-02-02 04:00:05 +01:00
parent 2a3325b02f
commit e03b846898
2 changed files with 19 additions and 7 deletions

View File

@ -190,7 +190,8 @@ void EncodeThread::encode(void)
//Checking x264 version //Checking x264 version
log(tr("\n--- CHECK VERSION ---\n")); log(tr("\n--- CHECK VERSION ---\n"));
unsigned int revision_x264 = UINT_MAX; unsigned int revision_x264 = UINT_MAX;
ok = ((revision_x264 = checkVersionX264(m_x64)) != UINT_MAX); bool x264_modified = false;
ok = ((revision_x264 = checkVersionX264(m_x64, x264_modified)) != UINT_MAX);
CHECK_STATUS(m_abort, ok); CHECK_STATUS(m_abort, ok);
//Checking avs2yuv version //Checking avs2yuv version
@ -202,7 +203,7 @@ void EncodeThread::encode(void)
} }
//Print versions //Print versions
log(tr("\nx264 revision: %1 (core #%2)").arg(QString::number(revision_x264 % REV_MULT), QString::number(revision_x264 / REV_MULT))); log(tr("\nx264 revision: %1 (core #%2)").arg(QString::number(revision_x264 % REV_MULT), QString::number(revision_x264 / REV_MULT)).append(x264_modified ? tr(" - with custom patches!") : QString()));
if(revision_avs2yuv != UINT_MAX) log(tr("Avs2YUV version: %1.%2.%3").arg(QString::number(revision_avs2yuv / REV_MULT), QString::number((revision_avs2yuv % REV_MULT) / 10),QString::number((revision_avs2yuv % REV_MULT) % 10))); if(revision_avs2yuv != UINT_MAX) log(tr("Avs2YUV version: %1.%2.%3").arg(QString::number(revision_avs2yuv / REV_MULT), QString::number((revision_avs2yuv % REV_MULT) / 10),QString::number((revision_avs2yuv % REV_MULT) % 10)));
//Is x264 revision supported? //Is x264 revision supported?
@ -527,7 +528,7 @@ QStringList EncodeThread::buildCommandLine(bool usePipe, unsigned int frames, in
return cmdLine; return cmdLine;
} }
unsigned int EncodeThread::checkVersionX264(bool x64) unsigned int EncodeThread::checkVersionX264(bool x64, bool &modified)
{ {
QProcess process; QProcess process;
QStringList cmdLine = QStringList() << "--version"; QStringList cmdLine = QStringList() << "--version";
@ -538,13 +539,15 @@ unsigned int EncodeThread::checkVersionX264(bool x64)
return false;; return false;;
} }
QRegExp regExpVersion("\\bx264 (\\d)\\.(\\d+)\\.(\\d+)\\b"); QRegExp regExpVersion("\\bx264\\s(\\d)\\.(\\d+)\\.(\\d+)\\s([a-f0-9]{7})", Qt::CaseInsensitive);
QRegExp regExpVersionMod("\\bx264 (\\d)\\.(\\d+)\\.(\\d+)", Qt::CaseInsensitive);
bool bTimeout = false; bool bTimeout = false;
bool bAborted = false; bool bAborted = false;
unsigned int revision = UINT_MAX; unsigned int revision = UINT_MAX;
unsigned int coreVers = UINT_MAX; unsigned int coreVers = UINT_MAX;
modified = false;
while(process.state() != QProcess::NotRunning) while(process.state() != QProcess::NotRunning)
{ {
@ -580,6 +583,15 @@ unsigned int EncodeThread::checkVersionX264(bool x64)
if(ok1) coreVers = temp1; if(ok1) coreVers = temp1;
if(ok2) revision = temp2; if(ok2) revision = temp2;
} }
else if((offset = regExpVersionMod.lastIndexIn(text)) >= 0)
{
bool ok1 = false, ok2 = false;
unsigned int temp1 = regExpVersionMod.cap(2).toUInt(&ok1);
unsigned int temp2 = regExpVersionMod.cap(3).toUInt(&ok2);
if(ok1) coreVers = temp1;
if(ok2) revision = temp2;
modified = true;
}
if(!text.isEmpty()) if(!text.isEmpty())
{ {
log(text); log(text);
@ -623,8 +635,8 @@ unsigned int EncodeThread::checkVersionAvs2yuv(void)
return false;; return false;;
} }
QRegExp regExpVersionMod("\\bAvs2YUV (\\d+).(\\d+)bm(\\d)\\b"); QRegExp regExpVersionMod("\\bAvs2YUV (\\d+).(\\d+)bm(\\d)\\b", Qt::CaseInsensitive);
QRegExp regExpVersionOld("\\bAvs2YUV (\\d+).(\\d+)\\b"); QRegExp regExpVersionOld("\\bAvs2YUV (\\d+).(\\d+)\\b", Qt::CaseInsensitive);
bool bTimeout = false; bool bTimeout = false;
bool bAborted = false; bool bAborted = false;

View File

@ -109,7 +109,7 @@ protected:
void encode(void); void encode(void);
bool runEncodingPass(bool x64, bool usePipe, unsigned int frames, int pass = 0, const QString &passLogFile = QString()); bool runEncodingPass(bool x64, bool usePipe, unsigned int frames, int pass = 0, const QString &passLogFile = QString());
QStringList buildCommandLine(bool usePipe, unsigned int frames, int pass = 0, const QString &passLogFile = QString()); QStringList buildCommandLine(bool usePipe, unsigned int frames, int pass = 0, const QString &passLogFile = QString());
unsigned int checkVersionX264(bool x64); unsigned int checkVersionX264(bool x64, bool &modified);
unsigned int checkVersionAvs2yuv(void); unsigned int checkVersionAvs2yuv(void);
bool checkProperties(unsigned int &frames); bool checkProperties(unsigned int &frames);