OSDN Git Service

WinGui:
authorsr55 <sr55@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Sat, 5 Feb 2011 21:37:49 +0000 (21:37 +0000)
committersr55 <sr55@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Sat, 5 Feb 2011 21:37:49 +0000 (21:37 +0000)
- Another round of refactoring. Query Parsing and Plist handling code moved to application services utilities namespace.

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

win/C#/HandBrake.ApplicationServices/Functions/Converters.cs
win/C#/HandBrake.ApplicationServices/HandBrake.ApplicationServices.csproj
win/C#/HandBrake.ApplicationServices/Model/EncodeTask.cs
win/C#/HandBrake.ApplicationServices/Model/Encoding/Cropping.cs
win/C#/HandBrake.ApplicationServices/Model/Encoding/Deinterlace.cs
win/C#/HandBrake.ApplicationServices/Model/Encoding/FramerateMode.cs [new file with mode: 0644]
win/C#/HandBrake.ApplicationServices/Model/Encoding/VideoEncodeRateMode.cs [moved from win/C#/HandBrake.ApplicationServices/Model/Encoding/VideoEncodeMode.cs with 82% similarity]
win/C#/HandBrake.ApplicationServices/Services/LibScan.cs
win/C#/HandBrake.ApplicationServices/Utilities/PlistUtility.cs
win/C#/HandBrake.ApplicationServices/Utilities/QueryParserUtility.cs

index e1a4069..1dd817e 100644 (file)
@@ -8,11 +8,19 @@ namespace HandBrake.ApplicationServices.Functions
     using System;\r
     using System.Text.RegularExpressions;\r
 \r
+    using HandBrake.ApplicationServices.Model.Encoding;\r
+\r
     /// <summary>\r
     /// A class to convert various things to native C# objects\r
     /// </summary>\r
     public class Converters\r
     {\r
+        /**\r
+         * TODO:\r
+         * - Many of these converters can be ditched at a later point. Should be able to model all this within the enums themsevles.\r
+         * \r
+         **/ \r
+\r
         /// <summary>\r
         /// Convert HandBrakes time remaining into a TimeSpan\r
         /// </summary>\r
@@ -64,7 +72,7 @@ namespace HandBrake.ApplicationServices.Functions
         /// </summary>\r
         /// <param name="audioEnc">The Audio Encoder</param>\r
         /// <returns>The GUI representation of that audio encoder</returns>\r
-        public static string GetAudioEncoder(string audioEnc)\r
+        public static string GetGUIAudioEncoder(string audioEnc)\r
         {\r
             switch (audioEnc)\r
             {\r
@@ -84,5 +92,98 @@ namespace HandBrake.ApplicationServices.Functions
                     return "AAC (faac)";\r
             }\r
         }\r
+\r
+        /// <summary>\r
+        /// Get the Video Encoder for a given string\r
+        /// </summary>\r
+        /// <param name="encoder">\r
+        /// The encoder name\r
+        /// </param>\r
+        /// <returns>\r
+        /// VideoEncoder enum object\r
+        /// </returns>\r
+        public static VideoEncoder GetVideoEncoder(string encoder)\r
+        {\r
+            switch (encoder)\r
+            {\r
+                case "ffmpeg":\r
+                    return VideoEncoder.FFMpeg;\r
+                case "x264":\r
+                    return VideoEncoder.X264;\r
+                case "theora":\r
+                    return VideoEncoder.Theora;\r
+                default:\r
+                    return VideoEncoder.X264;\r
+            }\r
+        }\r
+\r
+        /// <summary>\r
+        /// Get a GUI name for a given video Encoder.\r
+        /// </summary>\r
+        /// <param name="encoder">\r
+        /// A VideoEncoder Enum object\r
+        /// </param>\r
+        /// <returns>\r
+        /// A GUI encoder name, default is x264\r
+        /// </returns>\r
+        public static string GetGUIVideoEncoder(VideoEncoder encoder)\r
+        {\r
+            switch (encoder)\r
+            {\r
+                case VideoEncoder.FFMpeg:\r
+                    return "MPEG-4 (FFmpeg)";\r
+                case VideoEncoder.X264:\r
+                    return "H.264 (x264)";\r
+                case VideoEncoder.Theora:\r
+                    return "VP3 (Theora)";\r
+                default:\r
+                    return "H.264 (x264)";\r
+            }\r
+        }\r
+\r
+\r
+        /// <summary>\r
+        /// Get the OutputFormat Enum for a given string\r
+        /// </summary>\r
+        /// <param name="format">\r
+        /// OutputFormat as a string\r
+        /// </param>\r
+        /// <returns>\r
+        /// An OutputFormat Enum\r
+        /// </returns>\r
+        public static OutputFormat GetFileFormat(string format)\r
+        {\r
+            switch (format.ToLower())\r
+            {\r
+                default:\r
+                    return OutputFormat.Mp4;\r
+                case "m4v":\r
+                    return OutputFormat.M4V;\r
+                case "mkv":\r
+                    return OutputFormat.Mkv;\r
+            }\r
+        }\r
+\r
+        /// <summary>\r
+        /// Get the OutputFormat Enum for a given string\r
+        /// </summary>\r
+        /// <param name="format">\r
+        /// OutputFormat as a string\r
+        /// </param>\r
+        /// <returns>\r
+        /// An OutputFormat Enum\r
+        /// </returns>\r
+        public static string GetFileFormat(OutputFormat format)\r
+        {\r
+            switch (format)\r
+            {\r
+                default:\r
+                    return "mp4";\r
+                case OutputFormat.M4V:\r
+                    return "m4v";\r
+                case OutputFormat.Mkv:\r
+                    return "mkv";\r
+            }\r
+        }\r
     }\r
 }\r
index c338ed0..db3cd55 100644 (file)
     <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\FramerateMode.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="Model\Encoding\OutputFormat.cs" />\r
     <Compile Include="Model\Encoding\SubtitleTrack.cs" />\r
     <Compile Include="Model\Encoding\VideoEncoder.cs" />\r
-    <Compile Include="Model\Encoding\VideoEncodeMode.cs" />\r
+    <Compile Include="Model\Encoding\VideoEncodeRateMode.cs" />\r
     <Compile Include="Model\Preset.cs" />\r
     <Compile Include="Model\QueueTask.cs" />\r
     <Compile Include="Model\Encoding\SubtitleType.cs" />\r
index a735902..8b561f4 100644 (file)
@@ -19,6 +19,7 @@ namespace HandBrake.ApplicationServices.Model
         /// </summary>\r
         public EncodeTask()\r
         {\r
+            this.Cropping = new Cropping();\r
         }\r
 \r
         #region Source\r
@@ -124,7 +125,7 @@ namespace HandBrake.ApplicationServices.Model
         /// <summary>\r
         /// Gets or sets DisplayWidth.\r
         /// </summary>\r
-        public int DisplayWidth { get; set; }\r
+        public double DisplayWidth { get; set; }\r
 \r
         /// <summary>\r
         /// Gets or sets a value indicating whether KeepDisplayAspect.\r
@@ -205,22 +206,32 @@ namespace HandBrake.ApplicationServices.Model
         /// <summary>\r
         /// Gets or sets VideoEncodeRateType.\r
         /// </summary>\r
-        public VideoEncodeMode VideoEncodeRateType { get; set; }\r
+        public VideoEncodeRateMode VideoEncodeRateType { get; set; }\r
+\r
+        /// <summary>\r
+        /// Gets or sets the VideoEncoder\r
+        /// </summary>\r
+        public VideoEncoder VideoEncoder { get; set; }\r
+\r
+        /// <summary>\r
+        /// Gets or sets the Video Encode Mode\r
+        /// </summary>\r
+        public FramerateMode FramerateMode { get; set; }\r
 \r
         /// <summary>\r
         /// Gets or sets Quality.\r
         /// </summary>\r
-        public double Quality { get; set; }\r
+        public double? Quality { get; set; }\r
 \r
         /// <summary>\r
         /// Gets or sets TargetSize.\r
         /// </summary>\r
-        public int TargetSize { get; set; }\r
+        public int? TargetSize { get; set; }\r
 \r
         /// <summary>\r
         /// Gets or sets VideoBitrate.\r
         /// </summary>\r
-        public int VideoBitrate { get; set; }\r
+        public int? VideoBitrate { get; set; }\r
 \r
         /// <summary>\r
         /// Gets or sets a value indicating whether TwoPass.\r
@@ -238,11 +249,6 @@ namespace HandBrake.ApplicationServices.Model
         /// </summary>\r
         public double? Framerate { get; set; }\r
 \r
-        /// <summary>\r
-        /// Gets or sets a value indicating whether PeakFramerate.\r
-        /// </summary>\r
-        public bool PeakFramerate { get; set; }\r
-\r
         #endregion\r
 \r
         #region Audio\r
@@ -281,6 +287,45 @@ namespace HandBrake.ApplicationServices.Model
         /// Gets or sets X264Options.\r
         /// </summary>\r
         public string X264Options { get; set; }\r
+\r
+        #endregion\r
+\r
+        #region Preset Information (TODO This should probably be dropped)\r
+\r
+        /// <summary>\r
+        /// Gets or sets PresetBuildNumber.\r
+        /// </summary>\r
+        public int PresetBuildNumber { get; set; }\r
+\r
+        /// <summary>\r
+        /// Gets or sets PresetDescription.\r
+        /// </summary>\r
+        public string PresetDescription { get; set; }\r
+\r
+        /// <summary>\r
+        /// Gets or sets PresetName.\r
+        /// </summary>\r
+        public string PresetName { get; set; }\r
+\r
+        /// <summary>\r
+        /// Gets or sets Type.\r
+        /// </summary>\r
+        public string Type { get; set; }\r
+\r
+        /// <summary>\r
+        /// Gets or sets a value indicating whether UsesMaxPictureSettings.\r
+        /// </summary>\r
+        public bool UsesMaxPictureSettings { get; set; }\r
+\r
+        /// <summary>\r
+        /// Gets or sets a value indicating whether UsesPictureFilters.\r
+        /// </summary>\r
+        public bool UsesPictureFilters { get; set; }\r
+\r
+        /// <summary>\r
+        /// Gets or sets a value indicating whether UsesPictureSettings.\r
+        /// </summary>\r
+        public bool UsesPictureSettings { get; set; }\r
         #endregion\r
     }\r
 }\r
index 81d665e..2ec98aa 100644 (file)
@@ -11,6 +11,36 @@ namespace HandBrake.ApplicationServices.Model.Encoding
     public class Cropping\r
     {\r
         /// <summary>\r
+        /// Initializes a new instance of the <see cref="Cropping"/> class. \r
+        /// </summary>\r
+        public Cropping()\r
+        {\r
+        }\r
+\r
+        /// <summary>\r
+        /// Initializes a new instance of the <see cref="Cropping"/> class. \r
+        /// </summary>\r
+        /// <param name="top">\r
+        /// The Top Value\r
+        /// </param>\r
+        /// <param name="bottom">\r
+        /// The Bottom Value\r
+        /// </param>\r
+        /// <param name="left">\r
+        /// The Left Value\r
+        /// </param>\r
+        /// <param name="right">\r
+        /// The Right Value\r
+        /// </param>\r
+        public Cropping(int top, int bottom, int left, int right)\r
+        {\r
+            this.Top = top;\r
+            this.Bottom = bottom;\r
+            this.Left = left;\r
+            this.Right = right;\r
+        }\r
+\r
+        /// <summary>\r
         /// Gets or sets Top.\r
         /// </summary>\r
         public int Top { get; set; }\r
@@ -29,28 +59,5 @@ namespace HandBrake.ApplicationServices.Model.Encoding
         /// Gets or sets Right.\r
         /// </summary>\r
         public int Right { get; set; }\r
-\r
-        /// <summary>\r
-        /// Create a cropping object\r
-        /// </summary>\r
-        /// <param name="top">\r
-        /// The top.\r
-        /// </param>\r
-        /// <param name="bottom">\r
-        /// The bottom.\r
-        /// </param>\r
-        /// <param name="left">\r
-        /// The left.\r
-        /// </param>\r
-        /// <param name="right">\r
-        /// The right.\r
-        /// </param>\r
-        /// <returns>\r
-        /// A Cropping object\r
-        /// </returns>\r
-        public static Cropping CreateCroppingObject(int top, int bottom, int left, int right)\r
-        {\r
-            return new Cropping { Top = top, Bottom = bottom, Left = left, Right = right };\r
-        }\r
     }\r
 }\r
index 1544289..38dadd0 100644 (file)
@@ -14,6 +14,7 @@ namespace HandBrake.ApplicationServices.Model.Encoding
         Fast,\r
         Slow,\r
         Slower,\r
+        Slowest,\r
         Custom\r
     }\r
 }\r
diff --git a/win/C#/HandBrake.ApplicationServices/Model/Encoding/FramerateMode.cs b/win/C#/HandBrake.ApplicationServices/Model/Encoding/FramerateMode.cs
new file mode 100644 (file)
index 0000000..508e63c
--- /dev/null
@@ -0,0 +1,17 @@
+/*  VideoEncoderMode.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.Model.Encoding\r
+{\r
+    /// <summary>\r
+    /// The Mode of Video Encoding. CFR, VFR, PFR\r
+    /// </summary>\r
+    public enum FramerateMode\r
+    {\r
+        CFR = 0,\r
+        PFR,\r
+        VFR\r
+    }\r
+}\r
@@ -1,4 +1,4 @@
-/*  VideoEncoderMode.cs $\r
+/*  VideoEncoderRateMode.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
@@ -8,7 +8,7 @@ namespace HandBrake.ApplicationServices.Model.Encoding
     /// <summary>\r
     /// The Mode of Video Encoding. Bitrate, Filesize or Quality\r
     /// </summary>\r
-    public enum VideoEncodeMode\r
+    public enum VideoEncodeRateMode\r
     {\r
         TargetSize = 0,\r
         AverageBitrate,\r
index ea27ffd..6f200e4 100644 (file)
@@ -261,18 +261,18 @@ namespace HandBrake.ApplicationServices.Services
             {\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
+                        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
+                            new Cropping(\r
+                            title.AutoCropDimensions.Top, \r
+                            title.AutoCropDimensions.Bottom, \r
+                            title.AutoCropDimensions.Left, \r
+                            title.AutoCropDimensions.Right), \r
                         Fps = title.Framerate\r
                     };\r
 \r
index c3dacb6..fc44b95 100644 (file)
@@ -6,12 +6,13 @@
 namespace HandBrake.ApplicationServices.Utilities\r
 {\r
     using System;\r
-    using System.Collections;\r
+    using System.Collections.Generic;\r
     using System.IO;\r
     using System.Text;\r
     using System.Windows.Forms;\r
     using System.Xml;\r
 \r
+    using HandBrake.ApplicationServices.Functions;\r
     using HandBrake.ApplicationServices.Model;\r
     using HandBrake.ApplicationServices.Model.Encoding;\r
 \r
@@ -24,23 +25,23 @@ namespace HandBrake.ApplicationServices.Utilities
          * TODO:\r
          * - Update with the new vfr,pfr,cfr keys\r
          * - Clean up this code, it's pretty nasty right now.\r
-         **/ \r
+         **/\r
 \r
         #region Import\r
 \r
-        public static QueryParserUtility Import(string filename)\r
+        public static EncodeTask Import(string filename)\r
         {\r
             XmlNode root = loadFile(filename);\r
             if (root == null) return null;\r
 \r
             // We'll query a query parser object and use it's public var structures to store all the data.\r
             // This will allow the preset loader logic to be used instead of writing custom logic just for this file.\r
-            QueryParserUtility queryParsed = new QueryParserUtility();\r
+            EncodeTask parsed = new EncodeTask();\r
             string qualityMode = string.Empty;\r
 \r
             #region Get a List of Audio Track Objects\r
             XmlNode audioListDict = root.ChildNodes[2].ChildNodes[0].FirstChild.ChildNodes[1];\r
-            ArrayList audioTracks = new ArrayList();\r
+            List<AudioTrack> audioTracks = new List<AudioTrack>();\r
 \r
             for (int i = 0; i < audioListDict.ChildNodes.Count; i++)\r
             {\r
@@ -75,7 +76,7 @@ namespace HandBrake.ApplicationServices.Utilities
                     }\r
                 }\r
                 audioTracks.Add(track);\r
-                queryParsed.AudioInformation = audioTracks;\r
+                parsed.AudioTracks = audioTracks;\r
             }\r
             #endregion\r
 \r
@@ -93,16 +94,16 @@ namespace HandBrake.ApplicationServices.Utilities
                 {\r
                     // Output Settings\r
                     case "FileFormat":\r
-                        queryParsed.Format = value;\r
+                        parsed.OutputFormat = Converters.GetFileFormat(value);\r
                         break;\r
                     case "Mp4HttpOptimize":\r
-                        queryParsed.OptimizeMP4 = value == "1";\r
+                        parsed.OptimizeMP4 = value == "1";\r
                         break;\r
                     case "Mp4LargeFile":\r
-                        queryParsed.LargeMP4 = value == "1";\r
+                        parsed.IPod5GSupport = value == "1";\r
                         break;\r
                     case "Mp4iPodCompatible":\r
-                        queryParsed.IpodAtom = value == "1";\r
+                        parsed.IPod5GSupport = value == "1";\r
                         break;\r
 \r
                     // Picture Settings\r
@@ -110,42 +111,58 @@ namespace HandBrake.ApplicationServices.Utilities
                         // Not used\r
                         break;\r
                     case "PictureTopCrop":\r
-                        queryParsed.CropTop = value;\r
+                        parsed.Cropping.Top = int.Parse(value);\r
                         break;\r
                     case "PictureBottomCrop":\r
-                        queryParsed.CropBottom = value;\r
+                        parsed.Cropping.Bottom = int.Parse(value);\r
                         break;\r
                     case "PictureLeftCrop":\r
-                        queryParsed.CropLeft = value;\r
+                        parsed.Cropping.Left = int.Parse(value);\r
                         break;\r
                     case "PictureRightCrop":\r
-                        queryParsed.CropRight = value;\r
+                        parsed.Cropping.Right = int.Parse(value);\r
                         break;\r
                     case "PictureHeight":\r
-                        queryParsed.Height = int.Parse(value);\r
+                        parsed.Height = int.Parse(value);\r
                         break;\r
                     case "PictureWidth":\r
-                        queryParsed.Width = int.Parse(value);\r
+                        parsed.Width = int.Parse(value);\r
                         break;\r
                     case "PictureKeepRatio":\r
-                        queryParsed.KeepDisplayAsect = value == "1";\r
+                        parsed.KeepDisplayAspect = value == "1";\r
                         break;\r
                     case "PicturePAR":\r
-                        queryParsed.AnamorphicMode = int.Parse(value);\r
+                        switch (value)\r
+                        {\r
+                                \r
+                            case "0":\r
+                                parsed.Anamorphic = Anamorphic.None;\r
+                                break;\r
+                            default:\r
+                                parsed.Anamorphic = Anamorphic.Strict;\r
+                                break;\r
+                                case "2":\r
+                                parsed.Anamorphic = Anamorphic.Loose;\r
+                                break;\r
+                                case "3":\r
+                                parsed.Anamorphic = Anamorphic.Custom;\r
+                                break;\r
+\r
+                        }\r
                         break;\r
 \r
                     // Filters\r
                     case "PictureDeblock":\r
-                        queryParsed.DeBlock = int.Parse(value);\r
+                        parsed.Deblock = int.Parse(value);\r
                         break;\r
                     case "PictureDecomb":\r
-                        queryParsed.Decomb = "Off";\r
+                        parsed.Decomb = Decomb.Off;\r
                         // Don't place custom here as it's handled in the filter panel\r
-                        if (value == "2") queryParsed.Decomb = "Default";\r
+                        if (value == "2") parsed.Decomb = Decomb.Default;\r
                         break;\r
                     case "PictureDecombCustom":\r
                         if (value != string.Empty)\r
-                            queryParsed.Decomb = value;\r
+                            parsed.CustomDecomb = value;\r
                         break;\r
                     case "PictureDecombDeinterlace":\r
                         // Not Used\r
@@ -154,116 +171,116 @@ namespace HandBrake.ApplicationServices.Utilities
                         switch (value)\r
                         {\r
                             case "0":\r
-                                queryParsed.DeInterlace = "Off";\r
+                                parsed.Deinterlace = Deinterlace.Off;\r
                                 break;\r
                             // Don't place custom here as it's handled in the filter panel\r
                             case "2":\r
-                                queryParsed.DeInterlace = "Fast";\r
+                                parsed.Deinterlace = Deinterlace.Fast;\r
                                 break;\r
                             case "3":\r
-                                queryParsed.DeInterlace = "Slow";\r
+                                parsed.Deinterlace = Deinterlace.Slow;\r
                                 break;\r
                             case "4":\r
-                                queryParsed.DeInterlace = "Slowest";\r
+                                parsed.Deinterlace = Deinterlace.Slower;\r
                                 break;\r
                         }\r
                         break;\r
                     case "PictureDeinterlaceCustom":\r
                         if (value != string.Empty)\r
-                            queryParsed.DeInterlace = value;\r
+                            parsed.CustomDeinterlace = value;\r
                         break;\r
                     case "PictureDenoise":\r
                         switch (value)\r
                         {\r
                             case "0":\r
-                                queryParsed.DeNoise = "Off";\r
+                                parsed.Denoise = Denoise.Off;\r
                                 break;\r
                             // Don't place custom here as it's handled in the filter panel\r
                             case "2":\r
-                                queryParsed.DeNoise = "Weak";\r
+                                parsed.Denoise = Denoise.Weak;\r
                                 break;\r
                             case "3":\r
-                                queryParsed.DeNoise = "Medium";\r
+                                parsed.Denoise = Denoise.Medium;\r
                                 break;\r
                             case "4":\r
-                                queryParsed.DeNoise = "Strong";\r
+                                parsed.Denoise = Denoise.Strong;\r
                                 break;\r
                         }\r
 \r
                         break;\r
                     case "PictureDenoiseCustom":\r
                         if (value != string.Empty)\r
-                            queryParsed.DeNoise = value;\r
+                            parsed.CustomDenoise = value;\r
                         break;\r
                     case "PictureDetelecine":\r
-                        queryParsed.DeTelecine = "Off";\r
-                        if (value == "1") queryParsed.DeTelecine = "Default";\r
+                        parsed.Detelecine = Detelecine.Off;\r
+                        if (value == "1") parsed.Detelecine = Detelecine.Default;\r
                         break;\r
                     case "PictureDetelecineCustom":\r
                         if (value != string.Empty)\r
-                            queryParsed.DeTelecine = value;\r
+                            parsed.CustomDetelecine = value;\r
                         break;\r
 \r
                     // Video Tab\r
                     case "VideoAvgBitrate":\r
-                        queryParsed.AverageVideoBitrate = value;\r
+                        parsed.VideoBitrate = int.Parse(value);\r
                         break;\r
                     case "VideoEncoder":\r
-                        queryParsed.VideoEncoder = value;\r
+                        parsed.VideoEncoder = Converters.GetVideoEncoder(value);\r
                         break;\r
                     case "VideoFramerate":\r
-                        queryParsed.VideoFramerate = value;\r
+                        parsed.Framerate = int.Parse(value);\r
                         break;\r
                     case "VideoGrayScale":\r
-                        queryParsed.Grayscale = value == "1";\r
+                        parsed.Grayscale = value == "1";\r
                         break;\r
                     case "VideoQualitySlider":\r
-                        queryParsed.VideoQuality = float.Parse(value);\r
+                        parsed.Quality = double.Parse(value);\r
                         break;\r
                     case "VideoQualityType": // The Type of Quality Mode used\r
                         qualityMode = value;\r
                         break;\r
                     case "VideoTargetSize":\r
-                        queryParsed.VideoTargetSize = value;\r
+                        parsed.TargetSize = int.Parse(value);\r
                         break;\r
                     case "VideoTurboTwoPass":\r
-                        queryParsed.TurboFirstPass = value == "1";\r
+                        parsed.TurboFirstPass = value == "1";\r
                         break;\r
                     case "VideoTwoPass":\r
-                        queryParsed.TwoPass = value == "1";\r
+                        parsed.TwoPass = value == "1";\r
                         break;\r
 \r
                     // Chapter Markers Tab\r
                     case "ChapterMarkers":\r
-                        queryParsed.ChapterMarkers = value == "1";\r
+                        parsed.IncludeChapterMarkers = value == "1";\r
                         break;\r
 \r
                     // Advanced x264 tab\r
                     case "x264Option":\r
-                        queryParsed.H264Query = value;\r
+                        parsed.X264Options = value;\r
                         break;\r
 \r
                     // Preset Information\r
                     case "PresetBuildNumber":\r
-                        queryParsed.PresetBuildNumber = int.Parse(value);\r
+                        parsed.PresetBuildNumber = int.Parse(value);\r
                         break;\r
                     case "PresetDescription":\r
-                        queryParsed.PresetDescription = value;\r
+                        parsed.PresetDescription = value;\r
                         break;\r
                     case "PresetName":\r
-                        queryParsed.PresetName = value;\r
+                        parsed.PresetName = value;\r
                         break;\r
                     case "Type":\r
-                        queryParsed.Type = value;\r
+                        parsed.Type = value;\r
                         break;\r
                     case "UsesMaxPictureSettings":\r
-                        queryParsed.UsesMaxPictureSettings = value == "1";\r
+                        parsed.UsesMaxPictureSettings = value == "1";\r
                         break;\r
                     case "UsesPictureFilters":\r
-                        queryParsed.UsesPictureFilters = value == "1";\r
+                        parsed.UsesPictureFilters = value == "1";\r
                         break;\r
                     case "UsesPictureSettings":\r
-                        queryParsed.UsesPictureSettings = value == "1";\r
+                        parsed.UsesPictureSettings = value == "1";\r
                         break;\r
                 }\r
             }\r
@@ -272,21 +289,21 @@ namespace HandBrake.ApplicationServices.Utilities
             switch (qualityMode)\r
             {\r
                 case "0": // FileSize\r
-                    queryParsed.VideoQuality = -1;\r
-                    queryParsed.AverageVideoBitrate = null;\r
+                    parsed.Quality = null;\r
+                    parsed.VideoBitrate = null;\r
                     break;\r
                 case "1": // Avg Bitrate\r
-                    queryParsed.VideoQuality = -1;\r
-                    queryParsed.VideoTargetSize = null;\r
+                    parsed.Quality = null;\r
+                    parsed.TargetSize = null;\r
                     break;\r
                 case "2": // CQ\r
-                    queryParsed.AverageVideoBitrate = null;\r
-                    queryParsed.VideoTargetSize = null;\r
+                    parsed.VideoBitrate = null;\r
+                    parsed.TargetSize = null;\r
                     break;\r
             }\r
             #endregion\r
 \r
-            return queryParsed;\r
+            return parsed;\r
         }\r
 \r
         private static XmlNode loadFile(string filename)\r
@@ -343,7 +360,7 @@ namespace HandBrake.ApplicationServices.Utilities
         /// </param>\r
         public static void Export(string path, Preset preset)\r
         {\r
-            QueryParserUtility parsed = QueryParserUtility.Parse(preset.Query);\r
+            EncodeTask parsed = QueryParserUtility.Parse(preset.Query);\r
             XmlTextWriter xmlWriter = new XmlTextWriter(path, Encoding.UTF8) { Formatting = Formatting.Indented };\r
 \r
             // Header\r
@@ -379,7 +396,7 @@ namespace HandBrake.ApplicationServices.Utilities
         /// <param name="preset">\r
         /// The preset.\r
         /// </param>\r
-        private static void WritePreset(XmlTextWriter xmlWriter, QueryParserUtility parsed, Preset preset)\r
+        private static void WritePreset(XmlTextWriter xmlWriter, EncodeTask parsed, Preset preset)\r
         {\r
             xmlWriter.WriteStartElement("dict");\r
             AudioListArrayDict(xmlWriter, parsed);\r
@@ -400,93 +417,93 @@ namespace HandBrake.ApplicationServices.Utilities
         /// <param name="preset">\r
         /// The preset.\r
         /// </param>\r
-        private static void AddEncodeSettings(XmlTextWriter xmlWriter, QueryParserUtility parsed, Preset preset)\r
+        private static void AddEncodeSettings(XmlTextWriter xmlWriter, EncodeTask parsed, Preset preset)\r
         {\r
-            AddEncodeElement(xmlWriter, "ChapterMarkers", "integer", parsed.ChapterMarkers ? "1" : "0");\r
+            AddEncodeElement(xmlWriter, "ChapterMarkers", "integer", parsed.IncludeChapterMarkers ? "1" : "0");\r
             AddEncodeElement(xmlWriter, "Default", "integer", "0");\r
-            AddEncodeElement(xmlWriter, "FileFormat", "string", parsed.Format.ToUpper() + " file");\r
+            AddEncodeElement(xmlWriter, "FileFormat", "string", Converters.GetFileFormat(parsed.OutputFormat) + " file");\r
             AddBooleanElement(xmlWriter, "Folder", false);\r
             AddEncodeElement(xmlWriter, "Mp4HttpOptimize", "integer", parsed.OptimizeMP4 ? "1" : "0");\r
-            AddEncodeElement(xmlWriter, "Mp4LargeFile", "integer", parsed.LargeMP4 ? "1" : "0");\r
-            AddEncodeElement(xmlWriter, "Mp4iPodCompatible", "integer", parsed.IpodAtom ? "1" : "0");\r
+            AddEncodeElement(xmlWriter, "Mp4LargeFile", "integer", parsed.LargeFile ? "1" : "0");\r
+            AddEncodeElement(xmlWriter, "Mp4iPodCompatible", "integer", parsed.IPod5GSupport ? "1" : "0");\r
             AddEncodeElement(xmlWriter, "PictureAutoCrop", "integer", "1");\r
-            AddEncodeElement(xmlWriter, "PictureBottomCrop", "integer", parsed.CropBottom);\r
+            AddEncodeElement(xmlWriter, "PictureBottomCrop", "integer", parsed.Cropping.Bottom.ToString());\r
 \r
             // Filters\r
-            AddEncodeElement(xmlWriter, "PictureDeblock", "integer", parsed.DeBlock.ToString());\r
+            AddEncodeElement(xmlWriter, "PictureDeblock", "integer", parsed.Deblock.ToString());\r
 \r
             switch (parsed.Decomb)\r
             {\r
-                case "Off":\r
+                case Decomb.Off:\r
                     AddEncodeElement(xmlWriter, "PictureDecomb", "integer", "0");\r
                     AddEncodeElement(xmlWriter, "PictureDecombCustom", "string", string.Empty);\r
                     break;\r
-                case "Default":\r
+                case Decomb.Default:\r
                     AddEncodeElement(xmlWriter, "PictureDecomb", "integer", "1");\r
                     AddEncodeElement(xmlWriter, "PictureDecombCustom", "string", string.Empty);\r
                     break;\r
                 default:\r
                     AddEncodeElement(xmlWriter, "PictureDecomb", "integer", "2");\r
-                    AddEncodeElement(xmlWriter, "PictureDecombCustom", "string", parsed.Decomb);\r
+                    AddEncodeElement(xmlWriter, "PictureDecombCustom", "string", parsed.CustomDecomb);\r
                     break;\r
             }\r
-            AddEncodeElement(xmlWriter, "PictureDecombDeinterlace", "integer", parsed.Decomb != "Off" ? "0" : "1"); \r
+            AddEncodeElement(xmlWriter, "PictureDecombDeinterlace", "integer", parsed.Decomb != Decomb.Off ? "0" : "1");\r
 \r
-            switch (parsed.DeInterlace)\r
+            switch (parsed.Deinterlace)\r
             {\r
-                case "Off":\r
+                case Deinterlace.Off:\r
                     AddEncodeElement(xmlWriter, "PictureDeinterlace", "integer", "0");\r
                     AddEncodeElement(xmlWriter, "PictureDeinterlaceCustom", "string", string.Empty);\r
                     break;\r
-                case "Fast":\r
+                case Deinterlace.Fast:\r
                     AddEncodeElement(xmlWriter, "PictureDeinterlace", "integer", "1");\r
                     AddEncodeElement(xmlWriter, "PictureDeinterlaceCustom", "string", string.Empty);\r
                     break;\r
-                case "Slow":\r
+                case Deinterlace.Slow:\r
                     AddEncodeElement(xmlWriter, "PictureDeinterlace", "integer", "2");\r
                     AddEncodeElement(xmlWriter, "PictureDeinterlaceCustom", "string", string.Empty);\r
                     break;\r
-                case "Slower":\r
+                case Deinterlace.Slower:\r
                     AddEncodeElement(xmlWriter, "PictureDeinterlace", "integer", "3");\r
                     AddEncodeElement(xmlWriter, "PictureDeinterlaceCustom", "string", string.Empty);\r
                     break;\r
                 default:\r
                     AddEncodeElement(xmlWriter, "PictureDeinterlace", "integer", "4");\r
-                    AddEncodeElement(xmlWriter, "PictureDeinterlaceCustom", "string", parsed.DeInterlace);\r
+                    AddEncodeElement(xmlWriter, "PictureDeinterlaceCustom", "string", parsed.CustomDeinterlace);\r
                     break;\r
             }\r
 \r
-            switch (parsed.DeNoise)\r
+            switch (parsed.Denoise)\r
             {\r
-                case "Off":\r
+                case Denoise.Off:\r
                     AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "0");\r
                     AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", string.Empty);\r
                     break;\r
-                case "Weak":\r
+                case Denoise.Weak:\r
                     AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "1");\r
                     AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", string.Empty);\r
                     break;\r
-                case "Medium":\r
+                case Denoise.Medium:\r
                     AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "2");\r
                     AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", string.Empty);\r
                     break;\r
-                case "Strong":\r
+                case Denoise.Strong:\r
                     AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "3");\r
                     AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", string.Empty);\r
                     break;\r
                 default:\r
                     AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "4");\r
-                    AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", parsed.DeNoise);\r
+                    AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", parsed.CustomDenoise);\r
                     break;\r
             }\r
 \r
             int detelecine;\r
-            switch (parsed.DeTelecine)\r
+            switch (parsed.Detelecine)\r
             {\r
-                case "Off":\r
+                case Detelecine.Off:\r
                     detelecine = 0;\r
                     break;\r
-                case "Default":\r
+                case Detelecine.Default:\r
                     detelecine = 2;\r
                     break;\r
                 default:\r
@@ -495,16 +512,16 @@ namespace HandBrake.ApplicationServices.Utilities
             }\r
 \r
             AddEncodeElement(xmlWriter, "PictureDetelecine", "integer", detelecine.ToString());\r
-            AddEncodeElement(xmlWriter, "PictureDetelecineCustom", "string", detelecine == 1 ? parsed.DeTelecine : string.Empty);\r
+            AddEncodeElement(xmlWriter, "PictureDetelecineCustom", "string", detelecine == 1 ? parsed.CustomDecomb : string.Empty);\r
 \r
             // Picture Settings\r
             AddEncodeElement(xmlWriter, "PictureHeight", "integer", parsed.Height.ToString());\r
-            AddEncodeElement(xmlWriter, "PictureKeepRatio", "integer", parsed.KeepDisplayAsect ? "1" : "0");\r
-            AddEncodeElement(xmlWriter, "PictureLeftCrop", "integer", parsed.CropLeft);\r
-            AddEncodeElement(xmlWriter, "PictureModulus", "integer", parsed.AnamorphicModulus.ToString());\r
-            AddEncodeElement(xmlWriter, "PicturePAR", "integer", parsed.AnamorphicMode.ToString());\r
-            AddEncodeElement(xmlWriter, "PictureRightCrop", "integer", parsed.CropRight);\r
-            AddEncodeElement(xmlWriter, "PictureTopCrop", "integer", parsed.CropTop);\r
+            AddEncodeElement(xmlWriter, "PictureKeepRatio", "integer", parsed.KeepDisplayAspect ? "1" : "0");\r
+            AddEncodeElement(xmlWriter, "PictureLeftCrop", "integer", parsed.Cropping.Left.ToString());\r
+            AddEncodeElement(xmlWriter, "PictureModulus", "integer", parsed.Modulus.ToString());\r
+            AddEncodeElement(xmlWriter, "PicturePAR", "integer", ((int)parsed.Anamorphic).ToString());\r
+            AddEncodeElement(xmlWriter, "PictureRightCrop", "integer", parsed.Cropping.Right.ToString());\r
+            AddEncodeElement(xmlWriter, "PictureTopCrop", "integer", parsed.Cropping.Top.ToString());\r
             AddEncodeElement(xmlWriter, "PictureWidth", "integer", parsed.Width.ToString());\r
 \r
             // Preset Information\r
@@ -519,25 +536,25 @@ namespace HandBrake.ApplicationServices.Utilities
             AddEncodeElement(xmlWriter, "UsesPictureSettings", "integer", "2");\r
 \r
             // Video Settings\r
-            AddEncodeElement(xmlWriter, "VideoAvgBitrate", "string", parsed.AverageVideoBitrate);\r
-            AddEncodeElement(xmlWriter, "VideoEncoder", "string", parsed.VideoEncoder);\r
-            AddEncodeElement(xmlWriter, "VideoFramerate", "string", parsed.VideoFramerate);\r
-            AddEncodeElement(xmlWriter, "VideFrameratePFR", "integer", parsed.Pfr ? "1" : "0");\r
+            AddEncodeElement(xmlWriter, "VideoAvgBitrate", "string", parsed.VideoBitrate.ToString());\r
+            AddEncodeElement(xmlWriter, "VideoEncoder", "string", Converters.GetGUIVideoEncoder(parsed.VideoEncoder));\r
+            AddEncodeElement(xmlWriter, "VideoFramerate", "string", parsed.Framerate.ToString());\r
+            AddEncodeElement(xmlWriter, "VideFrameratePFR", "integer", parsed.FramerateMode == FramerateMode.PFR ? "1" : "0");\r
             AddEncodeElement(xmlWriter, "VideoGrayScale", "integer", parsed.Grayscale ? "1" : "0");\r
-            AddEncodeElement(xmlWriter, "VideoQualitySlider", "real", parsed.VideoQuality.ToString());\r
+            AddEncodeElement(xmlWriter, "VideoQualitySlider", "real", parsed.Quality.ToString());\r
 \r
             int videoQualityType = 0;\r
-            if (!string.IsNullOrEmpty(parsed.VideoTargetSize)) videoQualityType = 0;\r
-            else if (!string.IsNullOrEmpty(parsed.AverageVideoBitrate)) videoQualityType = 1;\r
-            else if (parsed.VideoQuality != 0) videoQualityType = 2;\r
+            if (parsed.TargetSize != null) videoQualityType = 0;\r
+            else if (parsed.VideoBitrate != null) videoQualityType = 1;\r
+            else if (parsed.Quality != null) videoQualityType = 2;\r
 \r
             AddEncodeElement(xmlWriter, "VideoQualityType", "integer", videoQualityType.ToString());\r
-            AddEncodeElement(xmlWriter, "VideoTargetSize", "string", parsed.VideoTargetSize);\r
+            AddEncodeElement(xmlWriter, "VideoTargetSize", "string", parsed.TargetSize.ToString());\r
             AddEncodeElement(xmlWriter, "VideoTurboTwoPass", "integer", parsed.TurboFirstPass ? "1" : "0");\r
             AddEncodeElement(xmlWriter, "VideoTwoPass", "integer", parsed.TwoPass ? "1" : "0");\r
 \r
             // x264 string\r
-            AddEncodeElement(xmlWriter, "x264Option", "string", parsed.H264Query);\r
+            AddEncodeElement(xmlWriter, "x264Option", "string", parsed.X264Options);\r
         }\r
 \r
         /// <summary>\r
@@ -598,14 +615,14 @@ namespace HandBrake.ApplicationServices.Utilities
         /// <param name="parsed">\r
         /// The parsed.\r
         /// </param>\r
-        private static void AudioListArrayDict(XmlTextWriter xmlWriter, QueryParserUtility parsed)\r
+        private static void AudioListArrayDict(XmlTextWriter xmlWriter, EncodeTask parsed)\r
         {\r
             xmlWriter.WriteStartElement("key");\r
             xmlWriter.WriteString("AudioList");\r
             xmlWriter.WriteEndElement();\r
 \r
             xmlWriter.WriteStartElement("array");\r
-            foreach (AudioTrack track in parsed.AudioInformation)\r
+            foreach (AudioTrack track in parsed.AudioTracks)\r
             {\r
                 AddAudioItem(xmlWriter, track);\r
             }\r
@@ -635,7 +652,7 @@ namespace HandBrake.ApplicationServices.Utilities
             xmlWriter.WriteElementString("string", audioTrack.MixDown);\r
 \r
             xmlWriter.WriteElementString("key", "AudioSamplerate");\r
-            xmlWriter.WriteElementString("string",  audioTrack.SampleRate);\r
+            xmlWriter.WriteElementString("string", audioTrack.SampleRate);\r
 \r
             xmlWriter.WriteElementString("key", "AudioTrack");\r
             xmlWriter.WriteElementString("integer", audioTrack.Track);\r
index 9f5f93d..3fb6a0e 100644 (file)
@@ -7,10 +7,12 @@ namespace HandBrake.ApplicationServices.Utilities
 {\r
     using System;\r
     using System.Collections;\r
+    using System.Collections.Generic;\r
     using System.Globalization;\r
     using System.Text.RegularExpressions;\r
 \r
     using HandBrake.ApplicationServices.Functions;\r
+    using HandBrake.ApplicationServices.Model;\r
     using HandBrake.ApplicationServices.Model.Encoding;\r
 \r
     /// <summary>\r
@@ -18,280 +20,16 @@ namespace HandBrake.ApplicationServices.Utilities
     /// </summary>\r
     public class QueryParserUtility\r
     {\r
-        /// <summary>\r
-        /// The Culture\r
-        /// </summary>\r
-        private static readonly CultureInfo Culture = new CultureInfo("en-US", false);\r
-\r
-        #region Varibles\r
-\r
-        #region Source Title / Chapters\r
-        /// <summary>\r
-        /// Gets or sets Title.\r
-        /// </summary>\r
-        public int Title { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets ChapterStart.\r
-        /// </summary>\r
-        public int ChapterStart { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets ChapterFinish.\r
-        /// </summary>\r
-        public int ChapterFinish { get; set; }\r
-        #endregion\r
-\r
-        #region Output Settings\r
-        /// <summary>\r
-        /// Gets or sets the file Format. e.g mkv or mp4\r
-        /// </summary>\r
-        public string Format { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets a value indicating whether LargeMP4 support is enabled.\r
-        /// This is the 64bit MP4 file that allows >4GB files\r
-        /// </summary>\r
-        public bool LargeMP4 { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets a value indicating whether IpodAtom is inserted\r
-        /// </summary>\r
-        public bool IpodAtom { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets a value indicating whether OptimizeMP4 is enabed for web streaming\r
-        /// </summary>\r
-        public bool OptimizeMP4 { get; set; }\r
-        #endregion\r
-\r
-        #region Picture Settings\r
-\r
-        /// <summary>\r
-        /// Gets or sets Width.\r
-        /// </summary>\r
-        public int Width { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets Height.\r
-        /// </summary>\r
-        public int Height { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets MaxWidth.\r
-        /// </summary>\r
-        public int MaxWidth { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets MaxHeight.\r
-        /// </summary>\r
-        public int MaxHeight { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets CropValues.\r
-        /// </summary>\r
-        public string CropValues { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets CropTop.\r
-        /// </summary>\r
-        public string CropTop { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets CropBottom.\r
-        /// </summary>\r
-        public string CropBottom { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets CropLeft.\r
-        /// </summary>\r
-        public string CropLeft { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets CropRight.\r
-        /// </summary>\r
-        public string CropRight { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets AnamorphicMode.\r
-        /// </summary>\r
-        public int AnamorphicMode { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets a value indicating whether KeepDisplayAsect.\r
-        /// </summary>\r
-        public bool KeepDisplayAsect { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets DisplayWidthValue.\r
-        /// </summary>\r
-        public double DisplayWidthValue { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets PixelAspectWidth.\r
-        /// </summary>\r
-        public int PixelAspectWidth { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets PixelAspectHeight.\r
-        /// </summary>\r
-        public int PixelAspectHeight { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets AnamorphicModulus.\r
-        /// </summary>\r
-        public int AnamorphicModulus { get; set; }\r
-        #endregion\r
-\r
-        #region Video Filters\r
-\r
-        /// <summary>\r
-        /// Gets or sets DeTelecine.\r
-        /// </summary>\r
-        public string DeTelecine { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets DeBlock.\r
-        /// </summary>\r
-        public int DeBlock { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets DeInterlace.\r
-        /// </summary>\r
-        public string DeInterlace { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets DeNoise.\r
-        /// </summary>\r
-        public string DeNoise { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets Decomb.\r
-        /// </summary>\r
-        public string Decomb { get; set; }\r
-        #endregion\r
-\r
-        #region Video Settings\r
-        /// <summary>\r
-        /// Gets or sets VideoEncoder.\r
-        /// </summary>\r
-        public string VideoEncoder { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets a value indicating whether Grayscale.\r
-        /// </summary>\r
-        public bool Grayscale { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets a value indicating whether TwoPass.\r
-        /// </summary>\r
-        public bool TwoPass { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets a value indicating whether TurboFirstPass.\r
-        /// </summary>\r
-        public bool TurboFirstPass { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets VideoFramerate.\r
-        /// </summary>\r
-        public string VideoFramerate { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets a value indicating whether Pfr.\r
-        /// </summary>\r
-        public bool Pfr { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets AverageVideoBitrate.\r
-        /// </summary>\r
-        public string AverageVideoBitrate { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets VideoTargetSize.\r
-        /// </summary>\r
-        public string VideoTargetSize { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets VideoQuality.\r
-        /// </summary>\r
-        public float VideoQuality { get; set; }\r
-        #endregion\r
-\r
-        #region Audio Settings\r
-\r
-        /// <summary>\r
-        /// Gets or sets AudioInformation.\r
-        /// </summary>\r
-        public ArrayList AudioInformation { get; set; }\r
 \r
-        /// <summary>\r
-        /// Gets or sets Subtitles.\r
-        /// </summary>\r
-        public string Subtitles { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets a value indicating whether ForcedSubtitles.\r
-        /// </summary>\r
-        public bool ForcedSubtitles { get; set; }\r
-        #endregion\r
-\r
-        #region Other\r
-        /// <summary>\r
-        /// Gets or sets a value indicating whether ChapterMarkers.\r
-        /// </summary>\r
-        public bool ChapterMarkers { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets H264Query.\r
-        /// </summary>\r
-        public string H264Query { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets a value indicating whether Verbose.\r
-        /// </summary>\r
-        public bool Verbose { get; set; }\r
-        #endregion\r
-\r
-        #region Preset Information\r
-\r
-        /// <summary>\r
-        /// Gets or sets PresetBuildNumber.\r
-        /// </summary>\r
-        public int PresetBuildNumber { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets PresetDescription.\r
-        /// </summary>\r
-        public string PresetDescription { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets PresetName.\r
-        /// </summary>\r
-        public string PresetName { get; set; }\r
+        /**\r
+         * TODO\r
+         * - Add support for PointToPointMode = Seconds or Frames\r
+         **/\r
 \r
         /// <summary>\r
-        /// Gets or sets Type.\r
-        /// </summary>\r
-        public string Type { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets a value indicating whether UsesMaxPictureSettings.\r
-        /// </summary>\r
-        public bool UsesMaxPictureSettings { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets a value indicating whether UsesPictureFilters.\r
-        /// </summary>\r
-        public bool UsesPictureFilters { get; set; }\r
-\r
-        /// <summary>\r
-        /// Gets or sets a value indicating whether UsesPictureSettings.\r
+        /// The Culture\r
         /// </summary>\r
-        public bool UsesPictureSettings { get; set; }\r
-        #endregion\r
-\r
-        #endregion\r
+        private static readonly CultureInfo Culture = new CultureInfo("en-US", false);\r
 \r
         /// <summary>\r
         /// Takes in a query which can be in any order and parses it. \r
@@ -299,9 +37,9 @@ namespace HandBrake.ApplicationServices.Utilities
         /// </summary>\r
         /// <param name="input">A ClI Query</param>\r
         /// <returns>A Parsed Query</returns>\r
-        public static QueryParserUtility Parse(string input)\r
+        public static EncodeTask Parse(string input)\r
         {\r
-            var thisQuery = new QueryParserUtility();\r
+            var parsed = new EncodeTask();\r
 \r
             #region Regular Expressions\r
 \r
@@ -310,7 +48,7 @@ namespace HandBrake.ApplicationServices.Utilities
             Match chapters = Regex.Match(input, @"-c ([0-9-]*)");\r
 \r
             // Output Settings\r
-            Match format = Regex.Match(input, @"-f ([a-z0-9a-z0-9a-z0-9]*)");\r
+            Match format = Regex.Match(input, @"-f ([a-zA-Z0-9]*)");\r
             Match grayscale = Regex.Match(input, @" -g");\r
             Match largerMp4 = Regex.Match(input, @" -4");\r
             Match ipodAtom = Regex.Match(input, @" -I");\r
@@ -350,6 +88,8 @@ namespace HandBrake.ApplicationServices.Utilities
             Match turboFirstPass = Regex.Match(input, @" -T");\r
             Match optimizeMP4 = Regex.Match(input, @" -O");\r
             Match pfr = Regex.Match(input, @" --pfr");\r
+            Match vfr = Regex.Match(input, @" --vfr");\r
+            Match cfr = Regex.Match(input, @" --cfr");\r
 \r
             // Audio Settings Tab\r
             Match noAudio = Regex.Match(input, @"-a none");\r
@@ -360,10 +100,6 @@ namespace HandBrake.ApplicationServices.Utilities
             Match audioSampleRates = Regex.Match(input, @"-R ([0-9a-zA-Z.,]*)"); // Auto = a-z\r
             Match drcValues = Regex.Match(input, @"-D ([0-9.,]*)");\r
 \r
-            Match subtitles = Regex.Match(input, @"-s ([0-9a-zA-Z]*)");\r
-            Match subScan = Regex.Match(input, @" -U");\r
-            Match forcedSubtitles = Regex.Match(input, @" -F");\r
-\r
             // Chapters Tab\r
             Match chapterMarkers = Regex.Match(input, @" -m");\r
             Match chapterMarkersFileMode = Regex.Match(input, @"--markers");\r
@@ -371,9 +107,6 @@ namespace HandBrake.ApplicationServices.Utilities
             // H264 Tab\r
             Match x264 = Regex.Match(input, @"-x ([.,/a-zA-Z0-9=:-]*)");\r
 \r
-            // Program Options\r
-            Match verbose = Regex.Match(input, @" -v");\r
-\r
             #endregion\r
 \r
             #region Set Varibles\r
@@ -383,170 +116,215 @@ namespace HandBrake.ApplicationServices.Utilities
                 #region Source Tab\r
 \r
                 if (title.Success)\r
-                    thisQuery.Title = int.Parse(title.ToString().Replace("-t ", string.Empty));\r
+                {\r
+                    parsed.Title = int.Parse(title.ToString().Replace("-t ", string.Empty));\r
+                }\r
 \r
                 if (chapters.Success)\r
                 {\r
+                    parsed.PointToPointMode = PointToPointMode.Chapters;\r
                     string[] actTitles = chapters.ToString().Replace("-c ", string.Empty).Split('-');\r
-                    thisQuery.ChapterStart = int.Parse(actTitles[0]);\r
+                    parsed.StartPoint = int.Parse(actTitles[0]);\r
                     if (actTitles.Length > 1)\r
                     {\r
-                        thisQuery.ChapterFinish = int.Parse(actTitles[1]);\r
+                        parsed.EndPoint = int.Parse(actTitles[1]);\r
                     }\r
 \r
-                    if ((thisQuery.ChapterStart == 1) && (thisQuery.ChapterFinish == 0))\r
-                        thisQuery.ChapterFinish = thisQuery.ChapterStart;\r
+                    if ((parsed.StartPoint == 1) && (parsed.EndPoint == 0))\r
+                    {\r
+                        parsed.EndPoint = parsed.StartPoint;\r
+                    }\r
                 }\r
-\r
+             \r
                 #endregion\r
 \r
                 #region Output Settings\r
 \r
                 if (format.Success)\r
-                    thisQuery.Format = format.ToString().Replace("-f ", string.Empty);\r
-                thisQuery.LargeMP4 = largerMp4.Success;\r
-                thisQuery.IpodAtom = ipodAtom.Success;\r
-                thisQuery.OptimizeMP4 = optimizeMP4.Success;\r
+                {\r
+                    parsed.OutputFormat = Converters.GetFileFormat(format.Groups[1].ToString());\r
+                }\r
+                parsed.LargeFile = largerMp4.Success;\r
+                parsed.IPod5GSupport = ipodAtom.Success;\r
+                parsed.OptimizeMP4 = optimizeMP4.Success;\r
 \r
                 #endregion\r
 \r
                 #region Picture Tab\r
 \r
                 if (width.Success)\r
-                    thisQuery.Width = int.Parse(width.Groups[0].Value.Replace("-w ", string.Empty));\r
+                    parsed.Width = int.Parse(width.Groups[0].Value.Replace("-w ", string.Empty));\r
 \r
                 if (height.Success)\r
-                    thisQuery.Height = int.Parse(height.Groups[0].Value.Replace("-l ", string.Empty));\r
+                    parsed.Height = int.Parse(height.Groups[0].Value.Replace("-l ", string.Empty));\r
 \r
                 if (maxWidth.Success)\r
-                    thisQuery.MaxWidth = int.Parse(maxWidth.Groups[0].Value.Replace("-X ", string.Empty));\r
+                    parsed.MaxWidth = int.Parse(maxWidth.Groups[0].Value.Replace("-X ", string.Empty));\r
 \r
                 if (maxHeight.Success)\r
-                    thisQuery.MaxHeight = int.Parse(maxHeight.Groups[0].Value.Replace("-Y ", string.Empty));\r
+                    parsed.MaxHeight = int.Parse(maxHeight.Groups[0].Value.Replace("-Y ", string.Empty));\r
 \r
                 if (crop.Success)\r
                 {\r
-                    thisQuery.CropValues = crop.ToString().Replace("--crop ", string.Empty);\r
-                    string[] actCropValues = thisQuery.CropValues.Split(':');\r
-                    thisQuery.CropTop = actCropValues[0];\r
-                    thisQuery.CropBottom = actCropValues[1];\r
-                    thisQuery.CropLeft = actCropValues[2];\r
-                    thisQuery.CropRight = actCropValues[3];\r
+                    try\r
+                    {\r
+                        string values = crop.ToString().Replace("--crop ", string.Empty);\r
+                        string[] actCropValues = values.Split(':');\r
+                        parsed.Cropping = new Cropping(\r
+                            int.Parse(actCropValues[0]),\r
+                            int.Parse(actCropValues[1]),\r
+                            int.Parse(actCropValues[2]),\r
+                            int.Parse(actCropValues[3]));\r
+                    }\r
+                    catch (Exception)\r
+                    {\r
+                        // No need to do anything.\r
+                    }\r
                 }\r
 \r
                 if (strictAnamorphic.Success)\r
-                    thisQuery.AnamorphicMode = 1;\r
+                    parsed.Anamorphic = Anamorphic.Strict;\r
                 else if (looseAnamorphic.Success)\r
-                    thisQuery.AnamorphicMode = 2;\r
+                    parsed.Anamorphic = Anamorphic.Loose;\r
                 else if (customAnamorphic.Success)\r
-                    thisQuery.AnamorphicMode = 3;\r
+                    parsed.Anamorphic = Anamorphic.Custom;\r
                 else\r
-                    thisQuery.AnamorphicMode = 0;\r
+                    parsed.Anamorphic = Anamorphic.None;\r
 \r
-                thisQuery.KeepDisplayAsect = keepDisplayAsect.Success;\r
+                parsed.KeepDisplayAspect = keepDisplayAsect.Success;\r
 \r
                 if (displayWidth.Success)\r
-                    thisQuery.DisplayWidthValue =\r
+                    parsed.DisplayWidth =\r
                         double.Parse(displayWidth.Groups[0].Value.Replace("--display-width ", string.Empty));\r
 \r
                 if (pixelAspect.Success)\r
-                    thisQuery.PixelAspectWidth = int.Parse(pixelAspect.Groups[1].Value.Replace("--pixel-aspect ", string.Empty));\r
+                    parsed.PixelAspectX = int.Parse(pixelAspect.Groups[1].Value.Replace("--pixel-aspect ", string.Empty));\r
 \r
                 if (pixelAspect.Success && pixelAspect.Groups.Count >= 3)\r
-                    thisQuery.PixelAspectHeight = int.Parse(pixelAspect.Groups[2].Value.Replace("--pixel-aspect ", string.Empty));\r
+                    parsed.PixelAspectY = int.Parse(pixelAspect.Groups[2].Value.Replace("--pixel-aspect ", string.Empty));\r
 \r
                 if (modulus.Success)\r
-                    thisQuery.AnamorphicModulus = int.Parse(modulus.Groups[0].Value.Replace("--modulus ", string.Empty));\r
+                    parsed.Modulus = int.Parse(modulus.Groups[0].Value.Replace("--modulus ", string.Empty));\r
 \r
                 #endregion\r
 \r
                 #region Filters\r
 \r
-                thisQuery.Decomb = "Off";\r
+                parsed.Decomb = Decomb.Off;\r
                 if (decomb.Success)\r
                 {\r
-                    thisQuery.Decomb = "Default";\r
+                    parsed.Decomb = Decomb.Default;\r
                     if (decombValue.Success)\r
-                        thisQuery.Decomb = decombValue.ToString().Replace("--decomb=", string.Empty).Replace("\"", string.Empty);\r
+                    {\r
+                        parsed.CustomDecomb = decombValue.ToString().Replace("--decomb=", string.Empty).Replace("\"", string.Empty);\r
+                    }\r
                 }\r
 \r
-                thisQuery.DeInterlace = "Off";\r
+                parsed.Deinterlace = Deinterlace.Off;\r
                 if (deinterlace.Success)\r
                 {\r
-                    thisQuery.DeInterlace = deinterlace.ToString().Replace("--deinterlace=", string.Empty).Replace("\"", string.Empty);\r
-                    thisQuery.DeInterlace =\r
-                        thisQuery.DeInterlace.Replace("fast", "Fast").Replace("slow", "Slow").Replace("slower", "Slower");\r
-                    thisQuery.DeInterlace = thisQuery.DeInterlace.Replace("slowest", "Slowest");\r
+                    switch (deinterlace.ToString().Replace("--deinterlace=", string.Empty).Replace("\"", string.Empty).ToLower())\r
+                    {\r
+                        case "fast":\r
+                            parsed.Deinterlace = Deinterlace.Fast;\r
+                            break;\r
+                        case "slow":\r
+                            parsed.Deinterlace = Deinterlace.Slow;\r
+                            break;\r
+                        case "slower":\r
+                            parsed.Deinterlace = Deinterlace.Slower;\r
+                            break;\r
+                        case "slowest":\r
+                            parsed.Deinterlace = Deinterlace.Slowest;\r
+                            break;\r
+                        default:\r
+                            parsed.Deinterlace = Deinterlace.Custom;\r
+                            parsed.CustomDeinterlace = deinterlace.ToString().Replace("--deinterlace=", string.Empty).Replace("\"", string.Empty).ToLower();\r
+                            break;\r
+                    }\r
                 }\r
 \r
-                thisQuery.DeNoise = "Off";\r
+                parsed.Denoise = Denoise.Off;\r
                 if (denoise.Success)\r
                 {\r
-                    thisQuery.DeNoise = denoise.ToString().Replace("--denoise=", string.Empty).Replace("\"", string.Empty);\r
-                    thisQuery.DeNoise =\r
-                        thisQuery.DeNoise.Replace("weak", "Weak").Replace("medium", "Medium").Replace("strong", "Strong");\r
+                    switch (denoise.ToString().Replace("--denoise=", string.Empty).Replace("\"", string.Empty))\r
+                    {\r
+                        case "weak":\r
+                            parsed.Denoise = Denoise.Weak;\r
+                            break;\r
+                        case "medium":\r
+                            parsed.Denoise = Denoise.Medium;\r
+                            break;\r
+                        case "strong":\r
+                            parsed.Denoise = Denoise.Strong;\r
+                            break;\r
+                        default:\r
+                            parsed.Denoise = Denoise.Custom;\r
+                            parsed.CustomDenoise = denoise.ToString().Replace("--denoise=", string.Empty).Replace("\"", string.Empty);\r
+                            break;\r
+                    }\r
                 }\r
 \r
-                string deblockValue = string.Empty;\r
-                thisQuery.DeBlock = 0;\r
+                parsed.Deblock = 0;\r
                 if (deblock.Success)\r
-                    deblockValue = deblock.ToString().Replace("--deblock=", string.Empty);\r
-\r
-                int dval = 0;\r
-                if (deblockValue != string.Empty)\r
-                    int.TryParse(deblockValue, out dval);\r
-                thisQuery.DeBlock = dval;\r
+                {\r
+                    int dval;\r
+                    int.TryParse(deblock.ToString().Replace("--deblock=", string.Empty), out dval);\r
+                    parsed.Deblock = dval;\r
+                }\r
 \r
-                thisQuery.DeTelecine = "Off";\r
+                parsed.Detelecine = Detelecine.Off;\r
                 if (detelecine.Success)\r
                 {\r
-                    thisQuery.DeTelecine = "Default";\r
+                    parsed.Detelecine = Detelecine.Default;\r
                     if (detelecineValue.Success)\r
-                        thisQuery.DeTelecine = detelecineValue.ToString().Replace("--detelecine=", string.Empty).Replace("\"", string.Empty);\r
+                    {\r
+                        parsed.CustomDetelecine = detelecineValue.ToString().Replace("--detelecine=", string.Empty).Replace("\"", string.Empty);\r
+                        parsed.Detelecine = Detelecine.Custom;\r
+                    }\r
                 }\r
 \r
                 #endregion\r
 \r
                 #region Video Settings Tab\r
 \r
-                string videoEncoderConvertion = videoEncoder.ToString().Replace("-e ", string.Empty);\r
-                switch (videoEncoderConvertion)\r
+                parsed.VideoEncoder = Converters.GetVideoEncoder(videoEncoder.ToString().Replace("-e ", string.Empty));\r
+\r
+                if (videoFramerate.Success)\r
                 {\r
-                    case "ffmpeg":\r
-                        videoEncoderConvertion = "MPEG-4 (FFmpeg)";\r
-                        break;\r
-                    case "x264":\r
-                        videoEncoderConvertion = "H.264 (x264)";\r
-                        break;\r
-                    case "theora":\r
-                        videoEncoderConvertion = "VP3 (Theora)";\r
-                        break;\r
-                    default:\r
-                        videoEncoderConvertion = "MPEG-4 (FFmpeg)";\r
-                        break;\r
+                    double fps;\r
+                    double.TryParse(videoFramerate.Groups[1].ToString(), out fps);\r
+                    parsed.Framerate = fps;\r
                 }\r
-                thisQuery.VideoEncoder = videoEncoderConvertion;\r
-                thisQuery.VideoFramerate = videoFramerate.Success\r
-                                               ? videoFramerate.ToString().Replace("-r ", string.Empty)\r
-                                               : "Same as source";\r
 \r
-                thisQuery.Pfr = pfr.Success;\r
-                thisQuery.Grayscale = grayscale.Success;\r
-                thisQuery.TwoPass = twoPass.Success;\r
-                thisQuery.TurboFirstPass = turboFirstPass.Success;\r
+                if (pfr.Success)\r
+                    parsed.FramerateMode = FramerateMode.PFR;\r
+                else if (vfr.Success)\r
+                    parsed.FramerateMode = FramerateMode.VFR;\r
+                else if (cfr.Success)\r
+                    parsed.FramerateMode = FramerateMode.CFR;\r
+\r
+                parsed.Grayscale = grayscale.Success;\r
+                parsed.TwoPass = twoPass.Success;\r
+                parsed.TurboFirstPass = turboFirstPass.Success;\r
 \r
                 if (videoBitrate.Success)\r
-                    thisQuery.AverageVideoBitrate = videoBitrate.ToString().Replace("-b ", string.Empty);\r
+                {\r
+                    parsed.VideoEncodeRateType = VideoEncodeRateMode.AverageBitrate;\r
+                    parsed.VideoBitrate = int.Parse(videoBitrate.ToString().Replace("-b ", string.Empty));\r
+                }\r
+\r
                 if (videoFilesize.Success)\r
-                    thisQuery.VideoTargetSize = videoFilesize.ToString().Replace("-S ", string.Empty);\r
+                {\r
+                    parsed.VideoEncodeRateType = VideoEncodeRateMode.TargetSize;\r
+                    parsed.TargetSize = int.Parse(videoBitrate.ToString().Replace("-S ", string.Empty));\r
+                }\r
 \r
                 if (videoQuality.Success)\r
                 {\r
-                    float qConvert = float.Parse(videoQuality.ToString().Replace("-q ", string.Empty), Culture);\r
-                    thisQuery.VideoQuality = qConvert;\r
+                    float quality = float.Parse(videoQuality.ToString().Replace("-q ", string.Empty), Culture);\r
+                    parsed.Quality = quality;\r
                 }\r
-                else\r
-                    thisQuery.VideoQuality = -1;\r
 \r
                 #endregion\r
 \r
@@ -582,7 +360,7 @@ namespace HandBrake.ApplicationServices.Utilities
                     trackDRCvalues = drcValues.ToString().Replace("-D ", string.Empty).Split(',');\r
 \r
                 // Create new Audio Track Classes and store them in the ArrayList\r
-                ArrayList allAudioTrackInfo = new ArrayList();\r
+                List<AudioTrack> allAudioTrackInfo = new List<AudioTrack>();\r
                 for (int x = 0; x < encoderCount; x++)\r
                 {\r
                     AudioTrack track = new AudioTrack();\r
@@ -596,7 +374,7 @@ namespace HandBrake.ApplicationServices.Utilities
 \r
                     if (trackEncoders != null)\r
                         if (trackEncoders.Length >= (x + 1)) // Audio Mix\r
-                            track.Encoder = Converters.GetAudioEncoder(trackEncoders[x].Trim());\r
+                            track.Encoder = Converters.GetGUIAudioEncoder(trackEncoders[x].Trim());\r
 \r
                     if (trackBitrates != null)\r
                         if (trackBitrates.Length >= (x + 1)) // Audio Encoder\r
@@ -612,31 +390,22 @@ namespace HandBrake.ApplicationServices.Utilities
 \r
                     allAudioTrackInfo.Add(track);\r
                 }\r
-                thisQuery.AudioInformation = allAudioTrackInfo;\r
 \r
-                // Subtitle Stuff\r
-                if (subtitles.Success)\r
-                    thisQuery.Subtitles = subtitles.ToString().Replace("-s ", string.Empty);\r
-                else\r
-                    thisQuery.Subtitles = subScan.Success ? "Autoselect" : "None";\r
-\r
-                thisQuery.ForcedSubtitles = forcedSubtitles.Success;\r
+                parsed.AudioTracks = allAudioTrackInfo;\r
 \r
                 #endregion\r
 \r
                 #region Chapters Tab\r
 \r
                 if (chapterMarkersFileMode.Success || chapterMarkers.Success)\r
-                    thisQuery.ChapterMarkers = true;\r
+                    parsed.IncludeChapterMarkers = true;\r
 \r
                 #endregion\r
 \r
                 #region H.264 and other\r
 \r
                 if (x264.Success)\r
-                    thisQuery.H264Query = x264.ToString().Replace("-x ", string.Empty);\r
-\r
-                thisQuery.Verbose = verbose.Success;\r
+                    parsed.X264Options = x264.ToString().Replace("-x ", string.Empty);\r
 \r
                 #endregion\r
             }\r
@@ -647,7 +416,7 @@ namespace HandBrake.ApplicationServices.Utilities
 \r
             #endregion\r
 \r
-            return thisQuery;\r
+            return parsed;\r
         }\r
     }\r
 }
\ No newline at end of file