OSDN Git Service

Removed a lot of old cruft and use MUtils functions where possible.
authorlordmulder <mulder2@gmx.de>
Mon, 2 Feb 2015 21:11:06 +0000 (22:11 +0100)
committerlordmulder <mulder2@gmx.de>
Mon, 2 Feb 2015 21:11:06 +0000 (22:11 +0100)
25 files changed:
res/resources.qrc
src/binaries.cpp
src/encoder_abstract.cpp
src/encoder_factory.cpp
src/encoder_x264.cpp
src/encoder_x265.cpp
src/global.cpp
src/global.h
src/input_filter.cpp
src/main.cpp
src/model_jobList.cpp
src/model_options.cpp
src/source_abstract.cpp
src/taskbar7.cpp
src/thread_avisynth.cpp
src/thread_encode.cpp
src/thread_vapoursynth.cpp
src/tool_abstract.cpp
src/version.h
src/win_addJob.cpp
src/win_help.cpp
src/win_main.cpp
src/win_preferences.cpp
src/win_updater.cpp
src/zero.cpp

index 6c45468..c18a2b3 100644 (file)
     <file>images/update_wizard.png</file>
     <file>images/x264.png</file>
     <file>images/x265.png</file>
+    <file>sounds/shutdown.wav</file>
+    <file>sounds/beep.wav</file>
+    <file>sounds/beep2.wav</file>
+    <file>sounds/tada.wav</file>
+    <file>sounds/shattering.wav</file>
+    <file>sounds/failure.wav</file>
   </qresource>
 </RCC>
index 75d42f4..66993f3 100644 (file)
 
 #include "binaries.h"
 
+//Internal
 #include "global.h"
 #include "model_sysinfo.h"
 #include "model_preferences.h"
 #include "model_options.h"
 
+//MUtils
+#include <MUtils/Exception.h>
+
 /* --- Encooders --- */
 
 QString ENC_BINARY(const SysinfoModel *sysinfo, const OptionsModel::EncType &encType, const OptionsModel::EncArch &encArch, const OptionsModel::EncVariant &encVariant)
@@ -68,7 +72,7 @@ QString ENC_BINARY(const SysinfoModel *sysinfo, const OptionsModel::EncType &enc
        //Sanity check
        if(baseName.isEmpty() || arch.isEmpty() || variant.isEmpty())
        {
-               THROW("Failed to determine the encoder binarty path!");
+               MUTILS_THROW("Failed to determine the encoder binarty path!");
        }
 
        //Return path
index c031474..e2db8ef 100644 (file)
@@ -21,6 +21,7 @@
 
 #include "encoder_abstract.h"
 
+//Internal
 #include "global.h"
 #include "model_options.h"
 #include "model_preferences.h"
 #include "source_abstract.h"
 #include "binaries.h"
 
+//MUtils
+#include <MUtils/Global.h>
+#include <MUtils/Exception.h>
+
+//Qt
 #include <QProcess>
 #include <QDir>
 #include <QTextCodec>
@@ -206,7 +212,7 @@ bool AbstractEncoder::runEncodingPass(AbstractSource* pipedSource, const QString
        while(!patterns.isEmpty())
        {
                QRegExp *pattern = patterns.takeFirst();
-               X264_DELETE(pattern);
+               MUTILS_DELETE(pattern);
        }
 
        if(bTimeout || bAborted || processEncode.exitCode() != EXIT_SUCCESS)
@@ -335,5 +341,5 @@ QString AbstractEncoder::sizeToString(qint64 size)
 
 const AbstractEncoderInfo& AbstractEncoder::getEncoderInfo(void)
 {
-       THROW("[getEncoderInfo] This function must be overwritten in sub-classes!");
+       MUTILS_THROW("[getEncoderInfo] This function must be overwritten in sub-classes!");
 }
index c190bc5..c99aee2 100644 (file)
 
 #include "encoder_factory.h"
 
+//Internal
 #include "global.h"
 #include "model_options.h"
 #include "encoder_x264.h"
 #include "encoder_x265.h"
 
+//MUtils
+#include <MUtils/Exception.h>
+
 AbstractEncoder *EncoderFactory::createEncoder(JobObject *jobObject, const OptionsModel *options, const SysinfoModel *const sysinfo, const PreferencesModel *const preferences, JobStatus &jobStatus, volatile bool *abort, volatile bool *pause, QSemaphore *semaphorePause, const QString &sourceFile, const QString &outputFile)
 {
        AbstractEncoder *encoder = NULL;
@@ -39,7 +43,7 @@ AbstractEncoder *EncoderFactory::createEncoder(JobObject *jobObject, const Optio
                encoder = new X265Encoder(jobObject, options, sysinfo, preferences, jobStatus, abort, pause, semaphorePause, sourceFile, outputFile);
                break;
        default:
-               THROW("Unknown encoder type encountered!");
+               MUTILS_THROW("Unknown encoder type encountered!");
        }
 
        return encoder;
@@ -54,7 +58,7 @@ const AbstractEncoderInfo& EncoderFactory::getEncoderInfo(const int &encoderType
        case OptionsModel::EncType_X265:
                return X265Encoder::getEncoderInfo();
        default:
-               THROW("Unknown encoder type encountered!");
+               MUTILS_THROW("Unknown encoder type encountered!");
        }
 
        return *((AbstractEncoderInfo*)NULL);
index d633c98..b0a24f2 100644 (file)
 
 #include "encoder_x264.h"
 
+//Internal
 #include "global.h"
 #include "model_options.h"
 #include "model_status.h"
 #include "binaries.h"
 #include "mediainfo.h"
 
+//MUtils
+#include <MUtils/Exception.h>
+
+//Qt
 #include <QStringList>
 #include <QDir>
 #include <QRegExp>
@@ -185,7 +190,7 @@ X264Encoder::X264Encoder(JobObject *jobObject, const OptionsModel *options, cons
 {
        if(options->encType() != OptionsModel::EncType_X264)
        {
-               THROW("Invalid encoder type!");
+               MUTILS_THROW("Invalid encoder type!");
        }
 }
 
@@ -300,7 +305,7 @@ void X264Encoder::buildCommandLine(QStringList &cmdLine, const bool &usePipe, co
                cmdLine << "--bitrate" << QString::number(m_options->bitrate());
                break;
        default:
-               THROW("Bad rate-control mode !!!");
+               MUTILS_THROW("Bad rate-control mode !!!");
        }
        
        if((pass == 1) || (pass == 2))
@@ -348,7 +353,7 @@ void X264Encoder::buildCommandLine(QStringList &cmdLine, const bool &usePipe, co
        
        if(usePipe)
        {
-               if(frames < 1) THROW("Frames not set!");
+               if(frames < 1) MUTILS_THROW("Frames not set!");
                cmdLine << "--frames" << QString::number(frames);
                cmdLine << "--demuxer" << "y4m";
                cmdLine << "--stdin" << "y4m" << "-";
index a190f05..4c81bcb 100644 (file)
 
 #include "encoder_x265.h"
 
+//Internal
 #include "global.h"
 #include "model_options.h"
 #include "model_status.h"
 #include "binaries.h"
 #include "mediainfo.h"
 
+//MUtils
+#include <MUtils/Exception.h>
+
+//Qt
 #include <QStringList>
 #include <QDir>
 #include <QRegExp>
@@ -168,7 +173,7 @@ X265Encoder::X265Encoder(JobObject *jobObject, const OptionsModel *options, cons
 {
        if(options->encType() != OptionsModel::EncType_X265)
        {
-               THROW("Invalid encoder type!");
+               MUTILS_THROW("Invalid encoder type!");
        }
 }
 
@@ -278,7 +283,7 @@ void X265Encoder::buildCommandLine(QStringList &cmdLine, const bool &usePipe, co
                cmdLine << "--bitrate" << QString::number(m_options->bitrate());
                break;
        default:
-               THROW("Bad rate-control mode !!!");
+               MUTILS_THROW("Bad rate-control mode !!!");
                break;
        }
        
@@ -327,7 +332,7 @@ void X265Encoder::buildCommandLine(QStringList &cmdLine, const bool &usePipe, co
        
        if(usePipe)
        {
-               if(frames < 1) THROW("Frames not set!");
+               if(frames < 1) MUTILS_THROW("Frames not set!");
                cmdLine << "--frames" << QString::number(frames);
                cmdLine << "--y4m" << "-";
        }
index 5d27b19..b69bab0 100644 (file)
@@ -47,6 +47,9 @@
 #include "version.h"
 #undef  ENABLE_X264_VERSION_INCLUDE
 
+//MUtils includes
+#include <MUtils/Global.h>
+
 //Qt includes
 #include <QApplication>
 #include <QMessageBox>
 typedef HRESULT (WINAPI *SHGetKnownFolderPath_t)(const GUID &rfid, DWORD dwFlags, HANDLE hToken, PWSTR *ppszPath);
 typedef HRESULT (WINAPI *SHGetFolderPath_t)(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath);
 
-//OS version info
-typedef struct _x264_os_info_t
-{
-       const x264_os_version_t version;
-       const char friendlyName[128];
-}
-x264_os_info_t;
-
 //Global vars
 static bool g_x264_console_attached = false;
 static QMutex g_x264_message_mutex;
@@ -131,50 +126,6 @@ g_x264_version =
        __TIME__,
 };
 
-//CLI Arguments
-static struct
-{
-       QStringList *list;
-       QReadWriteLock lock;
-}
-g_x264_argv;
-
-//OS Version
-static struct
-{
-       bool bInitialized;
-       x264_os_version_t version;
-       QReadWriteLock lock;
-}
-g_x264_os_version;
-
-//Special folders
-static struct
-{
-       QMap<size_t, QString> *knownFolders;
-       SHGetKnownFolderPath_t getKnownFolderPath;
-       SHGetFolderPath_t getFolderPath;
-       QReadWriteLock lock;
-}
-g_x264_known_folder;
-
-//%TEMP% folder
-static struct
-{
-       QString *path;
-       QReadWriteLock lock;
-}
-g_x264_temp_folder;
-
-//Wine detection
-static struct
-{
-       bool bInitialized;
-       bool bIsWine;
-       QReadWriteLock lock;
-}
-g_x264_wine;
-
 //Portable Mode
 static struct
 {
@@ -184,31 +135,6 @@ static struct
 }
 g_x264_portable;
 
-//Known Windows NT versions
-const x264_os_version_t x264_winver_error = { 0,0};    //N/A
-const x264_os_version_t x264_winver_win2k = { 5,0};    //2000
-const x264_os_version_t x264_winver_winxp = { 5,1};    //XP
-const x264_os_version_t x264_winver_xpx64 = { 5,2};    //XP_x64
-const x264_os_version_t x264_winver_vista = { 6,0};    //Vista
-const x264_os_version_t x264_winver_win70 = { 6,1};    //7
-const x264_os_version_t x264_winver_win80 = { 6,2};    //8
-const x264_os_version_t x264_winver_win81 = { 6,3};    //8.1
-const x264_os_version_t x264_winver_wn100 = {10,0};    //10
-
-//Maps marketing names to the actual Windows NT versions
-static const x264_os_info_t x264_winver_lut[] =
-{
-       { x264_winver_win2k, "Windows 2000"                                  }, //2000
-       { x264_winver_winxp, "Windows XP or Windows XP Media Center Edition" }, //XP
-       { x264_winver_xpx64, "Windows Server 2003 or Windows XP x64"         }, //XP_x64
-       { x264_winver_vista, "Windows Vista or Windows Server 2008"          }, //Vista
-       { x264_winver_win70, "Windows 7 or Windows Server 2008 R2"           }, //7
-       { x264_winver_win80, "Windows 8 or Windows Server 2012"              }, //8
-       { x264_winver_win81, "Windows 8.1 or Windows Server 2012 R2"         }, //8.1
-       { x264_winver_wn100, "Windows 10 or Windows Server 2014 (Preview)"   }, //10
-       { x264_winver_error, "" }
-};
-
 //GURU MEDITATION
 static const char *GURU_MEDITATION = "\n\nGURU MEDITATION !!!\n\n";
 
@@ -340,419 +266,6 @@ static inline bool _CHECK_FLAG(const int argc, char **argv, const char *flag)
 // GLOBAL FUNCTIONS
 ///////////////////////////////////////////////////////////////////////////////
 
-static __forceinline bool x264_check_for_debugger(void);
-
-/*
- * Suspend calling thread for N milliseconds
- */
-inline void x264_sleep(const unsigned int delay)
-{
-       Sleep(delay);
-}
-
-/*
- * Global exception handler
- */
-LONG WINAPI x264_exception_handler(__in struct _EXCEPTION_POINTERS *ExceptionInfo)
-{
-       if(GetCurrentThreadId() != g_main_thread_id)
-       {
-               HANDLE mainThread = OpenThread(THREAD_TERMINATE, FALSE, g_main_thread_id);
-               if(mainThread) TerminateThread(mainThread, ULONG_MAX);
-       }
-
-       x264_fatal_exit(L"Unhandeled exception handler invoked, application will exit!");
-       return LONG_MAX;
-}
-
-/*
- * Invalid parameters handler
- */
-void x264_invalid_param_handler(const wchar_t*, const wchar_t*, const wchar_t*, unsigned int, uintptr_t)
-{
-       if(GetCurrentThreadId() != g_main_thread_id)
-       {
-               HANDLE mainThread = OpenThread(THREAD_TERMINATE, FALSE, g_main_thread_id);
-               if(mainThread) TerminateThread(mainThread, ULONG_MAX);
-       }
-
-       x264_fatal_exit(L"Invalid parameter handler invoked, application will exit!");
-}
-
-/*
- * Get a random string
- */
-QString x264_rand_str(const bool bLong)
-{
-       const QUuid uuid = QUuid::createUuid().toString();
-
-       const unsigned int u1 = uuid.data1;
-       const unsigned int u2 = (((unsigned int)(uuid.data2)) << 16) | ((unsigned int)(uuid.data3));
-       const unsigned int u3 = (((unsigned int)(uuid.data4[0])) << 24) | (((unsigned int)(uuid.data4[1])) << 16) | (((unsigned int)(uuid.data4[2])) << 8) | ((unsigned int)(uuid.data4[3]));
-       const unsigned int u4 = (((unsigned int)(uuid.data4[4])) << 24) | (((unsigned int)(uuid.data4[5])) << 16) | (((unsigned int)(uuid.data4[6])) << 8) | ((unsigned int)(uuid.data4[7]));
-
-       return bLong ? QString().sprintf("%08x%08x%08x%08x", u1, u2, u3, u4) : QString().sprintf("%08x%08x", (u1 ^ u2), (u3 ^ u4));
-}
-
-/*
- * Robert Jenkins' 96 bit Mix Function
- * Source: http://www.concentric.net/~Ttwang/tech/inthash.htm
- */
-static unsigned int x264_mix(const unsigned int x, const unsigned int y, const unsigned int z)
-{
-       unsigned int a = x;
-       unsigned int b = y;
-       unsigned int c = z;
-       
-       a=a-b;  a=a-c;  a=a^(c >> 13);
-       b=b-c;  b=b-a;  b=b^(a << 8); 
-       c=c-a;  c=c-b;  c=c^(b >> 13);
-       a=a-b;  a=a-c;  a=a^(c >> 12);
-       b=b-c;  b=b-a;  b=b^(a << 16);
-       c=c-a;  c=c-b;  c=c^(b >> 5);
-       a=a-b;  a=a-c;  a=a^(c >> 3);
-       b=b-c;  b=b-a;  b=b^(a << 10);
-       c=c-a;  c=c-b;  c=c^(b >> 15);
-
-       return c;
-}
-
-/*
- * Seeds the random number generator
- * Note: Altough rand_s() doesn't need a seed, this must be called pripr to x264_rand(), just to to be sure!
- */
-void x264_seed_rand(void)
-{
-       qsrand(x264_mix(clock(), time(NULL), _getpid()));
-}
-
-/*
- * Returns a randum number
- * Note: This function uses rand_s() if available, but falls back to qrand() otherwise
- */
-unsigned int x264_rand(void)
-{
-       quint32 rnd = 0;
-
-       if(rand_s(&rnd) == 0)
-       {
-               return rnd;
-       }
-
-       for(size_t i = 0; i < sizeof(unsigned int); i++)
-       {
-               rnd = (rnd << 8) ^ qrand();
-       }
-
-       return rnd;
-}
-
-/*
- * Change console text color
- */
-static void x264_console_color(FILE* file, WORD attributes)
-{
-       const HANDLE hConsole = (HANDLE)(_get_osfhandle(_fileno(file)));
-       if((hConsole != NULL) && (hConsole != INVALID_HANDLE_VALUE))
-       {
-               SetConsoleTextAttribute(hConsole, attributes);
-       }
-}
-
-/*
- * Determines the current date, resistant against certain manipulations
- */
-QDate x264_current_date_safe(void)
-{
-       const DWORD MAX_PROC = 1024;
-       DWORD *processes = new DWORD[MAX_PROC];
-       DWORD bytesReturned = 0;
-       
-       if(!EnumProcesses(processes, sizeof(DWORD) * MAX_PROC, &bytesReturned))
-       {
-               X264_DELETE_ARRAY(processes);
-               return QDate::currentDate();
-       }
-
-       const DWORD procCount = bytesReturned / sizeof(DWORD);
-       ULARGE_INTEGER lastStartTime;
-       memset(&lastStartTime, 0, sizeof(ULARGE_INTEGER));
-
-       for(DWORD i = 0; i < procCount; i++)
-       {
-               HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, processes[i]);
-               if(hProc)
-               {
-                       FILETIME processTime[4];
-                       if(GetProcessTimes(hProc, &processTime[0], &processTime[1], &processTime[2], &processTime[3]))
-                       {
-                               ULARGE_INTEGER timeCreation;
-                               timeCreation.LowPart = processTime[0].dwLowDateTime;
-                               timeCreation.HighPart = processTime[0].dwHighDateTime;
-                               if(timeCreation.QuadPart > lastStartTime.QuadPart)
-                               {
-                                       lastStartTime.QuadPart = timeCreation.QuadPart;
-                               }
-                       }
-                       CloseHandle(hProc);
-               }
-       }
-
-       X264_DELETE_ARRAY(processes);
-       
-       FILETIME lastStartTime_fileTime;
-       lastStartTime_fileTime.dwHighDateTime = lastStartTime.HighPart;
-       lastStartTime_fileTime.dwLowDateTime = lastStartTime.LowPart;
-
-       FILETIME lastStartTime_localTime;
-       if(!FileTimeToLocalFileTime(&lastStartTime_fileTime, &lastStartTime_localTime))
-       {
-               memcpy(&lastStartTime_localTime, &lastStartTime_fileTime, sizeof(FILETIME));
-       }
-       
-       SYSTEMTIME lastStartTime_system;
-       if(!FileTimeToSystemTime(&lastStartTime_localTime, &lastStartTime_system))
-       {
-               memset(&lastStartTime_system, 0, sizeof(SYSTEMTIME));
-               lastStartTime_system.wYear = 1970; lastStartTime_system.wMonth = lastStartTime_system.wDay = 1;
-       }
-
-       const QDate currentDate = QDate::currentDate();
-       const QDate processDate = QDate(lastStartTime_system.wYear, lastStartTime_system.wMonth, lastStartTime_system.wDay);
-       return (currentDate >= processDate) ? currentDate : processDate;
-}
-
-/*
- * Output logging message to console
- */
-static void x264_write_console(const int type, const char *msg)
-{      
-       __try
-       {
-               if(_isatty(_fileno(stderr)))
-               {
-                       UINT oldOutputCP = GetConsoleOutputCP();
-                       if(oldOutputCP != CP_UTF8) SetConsoleOutputCP(CP_UTF8);
-
-                       switch(type)
-                       {
-                       case QtCriticalMsg:
-                       case QtFatalMsg:
-                               x264_console_color(stderr, FOREGROUND_RED | FOREGROUND_INTENSITY);
-                               fprintf(stderr, GURU_MEDITATION);
-                               fprintf(stderr, "%s\n", msg);
-                               fflush(stderr);
-                               break;
-                       case QtWarningMsg:
-                               x264_console_color(stderr, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);
-                               fprintf(stderr, "%s\n", msg);
-                               fflush(stderr);
-                               break;
-                       default:
-                               x264_console_color(stderr, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);
-                               fprintf(stderr, "%s\n", msg);
-                               fflush(stderr);
-                               break;
-                       }
-       
-                       x264_console_color(stderr, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED);
-                       if(oldOutputCP != CP_UTF8) SetConsoleOutputCP(oldOutputCP);
-               }
-       }
-       __except(1)
-       {
-               /*ignore any exception that might occur here!*/
-       }
-}
-
-/*
- * Output logging message to debugger
- */
-static void x264_write_dbg_out(const int type, const char *msg)
-{      
-       const char *FORMAT = "[sx264l][%c] %s\n";
-
-       __try
-       {
-               char buffer[512];
-               const char* input = msg;
-               TRIM_LEFT(input);
-               
-               switch(type)
-               {
-               case QtCriticalMsg:
-               case QtFatalMsg:
-                       _snprintf_s(buffer, 512, _TRUNCATE, FORMAT, 'C', input);
-                       break;
-               case QtWarningMsg:
-                       _snprintf_s(buffer, 512, _TRUNCATE, FORMAT, 'W', input);
-                       break;
-               default:
-                       _snprintf_s(buffer, 512, _TRUNCATE, FORMAT, 'I', input);
-                       break;
-               }
-
-               char *temp = &buffer[0];
-               CLEAN_OUTPUT_STRING(temp);
-               OutputDebugStringA(temp);
-       }
-       __except(1)
-       {
-               /*ignore any exception that might occur here!*/
-       }
-}
-
-/*
- * Output logging message to logfile
- */
-static void x264_write_logfile(const int type, const char *msg)
-{      
-       const char *FORMAT = "[%c][%04u] %s\r\n";
-
-       __try
-       {
-               if(g_x264_log_file)
-               {
-                       char buffer[512];
-                       strncpy_s(buffer, 512, msg, _TRUNCATE);
-
-                       char *temp = &buffer[0];
-                       TRIM_LEFT(temp);
-                       CLEAN_OUTPUT_STRING(temp);
-                       
-                       const unsigned int timestamp = static_cast<unsigned int>(_time64(NULL) % 3600I64);
-
-                       switch(type)
-                       {
-                       case QtCriticalMsg:
-                       case QtFatalMsg:
-                               fprintf(g_x264_log_file, FORMAT, 'C', timestamp, temp);
-                               break;
-                       case QtWarningMsg:
-                               fprintf(g_x264_log_file, FORMAT, 'W', timestamp, temp);
-                               break;
-                       default:
-                               fprintf(g_x264_log_file, FORMAT, 'I', timestamp, temp);
-                               break;
-                       }
-
-                       fflush(g_x264_log_file);
-               }
-       }
-       __except(1)
-       {
-               /*ignore any exception that might occur here!*/
-       }
-}
-
-/*
- * Qt message handler
- */
-void x264_message_handler(QtMsgType type, const char *msg)
-{
-       if((!msg) || (!(msg[0])))
-       {
-               return;
-       }
-
-       QMutexLocker lock(&g_x264_message_mutex);
-
-       if(g_x264_log_file)
-       {
-               x264_write_logfile(type, msg);
-       }
-
-       if(g_x264_console_attached)
-       {
-               x264_write_console(type, msg);
-       }
-       else
-       {
-               x264_write_dbg_out(type, msg);
-       }
-
-       if((type == QtCriticalMsg) || (type == QtFatalMsg))
-       {
-               lock.unlock();
-               x264_fatal_exit(L"The application has encountered a critical error and will exit now!", QString::fromUtf8(msg).toLatin1().constData());
-       }
-}
-
-/*
- * Initialize the console
- */
-void x264_init_console(const int argc, char **argv)
-{
-       bool enableConsole = x264_is_prerelease() || (X264_DEBUG);
-
-       if(_environ)
-       {
-               wchar_t *logfile = NULL;
-               size_t logfile_len = 0;
-               if(!_wdupenv_s(&logfile, &logfile_len, L"X264_LAUNCHER_LOGFILE"))
-               {
-                       if(logfile && (logfile_len > 0))
-                       {
-                               FILE *temp = NULL;
-                               if(!_wfopen_s(&temp, logfile, L"wb"))
-                               {
-                                       fprintf(temp, "%c%c%c", 0xEF, 0xBB, 0xBF);
-                                       g_x264_log_file = temp;
-                               }
-                               free(logfile);
-                       }
-               }
-       }
-
-       if(!X264_DEBUG)
-       {
-
-               if(CHECK_FLAG("console"))    enableConsole = true;
-               if(CHECK_FLAG("no-console")) enableConsole = false;
-       }
-
-       if(enableConsole)
-       {
-               if(!g_x264_console_attached)
-               {
-                       if(AllocConsole())
-                       {
-                               SetConsoleCtrlHandler(NULL, TRUE);
-                               SetConsoleTitle(L"Simple x264 Launcher | Debug Console");
-                               SetConsoleOutputCP(CP_UTF8);
-                               g_x264_console_attached = true;
-                       }
-               }
-               
-               if(g_x264_console_attached)
-               {
-                       //-------------------------------------------------------------------
-                       //See: http://support.microsoft.com/default.aspx?scid=kb;en-us;105305
-                       //-------------------------------------------------------------------
-                       const int flags = _O_WRONLY | _O_U8TEXT;
-                       int hCrtStdOut = _open_osfhandle((intptr_t) GetStdHandle(STD_OUTPUT_HANDLE), flags);
-                       int hCrtStdErr = _open_osfhandle((intptr_t) GetStdHandle(STD_ERROR_HANDLE), flags);
-                       FILE *hfStdOut = (hCrtStdOut >= 0) ? _fdopen(hCrtStdOut, "wb") : NULL;
-                       FILE *hfStdErr = (hCrtStdErr >= 0) ? _fdopen(hCrtStdErr, "wb") : NULL;
-                       if(hfStdOut) { *stdout = *hfStdOut; std::cout.rdbuf(new std::filebuf(hfStdOut)); }
-                       if(hfStdErr) { *stderr = *hfStdErr; std::cerr.rdbuf(new std::filebuf(hfStdErr)); }
-               }
-
-               HWND hwndConsole = GetConsoleWindow();
-
-               if((hwndConsole != NULL) && (hwndConsole != INVALID_HANDLE_VALUE))
-               {
-                       HMENU hMenu = GetSystemMenu(hwndConsole, 0);
-                       EnableMenuItem(hMenu, SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);
-                       RemoveMenu(hMenu, SC_CLOSE, MF_BYCOMMAND);
-
-                       SetWindowPos(hwndConsole, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_FRAMECHANGED);
-                       SetWindowLong(hwndConsole, GWL_STYLE, GetWindowLong(hwndConsole, GWL_STYLE) & (~WS_MAXIMIZEBOX) & (~WS_MINIMIZEBOX));
-                       SetWindowPos(hwndConsole, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_FRAMECHANGED);
-               }
-       }
-}
-
 /*
  * Version info
  */
@@ -782,42 +295,6 @@ const char *x264_version_arch(void)
 }
 
 /*
- * Get CLI arguments
- */
-/*
-const QStringList &x264_arguments(void)
-{
-       QReadLocker readLock(&g_x264_argv.lock);
-
-       if(!g_x264_argv.list)
-       {
-               readLock.unlock();
-               QWriteLocker writeLock(&g_x264_argv.lock);
-
-               g_x264_argv.list = new QStringList;
-
-               int nArgs = 0;
-               LPWSTR *szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);
-
-               if(NULL != szArglist)
-               {
-                       for(int i = 0; i < nArgs; i++)
-                       {
-                               (*g_x264_argv.list) << WCHAR2QSTR(szArglist[i]);
-                       }
-                       LocalFree(szArglist);
-               }
-               else
-               {
-                       qWarning("CommandLineToArgvW() has failed !!!");
-               }
-       }
-
-       return (*g_x264_argv.list);
-}
-*/
-
-/*
  * Check for portable mode
  */
 bool x264_portable(void)
@@ -927,1260 +404,80 @@ bool x264_is_prerelease(void)
 }
 
 /*
- * CPUID prototype (actual function is in ASM code)
+ * Suspend or resume process
  */
-/*
-extern "C"
+bool x264_suspendProcess(const QProcess *proc, const bool suspend)
 {
-       void x264_cpu_cpuid(unsigned int op, unsigned int *eax, unsigned int *ebx, unsigned int *ecx, unsigned int *edx);
+       if(Q_PID pid = proc->pid())
+       {
+               if(suspend)
+               {
+                       return (SuspendThread(pid->hThread) != ((DWORD) -1));
+               }
+               else
+               {
+                       return (ResumeThread(pid->hThread) != ((DWORD) -1));
+               }
+       }
+       else
+       {
+               return false;
+       }
 }
-*/
 
 /*
- * Detect CPU features
+ * Convert path to short/ANSI path
  */
-/*
-x264_cpu_t x264_detect_cpu_features(const int argc, char **argv)
-{
-       typedef BOOL (WINAPI *IsWow64ProcessFun)(__in HANDLE hProcess, __out PBOOL Wow64Process);
-
-       x264_cpu_t features;
-       SYSTEM_INFO systemInfo;
-       unsigned int CPUInfo[4];
-       char CPUIdentificationString[0x40];
-       char CPUBrandString[0x40];
-
-       memset(&features, 0, sizeof(x264_cpu_t));
-       memset(&systemInfo, 0, sizeof(SYSTEM_INFO));
-       memset(CPUIdentificationString, 0, sizeof(CPUIdentificationString));
-       memset(CPUBrandString, 0, sizeof(CPUBrandString));
-       
-       x264_cpu_cpuid(0, &CPUInfo[0], &CPUInfo[1], &CPUInfo[2], &CPUInfo[3]);
-       memcpy(CPUIdentificationString, &CPUInfo[1], sizeof(int));
-       memcpy(CPUIdentificationString + 4, &CPUInfo[3], sizeof(int));
-       memcpy(CPUIdentificationString + 8, &CPUInfo[2], sizeof(int));
-       features.intel = (_stricmp(CPUIdentificationString, "GenuineIntel") == 0);
-       strncpy_s(features.vendor, 0x40, CPUIdentificationString, _TRUNCATE);
-
-       if(CPUInfo[0] >= 1)
-       {
-               x264_cpu_cpuid(1, &CPUInfo[0], &CPUInfo[1], &CPUInfo[2], &CPUInfo[3]);
-               features.mmx = (CPUInfo[3] & 0x800000) || false;
-               features.sse = (CPUInfo[3] & 0x2000000) || false;
-               features.sse2 = (CPUInfo[3] & 0x4000000) || false;
-               features.ssse3 = (CPUInfo[2] & 0x200) || false;
-               features.sse3 = (CPUInfo[2] & 0x1) || false;
-               features.ssse3 = (CPUInfo[2] & 0x200) || false;
-               features.stepping = CPUInfo[0] & 0xf;
-               features.model = ((CPUInfo[0] >> 4) & 0xf) + (((CPUInfo[0] >> 16) & 0xf) << 4);
-               features.family = ((CPUInfo[0] >> 8) & 0xf) + ((CPUInfo[0] >> 20) & 0xff);
-               if(features.sse) features.mmx2 = true; //MMXEXT is a subset of SSE!
-       }
-
-       x264_cpu_cpuid(0x80000000, &CPUInfo[0], &CPUInfo[1], &CPUInfo[2], &CPUInfo[3]);
-       int nExIds = qMax<int>(qMin<int>(CPUInfo[0], 0x80000004), 0x80000000);
-
-       if((_stricmp(CPUIdentificationString, "AuthenticAMD") == 0) && (nExIds >= 0x80000001U))
-       {
-               x264_cpu_cpuid(0x80000001, &CPUInfo[0], &CPUInfo[1], &CPUInfo[2], &CPUInfo[3]);
-               features.mmx2 = features.mmx2 || (CPUInfo[3] & 0x00400000U);
-       }
-
-       for(int i = 0x80000002; i <= nExIds; ++i)
-       {
-               x264_cpu_cpuid(i, &CPUInfo[0], &CPUInfo[1], &CPUInfo[2], &CPUInfo[3]);
-               switch(i)
-               {
-               case 0x80000002:
-                       memcpy(CPUBrandString, CPUInfo, sizeof(CPUInfo));
-                       break;
-               case 0x80000003:
-                       memcpy(CPUBrandString + 16, CPUInfo, sizeof(CPUInfo));
-                       break;
-               case 0x80000004:
-                       memcpy(CPUBrandString + 32, CPUInfo, sizeof(CPUInfo));
-                       break;
-               }
-       }
-
-       strncpy_s(features.brand, 0x40, CPUBrandString, _TRUNCATE);
-
-       if(strlen(features.brand) < 1) strncpy_s(features.brand, 0x40, "Unknown", _TRUNCATE);
-       if(strlen(features.vendor) < 1) strncpy_s(features.vendor, 0x40, "Unknown", _TRUNCATE);
-
-#if (!(defined(_M_X64) || defined(_M_IA64)))
-       QLibrary Kernel32Lib("kernel32.dll");
-       if(IsWow64ProcessFun IsWow64ProcessPtr = (IsWow64ProcessFun) Kernel32Lib.resolve("IsWow64Process"))
-       {
-               BOOL x64flag = FALSE;
-               if(IsWow64ProcessPtr(GetCurrentProcess(), &x64flag))
-               {
-                       features.x64 = (x64flag == TRUE);
-               }
-       }
-#else
-       features.x64 = true;
-#endif
-
-       DWORD_PTR procAffinity, sysAffinity;
-       if(GetProcessAffinityMask(GetCurrentProcess(), &procAffinity, &sysAffinity))
-       {
-               for(DWORD_PTR mask = 1; mask; mask <<= 1)
-               {
-                       features.count += ((sysAffinity & mask) ? (1) : (0));
-               }
-       }
-       if(features.count < 1)
-       {
-               GetNativeSystemInfo(&systemInfo);
-               features.count = qBound(1UL, systemInfo.dwNumberOfProcessors, 64UL);
-       }
-
-       bool flag = false;
-       if(CHECK_FLAG("force-cpu-no-64bit")) { flag = true; features.x64 = false; }
-       if(CHECK_FLAG("force-cpu-no-sse"))   { flag = true; features.sse = features.sse2 = features.sse3 = features.ssse3 = false; }
-       if(CHECK_FLAG("force-cpu-no-intel")) { flag = true; features.intel = false; }
-       if(flag) qWarning("CPU flags overwritten by user-defined parameters. Take care!\n");
-
-       return features;
-}
-*/
-
-/*
- * Verify a specific Windows version
- */
-static bool x264_verify_os_version(const DWORD major, const DWORD minor)
-{
-       OSVERSIONINFOEXW osvi;
-       DWORDLONG dwlConditionMask = 0;
-
-       //Initialize the OSVERSIONINFOEX structure
-       memset(&osvi, 0, sizeof(OSVERSIONINFOEXW));
-       osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXW);
-       osvi.dwMajorVersion = major;
-       osvi.dwMinorVersion = minor;
-       osvi.dwPlatformId = VER_PLATFORM_WIN32_NT;
-
-       //Initialize the condition mask
-       VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, VER_GREATER_EQUAL);
-       VER_SET_CONDITION(dwlConditionMask, VER_MINORVERSION, VER_GREATER_EQUAL);
-       VER_SET_CONDITION(dwlConditionMask, VER_PLATFORMID, VER_EQUAL);
-
-       // Perform the test
-       const BOOL ret = VerifyVersionInfoW(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_PLATFORMID, dwlConditionMask);
-
-       //Error checking
-       if(!ret)
-       {
-               if(GetLastError() != ERROR_OLD_WIN_VERSION)
-               {
-                       qWarning("VerifyVersionInfo() system call has failed!");
-               }
-       }
-
-       return (ret != FALSE);
-}
-
-/*
- * Determine the *real* Windows version
- */
-static bool x264_get_real_os_version(unsigned int *major, unsigned int *minor, bool *pbOverride)
-{
-       *major = *minor = 0;
-       *pbOverride = false;
-       
-       //Initialize local variables
-       OSVERSIONINFOEXW osvi;
-       memset(&osvi, 0, sizeof(OSVERSIONINFOEXW));
-       osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXW);
-
-       //Try GetVersionEx() first
-       if(GetVersionExW((LPOSVERSIONINFOW)&osvi) == FALSE)
-       {
-               qWarning("GetVersionEx() has failed, cannot detect Windows version!");
-               return false;
-       }
-
-       //Make sure we are running on NT
-       if(osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
-       {
-               *major = osvi.dwMajorVersion;
-               *minor = osvi.dwMinorVersion;
-       }
-       else
-       {
-               qWarning("Not running on Windows NT, unsupported operating system!");
-               return false;
-       }
-
-       //Determine the real *major* version first
-       forever
-       {
-               const DWORD nextMajor = (*major) + 1;
-               if(x264_verify_os_version(nextMajor, 0))
-               {
-                       *pbOverride = true;
-                       *major = nextMajor;
-                       *minor = 0;
-                       continue;
-               }
-               break;
-       }
-
-       //Now also determine the real *minor* version
-       forever
-       {
-               const DWORD nextMinor = (*minor) + 1;
-               if(x264_verify_os_version((*major), nextMinor))
-               {
-                       *pbOverride = true;
-                       *minor = nextMinor;
-                       continue;
-               }
-               break;
-       }
-
-       return true;
-}
-
-/*
- * Get the native operating system version
- */
-const x264_os_version_t &x264_get_os_version(void)
-{
-       QReadLocker readLock(&g_x264_os_version.lock);
-
-       //Already initialized?
-       if(g_x264_os_version.bInitialized)
-       {
-               return g_x264_os_version.version;
-       }
-       
-       readLock.unlock();
-       QWriteLocker writeLock(&g_x264_os_version.lock);
-
-       //Detect OS version
-       if(!g_x264_os_version.bInitialized)
-       {
-               unsigned int major, minor; bool oflag;
-               if(x264_get_real_os_version(&major, &minor, &oflag))
-               {
-                       g_x264_os_version.version.versionMajor = major;
-                       g_x264_os_version.version.versionMinor = minor;
-                       g_x264_os_version.version.overrideFlag = oflag;
-                       g_x264_os_version.bInitialized = true;
-               }
-               else
-               {
-                       qWarning("Failed to determin the operating system version!");
-               }
-       }
-
-       return g_x264_os_version.version;
-}
-
-/*
- * Check for compatibility mode
- */
-static bool x264_check_compatibility_mode(const char *exportName, const char *executableName)
-{
-       QLibrary kernel32("kernel32.dll");
-
-       if(exportName != NULL)
-       {
-               if(kernel32.resolve(exportName) != NULL)
-               {
-                       qWarning("Function '%s' exported from 'kernel32.dll' -> Windows compatibility mode!", exportName);
-                       qFatal("%s", QApplication::tr("Executable '%1' doesn't support Windows compatibility mode.").arg(QString::fromLatin1(executableName)).toLatin1().constData());
-                       return false;
-               }
-       }
-
-       return true;
-}
-
-/*
- * Check if we are running under wine
- */
-bool x264_detect_wine(void)
-{
-       QReadLocker readLock(&g_x264_wine.lock);
-
-       //Already initialized?
-       if(g_x264_wine.bInitialized)
-       {
-               return g_x264_wine.bIsWine;
-       }
-       
-       readLock.unlock();
-       QWriteLocker writeLock(&g_x264_wine.lock);
-
-       if(!g_x264_wine.bInitialized)
-       {
-               g_x264_wine.bIsWine = false;
-               QLibrary ntdll("ntdll.dll");
-               if(ntdll.load())
-               {
-                       if(ntdll.resolve("wine_nt_to_unix_file_name") != NULL) g_x264_wine.bIsWine = true;
-                       if(ntdll.resolve("wine_get_version") != NULL) g_x264_wine.bIsWine = true;
-                       ntdll.unload();
-               }
-               g_x264_wine.bInitialized = true;
-       }
-
-       return g_x264_wine.bIsWine;
-}
-
-/*
- * Qt event filter
- */
-static bool x264_event_filter(void *message, long *result)
-{ 
-       if((!(X264_DEBUG)) && x264_check_for_debugger())
-       {
-               x264_fatal_exit(L"Not a debug build. Please unload debugger and try again!");
-       }
-       
-       //switch(reinterpret_cast<MSG*>(message)->message)
-       //{
-       //case WM_QUERYENDSESSION:
-       //      qWarning("WM_QUERYENDSESSION message received!");
-       //      *result = x264_broadcast(x264_event_queryendsession, false) ? TRUE : FALSE;
-       //      return true;
-       //case WM_ENDSESSION:
-       //      qWarning("WM_ENDSESSION message received!");
-       //      if(reinterpret_cast<MSG*>(message)->wParam == TRUE)
-       //      {
-       //              x264_broadcast(x264_event_endsession, false);
-       //              if(QApplication *app = reinterpret_cast<QApplication*>(QApplication::instance()))
-       //              {
-       //                      app->closeAllWindows();
-       //                      app->quit();
-       //              }
-       //              x264_finalization();
-       //              exit(1);
-       //      }
-       //      *result = 0;
-       //      return true;
-       //default:
-       //      /*ignore this message and let Qt handle it*/
-       //      return false;
-       //}
-
-       return false;
-}
-
-/*
- * Check for process elevation
- */
-static bool x264_process_is_elevated(bool *bIsUacEnabled = NULL)
-{
-       bool bIsProcessElevated = false;
-       if(bIsUacEnabled) *bIsUacEnabled = false;
-       HANDLE hToken = NULL;
-       
-       if(OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken))
-       {
-               TOKEN_ELEVATION_TYPE tokenElevationType;
-               DWORD returnLength;
-               if(GetTokenInformation(hToken, TokenElevationType, &tokenElevationType, sizeof(TOKEN_ELEVATION_TYPE), &returnLength))
-               {
-                       if(returnLength == sizeof(TOKEN_ELEVATION_TYPE))
-                       {
-                               switch(tokenElevationType)
-                               {
-                               case TokenElevationTypeDefault:
-                                       qDebug("Process token elevation type: Default -> UAC is disabled.\n");
-                                       break;
-                               case TokenElevationTypeFull:
-                                       qWarning("Process token elevation type: Full -> potential security risk!\n");
-                                       bIsProcessElevated = true;
-                                       if(bIsUacEnabled) *bIsUacEnabled = true;
-                                       break;
-                               case TokenElevationTypeLimited:
-                                       qDebug("Process token elevation type: Limited -> not elevated.\n");
-                                       if(bIsUacEnabled) *bIsUacEnabled = true;
-                                       break;
-                               default:
-                                       qWarning("Unknown tokenElevationType value: %d", tokenElevationType);
-                                       break;
-                               }
-                       }
-                       else
-                       {
-                               qWarning("GetTokenInformation() return an unexpected size!");
-                       }
-               }
-               CloseHandle(hToken);
-       }
-       else
-       {
-               qWarning("Failed to open process token!");
-       }
-
-       return bIsProcessElevated;
-}
-
-/*
- * Check if the current user is an administartor (helper function)
- */
-static bool x264_user_is_admin_helper(void)
-{
-       HANDLE hToken = NULL;
-       if(!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken))
-       {
-               return false;
-       }
-
-       DWORD dwSize = 0;
-       if(!GetTokenInformation(hToken, TokenGroups, NULL, 0, &dwSize))
-       {
-               if(GetLastError() != ERROR_INSUFFICIENT_BUFFER)
-               {
-                       CloseHandle(hToken);
-                       return false;
-               }
-       }
-
-       PTOKEN_GROUPS lpGroups = (PTOKEN_GROUPS) malloc(dwSize);
-       if(!lpGroups)
-       {
-               CloseHandle(hToken);
-               return false;
-       }
-
-       if(!GetTokenInformation(hToken, TokenGroups, lpGroups, dwSize, &dwSize))
-       {
-               free(lpGroups);
-               CloseHandle(hToken);
-               return false;
-       }
-
-       PSID lpSid = NULL; SID_IDENTIFIER_AUTHORITY Authority = {SECURITY_NT_AUTHORITY};
-       if(!AllocateAndInitializeSid(&Authority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &lpSid))
-       {
-               free(lpGroups);
-               CloseHandle(hToken);
-               return false;
-       }
-
-       bool bResult = false;
-       for(DWORD i = 0; i < lpGroups->GroupCount; i++)
-       {
-               if(EqualSid(lpSid, lpGroups->Groups[i].Sid))
-               {
-                       bResult = true;
-                       break;
-               }
-       }
-
-       FreeSid(lpSid);
-       free(lpGroups);
-       CloseHandle(hToken);
-       return bResult;
-}
-
-/*
- * Check if the current user is an administartor
- */
-bool x264_user_is_admin(void)
-{
-       bool isAdmin = false;
-
-       //Check for process elevation and UAC support first!
-       if(x264_process_is_elevated(&isAdmin))
-       {
-               qWarning("Process is elevated -> user is admin!");
-               return true;
-       }
-       
-       //If not elevated and UAC is not available -> user must be in admin group!
-       if(!isAdmin)
-       {
-               qDebug("UAC is disabled/unavailable -> checking for Administrators group");
-               isAdmin = x264_user_is_admin_helper();
-       }
-
-       return isAdmin;
-}
-
-/*
- * Initialize Qt framework
- */
-//bool x264_init_qt(int &argc, char **argv)
-//{
-//     static bool qt_initialized = false;
-//     typedef BOOL (WINAPI *SetDllDirectoryProc)(WCHAR *lpPathName);
-//     const QStringList &arguments = x264_arguments();
-//
-//     //Don't initialized again, if done already
-//     if(qt_initialized)
-//     {
-//             return true;
-//     }
-//
-//     //Secure DLL loading
-//     QLibrary kernel32("kernel32.dll");
-//     if(kernel32.load())
-//     {
-//             SetDllDirectoryProc pSetDllDirectory = (SetDllDirectoryProc) kernel32.resolve("SetDllDirectoryW");
-//             if(pSetDllDirectory != NULL) pSetDllDirectory(L"");
-//     }
-//
-//     //Extract executable name from argv[] array
-//     QString executableName = QLatin1String("x264_launcher.exe");
-//     if(arguments.count() > 0)
-//     {
-//             static const char *delimiters = "\\/:?";
-//             executableName = arguments[0].trimmed();
-//             for(int i = 0; delimiters[i]; i++)
-//             {
-//                     int temp = executableName.lastIndexOf(QChar(delimiters[i]));
-//                     if(temp >= 0) executableName = executableName.mid(temp + 1);
-//             }
-//             executableName = executableName.trimmed();
-//             if(executableName.isEmpty())
-//             {
-//                     executableName = QLatin1String("x264_launcher.exe");
-//             }
-//     }
-//
-//     //Check Qt version
-//#ifdef QT_BUILD_KEY
-//     qDebug("Using Qt v%s [%s], %s, %s", qVersion(), QLibraryInfo::buildDate().toString(Qt::ISODate).toLatin1().constData(), (qSharedBuild() ? "DLL" : "Static"), QLibraryInfo::buildKey().toLatin1().constData());
-//     qDebug("Compiled with Qt v%s [%s], %s\n", QT_VERSION_STR, QT_PACKAGEDATE_STR, QT_BUILD_KEY);
-//     if(_stricmp(qVersion(), QT_VERSION_STR))
-//     {
-//             qFatal("%s", QApplication::tr("Executable '%1' requires Qt v%2, but found Qt v%3.").arg(executableName, QString::fromLatin1(QT_VERSION_STR), QString::fromLatin1(qVersion())).toLatin1().constData());
-//             return false;
-//     }
-//     if(QLibraryInfo::buildKey().compare(QString::fromLatin1(QT_BUILD_KEY), Qt::CaseInsensitive))
-//     {
-//             qFatal("%s", QApplication::tr("Executable '%1' was built for Qt '%2', but found Qt '%3'.").arg(executableName, QString::fromLatin1(QT_BUILD_KEY), QLibraryInfo::buildKey()).toLatin1().constData());
-//             return false;
-//     }
-//#else
-//     qDebug("Using Qt v%s [%s], %s", qVersion(), QLibraryInfo::buildDate().toString(Qt::ISODate).toLatin1().constData(), (qSharedBuild() ? "DLL" : "Static"));
-//     qDebug("Compiled with Qt v%s [%s]\n", QT_VERSION_STR, QT_PACKAGEDATE_STR);
-//#endif
-//
-//     //Check the Windows version
-//     const x264_os_version_t &osVersionNo = x264_get_os_version();
-//     if(osVersionNo < x264_winver_winxp)
-//     {
-//             qFatal("%s", QApplication::tr("Executable '%1' requires Windows XP or later.").arg(executableName).toLatin1().constData());
-//     }
-//
-//     //Check whether we are running on a supported Windows version
-//     bool runningOnSupportedOSVersion = false;
-//     for(size_t i = 0; x264_winver_lut[i].version != x264_winver_error; i++)
-//     {
-//             if(osVersionNo == x264_winver_lut[i].version)
-//             {       
-//                     runningOnSupportedOSVersion = true;
-//                     qDebug("Running on %s (NT v%u.%u).\n", x264_winver_lut[i].friendlyName, osVersionNo.versionMajor, osVersionNo.versionMinor);
-//                     break;
-//             }
-//     }
-//     if(!runningOnSupportedOSVersion)
-//     {
-//             const QString message = QString().sprintf("Running on an unknown WindowsNT-based system (v%u.%u).", osVersionNo.versionMajor, osVersionNo.versionMinor);
-//             qWarning("%s\n", QUTF8(message));
-//             MessageBoxW(NULL, QWCHAR(message), L"LameXP", MB_OK | MB_TOPMOST | MB_ICONWARNING);
-//     }
-//
-//     //Check for compat mode
-//     if(osVersionNo.overrideFlag && (osVersionNo <= x264_winver_wn100))
-//     {
-//             qWarning("Windows compatibility mode detected!");
-//             if(!arguments.contains("--ignore-compat-mode", Qt::CaseInsensitive))
-//             {
-//                     qFatal("%s", QApplication::tr("Executable '%1' doesn't support Windows compatibility mode.").arg(executableName).toLatin1().constData());
-//                     return false;
-//             }
-//     }
-//
-//     //Check for Wine
-//     if(x264_detect_wine())
-//     {
-//             qWarning("It appears we are running under Wine, unexpected things might happen!\n");
-//     }
-//
-//     //Set text Codec for locale
-//     QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
-//
-//     //Create Qt application instance
-//     QApplication *application = new QApplication(argc, argv);
-//
-//     //Load plugins from application directory
-//     QCoreApplication::setLibraryPaths(QStringList() << QApplication::applicationDirPath());
-//     qDebug("Library Path:\n%s\n", QUTF8(QApplication::libraryPaths().first()));
-//
-//     //Create Qt application instance and setup version info
-//     application->setApplicationName("Simple x264 Launcher");
-//     application->setApplicationVersion(QString().sprintf("%d.%02d", x264_version_major(), x264_version_minor())); 
-//     application->setOrganizationName("LoRd_MuldeR");
-//     application->setOrganizationDomain("mulder.at.gg");
-//     application->setWindowIcon(QIcon(":/icons/movie.ico"));
-//     application->setEventFilter(x264_event_filter);
-//
-//     //Check for supported image formats
-//     QList<QByteArray> supportedFormats = QImageReader::supportedImageFormats();
-//     for(int i = 0; g_x264_imageformats[i]; i++)
-//     {
-//             if(!supportedFormats.contains(g_x264_imageformats[i]))
-//             {
-//                     qFatal("Qt initialization error: QImageIOHandler for '%s' missing!", g_x264_imageformats[i]);
-//                     return false;
-//             }
-//     }
-//     
-//     //Add default translations
-//     /*
-//     QWriteLocker writeLockTranslations(&g_x264_translation.lock);
-//     if(!g_x264_translation.files) g_x264_translation.files = new QMap<QString, QString>();
-//     if(!g_x264_translation.names) g_x264_translation.names = new QMap<QString, QString>();
-//     g_x264_translation.files->insert(X264_DEFAULT_LANGID, "");
-//     g_x264_translation.names->insert(X264_DEFAULT_LANGID, "English");
-//     writeLockTranslations.unlock();
-//     */
-//
-//     //Check for process elevation
-//     if(x264_process_is_elevated() && (!x264_detect_wine()))
-//     {
-//             QMessageBox messageBox(QMessageBox::Warning, "Simple x264 Launcher", "<nobr>Simple x264 Launcher was started with 'elevated' rights, altough it does not need these rights.<br>Running an applications with unnecessary rights is a potential security risk!</nobr>", QMessageBox::NoButton, NULL, Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint | Qt::WindowStaysOnTopHint);
-//             messageBox.addButton("Quit Program (Recommended)", QMessageBox::NoRole);
-//             messageBox.addButton("Ignore", QMessageBox::NoRole);
-//             if(messageBox.exec() == 0)
-//             {
-//                     return false;
-//             }
-//     }
-//
-//     //Update console icon, if a console is attached
-//#if QT_VERSION < QT_VERSION_CHECK(5,0,0)
-//     if(g_x264_console_attached && (!x264_detect_wine()))
-//     {
-//             typedef DWORD (__stdcall *SetConsoleIconFun)(HICON);
-//             QLibrary kernel32("kernel32.dll");
-//             if(kernel32.load())
-//             {
-//                     SetConsoleIconFun SetConsoleIconPtr = (SetConsoleIconFun) kernel32.resolve("SetConsoleIcon");
-//                     QPixmap pixmap = QIcon(":/icons/movie.ico").pixmap(16, 16);
-//                     if((SetConsoleIconPtr != NULL) && (!pixmap.isNull())) SetConsoleIconPtr(pixmap.toWinHICON());
-//                     kernel32.unload();
-//             }
-//     }
-//#endif
-//
-//     //Done
-//     qt_initialized = true;
-//     return true;
-//}
-
-
-/*
- * Suspend or resume process
- */
-bool x264_suspendProcess(const QProcess *proc, const bool suspend)
-{
-       if(Q_PID pid = proc->pid())
-       {
-               if(suspend)
-               {
-                       return (SuspendThread(pid->hThread) != ((DWORD) -1));
-               }
-               else
-               {
-                       return (ResumeThread(pid->hThread) != ((DWORD) -1));
-               }
-       }
-       else
-       {
-               return false;
-       }
-}
-
-/*
- * Convert path to short/ANSI path
- */
-QString x264_path2ansi(const QString &longPath, bool makeLowercase)
-{
-       QString shortPath = longPath;
-       
-       const QString longPathNative = QDir::toNativeSeparators(longPath);
-       DWORD buffSize = GetShortPathNameW(QWCHAR(longPathNative), NULL, NULL);
-       
-       if(buffSize > 0)
-       {
-               wchar_t *buffer = (wchar_t*) _malloca(sizeof(wchar_t) * buffSize);
-               DWORD result = GetShortPathNameW(QWCHAR(longPathNative), buffer, buffSize);
-
-               if((result > 0) && (result < buffSize))
-               {
-                       shortPath = QDir::fromNativeSeparators(QString::fromUtf16(reinterpret_cast<const unsigned short*>(buffer), result));
-
-                       if(makeLowercase)
-                       {
-                               QFileInfo info(shortPath);
-                               shortPath = QString("%1/%2").arg(info.absolutePath(), info.fileName().toLower());
-                       }
-               }
-
-               _freea(buffer);
-               buffer = NULL;
-       }
-
-       return shortPath;
-}
-
-/*
- * Set the process priority class for current process
- */
-bool x264_change_process_priority(const int priority)
-{
-       return x264_change_process_priority(GetCurrentProcess(), priority);
-}
-
-/*
- * Set the process priority class for specified process
- */
-bool x264_change_process_priority(const QProcess *proc, const int priority)
-{
-       if(Q_PID qPid = proc->pid())
-       {
-               return x264_change_process_priority(qPid->hProcess, priority);
-       }
-       else
-       {
-               return false;
-       }
-}
-
-/*
- * Set the process priority class for specified process
- */
-bool x264_change_process_priority(void *hProcess, const int priority)
-{
-       bool ok = false;
-
-       switch(qBound(-2, priority, 2))
-       {
-       case 2:
-               ok = (SetPriorityClass(hProcess, HIGH_PRIORITY_CLASS) == TRUE);
-               break;
-       case 1:
-               if(!(ok = (SetPriorityClass(hProcess, ABOVE_NORMAL_PRIORITY_CLASS) == TRUE)))
-               {
-                       ok = (SetPriorityClass(hProcess, HIGH_PRIORITY_CLASS) == TRUE);
-               }
-               break;
-       case 0:
-               ok = (SetPriorityClass(hProcess, NORMAL_PRIORITY_CLASS) == TRUE);
-               break;
-       case -1:
-               if(!(ok = (SetPriorityClass(hProcess, BELOW_NORMAL_PRIORITY_CLASS) == TRUE)))
-               {
-                       ok = (SetPriorityClass(hProcess, IDLE_PRIORITY_CLASS) == TRUE);
-               }
-               break;
-       case -2:
-               ok = (SetPriorityClass(hProcess, IDLE_PRIORITY_CLASS) == TRUE);
-               break;
-       }
-
-       return ok;
-}
-
-/*
- * Play a sound (from resources)
- */
-bool x264_play_sound(const unsigned short uiSoundIdx, const bool bAsync, const wchar_t *alias)
-{
-       if(alias)
-       {
-               return PlaySound(alias, GetModuleHandle(NULL), (SND_ALIAS | (bAsync ? SND_ASYNC : SND_SYNC))) == TRUE;
-       }
-       else
-       {
-               return PlaySound(MAKEINTRESOURCE(uiSoundIdx), GetModuleHandle(NULL), (SND_RESOURCE | (bAsync ? SND_ASYNC : SND_SYNC))) == TRUE;
-       }
-}
-
-/*
- * Current process ID
- */
-unsigned int x264_process_id(void)
-{
-       return GetCurrentProcessId();
-}
-
-/*
- * Current process ID
- */
-unsigned int x264_process_id(QProcess &process)
-{
-       if(Q_PID pid = process.pid())
-       {
-               return pid->dwProcessId;
-       }
-       return NULL;
-}
-
-/*
- * Make a window blink (to draw user's attention)
- */
-void x264_blink_window(QWidget *poWindow, unsigned int count, unsigned int delay)
-{
-       static QMutex blinkMutex;
-
-       const double maxOpac = 1.0;
-       const double minOpac = 0.3;
-       const double delOpac = 0.1;
-
-       if(!blinkMutex.tryLock())
-       {
-               qWarning("Blinking is already in progress, skipping!");
-               return;
-       }
-       
-       try
-       {
-               const int steps = static_cast<int>(ceil(maxOpac - minOpac) / delOpac);
-               const int sleep = static_cast<int>(floor(static_cast<double>(delay) / static_cast<double>(steps)));
-               const double opacity = poWindow->windowOpacity();
-       
-               for(unsigned int i = 0; i < count; i++)
-               {
-                       for(double x = maxOpac; x >= minOpac; x -= delOpac)
-                       {
-                               poWindow->setWindowOpacity(x);
-                               QApplication::processEvents();
-                               Sleep(sleep);
-                       }
-
-                       for(double x = minOpac; x <= maxOpac; x += delOpac)
-                       {
-                               poWindow->setWindowOpacity(x);
-                               QApplication::processEvents();
-                               Sleep(sleep);
-                       }
-               }
-
-               poWindow->setWindowOpacity(opacity);
-               QApplication::processEvents();
-               blinkMutex.unlock();
-       }
-       catch(...)
-       {
-               blinkMutex.unlock();
-               qWarning("Exception error while blinking!");
-       }
-}
-
-/*
- * Bring the specifed window to the front
- */
-static bool x264_bring_to_front(const HWND hWin)
-{
-       if(hWin)
-       {
-               const bool ret = (SetForegroundWindow(hWin) != FALSE);
-               SwitchToThisWindow(hWin, TRUE);
-               return ret;
-       }
-       return false;
-}
-
-/*
- * Bring the specifed window to the front
- */
-bool x264_bring_to_front(const QWidget *win)
-{
-       if(win)
-       {
-               return x264_bring_to_front(win->winId());
-       }
-       return false;
-}
-
-/*
- * Bring window of the specifed process to the front (callback)
- */
-static BOOL CALLBACK x264_bring_process_to_front_helper(HWND hwnd, LPARAM lParam)
-{
-       DWORD processId = *reinterpret_cast<WORD*>(lParam);
-       DWORD windowProcessId = NULL;
-       GetWindowThreadProcessId(hwnd, &windowProcessId);
-       if(windowProcessId == processId)
-       {
-               x264_bring_to_front(hwnd);
-               return FALSE;
-       }
-       return TRUE;
-}
-
-/*
- * Bring window of the specifed process to the front
- */
-bool x264_bring_process_to_front(const unsigned long pid)
-{
-       return EnumWindows(x264_bring_process_to_front_helper, reinterpret_cast<LPARAM>(&pid)) == TRUE;
-}
-
-/*
- * Check if file is a valid Win32/Win64 executable
- */
-bool x264_is_executable(const QString &path)
-{
-       bool bIsExecutable = false;
-       DWORD binaryType;
-       if(GetBinaryType(QWCHAR(QDir::toNativeSeparators(path)), &binaryType))
-       {
-               bIsExecutable = (binaryType == SCS_32BIT_BINARY || binaryType == SCS_64BIT_BINARY);
-       }
-       return bIsExecutable;
-}
-
-/*
- * Read value from registry
- */
-QString x264_query_reg_string(const bool bUser, const QString &path, const QString &name)
-{
-       QString result; HKEY hKey = NULL;
-       if(RegOpenKey((bUser ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE), QWCHAR(path), &hKey) == ERROR_SUCCESS)
-       {
-               const size_t DATA_LEN = 2048; wchar_t data[DATA_LEN];
-               DWORD type = REG_NONE, size = sizeof(wchar_t) * DATA_LEN;
-               if(RegQueryValueEx(hKey, QWCHAR(name), NULL, &type, ((BYTE*)&data[0]), &size) == ERROR_SUCCESS)
-               {
-                       if((type == REG_SZ) || (type == REG_EXPAND_SZ))
-                       {
-                               result = WCHAR2QSTR(&data[0]);
-                       }
-               }
-               RegCloseKey(hKey);
-       }
-       return result;
-}
-
-/*
- * Locate known folder on local system
- */
-const QString &x264_known_folder(x264_known_folder_t folder_id)
+QString x264_path2ansi(const QString &longPath, bool makeLowercase)
 {
-       static const int CSIDL_FLAG_CREATE = 0x8000;
-       typedef enum { KF_FLAG_CREATE = 0x00008000 } kf_flags_t;
+       QString shortPath = longPath;
        
-       struct
-       {
-               const int csidl;
-               const GUID guid;
-       }
-       static s_folders[] =
-       {
-               { 0x001c, {0xF1B32785,0x6FBA,0x4FCF,{0x9D,0x55,0x7B,0x8E,0x7F,0x15,0x70,0x91}} },  //CSIDL_LOCAL_APPDATA
-               { 0x0026, {0x905e63b6,0xc1bf,0x494e,{0xb2,0x9c,0x65,0xb7,0x32,0xd3,0xd2,0x1a}} },  //CSIDL_PROGRAM_FILES
-               { 0x0024, {0xF38BF404,0x1D43,0x42F2,{0x93,0x05,0x67,0xDE,0x0B,0x28,0xFC,0x23}} },  //CSIDL_WINDOWS_FOLDER
-               { 0x0025, {0x1AC14E77,0x02E7,0x4E5D,{0xB7,0x44,0x2E,0xB1,0xAE,0x51,0x98,0xB7}} },  //CSIDL_SYSTEM_FOLDER
-       };
-
-       size_t folderId = size_t(-1);
-
-       switch(folder_id)
-       {
-               case x264_folder_localappdata: folderId = 0; break;
-               case x264_folder_programfiles: folderId = 1; break;
-               case x264_folder_systroot_dir: folderId = 2; break;
-               case x264_folder_systemfolder: folderId = 3; break;
-       }
-
-       if(folderId == size_t(-1))
-       {
-               qWarning("Invalid 'known' folder was requested!");
-               return *reinterpret_cast<QString*>(NULL);
-       }
-
-       QReadLocker readLock(&g_x264_known_folder.lock);
-
-       //Already in cache?
-       if(g_x264_known_folder.knownFolders)
-       {
-               if(g_x264_known_folder.knownFolders->contains(folderId))
-               {
-                       return (*g_x264_known_folder.knownFolders)[folderId];
-               }
-       }
-
-       //Obtain write lock to initialize
-       readLock.unlock();
-       QWriteLocker writeLock(&g_x264_known_folder.lock);
-
-       //Still not in cache?
-       if(g_x264_known_folder.knownFolders)
-       {
-               if(g_x264_known_folder.knownFolders->contains(folderId))
-               {
-                       return (*g_x264_known_folder.knownFolders)[folderId];
-               }
-       }
-
-       //Initialize on first call
-       if(!g_x264_known_folder.knownFolders)
-       {
-               QLibrary shell32("shell32.dll");
-               if(shell32.load())
-               {
-                       g_x264_known_folder.getFolderPath =      (SHGetFolderPath_t)      shell32.resolve("SHGetFolderPathW");
-                       g_x264_known_folder.getKnownFolderPath = (SHGetKnownFolderPath_t) shell32.resolve("SHGetKnownFolderPath");
-               }
-               g_x264_known_folder.knownFolders = new QMap<size_t, QString>();
-       }
-
-       QString folderPath;
-
-       //Now try to get the folder path!
-       if(g_x264_known_folder.getKnownFolderPath)
-       {
-               WCHAR *path = NULL;
-               if(g_x264_known_folder.getKnownFolderPath(s_folders[folderId].guid, KF_FLAG_CREATE, NULL, &path) == S_OK)
-               {
-                       //MessageBoxW(0, path, L"SHGetKnownFolderPath", MB_TOPMOST);
-                       QDir folderTemp = QDir(QDir::fromNativeSeparators(QString::fromUtf16(reinterpret_cast<const unsigned short*>(path))));
-                       if(folderTemp.exists())
-                       {
-                               folderPath = folderTemp.canonicalPath();
-                       }
-                       CoTaskMemFree(path);
-               }
-       }
-       else if(g_x264_known_folder.getFolderPath)
-       {
-               WCHAR *path = new WCHAR[4096];
-               if(g_x264_known_folder.getFolderPath(NULL, s_folders[folderId].csidl | CSIDL_FLAG_CREATE, NULL, NULL, path) == S_OK)
-               {
-                       //MessageBoxW(0, path, L"SHGetFolderPathW", MB_TOPMOST);
-                       QDir folderTemp = QDir(QDir::fromNativeSeparators(QString::fromUtf16(reinterpret_cast<const unsigned short*>(path))));
-                       if(folderTemp.exists())
-                       {
-                               folderPath = folderTemp.canonicalPath();
-                       }
-               }
-               X264_DELETE_ARRAY(path);
-       }
-
-       //Update cache
-       g_x264_known_folder.knownFolders->insert(folderId, folderPath);
-       return (*g_x264_known_folder.knownFolders)[folderId];
-}
-
-/*
- * Try to initialize the folder (with *write* access)
- */
-static QString x264_try_init_folder(const QString &folderPath)
-{
-       static const char *DATA = "Lorem ipsum dolor sit amet, consectetur, adipisci velit!";
+       const QString longPathNative = QDir::toNativeSeparators(longPath);
+       DWORD buffSize = GetShortPathNameW(MUTILS_WCHR(longPathNative), NULL, NULL);
        
-       bool success = false;
-
-       const QFileInfo folderInfo(folderPath);
-       const QDir folderDir(folderInfo.absoluteFilePath());
-
-       //Create folder, if it does *not* exist yet
-       for(int i = 0; i < 16; i++)
+       if(buffSize > 0)
        {
-               if(folderDir.exists()) break;
-               folderDir.mkpath(".");
-       }
+               wchar_t *buffer = (wchar_t*) _malloca(sizeof(wchar_t) * buffSize);
+               DWORD result = GetShortPathNameW(MUTILS_WCHR(longPathNative), buffer, buffSize);
 
-       //Make sure folder exists now *and* is writable
-       if(folderDir.exists())
-       {
-               const QByteArray testData = QByteArray(DATA);
-               for(int i = 0; i < 32; i++)
+               if((result > 0) && (result < buffSize))
                {
-                       QFile testFile(folderDir.absoluteFilePath(QString("~%1.tmp").arg(x264_rand_str())));
-                       if(testFile.open(QIODevice::ReadWrite | QIODevice::Truncate))
-                       {
-                               if(testFile.write(testData) >= testData.size())
-                               {
-                                       success = true;
-                               }
-                               testFile.remove();
-                               testFile.close();
-                       }
-                       if(success) break;
-               }
-       }
-
-       return (success ? folderDir.canonicalPath() : QString());
-}
-
-/*
- * Detect the TEMP directory
- */
-const QString &x264_temp_directory(void)
-{
-       QReadLocker readLock(&g_x264_temp_folder.lock);
-
-       if(g_x264_temp_folder.path)
-       {
-               return *g_x264_temp_folder.path;
-       }
-
-       readLock.unlock();
-       QWriteLocker writeLock(&g_x264_temp_folder.lock);
-
-       if(!g_x264_temp_folder.path)
-       {
-               //Try %TEMP% first
-               g_x264_temp_folder.path = new QString(x264_try_init_folder(QDir::temp().absolutePath()));
+                       shortPath = QDir::fromNativeSeparators(QString::fromUtf16(reinterpret_cast<const unsigned short*>(buffer), result));
 
-               //Fall back to %LOCALAPPDATA%, if %TEMP% didn't work
-               if(g_x264_temp_folder.path->isEmpty())
-               {
-                       qWarning("%%TEMP%% directory not found -> falling back to %%LOCALAPPDATA%%");
-                       static const x264_known_folder_t folderId[2] = { x264_folder_localappdata, x264_folder_systroot_dir };
-                       for(size_t id = 0; (g_x264_temp_folder.path->isEmpty() && (id < 2)); id++)
+                       if(makeLowercase)
                        {
-                               const QString &localAppData = x264_known_folder(x264_folder_localappdata);
-                               if(!localAppData.isEmpty())
-                               {
-                                       *g_x264_temp_folder.path = x264_try_init_folder(QString("%1/Temp").arg(localAppData));
-                               }
-                               else
-                               {
-                                       qWarning("%%LOCALAPPDATA%% directory could not be found!");
-                               }
+                               QFileInfo info(shortPath);
+                               shortPath = QString("%1/%2").arg(info.absolutePath(), info.fileName().toLower());
                        }
                }
 
-               //Failed to init TEMP folder?
-               if(g_x264_temp_folder.path->isEmpty())
-               {
-                       qWarning("Temporary directory could not be initialized !!!");
-               }
-       }
-
-       return *g_x264_temp_folder.path;
-}
-
-/*
- * Display the window's close button
- */
-bool x264_enable_close_button(const QWidget *win, const bool bEnable)
-{
-       bool ok = false;
-
-       if(HMENU hMenu = GetSystemMenu(win->winId(), FALSE))
-       {
-               ok = (EnableMenuItem(hMenu, SC_CLOSE, MF_BYCOMMAND | (bEnable ? MF_ENABLED : MF_GRAYED)) == TRUE);
+               _freea(buffer);
+               buffer = NULL;
        }
 
-       return ok;
-}
-
-/*
- * Play beep sound
- */
-bool x264_beep(int beepType)
-{
-       switch(beepType)
-       {
-               case x264_beep_info:    return MessageBeep(MB_ICONASTERISK) == TRUE;    break;
-               case x264_beep_warning: return MessageBeep(MB_ICONEXCLAMATION) == TRUE; break;
-               case x264_beep_error:   return MessageBeep(MB_ICONHAND) == TRUE;        break;
-               default: return false;
-       }
+       return shortPath;
 }
 
 /*
- * Shutdown the computer
+ * Read value from registry
  */
-bool x264_shutdown_computer(const QString &message, const unsigned long timeout, const bool forceShutdown)
+QString x264_query_reg_string(const bool bUser, const QString &path, const QString &name)
 {
-       HANDLE hToken = NULL;
-
-       if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
+       QString result; HKEY hKey = NULL;
+       if(RegOpenKey((bUser ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE), MUTILS_WCHR(path), &hKey) == ERROR_SUCCESS)
        {
-               TOKEN_PRIVILEGES privileges;
-               memset(&privileges, 0, sizeof(TOKEN_PRIVILEGES));
-               privileges.PrivilegeCount = 1;
-               privileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
-               
-               if(LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &privileges.Privileges[0].Luid))
+               const size_t DATA_LEN = 2048; wchar_t data[DATA_LEN];
+               DWORD type = REG_NONE, size = sizeof(wchar_t) * DATA_LEN;
+               if(RegQueryValueEx(hKey, MUTILS_WCHR(name), NULL, &type, ((BYTE*)&data[0]), &size) == ERROR_SUCCESS)
                {
-                       if(AdjustTokenPrivileges(hToken, FALSE, &privileges, NULL, NULL, NULL))
+                       if((type == REG_SZ) || (type == REG_EXPAND_SZ))
                        {
-                               const DWORD reason = SHTDN_REASON_MAJOR_APPLICATION | SHTDN_REASON_FLAG_PLANNED;
-                               return InitiateSystemShutdownEx(NULL, const_cast<wchar_t*>(QWCHAR(message)), timeout, forceShutdown ? TRUE : FALSE, FALSE, reason);
+                               result = MUTILS_QSTR(&data[0]);
                        }
                }
+               RegCloseKey(hKey);
        }
-       
-       return false;
-}
-
-/*
- * Check the network connection status
- */
-int x264_network_status(void)
-{
-       DWORD dwFlags;
-       const BOOL ret = IsNetworkAlive(&dwFlags);
-       if(GetLastError() == 0)
-       {
-               return (ret != FALSE) ? x264_network_yes : x264_network_non;
-       }
-       return x264_network_err;
-}
-
-/*
- * Setup QPorcess object
- */
-void x264_init_process(QProcess &process, const QString &wokringDir, const bool bReplaceTempDir)
-{
-       //Environment variable names
-       static const char *const s_envvar_names_temp[] =
-       {
-               "TEMP", "TMP", "TMPDIR", "HOME", "USERPROFILE", "HOMEPATH", NULL
-       };
-       static const char *const s_envvar_names_remove[] =
-       {
-               "WGETRC", "SYSTEM_WGETRC", "HTTP_PROXY", "FTP_PROXY", "NO_PROXY", "GNUPGHOME", "LC_ALL", "LC_COLLATE", "LC_CTYPE", "LC_MESSAGES", "LC_MONETARY", "LC_NUMERIC", "LC_TIME", "LANG", NULL
-       };
-
-       //Initialize environment
-       QProcessEnvironment env = process.processEnvironment();
-       if(env.isEmpty()) env = QProcessEnvironment::systemEnvironment();
-
-       //Clean a number of enviroment variables that might affect our tools
-       for(size_t i = 0; s_envvar_names_remove[i]; i++)
-       {
-               env.remove(QString::fromLatin1(s_envvar_names_remove[i]));
-               env.remove(QString::fromLatin1(s_envvar_names_remove[i]).toLower());
-       }
-
-       const QString tempDir = QDir::toNativeSeparators(x264_temp_directory());
-
-       //Replace TEMP directory in environment
-       if(bReplaceTempDir)
-       {
-               for(size_t i = 0; s_envvar_names_temp[i]; i++)
-               {
-                       env.insert(s_envvar_names_temp[i], tempDir);
-               }
-       }
-
-       //Setup PATH variable
-       const QString path = env.value("PATH", QString()).trimmed();
-       env.insert("PATH", path.isEmpty() ? tempDir : QString("%1;%2").arg(tempDir, path));
-       
-       //Setup QPorcess object
-       process.setWorkingDirectory(wokringDir);
-       process.setProcessChannelMode(QProcess::MergedChannels);
-       process.setReadChannel(QProcess::StandardOutput);
-       process.setProcessEnvironment(env);
+       return result;
 }
 
 /*
@@ -2199,182 +496,3 @@ bool x264_set_thread_execution_state(const bool systemRequired)
        }
        return (state != NULL);
 }
-
-/*
- * Exception class
- */
-X264Exception::X264Exception(const char *message, ...)
-:
-       runtime_error(message)
-{
-       va_list args;
-       va_start(args, message);
-       vsnprintf_s(m_message, MAX_MSGLEN, _TRUNCATE, message, args);
-       va_end(args);
-}
-
-/*
- * Check for debugger (detect routine)
- */
-static __forceinline bool x264_check_for_debugger(void)
-{
-       __try
-       {
-               CloseHandle((HANDLE)((DWORD_PTR)-3));
-       }
-       __except(1)
-       {
-               return true;
-       }
-       __try 
-       {
-               __debugbreak();
-       }
-       __except(1) 
-       {
-               return IsDebuggerPresent();
-       }
-       return true;
-}
-
-/*
- * Check for debugger (thread proc)
- */
-static unsigned int __stdcall x264_debug_thread_proc(LPVOID lpParameter)
-{
-       SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_LOWEST);
-       forever
-       {
-               if(x264_check_for_debugger())
-               {
-                       x264_fatal_exit(L"Not a debug build. Please unload debugger and try again!");
-                       return 666;
-               }
-               x264_sleep(100);
-       }
-}
-
-/*
- * Check for debugger (startup routine)
- */
-static HANDLE x264_debug_thread_init()
-{
-       if(x264_check_for_debugger())
-       {
-               x264_fatal_exit(L"Not a debug build. Please unload debugger and try again!");
-       }
-       const uintptr_t h = _beginthreadex(NULL, 0, x264_debug_thread_proc, NULL, 0, NULL);
-       return (HANDLE)(h^0xdeadbeef);
-}
-
-/*
- * Fatal application exit
- */
-#pragma intrinsic(_InterlockedExchange)
-void x264_fatal_exit(const wchar_t* exitMessage, const char* errorBoxMessage)
-{
-       static volatile long bFatalFlag = 0L;
-
-       if(_InterlockedExchange(&bFatalFlag, 1L) == 0L)
-       {
-               if(GetCurrentThreadId() != g_main_thread_id)
-               {
-                       HANDLE mainThread = OpenThread(THREAD_TERMINATE, FALSE, g_main_thread_id);
-                       if(mainThread) TerminateThread(mainThread, ULONG_MAX);
-               }
-       
-               if(errorBoxMessage)
-               {
-                       MessageBoxA(NULL, errorBoxMessage, "Simple x264 Launcher - GURU MEDITATION", MB_ICONERROR | MB_TOPMOST | MB_TASKMODAL);
-               }
-
-               FatalAppExit(0, exitMessage);
-
-               for(;;)
-               {
-                       TerminateProcess(GetCurrentProcess(), -1);
-               }
-       }
-}
-
-/*
- * Output string to debugger [debug only]
- */
-void x264_dbg_output_string(const char* format, ...)
-{
-#if X264_DEBUG
-       char buffer[256];
-       va_list args;
-       va_start (args, format);
-       vsnprintf_s(buffer, 256, _TRUNCATE, format, args);
-       OutputDebugStringA(buffer);
-       va_end(args);
-#else
-       THROW("Cannot call this function in a non-debug build!");
-#endif //X264_DEBUG
-}
-
-/*
- * Initialize debug thread
- */
-static const HANDLE g_debug_thread = X264_DEBUG ? NULL : x264_debug_thread_init();
-
-/*
- * Get number private bytes [debug only]
- */
-size_t x264_dbg_private_bytes(void)
-{
-#if X264_DEBUG
-       PROCESS_MEMORY_COUNTERS_EX memoryCounters;
-       memoryCounters.cb = sizeof(PROCESS_MEMORY_COUNTERS_EX);
-       GetProcessMemoryInfo(GetCurrentProcess(), (PPROCESS_MEMORY_COUNTERS) &memoryCounters, sizeof(PROCESS_MEMORY_COUNTERS_EX));
-       return memoryCounters.PrivateUsage;
-#else
-       THROW("Cannot call this function in a non-debug build!");
-#endif //X264_DEBUG
-}
-
-/*
- * Initialization function
- */
-void x264_initialization(void)
-{
-       //Zero *before* constructors are called
-       X264_ZERO_MEMORY(g_x264_argv);
-       X264_ZERO_MEMORY(g_x264_os_version);
-       X264_ZERO_MEMORY(g_x264_portable);
-       X264_ZERO_MEMORY(g_x264_known_folder);
-       X264_ZERO_MEMORY(g_x264_temp_folder);
-}
-
-/*
- * Finalization function
- */
-void x264_finalization(void)
-{
-       //Destroy Qt application object
-       QApplication *application = dynamic_cast<QApplication*>(QApplication::instance());
-       X264_DELETE(application);
-
-       //Free STDOUT and STDERR buffers
-       if(g_x264_console_attached)
-       {
-               if(std::filebuf *tmp = dynamic_cast<std::filebuf*>(std::cout.rdbuf()))
-               {
-                       std::cout.rdbuf(NULL);
-                       X264_DELETE(tmp);
-               }
-               if(std::filebuf *tmp = dynamic_cast<std::filebuf*>(std::cerr.rdbuf()))
-               {
-                       std::cerr.rdbuf(NULL);
-                       X264_DELETE(tmp);
-               }
-       }
-       
-       //Clear CLI args
-       X264_DELETE(g_x264_argv.list);
-
-       //Clear folders cache
-       X264_DELETE(g_x264_known_folder.knownFolders);
-       X264_DELETE(g_x264_temp_folder.path);
-}
index 83e42c8..fc93e71 100644 (file)
@@ -34,144 +34,18 @@ class QIcon;
 class QWidget;
 class LockedFile;
 class QProcess;
-enum QtMsgType;
-
-///////////////////////////////////////////////////////////////////////////////
-// TYPE DEFINITIONS
-///////////////////////////////////////////////////////////////////////////////
-
-//Types definitions
-/*
-typedef struct
-{
-       int family;
-       int model;
-       int stepping;
-       int count;
-       bool x64;
-       bool mmx;
-       bool mmx2;
-       bool sse;
-       bool sse2;
-       bool sse3;
-       bool ssse3;
-       char vendor[0x40];
-       char brand[0x40];
-       bool intel;
-}
-x264_cpu_t;
-*/
-
-//OS version number
-typedef struct _x264_os_version_t
-{
-       unsigned int versionMajor;
-       unsigned int versionMinor;
-       bool overrideFlag;
-
-       //comparision operators
-       inline bool operator== (const _x264_os_version_t &rhs) const { return (versionMajor == rhs.versionMajor) && (versionMinor == rhs.versionMinor); }
-       inline bool operator!= (const _x264_os_version_t &rhs) const { return (versionMajor != rhs.versionMajor) || (versionMinor != rhs.versionMinor); }
-       inline bool operator>  (const _x264_os_version_t &rhs) const { return (versionMajor > rhs.versionMajor) || ((versionMajor == rhs.versionMajor) && (versionMinor >  rhs.versionMinor)); }
-       inline bool operator>= (const _x264_os_version_t &rhs) const { return (versionMajor > rhs.versionMajor) || ((versionMajor == rhs.versionMajor) && (versionMinor >= rhs.versionMinor)); }
-       inline bool operator<  (const _x264_os_version_t &rhs) const { return (versionMajor < rhs.versionMajor) || ((versionMajor == rhs.versionMajor) && (versionMinor <  rhs.versionMinor)); }
-       inline bool operator<= (const _x264_os_version_t &rhs) const { return (versionMajor < rhs.versionMajor) || ((versionMajor == rhs.versionMajor) && (versionMinor <= rhs.versionMinor)); }
-}
-x264_os_version_t;
-
-//Beep types
-typedef enum
-{
-       x264_beep_info = 0,
-       x264_beep_warning = 1,
-       x264_beep_error = 2
-}
-x264_beep_t;
-
-//Known folders
-typedef enum
-{
-       x264_folder_localappdata = 0,
-       x264_folder_programfiles = 2,
-       x264_folder_systemfolder = 3,
-       x264_folder_systroot_dir = 4
-}
-x264_known_folder_t;
-
-//Network connection types
-typedef enum
-{
-       x264_network_err = 0,   /*unknown*/
-       x264_network_non = 1,   /*not connected*/
-       x264_network_yes = 2    /*connected*/
-}
-x264_network_t;
-
-//Known Windows versions
-extern const x264_os_version_t x264_winver_error;      //N/A
-extern const x264_os_version_t x264_winver_win2k;      //2000
-extern const x264_os_version_t x264_winver_winxp;      //XP
-extern const x264_os_version_t x264_winver_xpx64;      //XP_x64
-extern const x264_os_version_t x264_winver_vista;      //Vista
-extern const x264_os_version_t x264_winver_win70;      //7
-extern const x264_os_version_t x264_winver_win80;      //8
-extern const x264_os_version_t x264_winver_win81;      //8.1
-extern const x264_os_version_t x264_winver_wn100;      //10
-
-//Exception class
-class X264Exception : public std::runtime_error
-{
-public:
-       X264Exception(const char *message, ...);
-       virtual const char* what() const { return m_message; }
-private:
-       static const size_t MAX_MSGLEN = 256;
-       char m_message[MAX_MSGLEN];
-};
 
 ///////////////////////////////////////////////////////////////////////////////
 // GLOBAL FUNCTIONS
 ///////////////////////////////////////////////////////////////////////////////
 
-//const QStringList &x264_arguments(void);
-bool x264_beep(int beepType);
-void x264_blink_window(QWidget *poWindow, unsigned int count, unsigned int delay);
-bool x264_bring_process_to_front(const unsigned long pid);
-bool x264_bring_to_front(const QWidget *win);
-bool x264_change_process_priority(const QProcess *proc, const int priority);
-bool x264_change_process_priority(const int priority);
-bool x264_change_process_priority(void *hProcess, const int priority);
-QDate x264_current_date_safe(void);
 const QString &x264_data_path(void);
-void x264_dbg_output_string(const char* format, ...);
-size_t x264_dbg_private_bytes(void);
-//x264_cpu_t x264_detect_cpu_features(const int argc, char **argv);
-bool x264_enable_close_button(const QWidget *win, const bool bEnable);
-void x264_fatal_exit(const wchar_t* exitMessage, const char* errorBoxMessage = NULL);
-void x264_finalization(void);
-void x264_init_console(const int argc, char **argv);
-void x264_init_process(QProcess &process, const QString &wokringDir, const bool bReplaceTempDir = true);
-//bool x264_init_qt(int &argc, char **argv);
-bool x264_is_executable(const QString &path);
 bool x264_is_prerelease(void);
-const QString &x264_known_folder(x264_known_folder_t folder_id);
-void x264_message_handler(QtMsgType type, const char *msg);
-int x264_network_status(void);
 QString x264_path2ansi(const QString &longPath, bool makeLowercase = false);
-bool x264_play_sound(const unsigned short uiSoundIdx, const bool bAsync, const wchar_t *alias = NULL);
 bool x264_portable(void);
-unsigned int x264_process_id(void);
-unsigned int x264_process_id(QProcess &process);
 QString x264_query_reg_string(const bool bUser, const QString &path, const QString &name);
-unsigned int x264_rand(void);
-QString x264_rand_str(const bool bLong = false);
-void x264_seed_rand(void);
 bool x264_set_thread_execution_state(const bool systemRequired);
-bool x264_shutdown_computer(const QString &message, const unsigned long timeout, const bool forceShutdown);
-void x264_sleep(const unsigned int delay);
 bool x264_suspendProcess(const QProcess *proc, const bool suspend);
-const QString &x264_temp_directory(void);
-bool x264_user_is_admin(void);
 const char *x264_version_arch(void);
 unsigned int x264_version_build(void);
 const char *x264_version_compiler(void);
@@ -184,54 +58,9 @@ const char *x264_version_time(void);
 // HELPER MACROS
 ///////////////////////////////////////////////////////////////////////////////
 
-#define QWCHAR(STR) reinterpret_cast<const wchar_t*>(STR.utf16())
-#define QUTF8(STR) ((STR).toUtf8().constData())
-#define WCHAR2QSTR(STR) (QString::fromUtf16(reinterpret_cast<const unsigned short*>((STR))))
-#define X264_BOOL(X) ((X) ? "1" : "0")
-#define X264_DELETE(PTR) if(PTR) { delete PTR; PTR = NULL; }
-#define X264_DELETE_ARRAY(PTR) if(PTR) { delete [] PTR; PTR = NULL; }
-#define _X264_MAKE_STRING_(X) #X
-#define X264_MAKE_STRING(X) _X264_MAKE_STRING_(X)
-#define X264_COMPILER_WARNING(TXT) __pragma(message(__FILE__ "(" X264_MAKE_STRING(__LINE__) ") : warning: " TXT))
-#define X264_STRCMP(X,Y) ((X).compare((Y), Qt::CaseInsensitive) == 0)
-
-//Debug build
-#if defined(_DEBUG) && defined(QT_DEBUG) && !defined(NDEBUG) && !defined(QT_NO_DEBUG)
-       #define X264_DEBUG (1)
-#else
-       #define X264_DEBUG (0)
-#endif
-
 //Check for CPU-compatibility options
 #if !defined(_M_X64) && defined(_MSC_VER) && defined(_M_IX86_FP)
        #if (_M_IX86_FP != 0)
                #error We should not enabled SSE or SSE2 in release builds!
        #endif
 #endif
-
-//Helper macro for throwing exceptions
-#define THROW(MESSAGE, ...) do \
-{ \
-       throw X264Exception((MESSAGE), __VA_ARGS__); \
-} \
-while(0)
-
-//Memory check
-#if X264_DEBUG
-       #define X264_MEMORY_CHECK(FUNC, RETV,  ...) do \
-       { \
-               size_t _privateBytesBefore = x264_dbg_private_bytes(); \
-               RETV = FUNC(__VA_ARGS__); \
-               size_t _privateBytesLeak = (x264_dbg_private_bytes() - _privateBytesBefore) / 1024; \
-               if(_privateBytesLeak > 0) { \
-                       x264_dbg_output_string("\nMemory leak: Lost %u KiloBytes of PrivateUsage memory!\n\n", _privateBytesLeak); \
-               } \
-       } \
-       while(0)
-#else
-       #define X264_MEMORY_CHECK(FUNC, RETV,  ...) do \
-       { \
-               RETV = __noop(__VA_ARGS__); \
-       } \
-       while(0)
-#endif
index d3bfb18..5a2dd87 100644 (file)
 
 #include "input_filter.h"
 
+//Internal
 #include "global.h"
 
+//MUTils
+#include <MUtils/Global.h>
+
+//Qt
 #include <QWidget>
 #include <QKeyEvent>
 #include <QMouseEvent>
@@ -40,8 +45,8 @@ InputEventFilter::InputEventFilter(QWidget *target)
 InputEventFilter::~InputEventFilter(void)
 {
        m_target->removeEventFilter(this);
-       X264_DELETE(m_keyMapping);
-       X264_DELETE(m_mouseMapping);
+       MUTILS_DELETE(m_keyMapping);
+       MUTILS_DELETE(m_mouseMapping);
 }
 
 void InputEventFilter::addKeyFilter(const int &keyCode, const int &tag)
index 7db5ad7..4ce7a05 100644 (file)
@@ -64,7 +64,7 @@ static void x264_print_logo(void)
        qDebug("This application is powerd by MUtils library v%u.%02u (%s, %s).\n", MUtils::Version::lib_version_major(), MUtils::Version::lib_version_minor(), MUTILS_UTF8(MUtils::Version::lib_build_date().toString(Qt::ISODate)), MUTILS_UTF8(MUtils::Version::lib_build_time().toString(Qt::ISODate)));
 
        //Print warning, if this is a "debug" build
-       if(X264_DEBUG)
+       if(MUTILS_DEBUG)
        {
                qWarning("---------------------------------------------------------");
                qWarning("DEBUG BUILD: DO NOT RELEASE THIS BINARY TO THE PUBLIC !!!");
index 496a3f2..87367a1 100644 (file)
@@ -19,6 +19,7 @@
 // http://www.gnu.org/licenses/gpl-2.0.txt
 ///////////////////////////////////////////////////////////////////////////////
 
+//Internal
 #include "global.h"
 #include "model_jobList.h"
 #include "thread_encode.h"
 #include "model_preferences.h"
 #include "resource.h"
 
+//MUtils
+#include <MUtils/Sound.h>
+
+//Qt
 #include <QIcon>
 #include <QFileInfo>
 #include <QSettings>
@@ -51,8 +56,8 @@ JobListModel::~JobListModel(void)
                QUuid id = m_jobs.takeFirst();
                EncodeThread *thread = m_threads.value(id, NULL);
                LogFileModel *logFile = m_logFile.value(id, NULL);
-               X264_DELETE(thread);
-               X264_DELETE(logFile);
+               MUTILS_DELETE(thread);
+               MUTILS_DELETE(logFile);
        }
 }
 
@@ -404,8 +409,8 @@ bool JobListModel::deleteJob(const QModelIndex &index)
                                m_logFile.remove(id);
                                m_details.remove(id);
                                endRemoveRows();
-                               X264_DELETE(thread);
-                               X264_DELETE(logFile);
+                               MUTILS_DELETE(thread);
+                               MUTILS_DELETE(logFile);
                                return true;
                        }
                }
@@ -534,13 +539,13 @@ void JobListModel::updateStatus(const QUuid &jobId, JobStatus newStatus)
                        switch(newStatus)
                        {
                        case JobStatus_Completed:
-                               x264_play_sound(IDR_WAVE4, true);
+                               MUtils::Sound::play_sound("tada", true);
                                break;
                        case JobStatus_Aborted:
-                               x264_play_sound(IDR_WAVE5, true);
+                               MUtils::Sound::play_sound("shattering", true);
                                break;
                        case JobStatus_Failed:
-                               x264_play_sound(IDR_WAVE6, true);
+                               MUtils::Sound::play_sound("failure", true);
                                break;
                        }
                }
index bd36982..3908729 100644 (file)
 
 #include "model_options.h"
 
+//Internal
 #include "global.h"
 #include "model_sysinfo.h"
 
+//Mutils
+#include <MUtils/Global.h>
+
+//Qt
 #include <QDesktopServices>
 #include <QSettings>
 #include <QStringList>
@@ -181,7 +186,7 @@ QMap<QString, OptionsModel*> OptionsModel::loadAllTemplates(const SysinfoModel *
                                list.insert(name, options);
                                continue;
                        }
-                       X264_DELETE(options);
+                       MUTILS_DELETE(options);
                }
        }
 
index 2fc8fe5..02396fe 100644 (file)
 
 #include "source_abstract.h"
 
+//Internal
 #include "global.h"
 #include "model_sysinfo.h"
 #include "model_options.h"
 #include "model_preferences.h"
 
+//MUtils
+#include <MUtils/Global.h>
+
+//Qt
 #include <QProcess>
 #include <QTextCodec>
 #include <QDir>
@@ -131,7 +136,7 @@ bool AbstractSource::checkSourceProperties(unsigned int &frames)
        while(!patterns.isEmpty())
        {
                QRegExp *pattern = patterns.takeFirst();
-               X264_DELETE(pattern);
+               MUTILS_DELETE(pattern);
        }
 
        if(bTimeout || bAborted || process.exitCode() != EXIT_SUCCESS)
index bde9d8f..3a92662 100644 (file)
 
 #include "taskbar7.h"
 
+//Mutils
+#include <MUtils/Exception.h>
+
+//Qt
 #include <QWidget>
 #include <QIcon>
+
+//Win32
 #include <ShObjIdl.h>
 
+
 static UINT s_winMsg = 0;
 static ITaskbarList3 *s_ptbl = NULL;
 
 WinSevenTaskbar::WinSevenTaskbar(void)
 {
-       THROW("Cannot create instance of this class!");
+       MUTILS_THROW("Cannot create instance of this class!");
 }
 
 WinSevenTaskbar::~WinSevenTaskbar(void)
index f2bfb4d..97f24d3 100644 (file)
 #include <QMutexLocker>
 #include <QApplication>
 
+//Internal
 #include "global.h"
 #include "3rd_party/avisynth_c.h"
 
+//MUtils
+#include <MUtils/Global.h>
+
 QMutex AvisynthCheckThread::m_avsLock;
 QLibrary *AvisynthCheckThread::m_avsLib = NULL;
 
@@ -96,7 +100,7 @@ void AvisynthCheckThread::unload(void)
                }
        }
 
-       X264_DELETE(m_avsLib);
+       MUTILS_DELETE(m_avsLib);
 }
 
 //-------------------------------------
index 8f6eb02..f9e408e 100644 (file)
@@ -37,6 +37,9 @@
 #include "source_avisynth.h"
 #include "source_vapoursynth.h"
 
+//MUtils
+#include <MUtils/OSSupport.h>
+
 //Qt Framework
 #include <QDate>
 #include <QTime>
@@ -153,10 +156,10 @@ EncodeThread::EncodeThread(const QString &sourceFileName, const QString &outputF
 
 EncodeThread::~EncodeThread(void)
 {
-       X264_DELETE(m_encoder);
-       X264_DELETE(m_jobObject);
-       X264_DELETE(m_options);
-       X264_DELETE(m_pipedSource);
+       MUTILS_DELETE(m_encoder);
+       MUTILS_DELETE(m_jobObject);
+       MUTILS_DELETE(m_options);
+       MUTILS_DELETE(m_pipedSource);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -181,7 +184,7 @@ void EncodeThread::run(void)
        if(m_jobObject)
        {
                m_jobObject->terminateJob(42);
-               X264_DELETE(m_jobObject);
+               MUTILS_DELETE(m_jobObject);
        }
 }
 
@@ -215,7 +218,7 @@ void EncodeThread::checkedRun(void)
        }
        catch(...)
        {
-               x264_fatal_exit(L"Unhandeled exception error in encode thread!");
+               MUtils::OS::fatal_exit(L"Unhandeled exception error in encode thread!");
        }
 }
 
index 19dd078..90c9d8e 100644 (file)
 
 #include "thread_vapoursynth.h"
 
+//Mutils
+#include <MUtils/OSSupport.h>
+
+//Qt
 #include <QLibrary>
 #include <QEventLoop>
 #include <QTimer>
@@ -130,9 +134,9 @@ void VapourSynthCheckThread::unload(void)
                }
        }
 
-       X264_DELETE(m_vpsExePath);
-       X264_DELETE(m_vpsDllPath);
-       X264_DELETE(m_vpsLib);
+       MUTILS_DELETE(m_vpsExePath);
+       MUTILS_DELETE(m_vpsDllPath);
+       MUTILS_DELETE(m_vpsLib);
 }
 
 //-------------------------------------
@@ -187,8 +191,8 @@ bool VapourSynthCheckThread::detectVapourSynthPath2(QString &path, volatile bool
 bool VapourSynthCheckThread::detectVapourSynthPath3(QString &path)
 {
        bool success = false;
-       X264_DELETE(m_vpsExePath);
-       X264_DELETE(m_vpsDllPath);
+       MUTILS_DELETE(m_vpsExePath);
+       MUTILS_DELETE(m_vpsDllPath);
        path.clear();
 
        static const char *VPS_REG_KEYS[] = 
@@ -242,14 +246,14 @@ bool VapourSynthCheckThread::detectVapourSynthPath3(QString &path)
                                m_vpsDllPath = new QFile(vpsDllInfo.canonicalFilePath());
                                if(m_vpsExePath->open(QIODevice::ReadOnly) && m_vpsDllPath->open(QIODevice::ReadOnly))
                                {
-                                       if(vapoursynthComplete = x264_is_executable(m_vpsExePath->fileName()))
+                                       if(vapoursynthComplete = MUtils::OS::is_executable_file(m_vpsExePath->fileName()))
                                        {
                                                vapoursynthPath.append("/").append(CORE_PATH[i]);
                                        }
                                        break;
                                }
-                               X264_DELETE(m_vpsExePath);
-                               X264_DELETE(m_vpsDllPath);
+                               MUTILS_DELETE(m_vpsExePath);
+                               MUTILS_DELETE(m_vpsDllPath);
                        }
                }
                if(!vapoursynthComplete)
index 4898178..f2bbd88 100644 (file)
@@ -21,6 +21,7 @@
 
 #include "tool_abstract.h"
 
+//Internal
 #include "global.h"
 #include "model_options.h"
 #include "model_preferences.h"
 #include "binaries.h"
 #include "job_object.h"
 
+//MUtils
+#include <MUtils/OSSupport.h>
+
+//Qt
 #include <QProcess>
 #include <QMutexLocker>
 #include <QDir>
@@ -122,7 +127,7 @@ unsigned int AbstractTool::checkVersion(bool &modified)
        while(!patterns.isEmpty())
        {
                QRegExp *pattern = patterns.takeFirst();
-               X264_DELETE(pattern);
+               MUTILS_DELETE(pattern);
        }
 
        if(bTimeout || bAborted || (!checkVersion_succeeded(process.exitCode())))
@@ -175,7 +180,7 @@ bool AbstractTool::startProcess(QProcess &process, const QString &program, const
        if(process.waitForStarted())
        {
                m_jobObject->addProcessToJob(&process);
-               x264_change_process_priority(&process, m_preferences->getProcessPriority());
+               MUtils::OS::change_process_priority(&process, m_preferences->getProcessPriority());
                lock.unlock();
                return true;
        }
index 52f06af..91a7842 100644 (file)
@@ -26,7 +26,7 @@
 #define VER_X264_MAJOR 2
 #define VER_X264_MINOR 4
 #define VER_X264_PATCH 6
-#define VER_X264_BUILD 911
+#define VER_X264_BUILD 914
 
 #define VER_X264_PORTABLE_EDITION (0)
 
index c3e55b4..aaead3d 100644 (file)
@@ -22,6 +22,7 @@
 #include "win_addJob.h"
 #include "UIC_win_addJob.h"
 
+//Internal
 #include "global.h"
 #include "model_options.h"
 #include "model_preferences.h"
 #include "win_help.h"
 #include "win_editor.h"
 
+//MUtils
+#include <MUtils/Global.h>
+
+//Qt
 #include <QDate>
 #include <QTimer>
 #include <QCloseEvent>
@@ -320,22 +325,22 @@ AddJobDialog::~AddJobDialog(void)
                }
                const OptionsModel *item = reinterpret_cast<const OptionsModel*>(ui->cbxTemplate->itemData(i).value<const void*>());
                ui->cbxTemplate->setItemData(i, QVariant::fromValue<const void*>(NULL));
-               X264_DELETE(item);
+               MUTILS_DELETE(item);
        }
 
        //Free validators
        if(const QValidator *tmp = ui->editCustomX264Params->validator())
        {
                ui->editCustomX264Params->setValidator(NULL);
-               X264_DELETE(tmp);
+               MUTILS_DELETE(tmp);
        }
        if(const QValidator *tmp = ui->editCustomAvs2YUVParams->validator())
        {
                ui->editCustomAvs2YUVParams->setValidator(NULL);
-               X264_DELETE(tmp);
+               MUTILS_DELETE(tmp);
        }
 
-       X264_DELETE(m_defaults);
+       MUTILS_DELETE(m_defaults);
        delete ui;
 }
 
@@ -834,7 +839,7 @@ void AddJobDialog::deleteTemplateButtonClicked(void)
        OptionsModel::deleteTemplate(name);
        const OptionsModel *item = reinterpret_cast<const OptionsModel*>(ui->cbxTemplate->itemData(index).value<const void*>());
        ui->cbxTemplate->removeItem(index);
-       X264_DELETE(item);
+       MUTILS_DELETE(item);
 }
 
 void AddJobDialog::editorActionTriggered(void)
@@ -852,7 +857,7 @@ void AddJobDialog::editorActionTriggered(void)
                        lineEdit->setText(editor->getEditText());
                }
 
-               X264_DELETE(editor);
+               MUTILS_DELETE(editor);
        }
 }
 
index 2c6fed6..308ef5e 100644 (file)
 #include "win_help.h"
 #include "UIC_win_help.h"
 
+//Internal
 #include "global.h"
 #include "model_options.h"
 #include "binaries.h"
 
+//MUtils
+#include <MUtils/Sound.h>
+
+//Qt
 #include <QProcess>
 #include <QScrollBar>
 #include <QTimer>
@@ -99,7 +104,7 @@ void HelpDialog::closeEvent(QCloseEvent *e)
        if(m_process->state() != QProcess::NotRunning)
        {
                e->ignore();
-               x264_beep(x264_beep_warning);
+               MUtils::Sound::beep(MUtils::Sound::BEEP_WRN);
                return;
        }
 
index aa1f1a5..aae7079 100644 (file)
@@ -49,6 +49,9 @@
 #include <MUtils/OSSupport.h>
 #include <MUtils/CPUFeatures.h>
 #include <MUtils/IPCChannel.h>
+#include <MUtils/GUI.h>
+#include <MUtils/Sound.h>
+#include <MUtils/Exception.h>
 
 //Qt
 #include <QDate>
@@ -86,7 +89,8 @@ static const int   vsynth_rev = 24;
 #define NEXT(X) ((*reinterpret_cast<int*>(&(X)))++)
 #define SETUP_WEBLINK(OBJ, URL) do { (OBJ)->setData(QVariant(QUrl(URL))); connect((OBJ), SIGNAL(triggered()), this, SLOT(showWebLink())); } while(0)
 #define APP_IS_READY (m_initialized && (!m_fileTimer->isActive()) && (QApplication::activeModalWidget() == NULL))
-#define ENSURE_APP_IS_READY() do { if(!APP_IS_READY) { x264_beep(x264_beep_warning); qWarning("Cannot perfrom this action at this time!"); return; } } while(0)
+#define ENSURE_APP_IS_READY() do { if(!APP_IS_READY) {                 MUtils::Sound::beep(MUtils::Sound::BEEP_WRN); qWarning("Cannot perfrom this action at this time!"); return; } } while(0)
+#define X264_STRCMP(X,Y) ((X).compare((Y), Qt::CaseInsensitive) == 0)
 
 ///////////////////////////////////////////////////////////////////////////////
 // Constructor & Destructor
@@ -142,7 +146,7 @@ MainWindow::MainWindow(const MUtils::CPUFetaures::cpu_info_t &cpuFeatures, MUtil
        //Update title
        ui->labelBuildDate->setText(tr("Built on %1 at %2").arg(x264_version_date().toString(Qt::ISODate), QString::fromLatin1(x264_version_time())));
        
-       if(X264_DEBUG)
+       if(MUTILS_DEBUG)
        {
                setWindowTitle(QString("%1 | !!! DEBUG VERSION !!!").arg(windowTitle()));
                setStyleSheet("QMenuBar, QMainWindow { background-color: yellow }");
@@ -272,7 +276,7 @@ MainWindow::~MainWindow(void)
        while(!m_toolsList->isEmpty())
        {
                QFile *temp = m_toolsList->takeFirst();
-               X264_DELETE(temp);
+               MUTILS_DELETE(temp);
        }
 
        if(!m_ipcThread.isNull())
@@ -402,7 +406,7 @@ void MainWindow::moveButtonPressed(void)
                qDebug("Move job %d (direction: UP)", ui->jobsView->currentIndex().row());
                if(!m_jobList->moveJob(ui->jobsView->currentIndex(), JobListModel::MOVE_UP))
                {
-                       x264_beep(x264_beep_error);
+                       MUtils::Sound::beep(MUtils::Sound::BEEP_ERR);
                }
                ui->jobsView->scrollTo(ui->jobsView->currentIndex(), QAbstractItemView::PositionAtCenter);
        }
@@ -411,7 +415,7 @@ void MainWindow::moveButtonPressed(void)
                qDebug("Move job %d (direction: DOWN)", ui->jobsView->currentIndex().row());
                if(!m_jobList->moveJob(ui->jobsView->currentIndex(), JobListModel::MOVE_DOWN))
                {
-                       x264_beep(x264_beep_error);
+                       MUtils::Sound::beep(MUtils::Sound::BEEP_ERR);
                }
                ui->jobsView->scrollTo(ui->jobsView->currentIndex(), QAbstractItemView::PositionAtCenter);
        }
@@ -428,7 +432,7 @@ void MainWindow::pauseButtonPressed(bool checked)
 {
        if(!APP_IS_READY)
        {
-               x264_beep(x264_beep_warning);
+               MUtils::Sound::beep(MUtils::Sound::BEEP_WRN);
                qWarning("Cannot perfrom this action at this time!");
                ui->buttonPauseJob->setChecked(!checked);
        }
@@ -463,7 +467,7 @@ void MainWindow::restartButtonPressed(void)
                {
                        appendJob(sourceFileName, outputFileName, tempOptions, runImmediately);
                }
-               X264_DELETE(tempOptions);
+               MUTILS_DELETE(tempOptions);
        }
 }
 
@@ -572,7 +576,7 @@ void MainWindow::showAbout(void)
        if(AboutDialog *aboutDialog = new AboutDialog(this))
        {
                aboutDialog->exec();
-               X264_DELETE(aboutDialog);
+               MUTILS_DELETE(aboutDialog);
        }
 }
 
@@ -605,7 +609,7 @@ void MainWindow::showPreferences(void)
        PreferencesDialog *preferences = new PreferencesDialog(this, m_preferences.data(), m_sysinfo.data());
        preferences->exec();
 
-       X264_DELETE(preferences);
+       MUTILS_DELETE(preferences);
 }
 
 /*
@@ -709,7 +713,7 @@ void MainWindow::shutdownComputer(void)
        
        QApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
        QApplication::setOverrideCursor(Qt::WaitCursor);
-       x264_play_sound(IDR_WAVE1, false);
+       MUtils::Sound::play_sound("shutdown", false);
        QApplication::restoreOverrideCursor();
        
        QTimer timer;
@@ -732,12 +736,12 @@ void MainWindow::shutdownComputer(void)
                progressDialog.setLabelText(text.arg(iTimeout-i));
                if(iTimeout-i == 3) progressDialog.setCancelButton(NULL);
                QApplication::processEvents();
-               x264_play_sound(((i < iTimeout) ? IDR_WAVE2 : IDR_WAVE3), false);
+               MUtils::Sound::play_sound(((i < iTimeout) ? "beep" : "beep2"), false);
        }
        
        qWarning("Shutting down !!!");
 
-       if(x264_shutdown_computer("Simple x264 Launcher: All jobs completed, shutting down!", 10, true))
+       if(MUtils::OS::shutdown_computer("Simple x264 Launcher: All jobs completed, shutting down!", 10, true, false))
        {
                qApp->closeAllWindows();
        }
@@ -790,11 +794,11 @@ void MainWindow::init(void)
                qDebug("%s", file->fileName().toLatin1().constData());
                if(file->open(QIODevice::ReadOnly))
                {
-                       if(!x264_is_executable(file->fileName()))
+                       if(!MUtils::OS::is_executable_file(file->fileName()))
                        {
                                QMessageBox::critical(this, tr("Invalid File!"), tr("<nobr>At least on required tool is not a valid Win32 or Win64 binary:<br><tt style=\"whitespace:nowrap\">%1</tt><br><br>Please re-install the program in order to fix the problem!</nobr>").arg(QDir::toNativeSeparators(file->fileName())).replace("-", "&minus;"));
                                qFatal(QString("Binary is invalid: %1").arg(file->fileName()).toLatin1().constData());
-                               X264_DELETE(file);
+                               MUTILS_DELETE(file);
                                INIT_ERROR_EXIT();
                        }
                        if(m_toolsList.isNull())
@@ -807,7 +811,7 @@ void MainWindow::init(void)
                {
                        QMessageBox::critical(this, tr("File Not Found!"), tr("<nobr>At least on required tool could not be found:<br><tt style=\"whitespace:nowrap\">%1</tt><br><br>Please re-install the program in order to fix the problem!</nobr>").arg(QDir::toNativeSeparators(file->fileName())).replace("-", "&minus;"));
                        qFatal(QString("Binary not found: %1/toolset/%2").arg(m_sysinfo->getAppPath(), file->fileName()).toLatin1().constData());
-                       X264_DELETE(file);
+                       MUTILS_DELETE(file);
                        INIT_ERROR_EXIT();
                }
        }
@@ -972,7 +976,7 @@ void MainWindow::init(void)
        // Check for Expiration
        //---------------------------------------
 
-       if(x264_version_date().addMonths(6) < x264_current_date_safe())
+       if(x264_version_date().addMonths(6) < MUtils::OS::current_date())
        {
                if(QWidget *cornerWidget = ui->menubar->cornerWidget()) cornerWidget->show();
                QString text;
@@ -1006,7 +1010,7 @@ void MainWindow::init(void)
                        m_recentlyUsed->setLastUpdateCheck(0);
                        RecentlyUsed::saveRecentlyUsed(m_recentlyUsed.data());
                }
-               else if(m_recentlyUsed->lastUpdateCheck() + 14 < x264_current_date_safe().toJulianDay())
+               else if(m_recentlyUsed->lastUpdateCheck() + 14 < MUtils::OS::current_date().toJulianDay())
                {
                        if(QWidget *cornerWidget = ui->menubar->cornerWidget()) cornerWidget->show();
                        if(!m_preferences->getNoUpdateReminder())
@@ -1058,7 +1062,7 @@ void MainWindow::copyLogToClipboard(bool checked)
        if(LogFileModel *log = dynamic_cast<LogFileModel*>(ui->logView->model()))
        {
                log->copyToClipboard();
-               x264_beep(x264_beep_info);
+               MUtils::Sound::beep(MUtils::Sound::BEEP_NFO);
        }
 }
 
@@ -1095,7 +1099,7 @@ void MainWindow::handleCommand(const int &command, const QStringList &args, cons
                sysTrayActived();
        }
 
-       x264_bring_to_front(this);
+       MUtils::GUI::bring_to_front(this);
        
 #ifdef IPC_LOGGING
        qDebug("\n---------- IPC ----------");
@@ -1112,7 +1116,7 @@ void MainWindow::handleCommand(const int &command, const QStringList &args, cons
        {
        case IPC_OPCODE_PING:
                qDebug("Received a PING request from another instance!");
-               x264_blink_window(this, 5, 125);
+               MUtils::GUI::blink_window(this, 5, 125);
                break;
        case IPC_OPCODE_ADD_FILE:
                if(!args.isEmpty())
@@ -1157,7 +1161,7 @@ void MainWindow::handleCommand(const int &command, const QStringList &args, cons
                }
                break;
        default:
-               THROW("Unknown command received!");
+               MUTILS_THROW("Unknown command received!");
        }
 }
 
@@ -1179,7 +1183,7 @@ void MainWindow::checkUpdates(void)
 
        if(updater->getSuccess())
        {
-               m_recentlyUsed->setLastUpdateCheck(x264_current_date_safe().toJulianDay());
+               m_recentlyUsed->setLastUpdateCheck(MUtils::OS::current_date().toJulianDay());
                RecentlyUsed::saveRecentlyUsed(m_recentlyUsed.data());
                if(QWidget *cornerWidget = ui->menubar->cornerWidget()) cornerWidget->hide();
        }
@@ -1191,7 +1195,7 @@ void MainWindow::checkUpdates(void)
                QApplication::quit();
        }
 
-       X264_DELETE(updater);
+       MUTILS_DELETE(updater);
 }
 
 /*
@@ -1228,7 +1232,7 @@ void MainWindow::sysTrayActived(void)
 {
        m_sysTray->hide();
        showNormal();
-       x264_bring_to_front(this);
+       MUtils::GUI::bring_to_front(this);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -1423,7 +1427,7 @@ bool MainWindow::createJob(QString &sourceFileName, QString &outputFileName, Opt
                okay = true;
        }
 
-       X264_DELETE(addDialog);
+       MUTILS_DELETE(addDialog);
        return okay;
 }
 
index 4370ccb..5a12bb3 100644 (file)
 #include "win_preferences.h"
 #include "UIC_win_preferences.h"
 
+//Internal
 #include "global.h"
 #include "model_preferences.h"
 #include "model_sysinfo.h"
 
+//MUtils
+#include <MUtils/GUI.h>
+
+//Qt
 #include <QSettings>
 #include <QDesktopServices>
 #include <QMouseEvent>
@@ -62,7 +67,7 @@ PreferencesDialog::PreferencesDialog(QWidget *parent, PreferencesModel *preferen
        ui->setupUi(this);
        setWindowFlags(windowFlags() & (~Qt::WindowContextHelpButtonHint));
        setFixedSize(minimumSize());
-       x264_enable_close_button(this, false);
+       MUtils::GUI::enable_close_button(this, false);
        
        ui->comboBoxPriority->setItemData(0, QVariant::fromValue( 1)); //Above Normal
        ui->comboBoxPriority->setItemData(1, QVariant::fromValue( 0)); //Normal
index a90f6a9..913839d 100644 (file)
 //MUtils
 #include <MUtils/UpdateChecker.h>
 #include <MUtils/Hash_Blake2.h>
+#include <MUtils/GUI.h>
+#include <MUtils/OSSupport.h>
+#include <MUtils/Exception.h>
 
+//Qt
 #include <QMovie>
 #include <QCloseEvent>
 #include <QTimer>
@@ -139,7 +143,7 @@ bool UpdaterDialog::event(QEvent *e)
 {
        if((e->type() == QEvent::ActivationChange) && (m_updaterProcess != NULL))
        {
-               x264_bring_process_to_front(m_updaterProcess);
+               MUtils::GUI::bring_to_front(m_updaterProcess);
        }
        return QDialog::event(e);
 }
@@ -165,7 +169,7 @@ void UpdaterDialog::keyPressEvent(QKeyEvent *event)
 {
        if(event->key() == Qt::Key_F11)
        {
-               QFile logFile(QString("%1/%2.log").arg(x264_temp_directory(), x264_rand_str()));
+               QFile logFile(QString("%1/%2.log").arg(MUtils::temp_folder(), MUtils::rand_str()));
                if(logFile.open(QIODevice::WriteOnly | QIODevice::Truncate))
                {
                        logFile.write("\xEF\xBB\xBF");
@@ -206,7 +210,7 @@ void UpdaterDialog::initUpdate(void)
        }
 
        //Make sure user does have admin access
-       if(!x264_user_is_admin())
+       if(!MUtils::OS::user_is_admin())
        {
                qWarning("User is not in the \"admin\" group, cannot update!");
                QString message;
@@ -312,7 +316,7 @@ void UpdaterDialog::threadStatusChanged(int status)
                UPDATE_ICON(3, "play");
                break;
        default:
-               THROW("Unknown status code!");
+               MUTILS_THROW("Unknown status code!");
        }
 }
 
@@ -405,7 +409,7 @@ void UpdaterDialog::installUpdate(void)
        QStringList args;
        QEventLoop loop;
 
-       x264_init_process(process, x264_temp_directory(), false);
+       MUtils::init_process(process, MUtils::temp_folder(), false);
 
        connect(&process, SIGNAL(error(QProcess::ProcessError)), &loop, SLOT(quit()));
        connect(&process, SIGNAL(finished(int,QProcess::ExitStatus)), &loop, SLOT(quit()));
@@ -428,7 +432,7 @@ void UpdaterDialog::installUpdate(void)
                return;
        }
 
-       m_updaterProcess = x264_process_id(process);
+       m_updaterProcess = MUtils::OS::process_id(&process);
        loop.exec(QEventLoop::ExcludeUserInputEvents);
        
        if(!process.waitForFinished())
index 788944f..c933cce 100644 (file)
@@ -49,7 +49,6 @@ static size_t x264_entry_check(void)
 /*
  * Function declarations
  */
-void x264_initialization(void);
 extern "C" int mainCRTStartup(void);
 
 /*
@@ -65,9 +64,6 @@ extern "C" int x264_entry_point(void)
        //Make sure we will pass the check
        g_x264_entry_check_flag = ~g_x264_entry_check_flag;
 
-       //Call global initialization function
-       x264_initialization();
-
        //Now initialize the C Runtime library!
        return mainCRTStartup();
 }