summaryrefslogtreecommitdiffstats
path: root/win/CS/HandBrake.Interop/Interop/HandBrakeUtils.cs
diff options
context:
space:
mode:
authorsr55 <[email protected]>2019-04-06 15:35:13 +0100
committersr55 <[email protected]>2019-04-06 15:35:30 +0100
commit42594b81c948bd55c862c680e8af5e2618989127 (patch)
treeeab6fda7e4315deceaf0cf02a92ce1b214ca7ca7 /win/CS/HandBrake.Interop/Interop/HandBrakeUtils.cs
parent2b49ecaa889e72bdce73a20d0729aacee8b9ab03 (diff)
WinGui: Reafactor application init and introduce a --no-hardware flat that can be added to HandBrake.exe to disable hardware encoder support.
Diffstat (limited to 'win/CS/HandBrake.Interop/Interop/HandBrakeUtils.cs')
-rw-r--r--win/CS/HandBrake.Interop/Interop/HandBrakeUtils.cs84
1 files changed, 43 insertions, 41 deletions
diff --git a/win/CS/HandBrake.Interop/Interop/HandBrakeUtils.cs b/win/CS/HandBrake.Interop/Interop/HandBrakeUtils.cs
index 642e7d069..6752cdb7a 100644
--- a/win/CS/HandBrake.Interop/Interop/HandBrakeUtils.cs
+++ b/win/CS/HandBrake.Interop/Interop/HandBrakeUtils.cs
@@ -43,7 +43,8 @@ namespace HandBrake.Interop.Interop
/// </summary>
private static bool globalInitialized;
- private static bool failedWithHardware = false;
+ private static bool initSuccess = false;
+ private static bool initNoHardware = false;
/// <summary>
/// Fires when HandBrake has logged a message.
@@ -55,29 +56,37 @@ namespace HandBrake.Interop.Interop
/// </summary>
public static event EventHandler<MessageLoggedEventArgs> ErrorLogged;
-
/// <summary>
- /// Initializes static members of the HandBrakeUtils class.
+ /// Ensures the HB global initialize method has been called.
/// </summary>
- static HandBrakeUtils()
+ public static void EnsureGlobalInit(bool initNoHardwareMode)
{
if (!globalInitialized)
{
try
{
- bool passed = TryInit();
- if (!passed)
+ if (initNoHardwareMode)
+ {
+ initNoHardware = true;
+ if (HBFunctions.hb_global_init_no_hardware() == -1)
+ {
+ throw new InvalidOperationException("HB global init failed.");
+ }
+
+ initSuccess = true;
+ }
+ else
{
- failedWithHardware = true;
+ initSuccess = TryInit();
}
}
catch (Exception e)
{
- failedWithHardware = true;
+ initSuccess = false;
}
// Try without Hardware support. Bad drivers can sometimes cause issues.
- if (failedWithHardware)
+ if (!initSuccess)
{
if (HBFunctions.hb_global_init_no_hardware() == -1)
{
@@ -89,36 +98,6 @@ namespace HandBrake.Interop.Interop
}
}
- //[HandleProcessCorruptedStateExceptions]
- static bool TryInit()
- {
- try
- {
- if (HBFunctions.hb_global_init() == -1)
- {
- throw new InvalidOperationException("HB global init failed.");
- }
- }
- //catch (AccessViolationException e)
- //{
- // return false;
- //}
- catch (Exception e)
- {
- return false;
- }
-
- return true;
- }
-
- /// <summary>
- /// Ensures the HB global initialize method has been called.
- /// </summary>
- public static void EnsureGlobalInit()
- {
- // Does nothing, but invokes static ctor.
- }
-
/// <summary>
/// Enables or disables LibDVDNav. If disabled libdvdread will be used instead.
/// </summary>
@@ -365,9 +344,32 @@ namespace HandBrake.Interop.Interop
ErrorLogged?.Invoke(null, new MessageLoggedEventArgs(message));
}
- public static bool IsUsingNoHardwareFallback()
+ public static bool IsInitialised()
+ {
+ return initSuccess;
+ }
+
+ public static bool IsInitNoHardware()
+ {
+ return initNoHardware;
+ }
+
+ [HandleProcessCorruptedStateExceptions]
+ private static bool TryInit()
{
- return failedWithHardware;
+ try
+ {
+ if (HBFunctions.hb_global_init() == -1)
+ {
+ throw new InvalidOperationException("HB global init failed.");
+ }
+ }
+ catch (Exception e)
+ {
+ return false;
+ }
+
+ return true;
}
}
}