Fixed the EncodeThread class to work with the recent model changes.

This commit is contained in:
LoRd_MuldeR 2014-02-14 23:14:39 +01:00
parent ac9c8b3ce9
commit d97545c2e4
5 changed files with 53 additions and 53 deletions

View File

@ -76,3 +76,8 @@ QString AVS_BINARY(const SysinfoModel *sysinfo, const PreferencesModel *preferen
{ {
return QString("%1/toolset/%2/avs2yuv_%2.exe").arg(sysinfo->getAppPath(), preferences->getUseAvisyth64Bit() ? "x64": "x86"); return QString("%1/toolset/%2/avs2yuv_%2.exe").arg(sysinfo->getAppPath(), preferences->getUseAvisyth64Bit() ? "x64": "x86");
} }
QString VPS_BINARY(const SysinfoModel *sysinfo, const PreferencesModel *preferences)
{
return QString("%1/vspipe.exe").arg(sysinfo->getVPSPath());
}

View File

@ -27,3 +27,4 @@ class OptionsModel;
QString ENC_BINARY(const SysinfoModel *sysinfo, const OptionsModel *options); QString ENC_BINARY(const SysinfoModel *sysinfo, const OptionsModel *options);
QString AVS_BINARY(const SysinfoModel *sysinfo, const PreferencesModel *preferences); QString AVS_BINARY(const SysinfoModel *sysinfo, const PreferencesModel *preferences);
QString VPS_BINARY(const SysinfoModel *sysinfo, const PreferencesModel *preferences);

View File

@ -230,10 +230,11 @@ void EncodeThread::encode(void)
log(tr("Source file: %1").arg(QDir::toNativeSeparators(m_sourceFileName))); log(tr("Source file: %1").arg(QDir::toNativeSeparators(m_sourceFileName)));
log(tr("Output file: %1").arg(QDir::toNativeSeparators(m_outputFileName))); log(tr("Output file: %1").arg(QDir::toNativeSeparators(m_outputFileName)));
if(!m_sysinfo->getVPSPath().isEmpty()) //Print system info
{ log(tr("\n--- SYSTEMINFO ---\n"));
log(tr("\nVapourSynth: %1").arg(QDir::toNativeSeparators(m_sysinfo->getVPSPath()))); log(tr("Binary Path: %1").arg(QDir::toNativeSeparators(m_sysinfo->getAppPath())));
} log(tr("Avisynth 2x: %1").arg(m_sysinfo->hasAVSSupport() ? tr("YES") : tr("NO")));
log(tr("VapourSynth: %1").arg(m_sysinfo->hasVPSSupport() ? QDir::toNativeSeparators(m_sysinfo->getVPSPath()) : tr("N/A")));
//Print encoder settings //Print encoder settings
log(tr("\n--- SETTINGS ---\n")); log(tr("\n--- SETTINGS ---\n"));
@ -243,8 +244,6 @@ void EncodeThread::encode(void)
log(tr("Profile: %1").arg(m_options->profile())); log(tr("Profile: %1").arg(m_options->profile()));
log(tr("Custom: %1").arg(m_options->customEncParams().isEmpty() ? tr("(None)") : m_options->customEncParams())); log(tr("Custom: %1").arg(m_options->customEncParams().isEmpty() ? tr("(None)") : m_options->customEncParams()));
log(m_sysinfo->getAppPath());
bool ok = false; bool ok = false;
unsigned int frames = 0; unsigned int frames = 0;
@ -264,7 +263,7 @@ void EncodeThread::encode(void)
switch(inputType) switch(inputType)
{ {
case INPUT_AVISYN: case INPUT_AVISYN:
ok = ((revision_avs2yuv = checkVersionAvs2yuv(m_avs2yuv_x64)) != UINT_MAX); ok = ((revision_avs2yuv = checkVersionAvs2yuv()) != UINT_MAX);
CHECK_STATUS(m_abort, ok); CHECK_STATUS(m_abort, ok);
break; break;
case INPUT_VAPOUR: case INPUT_VAPOUR:
@ -304,11 +303,11 @@ void EncodeThread::encode(void)
switch(inputType) switch(inputType)
{ {
case INPUT_AVISYN: case INPUT_AVISYN:
ok = checkPropertiesAvisynth(m_avs2yuv_x64, frames); ok = checkPropertiesAVS(frames);
CHECK_STATUS(m_abort, ok); CHECK_STATUS(m_abort, ok);
break; break;
case INPUT_VAPOUR: case INPUT_VAPOUR:
ok = checkPropertiesVapoursynth(frames); ok = checkPropertiesVPS(frames);
CHECK_STATUS(m_abort, ok); CHECK_STATUS(m_abort, ok);
break; break;
} }
@ -330,17 +329,17 @@ void EncodeThread::encode(void)
} }
log(tr("\n--- PASS 1 ---\n")); log(tr("\n--- PASS 1 ---\n"));
ok = runEncodingPass(m_x264_x64, m_x264_10bit, m_avs2yuv_x64, inputType, frames, indexFile, 1, passLogFile); ok = runEncodingPass(inputType, frames, indexFile, 1, passLogFile);
CHECK_STATUS(m_abort, ok); CHECK_STATUS(m_abort, ok);
log(tr("\n--- PASS 2 ---\n")); log(tr("\n--- PASS 2 ---\n"));
ok = runEncodingPass(m_x264_x64, m_x264_10bit, m_avs2yuv_x64, inputType, frames, indexFile, 2, passLogFile); ok = runEncodingPass(inputType, frames, indexFile, 2, passLogFile);
CHECK_STATUS(m_abort, ok); CHECK_STATUS(m_abort, ok);
} }
else else
{ {
log(tr("\n--- ENCODING ---\n")); log(tr("\n--- ENCODING ---\n"));
ok = runEncodingPass(m_x264_x64, m_x264_10bit, m_avs2yuv_x64, inputType, frames, indexFile); ok = runEncodingPass(inputType, frames, indexFile);
CHECK_STATUS(m_abort, ok); CHECK_STATUS(m_abort, ok);
} }
@ -366,7 +365,7 @@ void EncodeThread::encode(void)
} \ } \
while(0) while(0)
bool EncodeThread::runEncodingPass(bool x264_x64, bool x264_10bit, bool avs2yuv_x64, int inputType, unsigned int frames, const QString &indexFile, int pass, const QString &passLogFile) bool EncodeThread::runEncodingPass(const int &inputType, const unsigned int &frames, const QString &indexFile, const int &pass, const QString &passLogFile)
{ {
QProcess processEncode, processInput; QProcess processEncode, processInput;
@ -384,7 +383,7 @@ bool EncodeThread::runEncodingPass(bool x264_x64, bool x264_10bit, bool avs2yuv_
cmdLine_Input << QDir::toNativeSeparators(x264_path2ansi(m_sourceFileName, true)); cmdLine_Input << QDir::toNativeSeparators(x264_path2ansi(m_sourceFileName, true));
cmdLine_Input << "-"; cmdLine_Input << "-";
log("Creating Avisynth process:"); log("Creating Avisynth process:");
if(!startProcess(processInput, AVS2_BINARY(m_binDir, avs2yuv_x64), cmdLine_Input, false)) if(!startProcess(processInput, AVS_BINARY(m_sysinfo, m_preferences), cmdLine_Input, false))
{ {
return false; return false;
} }
@ -393,7 +392,7 @@ bool EncodeThread::runEncodingPass(bool x264_x64, bool x264_10bit, bool avs2yuv_
cmdLine_Input << QDir::toNativeSeparators(x264_path2ansi(m_sourceFileName, true)); cmdLine_Input << QDir::toNativeSeparators(x264_path2ansi(m_sourceFileName, true));
cmdLine_Input << "-" << "-y4m"; cmdLine_Input << "-" << "-y4m";
log("Creating Vapoursynth process:"); log("Creating Vapoursynth process:");
if(!startProcess(processInput, VPSP_BINARY(m_vpsDir), cmdLine_Input, false)) if(!startProcess(processInput, VPS_BINARY(m_sysinfo, m_preferences), cmdLine_Input, false))
{ {
return false; return false;
} }
@ -403,10 +402,10 @@ bool EncodeThread::runEncodingPass(bool x264_x64, bool x264_10bit, bool avs2yuv_
} }
} }
QStringList cmdLine_Encode = buildCommandLine((inputType != INPUT_NATIVE), x264_10bit, frames, indexFile, pass, passLogFile); QStringList cmdLine_Encode = buildCommandLine((inputType != INPUT_NATIVE), frames, indexFile, pass, passLogFile);
log("Creating x264 process:"); log("Creating x264 process:");
if(!startProcess(processEncode, X264_BINARY(m_binDir, x264_10bit, x264_x64), cmdLine_Encode)) if(!startProcess(processEncode, ENC_BINARY(m_sysinfo, m_options), cmdLine_Encode))
{ {
return false; return false;
} }
@ -464,7 +463,7 @@ bool EncodeThread::runEncodingPass(bool x264_x64, bool x264_10bit, bool avs2yuv_
{ {
if(++waitCounter > m_processTimeoutMaxCounter) if(++waitCounter > m_processTimeoutMaxCounter)
{ {
if(m_abortOnTimeout) if(m_preferences->getAbortOnTimeout())
{ {
processEncode.kill(); processEncode.kill();
qWarning("x264 process timed out <-- killing!"); qWarning("x264 process timed out <-- killing!");
@ -627,7 +626,7 @@ bool EncodeThread::runEncodingPass(bool x264_x64, bool x264_10bit, bool avs2yuv_
return true; return true;
} }
QStringList EncodeThread::buildCommandLine(bool usePipe, bool use10Bit, unsigned int frames, const QString &indexFile, int pass, const QString &passLogFile) QStringList EncodeThread::buildCommandLine(const bool &usePipe, const unsigned int &frames, const QString &indexFile, const int &pass, const QString &passLogFile)
{ {
QStringList cmdLine; QStringList cmdLine;
double crf_int = 0.0, crf_frc = 0.0; double crf_int = 0.0, crf_frc = 0.0;
@ -663,20 +662,9 @@ QStringList EncodeThread::buildCommandLine(bool usePipe, bool use10Bit, unsigned
cmdLine << "--tune" << m_options->tune().toLower(); cmdLine << "--tune" << m_options->tune().toLower();
} }
if(m_options->profile().compare("auto", Qt::CaseInsensitive)) if(m_options->profile().compare("auto", Qt::CaseInsensitive) != 0)
{ {
if(use10Bit) if((m_options->encType() == OptionsModel::EncType_X264) && (m_options->encVariant() == OptionsModel::EncVariant_LoBit))
{
if(m_options->profile().compare("baseline", Qt::CaseInsensitive) || m_options->profile().compare("main", Qt::CaseInsensitive) || m_options->profile().compare("high", Qt::CaseInsensitive))
{
log(tr("WARNING: Selected H.264 Profile not compatible with 10-Bit encoding. Ignoring!\n"));
}
else
{
cmdLine << "--profile" << m_options->profile().toLower();
}
}
else
{ {
cmdLine << "--profile" << m_options->profile().toLower(); cmdLine << "--profile" << m_options->profile().toLower();
} }
@ -719,7 +707,7 @@ QStringList EncodeThread::buildCommandLine(bool usePipe, bool use10Bit, unsigned
unsigned int EncodeThread::checkVersionX264(bool &modified) unsigned int EncodeThread::checkVersionX264(bool &modified)
{ {
if(m_skipVersionTest) if(m_preferences->getSkipVersionTest())
{ {
log("Warning: Skipping x264 version check this time!"); log("Warning: Skipping x264 version check this time!");
return (999 * REV_MULT) + (9999 % REV_MULT); return (999 * REV_MULT) + (9999 % REV_MULT);
@ -820,12 +808,18 @@ unsigned int EncodeThread::checkVersionX264(bool &modified)
return (coreVers * REV_MULT) + (revision % REV_MULT); return (coreVers * REV_MULT) + (revision % REV_MULT);
} }
unsigned int EncodeThread::checkVersionAvs2yuv(bool x64) unsigned int EncodeThread::checkVersionAvs2yuv(void)
{ {
if(!m_sysinfo->hasAVSSupport())
{
log(tr("\nAVS INPUT REQUIRES VAPOURSYNTH, BUT IT IS *NOT* AVAILABLE !!!"));
return false;
}
QProcess process; QProcess process;
log("\nCreating process:"); log("\nCreating process:");
if(!startProcess(process, AVS2_BINARY(m_binDir, x64), QStringList())) if(!startProcess(process, AVS_BINARY(m_sysinfo, m_preferences), QStringList()))
{ {
return false;; return false;;
} }
@ -920,10 +914,10 @@ unsigned int EncodeThread::checkVersionAvs2yuv(bool x64)
return (ver_maj * REV_MULT) + ((ver_min % REV_MULT) * 10) + (ver_mod % 10); return (ver_maj * REV_MULT) + ((ver_min % REV_MULT) * 10) + (ver_mod % 10);
} }
bool EncodeThread::checkVersionVapoursynth(/*const QString &vspipePath*/) bool EncodeThread::checkVersionVapoursynth(void)
{ {
//Is VapourSynth available at all? //Is VapourSynth available at all?
if(m_vpsDir.isEmpty() || (!QFileInfo(VPSP_BINARY(m_vpsDir)).isFile())) if((!m_sysinfo->hasVPSSupport()) || (!QFileInfo(VPS_BINARY(m_sysinfo, m_preferences)).isFile()))
{ {
log(tr("\nVPY INPUT REQUIRES VAPOURSYNTH, BUT IT IS *NOT* AVAILABLE !!!")); log(tr("\nVPY INPUT REQUIRES VAPOURSYNTH, BUT IT IS *NOT* AVAILABLE !!!"));
return false; return false;
@ -932,7 +926,7 @@ bool EncodeThread::checkVersionVapoursynth(/*const QString &vspipePath*/)
QProcess process; QProcess process;
log("\nCreating process:"); log("\nCreating process:");
if(!startProcess(process, VPSP_BINARY(m_vpsDir), QStringList())) if(!startProcess(process, VPS_BINARY(m_sysinfo, m_preferences), QStringList()))
{ {
return false;; return false;;
} }
@ -1006,7 +1000,7 @@ bool EncodeThread::checkVersionVapoursynth(/*const QString &vspipePath*/)
return vspipeSignature; return vspipeSignature;
} }
bool EncodeThread::checkPropertiesAvisynth(bool x64, unsigned int &frames) bool EncodeThread::checkPropertiesAVS(unsigned int &frames)
{ {
QProcess process; QProcess process;
QStringList cmdLine; QStringList cmdLine;
@ -1020,7 +1014,7 @@ bool EncodeThread::checkPropertiesAvisynth(bool x64, unsigned int &frames)
cmdLine << QDir::toNativeSeparators(x264_path2ansi(m_sourceFileName, true)) << "NUL"; cmdLine << QDir::toNativeSeparators(x264_path2ansi(m_sourceFileName, true)) << "NUL";
log("Creating process:"); log("Creating process:");
if(!startProcess(process, AVS2_BINARY(m_binDir, x64), cmdLine)) if(!startProcess(process, AVS_BINARY(m_sysinfo, m_preferences), cmdLine))
{ {
return false;; return false;;
} }
@ -1056,7 +1050,7 @@ bool EncodeThread::checkPropertiesAvisynth(bool x64, unsigned int &frames)
{ {
if(++waitCounter > m_processTimeoutMaxCounter) if(++waitCounter > m_processTimeoutMaxCounter)
{ {
if(m_abortOnTimeout) if(m_preferences->getAbortOnTimeout())
{ {
process.kill(); process.kill();
qWarning("Avs2YUV process timed out <-- killing!"); qWarning("Avs2YUV process timed out <-- killing!");
@ -1118,7 +1112,7 @@ bool EncodeThread::checkPropertiesAvisynth(bool x64, unsigned int &frames)
} }
if(text.contains("failed to load avisynth.dll", Qt::CaseInsensitive)) if(text.contains("failed to load avisynth.dll", Qt::CaseInsensitive))
{ {
log(tr("\nWarning: It seems that %1-Bit Avisynth is not currently installed !!!").arg(x64 ? "64" : "32")); log(tr("\nWarning: It seems that %1-Bit Avisynth is not currently installed !!!").arg(m_preferences->getUseAvisyth64Bit() ? "64" : "32"));
} }
if(text.contains(QRegExp("couldn't convert input clip to (YV16|YV24)", Qt::CaseInsensitive))) if(text.contains(QRegExp("couldn't convert input clip to (YV16|YV24)", Qt::CaseInsensitive)))
{ {
@ -1178,7 +1172,7 @@ bool EncodeThread::checkPropertiesAvisynth(bool x64, unsigned int &frames)
return true; return true;
} }
bool EncodeThread::checkPropertiesVapoursynth(/*const QString &vspipePath,*/ unsigned int &frames) bool EncodeThread::checkPropertiesVPS(unsigned int &frames)
{ {
QProcess process; QProcess process;
QStringList cmdLine; QStringList cmdLine;
@ -1187,7 +1181,7 @@ bool EncodeThread::checkPropertiesVapoursynth(/*const QString &vspipePath,*/ uns
cmdLine << "-" << "-info"; cmdLine << "-" << "-info";
log("Creating process:"); log("Creating process:");
if(!startProcess(process, VPSP_BINARY(m_vpsDir), cmdLine)) if(!startProcess(process, VPS_BINARY(m_sysinfo, m_preferences), cmdLine))
{ {
return false;; return false;;
} }
@ -1222,7 +1216,7 @@ bool EncodeThread::checkPropertiesVapoursynth(/*const QString &vspipePath,*/ uns
{ {
if(++waitCounter > m_processTimeoutMaxCounter) if(++waitCounter > m_processTimeoutMaxCounter)
{ {
if(m_abortOnTimeout) if(m_preferences->getAbortOnTimeout())
{ {
process.kill(); process.kill();
qWarning("VSPipe process timed out <-- killing!"); qWarning("VSPipe process timed out <-- killing!");
@ -1397,7 +1391,7 @@ bool EncodeThread::startProcess(QProcess &process, const QString &program, const
if(process.waitForStarted()) if(process.waitForStarted())
{ {
m_jobObject->addProcessToJob(&process); m_jobObject->addProcessToJob(&process);
x264_change_process_priority(&process, m_processPriority); x264_change_process_priority(&process, m_preferences->getProcessPriority());
lock.unlock(); lock.unlock();
return true; return true;
} }

View File

@ -108,13 +108,13 @@ protected:
//Encode functions //Encode functions
void encode(void); void encode(void);
bool runEncodingPass(bool x264_x64, bool x264_10bit, bool avs2yuv_x64, int inputType, unsigned int frames, const QString &indexFile, int pass = 0, const QString &passLogFile = QString()); bool runEncodingPass(const int &inputType, const unsigned int &frames, const QString &indexFile, const int &pass = 0, const QString &passLogFile = QString());
QStringList buildCommandLine(bool usePipe, bool use10Bit, unsigned int frames, const QString &indexFile, int pass = 0, const QString &passLogFile = QString()); QStringList buildCommandLine(const bool &usePipe, const unsigned int &frames, const QString &indexFile, const int &pass = 0, const QString &passLogFile = QString());
unsigned int checkVersionX264(bool use_x64, bool use_10bit, bool &modified); unsigned int checkVersionX264(bool &modified);
unsigned int checkVersionAvs2yuv(bool x64); unsigned int checkVersionAvs2yuv(void);
bool checkVersionVapoursynth(void); bool checkVersionVapoursynth(void);
bool checkPropertiesAvisynth(bool x64, unsigned int &frames); bool checkPropertiesAVS(unsigned int &frames);
bool checkPropertiesVapoursynth(unsigned int &frames); bool checkPropertiesVPS(unsigned int &frames);
//Auxiallary Stuff //Auxiallary Stuff
void log(const QString &text) { emit messageLogged(m_jobId, text); } void log(const QString &text) { emit messageLogged(m_jobId, text); }

View File

@ -26,7 +26,7 @@
#define VER_X264_MAJOR 2 #define VER_X264_MAJOR 2
#define VER_X264_MINOR 3 #define VER_X264_MINOR 3
#define VER_X264_PATCH 1 #define VER_X264_PATCH 1
#define VER_X264_BUILD 767 #define VER_X264_BUILD 769
#define VER_X264_MINIMUM_REV 2380 #define VER_X264_MINIMUM_REV 2380
#define VER_X264_CURRENT_API 142 #define VER_X264_CURRENT_API 142