Cleaned up VapourSynth detection code + detect "portable" VapourSynth if available.
This commit is contained in:
parent
f7f950191f
commit
f35f2635a3
@ -103,6 +103,10 @@ Simple x264/x265 Launcher can be run in a "portable" mode. This may be helpful,
|
||||
|
||||
***Note:*** Regardless of whether you enable the *portable* mode or not, the Simple x264/x265 Launcher application is **always** "portable", in the sense that the program is fully self-contained. It does *not* require any "external" libraries or frameworks to be installed on the computer. The only exceptions here are Avisynth and VapourSynth, which have to be installed *separately*, if they are needed. The *sole* purpose of the *portable* mode is to control where the configuration files will be stored. There is **no** such thing as a separate "portable" version of Simple x264/x265 Launcher.
|
||||
|
||||
## VapourSynth Portable
|
||||
|
||||
There now is a "portable" edition **VapourSynth** available, which *Simple x264/x265 Launcher* can use. For this purpose, download the "portable" edition VapourSynth an *extract* it into the sub-directory `extra\VaporSynth` inside of the Simple x264/x265 Launcher "main" directory (i.e. where the `x264_launcher.exe` file is located). More specifically, the *32-Bit* version of VapourSynth needs to go into the `extra\VaporSynth\core32` sub-directory and the *64-Bit* version of VapourSynth needs to go into the `extra\VaporSynth\core64` sub-directory.
|
||||
|
||||
|
||||
# Updating Your Encoder Binaries #
|
||||
|
||||
|
@ -41,6 +41,9 @@
|
||||
//CRT
|
||||
#include <cassert>
|
||||
|
||||
//Const
|
||||
static const bool ENABLE_PORTABLE_VPS = true;
|
||||
|
||||
//Static
|
||||
QMutex VapourSynthCheckThread::m_vpsLock;
|
||||
QScopedPointer<QFile> VapourSynthCheckThread::m_vpsExePath[2];
|
||||
@ -48,6 +51,7 @@ QScopedPointer<QFile> VapourSynthCheckThread::m_vpsDllPath[2];
|
||||
|
||||
#define VALID_DIR(STR) ((!(STR).isEmpty()) && QDir((STR)).exists())
|
||||
#define BOOLIFY(X) ((X) ? '1' : '0')
|
||||
#define VPS_BITNESS(X) (((X) + 1U) * 32U)
|
||||
|
||||
static inline QString &cleanDir(QString &path)
|
||||
{
|
||||
@ -174,6 +178,18 @@ void VapourSynthCheckThread::detectVapourSynthPath3(int &success, QString &path)
|
||||
success &= 0;
|
||||
path.clear();
|
||||
|
||||
static const char *VPS_CORE_DIR[] =
|
||||
{
|
||||
"core32",
|
||||
"core64",
|
||||
NULL
|
||||
};
|
||||
static const int VPS_BIT_FLAG[] =
|
||||
{
|
||||
VAPOURSYNTH_X86,
|
||||
VAPOURSYNTH_X64,
|
||||
NULL
|
||||
};
|
||||
static const char *VPS_REG_KEYS[] =
|
||||
{
|
||||
"SOFTWARE\\VapourSynth",
|
||||
@ -194,86 +210,91 @@ void VapourSynthCheckThread::detectVapourSynthPath3(int &success, QString &path)
|
||||
MUtils::Registry::scope_wow_x64
|
||||
};
|
||||
|
||||
//Read VapourSynth path from registry
|
||||
QString vapoursynthPath;
|
||||
for(size_t i = 0; VPS_REG_KEYS[i]; i++)
|
||||
|
||||
//Look for "portable" VapourSynth version
|
||||
if (ENABLE_PORTABLE_VPS)
|
||||
{
|
||||
for(size_t j = 0; VPS_REG_NAME[j]; j++)
|
||||
const QString vpsPortableDir = QString("%1/extra/VapourSynth").arg(QCoreApplication::applicationDirPath());
|
||||
if (VALID_DIR(vpsPortableDir))
|
||||
{
|
||||
for (size_t k = 0; k < 3; k++)
|
||||
for (size_t i = 0; VPS_CORE_DIR[i]; i++)
|
||||
{
|
||||
QString temp;
|
||||
if (MUtils::Registry::reg_value_read(MUtils::Registry::root_machine, QString::fromLatin1(VPS_REG_KEYS[i]), QString::fromLatin1(VPS_REG_NAME[j]), temp, REG_SCOPE[k]))
|
||||
const QFileInfo vpsPortableDll = QFileInfo(QString("%1/%2/VapourSynth.dll").arg(vpsPortableDir, QString::fromLatin1(VPS_CORE_DIR[i])));
|
||||
if (vpsPortableDll.exists() && vpsPortableDll.isFile())
|
||||
{
|
||||
temp = cleanDir(temp);
|
||||
if (VALID_DIR(temp))
|
||||
vapoursynthPath = vpsPortableDir;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Read VapourSynth path from registry
|
||||
if (vapoursynthPath.isEmpty())
|
||||
{
|
||||
for (size_t i = 0; VPS_REG_KEYS[i]; i++)
|
||||
{
|
||||
for (size_t j = 0; VPS_REG_NAME[j]; j++)
|
||||
{
|
||||
for (size_t k = 0; k < 3; k++)
|
||||
{
|
||||
QString temp;
|
||||
if (MUtils::Registry::reg_value_read(MUtils::Registry::root_machine, QString::fromLatin1(VPS_REG_KEYS[i]), QString::fromLatin1(VPS_REG_NAME[j]), temp, REG_SCOPE[k]))
|
||||
{
|
||||
vapoursynthPath = temp;
|
||||
break;
|
||||
temp = cleanDir(temp);
|
||||
if (VALID_DIR(temp))
|
||||
{
|
||||
vapoursynthPath = temp;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!vapoursynthPath.isEmpty())
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!vapoursynthPath.isEmpty())
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!vapoursynthPath.isEmpty())
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//Make sure VapourSynth does exist
|
||||
if(!VALID_DIR(vapoursynthPath))
|
||||
|
||||
//Make sure VapourSynth directory does exist
|
||||
if(vapoursynthPath.isEmpty())
|
||||
{
|
||||
qWarning("VapourSynth install path not found -> disable VapouSynth support!");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
//Validate the VapourSynth installation now!
|
||||
qDebug("VapourSynth Dir: %s", vapoursynthPath.toUtf8().constData());
|
||||
|
||||
//Look for 32-Bit edition of VapourSynth first
|
||||
QFile *vpsExeFile32, *vpsDllFile32;
|
||||
if(isVapourSynthComplete(QString("%1/core32").arg(vapoursynthPath), vpsExeFile32, vpsDllFile32))
|
||||
for (size_t i = 0; VPS_CORE_DIR[i]; i++)
|
||||
{
|
||||
if(vpsExeFile32 && checkVapourSynth(vpsExeFile32->fileName()))
|
||||
QFile *vpsExeFile, *vpsDllFile;
|
||||
if (isVapourSynthComplete(QString("%1/%2").arg(vapoursynthPath, QString::fromLatin1(VPS_CORE_DIR[i])), vpsExeFile, vpsDllFile))
|
||||
{
|
||||
success |= VAPOURSYNTH_X86;
|
||||
qDebug("VapourSynth 32-Bit edition found!");
|
||||
m_vpsExePath[0].reset(vpsExeFile32);
|
||||
m_vpsDllPath[0].reset(vpsDllFile32);
|
||||
if (vpsExeFile && checkVapourSynth(vpsExeFile->fileName()))
|
||||
{
|
||||
success |= VPS_BIT_FLAG[i];
|
||||
qDebug("VapourSynth %u-Bit edition found!", VPS_BITNESS(i));
|
||||
m_vpsExePath[i].reset(vpsExeFile);
|
||||
m_vpsDllPath[i].reset(vpsDllFile);
|
||||
}
|
||||
else
|
||||
{
|
||||
qWarning("VapourSynth %u-Bit edition was found, but version check has failed!", VPS_BITNESS(i));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
qWarning("VapourSynth 32-Bit edition was found, but version check has failed!");
|
||||
qDebug("VapourSynth %u-Bit edition *not* found!", VPS_BITNESS(i));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug("VapourSynth 32-Bit edition *not* found!");
|
||||
}
|
||||
|
||||
//Look for 64-Bit edition of VapourSynth next
|
||||
QFile *vpsExeFile64, *vpsDllFile64;
|
||||
if(isVapourSynthComplete(QString("%1/core64").arg(vapoursynthPath), vpsExeFile64, vpsDllFile64))
|
||||
{
|
||||
if(vpsExeFile64 && checkVapourSynth(vpsExeFile64->fileName()))
|
||||
{
|
||||
success |= VAPOURSYNTH_X64;
|
||||
qDebug("VapourSynth 64-Bit edition found!");
|
||||
m_vpsExePath[1].reset(vpsExeFile64);
|
||||
m_vpsDllPath[1].reset(vpsDllFile64);
|
||||
}
|
||||
else
|
||||
{
|
||||
qWarning("VapourSynth 64-Bit edition was found, but version check has failed!");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug("VapourSynth 64-Bit edition *not* found!");
|
||||
}
|
||||
|
||||
//Return VapourSynth path
|
||||
if(success)
|
||||
|
@ -26,7 +26,7 @@
|
||||
#define VER_X264_MAJOR 2
|
||||
#define VER_X264_MINOR 7
|
||||
#define VER_X264_PATCH 5
|
||||
#define VER_X264_BUILD 1042
|
||||
#define VER_X264_BUILD 1043
|
||||
|
||||
#define VER_X264_PORTABLE_EDITION (0)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user