OSDN Git Service

Implemented workaround for VapourSynth plug-in loading: Testing shows that the enviro...
authorlordmulder <mulder2@gmx.de>
Tue, 7 May 2019 19:10:13 +0000 (21:10 +0200)
committerlordmulder <mulder2@gmx.de>
Tue, 7 May 2019 19:10:13 +0000 (21:10 +0200)
Even though it would make more sense to evaluate %APPDATA%, VapourSynth apparently ignores that one. We set up %APPDATA% anyway, just to be sure.

src/encoder_abstract.cpp
src/source_abstract.cpp
src/source_abstract.h
src/source_vapoursynth.cpp
src/tool_abstract.cpp
src/tool_abstract.h

index e94c561..8262b7e 100644 (file)
@@ -80,7 +80,7 @@ bool AbstractEncoder::runEncodingPass(AbstractSource* pipedSource, const QString
        buildCommandLine(cmdLine_Encode, (pipedSource != NULL), clipInfo, m_indexFile, pass, passLogFile);
 
        log("Creating encoder process:");
-       if(!startProcess(processEncode, getBinaryPath(), cmdLine_Encode, true, &getExtraPaths()))
+       if(!startProcess(processEncode, getBinaryPath(), cmdLine_Encode, true, &getExtraPaths(), &getExtraEnv()))
        {
                return false;
        }
index 58b45e9..72def9f 100644 (file)
@@ -29,6 +29,7 @@
 
 //MUtils
 #include <MUtils/Global.h>
+#include <MUtils/OSSupport.h>
 #include <MUtils/Exception.h>
 
 //Qt
@@ -67,7 +68,7 @@ bool AbstractSource::checkSourceProperties(ClipInfo &clipInfo)
        checkSourceProperties_init(patterns, cmdLine);
 
        log("Creating process:");
-       if(!startProcess(process, getBinaryPath(), cmdLine, true, &getExtraPaths()))
+       if(!startProcess(process, getBinaryPath(), cmdLine, true, &getExtraPaths(), &getExtraEnv()))
        {
                return false;;
        }
@@ -191,7 +192,7 @@ bool AbstractSource::createProcess(QProcess &processEncode, QProcess&processInpu
        buildCommandLine(cmdLine_Input);
 
        log("Creating input process:");
-       if(!startProcess(processInput, getBinaryPath(), cmdLine_Input, false, &getExtraPaths()))
+       if(!startProcess(processInput, getBinaryPath(), cmdLine_Input, false, &getExtraPaths(), &getExtraEnv()))
        {
                return false;
        }
@@ -207,3 +208,26 @@ const AbstractSourceInfo& AbstractSource::getSourceInfo(void)
 {
        MUTILS_THROW("[getSourceInfo] This function must be overwritten in sub-classes!");
 }
+
+// ------------------------------------------------------------
+// Auxiliary FUnctions
+// ------------------------------------------------------------
+
+QHash<QString, QString> AbstractSource::getExtraEnv(void) const
+{
+       QHash<QString, QString> extraEnv;
+
+       const QString profilePath = MUtils::OS::known_folder(MUtils::OS::FOLDER_USER_PROFILE);
+       if (!profilePath.isEmpty())
+       {
+               extraEnv.insert("USERPROFILE", QDir::toNativeSeparators(profilePath));
+       }
+
+       const QString appDataPath = MUtils::OS::known_folder(MUtils::OS::FOLDER_ROAMING_DATA);
+       if (!appDataPath.isEmpty())
+       {
+               extraEnv.insert("APPDATA", QDir::toNativeSeparators(appDataPath));
+       }
+
+       return extraEnv;
+}
\ No newline at end of file
index d32b391..36ab116 100644 (file)
@@ -50,6 +50,8 @@ public:
        static const AbstractSourceInfo& getSourceInfo(void);
 
 protected:
+       virtual QHash<QString, QString> getExtraEnv(void) const;
+
        virtual void checkSourceProperties_init(QList<QRegExp*> &patterns, QStringList &cmdLine) = 0;
        virtual void checkSourceProperties_parseLine(const QString &line, const QList<QRegExp*> &patterns, ClipInfo &clipInfo) = 0;
        
index a9e2f8f..7884b28 100644 (file)
@@ -217,7 +217,7 @@ void VapoursynthSource::checkSourceProperties_parseLine(const QString &line, con
 }
 
 // ------------------------------------------------------------
-// Check Source Properties
+// Source Processing
 // ------------------------------------------------------------
 
 void VapoursynthSource::buildCommandLine(QStringList &cmdLine)
index 31aa53a..d4e4860 100644 (file)
@@ -94,7 +94,7 @@ unsigned int AbstractTool::checkVersion(bool &modified)
        checkVersion_init(patterns, cmdLine);
 
        log("Creating process:");
-       if(!startProcess(process, getBinaryPath(), cmdLine, true, &getExtraPaths()))
+       if(!startProcess(process, getBinaryPath(), cmdLine, true, &getExtraPaths(), &getExtraEnv()))
        {
                return false;
        }
@@ -173,12 +173,12 @@ bool AbstractTool::checkVersion_succeeded(const int &exitCode)
 // Process Creation
 // ------------------------------------------------------------
 
-bool AbstractTool::startProcess(QProcess &process, const QString &program, const QStringList &args, bool mergeChannels, const QStringList *const extraPaths)
+bool AbstractTool::startProcess(QProcess &process, const QString &program, const QStringList &args, bool mergeChannels, const QStringList *const extraPaths, const QHash<QString, QString> *const extraEnv)
 {
        QMutexLocker lock(&s_mutexStartProcess);
        log(commandline2string(program, args) + "\n");
 
-       MUtils::init_process(process, QDir::tempPath(), true, extraPaths);
+       MUtils::init_process(process, QDir::tempPath(), true, extraPaths, extraEnv);
        if(!mergeChannels)
        {
                process.setProcessChannelMode(QProcess::SeparateChannels);
index 90ed7a5..18f1ce3 100644 (file)
@@ -25,6 +25,7 @@
 #include <QUuid>
 #include <QMutex>
 #include <QStringList>
+#include <QHash>
 
 class OptionsModel;
 class SysinfoModel;
@@ -64,6 +65,7 @@ protected:
        static const unsigned int m_processTimeoutWarning = 24;
 
        virtual QString getBinaryPath(void) const = 0;
+       virtual QHash<QString, QString> getExtraEnv(void) const { return QHash<QString, QString>(); }
        virtual QStringList getExtraPaths(void) const { return QStringList(); }
 
        virtual void checkVersion_init(QList<QRegExp*> &patterns, QStringList &cmdLine) = 0;
@@ -75,7 +77,7 @@ protected:
        void setProgress(unsigned int newProgress) { emit progressChanged(newProgress); }
        void setDetails(const QString &text) { emit detailsChanged(text); }
 
-       bool startProcess(QProcess &process, const QString &program, const QStringList &args, bool mergeChannels = true, const QStringList *const extraPath = NULL);
+       bool startProcess(QProcess &process, const QString &program, const QStringList &args, bool mergeChannels = true, const QStringList *const extraPath = NULL, const QHash<QString, QString> *const extraEnv = NULL);
 
        JobObject *const m_jobObject;
        const OptionsModel *const m_options;