aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-01-22 12:05:36 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-01-22 12:05:36 -0500
commit529a397b699993839ab93b24af7c7bdd9323f6f5 (patch)
treed2d8dbe03308948605d31dbe31be8fe8b19e5e87
parent60bf0edbde5f51cff28f1b3d5718b0a2b12a878f (diff)
parente0f644b4ade5bd90d7b405ddb66287f6f1f7ff93 (diff)
Merge branch 'master' of https://github.com/MediaBrowser/MediaBrowser
-rw-r--r--MediaBrowser.ServerApplication/FFMpeg/FFMpegDownloadInfo.cs164
1 files changed, 109 insertions, 55 deletions
diff --git a/MediaBrowser.ServerApplication/FFMpeg/FFMpegDownloadInfo.cs b/MediaBrowser.ServerApplication/FFMpeg/FFMpegDownloadInfo.cs
index 0de65f479..c560a5b91 100644
--- a/MediaBrowser.ServerApplication/FFMpeg/FFMpegDownloadInfo.cs
+++ b/MediaBrowser.ServerApplication/FFMpeg/FFMpegDownloadInfo.cs
@@ -1,6 +1,8 @@
using System;
#if __MonoCS__
-using System.Runtime.InteropServices;
+using Mono.Unix.Native;
+using System.Text.RegularExpressions;
+using System.IO;
#endif
namespace MediaBrowser.ServerApplication.FFMpeg
@@ -39,40 +41,63 @@ namespace MediaBrowser.ServerApplication.FFMpeg
}
break;
- #if __MonoCS__
+ #if __MonoCS__
case PlatformID.Unix:
- if (IsRunningOnMac())
+ if (PlatformDetection.IsMac)
{
- switch (arg)
+ if (PlatformDetection.IsX86_64)
{
- case "Version":
- return "20131121";
- case "FFMpegFilename":
- return "ffmpeg";
- case "FFProbeFilename":
- return "ffprobe";
- case "ArchiveType":
- return "gz";
+ switch (arg)
+ {
+ case "Version":
+ return "20131121";
+ case "FFMpegFilename":
+ return "ffmpeg";
+ case "FFProbeFilename":
+ return "ffprobe";
+ case "ArchiveType":
+ return "gz";
+ }
+ break;
}
- break;
}
- else
+ if (PlatformDetection.IsLinux)
{
- // Linux
- switch (arg)
+ if (PlatformDetection.IsX86)
+ {
+ switch (arg)
+ {
+ case "Version":
+ return "linux_x86_20140118";
+ case "FFMpegFilename":
+ return "ffmpeg";
+ case "FFProbeFilename":
+ return "ffprobe";
+ case "ArchiveType":
+ return "gz";
+ }
+ break;
+ }
+ else if (PlatformDetection.IsX86_64)
{
- case "Version":
- return "20140104";
- case "FFMpegFilename":
- return "ffmpeg";
- case "FFProbeFilename":
- return "ffprobe";
- case "ArchiveType":
- return "gz";
+ // Linux on x86 or x86_64
+ switch (arg)
+ {
+ case "Version":
+ return "linux_x86_64_20140118";
+ case "FFMpegFilename":
+ return "ffmpeg";
+ case "FFProbeFilename":
+ return "ffprobe";
+ case "ArchiveType":
+ return "gz";
+ }
+ break;
}
- break;
}
- #endif
+ // Unsupported Unix platform
+ return "";
+ #endif
}
return "";
}
@@ -91,53 +116,82 @@ namespace MediaBrowser.ServerApplication.FFMpeg
};
#if __MonoCS__
- case PlatformID.Unix:
- if (IsRunningOnMac())
+ case PlatformID.Unix:
+ if (PlatformDetection.IsMac && PlatformDetection.IsX86_64)
{
- // Mac OS X Intel 64bit
return new[]
{
"https://copy.com/IB0W4efS6t9A/ffall-2.1.1.tar.gz?download=1"
};
}
- else
+
+ if (PlatformDetection.IsLinux)
{
- // Linux
- return new[]
+ if (PlatformDetection.IsX86)
{
- "http://ffmpeg.gusari.org/static/32bit/ffmpeg.static.32bit.2014-01-04.tar.gz",
- "https://www.dropbox.com/s/b7nkg71sil812hp/ffmpeg.static.32bit.2014-01-04.tar.gz?dl=1"
- };
+ return new[]
+ {
+ "http://ffmpeg.gusari.org/static/32bit/ffmpeg.static.32bit.2014-01-18.tar.gz",
+ "https://www.dropbox.com/s/b7nkg71sil812hp/ffmpeg.static.32bit.2014-01-04.tar.gz?dl=1"
+ };
+ }
+
+ if (PlatformDetection.IsX86_64)
+ {
+ return new[]
+ {
+ "http://ffmpeg.gusari.org/static/64bit/ffmpeg.static.64bit.2014-01-18.tar.gz"
+ };
+ }
+
}
+
+ //No Unix version available
+ return new string[] {};
#endif
}
-
return new string[] {};
}
+ }
- #if __MonoCS__
- // From mono/mcs/class/Managed.Windows.Forms/System.Windows.Forms/XplatUI.cs
- [DllImport ("libc")]
- static extern int uname (IntPtr buf);
+ #if __MonoCS__
+ public static class PlatformDetection
+ {
+ public readonly static bool IsWindows;
+ public readonly static bool IsMac;
+ public readonly static bool IsLinux;
+ public readonly static bool IsX86;
+ public readonly static bool IsX86_64;
+ public readonly static bool IsArm;
- static bool IsRunningOnMac()
+ static PlatformDetection ()
{
- IntPtr buf = IntPtr.Zero;
- try {
- buf = Marshal.AllocHGlobal (8192);
- // This is a hacktastic way of getting sysname from uname ()
- if (uname (buf) == 0) {
- string os = Marshal.PtrToStringAnsi (buf);
- if (os == "Darwin")
- return true;
+ IsWindows = Path.DirectorySeparatorChar == '\\';
+
+ //Don't call uname on windows
+ if (!IsWindows)
+ {
+ Utsname uname;
+ var callResult = Syscall.uname(out uname);
+ if (callResult == 0)
+ {
+ IsMac = uname.sysname == "Darwin";
+ IsLinux = !IsMac && uname.sysname == "Linux";
+
+ Regex archX86 = new Regex("(i|I)[3-6]86");
+ IsX86 = archX86.IsMatch(uname.machine);
+ IsX86_64 = !IsX86 && uname.machine == "x86_64";
+ IsArm = !IsX86 && !IsX86 && uname.machine.StartsWith("arm");
}
- } catch {
- } finally {
- if (buf != IntPtr.Zero)
- Marshal.FreeHGlobal (buf);
}
- return false;
+ else
+ {
+ if (System.Environment.Is64BitOperatingSystem)
+ IsX86_64 = true;
+ else
+ IsX86 = true;
+ }
}
- #endif
}
+ #endif
}