OSDN Git Service

Cleaned up VapourSynth detection code + detect "portable" VapourSynth if available.
authorlordmulder <mulder2@gmx.de>
Tue, 27 Sep 2016 19:04:35 +0000 (21:04 +0200)
committerlordmulder <mulder2@gmx.de>
Tue, 27 Sep 2016 19:04:35 +0000 (21:04 +0200)
README.md
src/thread_vapoursynth.cpp
src/version.h

index f93c16d..6a90c91 100644 (file)
--- a/README.md
+++ b/README.md
@@ -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 #
 
index e3991de..e52a85b 100644 (file)
@@ -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;
        }
 
-       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))
-       {
-               if(vpsExeFile32 && checkVapourSynth(vpsExeFile32->fileName()))
-               {
-                       success |= VAPOURSYNTH_X86;
-                       qDebug("VapourSynth 32-Bit edition found!");
-                       m_vpsExePath[0].reset(vpsExeFile32);
-                       m_vpsDllPath[0].reset(vpsDllFile32);
-               }
-               else
-               {
-                       qWarning("VapourSynth 32-Bit edition was found, but version check has failed!");
-               }
-       }
-       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))
+       //Validate the VapourSynth installation now!
+       qDebug("VapourSynth Dir: %s", vapoursynthPath.toUtf8().constData());
+       for (size_t i = 0; VPS_CORE_DIR[i]; i++)
        {
-               if(vpsExeFile64 && checkVapourSynth(vpsExeFile64->fileName()))
+               QFile *vpsExeFile, *vpsDllFile;
+               if (isVapourSynthComplete(QString("%1/%2").arg(vapoursynthPath, QString::fromLatin1(VPS_CORE_DIR[i])), vpsExeFile, vpsDllFile))
                {
-                       success |= VAPOURSYNTH_X64;
-                       qDebug("VapourSynth 64-Bit edition found!");
-                       m_vpsExePath[1].reset(vpsExeFile64);
-                       m_vpsDllPath[1].reset(vpsDllFile64);
+                       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 64-Bit edition was found, but version check has failed!");
+                       qDebug("VapourSynth %u-Bit edition *not* found!", VPS_BITNESS(i));
                }
        }
-       else
-       {
-               qDebug("VapourSynth 64-Bit edition *not* found!");
-       }
 
        //Return VapourSynth path
        if(success)
index 34aeca7..d015401 100644 (file)
@@ -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)