OSDN Git Service

WinGui:
authorsr55 <sr55@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Sun, 16 Jan 2011 19:50:00 +0000 (19:50 +0000)
committersr55 <sr55@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Sun, 16 Jan 2011 19:50:00 +0000 (19:50 +0000)
- Switch to .NET 4 Client Profile (Far smaller download size than the full profile .NET 3.5 installer that is currently required if the user does not have .Net installed)
- Import HandBrakeInterop library (by RandomEngy)
- Added experimental LibScan:IScan service to use libhb for scanning via the interop library. This is automatically used if hb.dll is detected in HandBrake's folder, otherwise HandBrakeCLI is used for the scan.

git-svn-id: svn://localhost/HandBrake/trunk@3752 b64f7644-9d1e-0410-96f1-a4d463321fa5

16 files changed:
win/C#/HandBrake.ApplicationServices/HandBrake.ApplicationServices.csproj
win/C#/HandBrake.ApplicationServices/Parsing/AudioTrack.cs
win/C#/HandBrake.ApplicationServices/Parsing/Chapter.cs
win/C#/HandBrake.ApplicationServices/Parsing/DVD.cs
win/C#/HandBrake.ApplicationServices/Parsing/Subtitle.cs
win/C#/HandBrake.ApplicationServices/Services/LibScan.cs [new file with mode: 0644]
win/C#/HandBrake.ApplicationServices/app.config
win/C#/HandBrake.Framework/HandBrake.Framework.csproj
win/C#/HandBrake10.sln
win/C#/HandBrakeCS.csproj
win/C#/Installer/Installer.nsi
win/C#/Installer/MakeNightly.nsi.tmpl
win/C#/app.config
win/C#/frmMain.cs
win/C#/libraries/HandBrakeInterop.dll [new file with mode: 0644]
win/C#/libraries/Source/HandBrakeInteropSource.zip [new file with mode: 0644]

index 8809cc1..12b5bc6 100644 (file)
     <AppDesignerFolder>Properties</AppDesignerFolder>\r
     <RootNamespace>HandBrake.ApplicationServices</RootNamespace>\r
     <AssemblyName>HandBrake.ApplicationServices</AssemblyName>\r
-    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>\r
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r
     <FileAlignment>512</FileAlignment>\r
     <FileUpgradeFlags>\r
     </FileUpgradeFlags>\r
     <OldToolsVersion>3.5</OldToolsVersion>\r
     <UpgradeBackupLocation />\r
-    <TargetFrameworkProfile>\r
-    </TargetFrameworkProfile>\r
+    <TargetFrameworkProfile>Client</TargetFrameworkProfile>\r
   </PropertyGroup>\r
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
     <DebugSymbols>true</DebugSymbols>\r
@@ -54,6 +53,9 @@
       <SpecificVersion>False</SpecificVersion>\r
       <HintPath>..\libraries\Growl.CoreLibrary.dll</HintPath>\r
     </Reference>\r
+    <Reference Include="HandBrakeInterop">\r
+      <HintPath>..\libraries\HandBrakeInterop.dll</HintPath>\r
+    </Reference>\r
     <Reference Include="Microsoft.WindowsAPICodePack, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">\r
       <SpecificVersion>False</SpecificVersion>\r
       <HintPath>..\libraries\Microsoft.WindowsAPICodePack.dll</HintPath>\r
@@ -62,6 +64,7 @@
       <SpecificVersion>False</SpecificVersion>\r
       <HintPath>..\libraries\Microsoft.WindowsAPICodePack.Shell.dll</HintPath>\r
     </Reference>\r
+    <Reference Include="PresentationCore" />\r
     <Reference Include="System" />\r
     <Reference Include="System.Core">\r
       <RequiredTargetFramework>3.5</RequiredTargetFramework>\r
@@ -76,6 +79,7 @@
     </Reference>\r
     <Reference Include="System.Data" />\r
     <Reference Include="System.Xml" />\r
+    <Reference Include="WindowsBase" />\r
   </ItemGroup>\r
   <ItemGroup>\r
     <Compile Include="EventArgs\EncodeCompletedEventArgs.cs" />\r
@@ -92,9 +96,9 @@
     <Compile Include="Functions\Win32.cs" />\r
     <Compile Include="Functions\Win7.cs" />\r
     <Compile Include="Init.cs" />\r
+    <Compile Include="Model\Encoding\AudioTrack.cs" />\r
     <Compile Include="Model\Encoding\Anamorphic.cs" />\r
     <Compile Include="Model\Encoding\AudioEncoder.cs" />\r
-    <Compile Include="Model\Encoding\AudioTrack.cs" />\r
     <Compile Include="Model\Encoding\Mixdown.cs" />\r
     <Compile Include="Model\Encoding\PointToPointMode.cs" />\r
     <Compile Include="Model\Encoding\Cropping.cs" />\r
     <Compile Include="Services\Interfaces\IQueueManager.cs" />\r
     <Compile Include="Services\Interfaces\IQueueProcessor.cs" />\r
     <Compile Include="Services\Interfaces\IScan.cs" />\r
+    <Compile Include="Services\LibScan.cs" />\r
     <Compile Include="Services\QueueManager.cs" />\r
     <Compile Include="Services\QueueProcessor.cs" />\r
     <Compile Include="Services\Scan.cs" />\r
       <Name>HandBrake.Framework</Name>\r
     </ProjectReference>\r
   </ItemGroup>\r
-  <ItemGroup>\r
-    <Folder Include="Model\Interfaces\" />\r
-  </ItemGroup>\r
+  <ItemGroup />\r
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />\r
   <Import Project="$(ProgramFiles)\MSBuild\Microsoft\StyleCop\v4.4\Microsoft.StyleCop.targets" />\r
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r
index 55cf524..0597f4d 100644 (file)
@@ -15,6 +15,48 @@ namespace HandBrake.ApplicationServices.Parsing
     public class AudioTrack\r
     {\r
         /// <summary>\r
+        /// Initializes a new instance of the <see cref="AudioTrack"/> class.\r
+        /// </summary>\r
+        public AudioTrack()\r
+        {       \r
+        }\r
+\r
+        /// <summary>\r
+        /// Initializes a new instance of the <see cref="AudioTrack"/> class.\r
+        /// </summary>\r
+        /// <param name="trackNumber">\r
+        /// The track number.\r
+        /// </param>\r
+        /// <param name="language">\r
+        /// The language.\r
+        /// </param>\r
+        /// <param name="languageCode">\r
+        /// The language code.\r
+        /// </param>\r
+        /// <param name="description">\r
+        /// The description.\r
+        /// </param>\r
+        /// <param name="format">\r
+        /// The format.\r
+        /// </param>\r
+        /// <param name="sampleRate">\r
+        /// The sample rate.\r
+        /// </param>\r
+        /// <param name="bitrate">\r
+        /// The bitrate.\r
+        /// </param>\r
+        public AudioTrack(int trackNumber, string language, string languageCode, string description, string format, int sampleRate, int bitrate)\r
+        {\r
+            this.TrackNumber = trackNumber;\r
+            this.Language = language;\r
+            this.LanguageCode = languageCode;\r
+            this.Description = description;\r
+            this.Format = format;\r
+            this.SampleRate = sampleRate;\r
+            this.Bitrate = bitrate;\r
+        }\r
+\r
+        /// <summary>\r
         /// Gets or sets The track number of this Audio Track\r
         /// </summary>\r
         public int TrackNumber { get; set; }\r
index 949b73f..4ec76fa 100644 (file)
@@ -16,6 +16,32 @@ namespace HandBrake.ApplicationServices.Parsing
     public class Chapter\r
     {\r
         /// <summary>\r
+        /// Initializes a new instance of the <see cref="Chapter"/> class.\r
+        /// </summary>\r
+        public Chapter()\r
+        {\r
+        }\r
+\r
+        /// <summary>\r
+        /// Initializes a new instance of the <see cref="Chapter"/> class.\r
+        /// </summary>\r
+        /// <param name="number">\r
+        /// The number.\r
+        /// </param>\r
+        /// <param name="Name">\r
+        /// The name.\r
+        /// </param>\r
+        /// <param name="duration">\r
+        /// The duration.\r
+        /// </param>\r
+        public Chapter(int number, string Name, TimeSpan duration)\r
+        {\r
+            this.ChapterName = Name;\r
+            this.ChapterNumber = number;\r
+            this.Duration = duration;\r
+        }\r
+\r
+        /// <summary>\r
         /// Gets or sets The number of this Chapter, in regards to it's parent Title\r
         /// </summary>\r
         public int ChapterNumber { get; set; }\r
index c7e5a27..40b1c4e 100644 (file)
@@ -22,9 +22,9 @@ namespace HandBrake.ApplicationServices.Parsing
         }\r
 \r
         /// <summary>\r
-        /// Gets Titles. A list of titles from the source\r
+        /// Gets or sets Titles. A list of titles from the source\r
         /// </summary>\r
-        public List<Title> Titles { get; private set; }\r
+        public List<Title> Titles { get; set; }\r
 \r
         /// <summary>\r
         /// Parse the StreamReader output into a List of Titles\r
index af261b0..1ac8270 100644 (file)
@@ -18,6 +18,37 @@ namespace HandBrake.ApplicationServices.Parsing
     public class Subtitle\r
     {\r
         /// <summary>\r
+        /// Initializes a new instance of the <see cref="Subtitle"/> class.\r
+        /// </summary>\r
+        public Subtitle()\r
+        {\r
+        }\r
+\r
+        /// <summary>\r
+        /// Initializes a new instance of the <see cref="Subtitle"/> class.\r
+        /// </summary>\r
+        /// <param name="trackNumber">\r
+        /// The track number.\r
+        /// </param>\r
+        /// <param name="language">\r
+        /// The language.\r
+        /// </param>\r
+        /// <param name="languageCode">\r
+        /// The language code.\r
+        /// </param>\r
+        /// <param name="subtitleType">\r
+        /// The subtitle type.\r
+        /// </param>\r
+        public Subtitle(int trackNumber, string language, string languageCode, SubtitleType subtitleType)\r
+        {\r
+            this.TrackNumber = trackNumber;\r
+            this.Language = language;\r
+            this.LanguageCode = languageCode;\r
+            this.SubtitleType = subtitleType;\r
+        }\r
+\r
+\r
+        /// <summary>\r
         /// Gets or sets the track number of this Subtitle\r
         /// </summary>\r
         public int TrackNumber { get; set; }\r
diff --git a/win/C#/HandBrake.ApplicationServices/Services/LibScan.cs b/win/C#/HandBrake.ApplicationServices/Services/LibScan.cs
new file mode 100644 (file)
index 0000000..50be6aa
--- /dev/null
@@ -0,0 +1,328 @@
+/*  LibScan.cs $\r
+    This file is part of the HandBrake source code.\r
+    Homepage: <http://handbrake.fr>.\r
+    It may be used under the terms of the GNU General Public License. */\r
+\r
+namespace HandBrake.ApplicationServices.Services\r
+{\r
+    using System;\r
+    using System.Collections.Generic;\r
+    using System.Text;\r
+    using System.Threading;\r
+\r
+    using HandBrake.ApplicationServices.EventArgs;\r
+    using HandBrake.ApplicationServices.Model.Encoding;\r
+    using HandBrake.ApplicationServices.Parsing;\r
+    using HandBrake.ApplicationServices.Services.Interfaces;\r
+    using HandBrake.Interop;\r
+\r
+    using AudioTrack = HandBrake.ApplicationServices.Parsing.AudioTrack;\r
+    using Cropping = HandBrake.ApplicationServices.Model.Encoding.Cropping;\r
+    using ScanProgressEventArgs = HandBrake.Interop.ScanProgressEventArgs;\r
+    using Size = System.Drawing.Size;\r
+\r
+    /// <summary>\r
+    /// Scan a Source\r
+    /// </summary>\r
+    public class LibScan : IScan\r
+    {\r
+        /*\r
+         * TODO\r
+         * 1. Expose the Previews code.\r
+         * 2. Expose the Logging.\r
+         * \r
+         */\r
+\r
+        #region Private Variables\r
+\r
+        /// <summary>\r
+        /// Lock for the log file\r
+        /// </summary>\r
+        static readonly object LogLock = new object();\r
+\r
+        /// <summary>\r
+        /// LibHB Instance\r
+        /// </summary>\r
+        private readonly HandBrakeInstance instance;\r
+\r
+        /// <summary>\r
+        /// Log data from HandBrakeInstance\r
+        /// </summary>\r
+        private readonly StringBuilder logging;\r
+\r
+        #endregion\r
+\r
+        /// <summary>\r
+        /// Initializes a new instance of the <see cref="LibScan"/> class. \r
+        /// </summary>\r
+        public LibScan()\r
+        {\r
+            logging = new StringBuilder();\r
+\r
+            instance = new HandBrakeInstance();\r
+            instance.Initialize(1);\r
+            instance.ScanProgress += this.InstanceScanProgress;\r
+            instance.ScanCompleted += this.InstanceScanCompleted;\r
+\r
+            HandBrakeUtils.MessageLogged += this.HandBrakeInstanceMessageLogged;\r
+            HandBrakeUtils.ErrorLogged += this.HandBrakeInstanceErrorLogged;\r
+        }\r
+\r
+        #region Events\r
+\r
+        /// <summary>\r
+        /// Scan has Started\r
+        /// </summary>\r
+        public event EventHandler ScanStared;\r
+\r
+        /// <summary>\r
+        /// Scan has completed\r
+        /// </summary>\r
+        public event ScanCompletedStatus ScanCompleted;\r
+\r
+        /// <summary>\r
+        /// Encode process has progressed\r
+        /// </summary>\r
+        public event ScanProgessStatus ScanStatusChanged;\r
+\r
+        #endregion\r
+\r
+        #region Properties\r
+\r
+        /// <summary>\r
+        /// Gets a value indicating whether IsScanning.\r
+        /// </summary>\r
+        public bool IsScanning { get; private set; }\r
+\r
+        /// <summary>\r
+        /// Gets the Souce Data.\r
+        /// </summary>\r
+        public DVD SouceData { get; private set; }\r
+\r
+        /// <summary>\r
+        /// Gets ActivityLog.\r
+        /// </summary>\r
+        public string ActivityLog\r
+        {\r
+            get\r
+            {\r
+                return logging.ToString();\r
+            }\r
+        }\r
+\r
+        #endregion\r
+\r
+        #region Public Methods\r
+\r
+        /// <summary>\r
+        /// Scan a Source Path.\r
+        /// Title 0: scan all\r
+        /// </summary>\r
+        /// <param name="sourcePath">Path to the file to scan</param>\r
+        /// <param name="title">int title number. 0 for scan all</param>\r
+        public void Scan(string sourcePath, int title)\r
+        {\r
+            Thread t = new Thread(unused => this.ScanSource(sourcePath, title));\r
+            t.Start();\r
+        }\r
+\r
+        /// <summary>\r
+        /// Kill the scan\r
+        /// </summary>\r
+        public void Stop()\r
+        {\r
+            instance.StopScan();\r
+        }\r
+\r
+        #endregion\r
+\r
+        #region Private Methods\r
+\r
+        /// <summary>\r
+        /// Start a scan for a given source path and title\r
+        /// </summary>\r
+        /// <param name="sourcePath">Path to the source file</param>\r
+        /// <param name="title">the title number to look at</param>\r
+        private void ScanSource(object sourcePath, int title)\r
+        {\r
+            try\r
+            {\r
+                IsScanning = true;\r
+                if (this.ScanStared != null)\r
+                    this.ScanStared(this, new EventArgs());\r
+\r
+                if (title != 0)\r
+                    instance.StartScan(sourcePath.ToString(), 10, title);\r
+                else\r
+                    instance.StartScan(sourcePath.ToString(), 10);\r
+            }\r
+            catch (Exception exc)\r
+            {\r
+                this.Stop();\r
+\r
+                if (this.ScanCompleted != null)\r
+                    this.ScanCompleted(this, new ScanCompletedEventArgs(false, exc, "An Error has occured in ScanService.ScanSource()"));\r
+            }\r
+        }\r
+\r
+        #endregion\r
+\r
+        #region HandBrakeInstance Event Handlers\r
+        /// <summary>\r
+        /// Scan Completed Event Handler\r
+        /// </summary>\r
+        /// <param name="sender">\r
+        /// The sender.\r
+        /// </param>\r
+        /// <param name="e">\r
+        /// The EventArgs.\r
+        /// </param>\r
+        private void InstanceScanCompleted(object sender, EventArgs e)\r
+        {\r
+            this.SouceData = new DVD { Titles = ConvertTitles(this.instance.Titles) };\r
+\r
+            IsScanning = false;\r
+\r
+            if (this.ScanCompleted != null)\r
+                this.ScanCompleted(this, new ScanCompletedEventArgs(true, null, string.Empty));\r
+        }\r
+\r
+        /// <summary>\r
+        /// Scan Progress Event Handler\r
+        /// </summary>\r
+        /// <param name="sender">\r
+        /// The sender.\r
+        /// </param>\r
+        /// <param name="e">\r
+        /// The EventArgs.\r
+        /// </param>\r
+        private void InstanceScanProgress(object sender, ScanProgressEventArgs e)\r
+        {\r
+            if (this.ScanStatusChanged != null)\r
+            {\r
+                ApplicationServices.EventArgs.ScanProgressEventArgs eventArgs =\r
+                    new ApplicationServices.EventArgs.ScanProgressEventArgs\r
+                        {\r
+                            CurrentTitle = e.CurrentTitle,\r
+                            Titles = e.Titles\r
+                        };\r
+\r
+                this.ScanStatusChanged(this, eventArgs);\r
+            }\r
+        }\r
+\r
+        /// <summary>\r
+        /// Log a message\r
+        /// </summary>\r
+        /// <param name="sender">\r
+        /// The sender.\r
+        /// </param>\r
+        /// <param name="e">\r
+        /// The MessageLoggedEventArgs.\r
+        /// </param>\r
+        private void HandBrakeInstanceErrorLogged(object sender, MessageLoggedEventArgs e)\r
+        {\r
+            lock (LogLock)\r
+            {\r
+                this.logging.AppendLine(e.Message);\r
+            }\r
+        }\r
+\r
+        /// <summary>\r
+        /// Log a message\r
+        /// </summary>\r
+        /// <param name="sender">\r
+        /// The sender.\r
+        /// </param>\r
+        /// <param name="e">\r
+        /// The MessageLoggedEventArgs.\r
+        /// </param>\r
+        private void HandBrakeInstanceMessageLogged(object sender, MessageLoggedEventArgs e)\r
+        {\r
+            lock (LogLock)\r
+            {\r
+                this.logging.AppendLine(e.Message);\r
+            }\r
+        }\r
+\r
+        /// <summary>\r
+        /// Convert Interop Title objects to App Services Title object\r
+        /// </summary>\r
+        /// <param name="titles">\r
+        /// The titles.\r
+        /// </param>\r
+        /// <returns>\r
+        /// The convert titles.\r
+        /// </returns>\r
+        private static List<Title> ConvertTitles(IEnumerable<SourceData.Title> titles)\r
+        {\r
+            List<Title> titleList = new List<Title>();\r
+            foreach (SourceData.Title title in titles)\r
+            {\r
+                Title converted = new Title\r
+                    {\r
+                        TitleNumber = title.TitleNumber,\r
+                        Duration = title.Duration,\r
+                        Resolution = new Size(title.Resolution.Width, title.Resolution.Height),\r
+                        AspectRatio = title.AspectRatio,\r
+                        AngleCount = title.AngleCount,\r
+                        ParVal = new Size(title.ParVal.Width, title.ParVal.Height),\r
+                        AutoCropDimensions =\r
+                            Cropping.CreateCroppingObject(\r
+                                title.AutoCropDimensions.Top,\r
+                                title.AutoCropDimensions.Bottom,\r
+                                title.AutoCropDimensions.Left,\r
+                                title.AutoCropDimensions.Right),\r
+                        Fps = title.Framerate\r
+                    };\r
+\r
+                foreach (SourceData.Chapter chapter in title.Chapters)\r
+                {\r
+                    converted.Chapters.Add(new Chapter(chapter.ChapterNumber, string.Empty, chapter.Duration));\r
+                }\r
+\r
+                foreach (SourceData.AudioTrack track in title.AudioTracks)\r
+                {\r
+                    converted.AudioTracks.Add(new AudioTrack(track.TrackNumber, track.Language, track.LanguageCode, track.Description, string.Empty, track.SampleRate, track.Bitrate));\r
+                }\r
+\r
+                foreach (SourceData.Subtitle track in title.Subtitles)\r
+                {\r
+                    SubtitleType convertedType = new SubtitleType();\r
+\r
+                    switch (track.SubtitleSource)\r
+                    {\r
+                        case SourceData.SubtitleSource.VobSub:\r
+                            convertedType = SubtitleType.VobSub;\r
+                            break;\r
+                        case SourceData.SubtitleSource.UTF8:\r
+                            convertedType = SubtitleType.UTF8Sub;\r
+                            break;\r
+                        case SourceData.SubtitleSource.TX3G:\r
+                            convertedType = SubtitleType.TX3G;\r
+                            break;\r
+                        case SourceData.SubtitleSource.SSA:\r
+                            convertedType = SubtitleType.SSA;\r
+                            break;\r
+                        case SourceData.SubtitleSource.SRT:\r
+                            convertedType = SubtitleType.SRT;\r
+                            break;\r
+                        case SourceData.SubtitleSource.CC608:\r
+                            convertedType = SubtitleType.CC;\r
+                            break;\r
+                        case SourceData.SubtitleSource.CC708:\r
+                            convertedType = SubtitleType.CC;\r
+                            break;\r
+                    }\r
+\r
+                    converted.Subtitles.Add(new Subtitle(track.TrackNumber, track.Language, track.LanguageCode, convertedType));\r
+                }\r
+\r
+                titleList.Add(converted);\r
+            }\r
+\r
+            return titleList;\r
+        }\r
+        #endregion\r
+    }\r
+}
\ No newline at end of file
index 7077d5d..2665bc9 100644 (file)
@@ -39,4 +39,4 @@
             </setting>\r
         </HandBrake.ApplicationServices.Properties.Settings>\r
     </userSettings>\r
-<startup><supportedRuntime version="v2.0.50727"/></startup></configuration>\r
+<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/></startup></configuration>\r
index 8d806e5..e7a7664 100644 (file)
     <AppDesignerFolder>Properties</AppDesignerFolder>\r
     <RootNamespace>HandBrake.Framework</RootNamespace>\r
     <AssemblyName>HandBrake.Framework</AssemblyName>\r
-    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>\r
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r
     <FileAlignment>512</FileAlignment>\r
     <FileUpgradeFlags>\r
     </FileUpgradeFlags>\r
     <OldToolsVersion>3.5</OldToolsVersion>\r
     <UpgradeBackupLocation />\r
+    <TargetFrameworkProfile>Client</TargetFrameworkProfile>\r
   </PropertyGroup>\r
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
     <DebugSymbols>true</DebugSymbols>\r
index 84de6f5..e5fda72 100644 (file)
@@ -10,54 +10,98 @@ EndProject
 Global\r
        GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
                Debug|Any CPU = Debug|Any CPU\r
+               Debug|Mixed Platforms = Debug|Mixed Platforms\r
+               Debug|x64 = Debug|x64\r
                Debug|x86 = Debug|x86\r
                Install|Any CPU = Install|Any CPU\r
+               Install|Mixed Platforms = Install|Mixed Platforms\r
+               Install|x64 = Install|x64\r
                Install|x86 = Install|x86\r
                NightlyBuild|Any CPU = NightlyBuild|Any CPU\r
+               NightlyBuild|Mixed Platforms = NightlyBuild|Mixed Platforms\r
+               NightlyBuild|x64 = NightlyBuild|x64\r
                NightlyBuild|x86 = NightlyBuild|x86\r
                Release|Any CPU = Release|Any CPU\r
+               Release|Mixed Platforms = Release|Mixed Platforms\r
+               Release|x64 = Release|x64\r
                Release|x86 = Release|x86\r
        EndGlobalSection\r
        GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
                {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
                {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Debug|Mixed Platforms.ActiveCfg = Debug|x86\r
+               {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Debug|Mixed Platforms.Build.0 = Debug|x86\r
+               {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Debug|x64.ActiveCfg = Debug|x86\r
                {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Debug|x86.ActiveCfg = Debug|x86\r
                {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Debug|x86.Build.0 = Debug|x86\r
                {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Install|Any CPU.ActiveCfg = Install|Any CPU\r
                {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Install|Any CPU.Build.0 = Install|Any CPU\r
+               {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Install|Mixed Platforms.ActiveCfg = Install|x86\r
+               {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Install|Mixed Platforms.Build.0 = Install|x86\r
+               {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Install|x64.ActiveCfg = Install|x86\r
                {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Install|x86.ActiveCfg = Install|x86\r
                {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Install|x86.Build.0 = Install|x86\r
                {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.NightlyBuild|Any CPU.ActiveCfg = NightlyBuild|Any CPU\r
                {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.NightlyBuild|Any CPU.Build.0 = NightlyBuild|Any CPU\r
+               {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.NightlyBuild|Mixed Platforms.ActiveCfg = NightlyBuild|x86\r
+               {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.NightlyBuild|Mixed Platforms.Build.0 = NightlyBuild|x86\r
+               {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.NightlyBuild|x64.ActiveCfg = NightlyBuild|x86\r
                {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.NightlyBuild|x86.ActiveCfg = NightlyBuild|x86\r
                {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.NightlyBuild|x86.Build.0 = NightlyBuild|x86\r
                {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
                {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Release|Mixed Platforms.ActiveCfg = Release|x86\r
+               {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Release|Mixed Platforms.Build.0 = Release|x86\r
+               {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Release|x64.ActiveCfg = Release|x86\r
                {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Release|x86.ActiveCfg = Release|x86\r
                {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Release|x86.Build.0 = Release|x86\r
                {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
                {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Debug|x64.ActiveCfg = Debug|Any CPU\r
                {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Debug|x86.ActiveCfg = Debug|Any CPU\r
                {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Install|Any CPU.ActiveCfg = Release|Any CPU\r
                {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Install|Any CPU.Build.0 = Release|Any CPU\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Install|Mixed Platforms.ActiveCfg = NightlyBuild|Any CPU\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Install|Mixed Platforms.Build.0 = NightlyBuild|Any CPU\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Install|x64.ActiveCfg = NightlyBuild|Any CPU\r
                {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Install|x86.ActiveCfg = Release|Any CPU\r
                {087A2BA8-BAC2-4577-A46F-07FF9D420016}.NightlyBuild|Any CPU.ActiveCfg = NightlyBuild|Any CPU\r
                {087A2BA8-BAC2-4577-A46F-07FF9D420016}.NightlyBuild|Any CPU.Build.0 = NightlyBuild|Any CPU\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.NightlyBuild|Mixed Platforms.ActiveCfg = NightlyBuild|Any CPU\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.NightlyBuild|Mixed Platforms.Build.0 = NightlyBuild|Any CPU\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.NightlyBuild|x64.ActiveCfg = NightlyBuild|Any CPU\r
                {087A2BA8-BAC2-4577-A46F-07FF9D420016}.NightlyBuild|x86.ActiveCfg = Release|Any CPU\r
                {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
                {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r
+               {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Release|x64.ActiveCfg = Release|Any CPU\r
                {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Release|x86.ActiveCfg = Release|Any CPU\r
                {49AD42C1-BF9B-4D78-A644-020878FAADE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
                {49AD42C1-BF9B-4D78-A644-020878FAADE6}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {49AD42C1-BF9B-4D78-A644-020878FAADE6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r
+               {49AD42C1-BF9B-4D78-A644-020878FAADE6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r
+               {49AD42C1-BF9B-4D78-A644-020878FAADE6}.Debug|x64.ActiveCfg = Debug|Any CPU\r
                {49AD42C1-BF9B-4D78-A644-020878FAADE6}.Debug|x86.ActiveCfg = Debug|Any CPU\r
                {49AD42C1-BF9B-4D78-A644-020878FAADE6}.Install|Any CPU.ActiveCfg = Release|Any CPU\r
                {49AD42C1-BF9B-4D78-A644-020878FAADE6}.Install|Any CPU.Build.0 = Release|Any CPU\r
+               {49AD42C1-BF9B-4D78-A644-020878FAADE6}.Install|Mixed Platforms.ActiveCfg = NightlyBuild|Any CPU\r
+               {49AD42C1-BF9B-4D78-A644-020878FAADE6}.Install|Mixed Platforms.Build.0 = NightlyBuild|Any CPU\r
+               {49AD42C1-BF9B-4D78-A644-020878FAADE6}.Install|x64.ActiveCfg = NightlyBuild|Any CPU\r
                {49AD42C1-BF9B-4D78-A644-020878FAADE6}.Install|x86.ActiveCfg = Release|Any CPU\r
                {49AD42C1-BF9B-4D78-A644-020878FAADE6}.NightlyBuild|Any CPU.ActiveCfg = Release|Any CPU\r
                {49AD42C1-BF9B-4D78-A644-020878FAADE6}.NightlyBuild|Any CPU.Build.0 = Release|Any CPU\r
+               {49AD42C1-BF9B-4D78-A644-020878FAADE6}.NightlyBuild|Mixed Platforms.ActiveCfg = NightlyBuild|Any CPU\r
+               {49AD42C1-BF9B-4D78-A644-020878FAADE6}.NightlyBuild|Mixed Platforms.Build.0 = NightlyBuild|Any CPU\r
+               {49AD42C1-BF9B-4D78-A644-020878FAADE6}.NightlyBuild|x64.ActiveCfg = NightlyBuild|Any CPU\r
                {49AD42C1-BF9B-4D78-A644-020878FAADE6}.NightlyBuild|x86.ActiveCfg = Release|Any CPU\r
                {49AD42C1-BF9B-4D78-A644-020878FAADE6}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
                {49AD42C1-BF9B-4D78-A644-020878FAADE6}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {49AD42C1-BF9B-4D78-A644-020878FAADE6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r
+               {49AD42C1-BF9B-4D78-A644-020878FAADE6}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r
+               {49AD42C1-BF9B-4D78-A644-020878FAADE6}.Release|x64.ActiveCfg = Release|Any CPU\r
                {49AD42C1-BF9B-4D78-A644-020878FAADE6}.Release|x86.ActiveCfg = Release|Any CPU\r
        EndGlobalSection\r
        GlobalSection(SolutionProperties) = preSolution\r
index 158b96b..55e94b6 100644 (file)
@@ -19,7 +19,7 @@
     <UpgradeBackupLocation>\r
     </UpgradeBackupLocation>\r
     <OldToolsVersion>3.5</OldToolsVersion>\r
-    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>\r
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r
     <IsWebBootstrapper>false</IsWebBootstrapper>\r
     <SignManifests>false</SignManifests>\r
     <PublishUrl>publish\</PublishUrl>\r
@@ -36,6 +36,7 @@
     <ApplicationVersion>1.0.0.%2a</ApplicationVersion>\r
     <UseApplicationTrust>false</UseApplicationTrust>\r
     <BootstrapperEnabled>true</BootstrapperEnabled>\r
+    <TargetFrameworkProfile>Client</TargetFrameworkProfile>\r
   </PropertyGroup>\r
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
     <DebugSymbols>true</DebugSymbols>\r
index 2951bca..9283fdd 100644 (file)
@@ -136,6 +136,7 @@ Section "Handbrake" SEC01
   File "HandBrake.Framework.dll"\r
   File "Microsoft.WindowsAPICodePack.Shell.dll"\r
   File "Microsoft.WindowsAPICodePack.dll"\r
+  File "HandBrakeInterop.dll"\r
 \r
   ;File "Caliburn.Castle.dll"\r
   ;File "Caliburn.Core.dll"\r
@@ -197,6 +198,7 @@ Section Uninstall
   Delete "$INSTDIR\HandBrake.Framework.dll"\r
   Delete "$INSTDIR\Microsoft.WindowsAPICodePack.Shell.dll"\r
   Delete "$INSTDIR\Microsoft.WindowsAPICodePack.dll"\r
+  Delete "$INSTDIR\HandBrakeInterop.dll"\r
 \r
   Delete "$INSTDIR\Caliburn.Castle.dll"\r
   Delete "$INSTDIR\Caliburn.Core.dll"\r
index 55db341..b7b6a2e 100644 (file)
@@ -136,6 +136,7 @@ Section "Handbrake" SEC01
   File "HandBrake.Framework.dll"\r
   File "Microsoft.WindowsAPICodePack.Shell.dll"\r
   File "Microsoft.WindowsAPICodePack.dll"\r
+  File "HandBrakeInterop.dll"\r
 \r
   ;File "Caliburn.Castle.dll"\r
   ;File "Caliburn.Core.dll"\r
@@ -197,6 +198,7 @@ Section Uninstall
   Delete "$INSTDIR\HandBrake.Framework.dll"\r
   Delete "$INSTDIR\Microsoft.WindowsAPICodePack.Shell.dll"\r
   Delete "$INSTDIR\Microsoft.WindowsAPICodePack.dll"\r
+  Delete "$INSTDIR\HandBrakeInterop.dll"\r
 \r
   Delete "$INSTDIR\Caliburn.Castle.dll"\r
   Delete "$INSTDIR\Caliburn.Core.dll"\r
index cea155a..d2164dd 100644 (file)
@@ -1,11 +1,10 @@
 <?xml version="1.0"?>\r
-\r
 <configuration>\r
   <configSections>\r
-    <section name="castle" type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler, Castle.Windsor" />\r
+    <section name="castle" type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler, Castle.Windsor"/>\r
     \r
     <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">\r
-      <section name="Handbrake.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />\r
+      <section name="Handbrake.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>\r
     </sectionGroup>\r
   </configSections>\r
   \r
@@ -27,7 +26,7 @@
         <value>Do Nothing</value>\r
       </setting>\r
       <setting name="defaultPreset" serializeAs="String">\r
-        <value />\r
+        <value/>\r
       </setting>\r
       <setting name="hb_build" serializeAs="String">\r
         <value>0</value>\r
@@ -39,7 +38,7 @@
         <value>True</value>\r
       </setting>\r
       <setting name="autoNamePath" serializeAs="String">\r
-        <value />\r
+        <value/>\r
       </setting>\r
       <setting name="appcast" serializeAs="String">\r
         <value>http://handbrake.fr/appcast.xml</value>\r
@@ -54,7 +53,7 @@
         <value>False</value>\r
       </setting>\r
       <setting name="saveLogPath" serializeAs="String">\r
-        <value />\r
+        <value/>\r
       </setting>\r
       <setting name="saveLogWithVideo" serializeAs="String">\r
         <value>False</value>\r
@@ -84,7 +83,7 @@
         <value>True</value>\r
       </setting>\r
       <setting name="lastUpdateCheckDate" serializeAs="String">\r
-        <value />\r
+        <value/>\r
       </setting>\r
       <setting name="daysBetweenUpdateCheck" serializeAs="String">\r
         <value>7</value>\r
         <value>0</value>\r
       </setting>\r
       <setting name="hb_platform" serializeAs="String">\r
-        <value />\r
+        <value/>\r
       </setting>\r
       <setting name="growlQueue" serializeAs="String">\r
         <value>False</value>\r
         <value>False</value>\r
       </setting>\r
       <setting name="CliExeHash" serializeAs="String">\r
-        <value />\r
+        <value/>\r
       </setting>\r
       <setting name="previewScanCount" serializeAs="String">\r
         <value>10</value>\r
     </Handbrake.Properties.Settings>\r
   </userSettings>\r
   \r
-  <startup />\r
+  <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/></startup>\r
   \r
   <!--<castle>\r
     <components>\r
     </components>\r
   </castle>-->\r
   \r
-</configuration>
\ No newline at end of file
+</configuration>\r
index 1c4ccb2..fa85b47 100644 (file)
@@ -56,7 +56,8 @@ namespace Handbrake
         private string dvdDriveLabel;\r
         private Preset currentlySelectedPreset;\r
         private DVD currentSource;\r
-        private IScan SourceScan = new ScanService();\r
+\r
+        private IScan SourceScan;\r
         private List<DriveInformation> drives;\r
         private QueueTask queueEdit;\r
 \r
@@ -118,6 +119,9 @@ namespace Handbrake
         {\r
             InitializeComponent();\r
 \r
+            // We can use LibHB, if the library hb.dll exists.\r
+            this.SourceScan = File.Exists("hb.dll") ? (IScan)new LibScan() : new ScanService();\r
+\r
             // Update the users config file with the CLI version data.\r
             Main.SetCliVersionData();\r
 \r
diff --git a/win/C#/libraries/HandBrakeInterop.dll b/win/C#/libraries/HandBrakeInterop.dll
new file mode 100644 (file)
index 0000000..a2bb55e
Binary files /dev/null and b/win/C#/libraries/HandBrakeInterop.dll differ
diff --git a/win/C#/libraries/Source/HandBrakeInteropSource.zip b/win/C#/libraries/Source/HandBrakeInteropSource.zip
new file mode 100644 (file)
index 0000000..b634009
Binary files /dev/null and b/win/C#/libraries/Source/HandBrakeInteropSource.zip differ