OSDN Git Service

import 0.9.4
[handbrake-jp/handbrake-jp.git] / win / C# / Functions / QueryParser.cs
index 3e8b18e..7230ad9 100644 (file)
           It may be used under the terms of the GNU General Public License. */\r
 \r
 using System;\r
-using System.Collections.Generic;\r
-using System.Text;\r
+using System.Globalization;\r
 using System.Text.RegularExpressions;\r
 using System.Windows.Forms;\r
+using System.Collections;\r
 \r
 namespace Handbrake.Functions\r
 {\r
-    class QueryParser\r
+    internal class QueryParser\r
     {\r
+        private static readonly CultureInfo Culture = new CultureInfo("en-US", false);\r
 \r
-        // All the Main Window GUI options\r
         #region Varibles\r
 \r
-        #region Source\r
-\r
-        private string q_source;\r
-        /// <summary>\r
-        /// Returns a String \r
-        /// Full path of the source.\r
-        /// </summary>\r
-        public string Source\r
-        {\r
-            get\r
-            {\r
-                return this.q_source;\r
-            }\r
-        }\r
-\r
-        private int q_dvdTitle;\r
-        /// <summary>\r
-        /// Returns an Integer\r
-        /// DVD Title number.\r
-        /// </summary>\r
-        public int DVDTitle\r
-        {\r
-            get\r
-            {\r
-                return this.q_dvdTitle;\r
-            }\r
-        }\r
-\r
-        private int q_chaptersStart;\r
-        /// <summary>\r
-        /// Returns an Int\r
-        /// DVD Chapter number or chapter range.\r
-        /// </summary>\r
-        public int DVDChapterStart\r
-        {\r
-            get\r
-            {\r
-                return this.q_chaptersStart;\r
-            }\r
-        }\r
-\r
-        private int q_chaptersFinish;\r
-        /// <summary>\r
-        /// Returns an Int\r
-        /// DVD Chapter number or chapter range.\r
-        /// </summary>\r
-        public int DVDChapterFinish\r
-        {\r
-            get\r
-            {\r
-                return this.q_chaptersFinish;\r
-            }\r
-        }\r
-#endregion\r
-\r
-        #region Destination\r
-\r
-        private string q_destination;\r
-        /// <summary>\r
-        /// Returns a String \r
-        /// Full path of the destination.\r
-        /// </summary>\r
-        public string Destination\r
-        {\r
-            get\r
-            {\r
-                return this.q_destination;\r
-            }\r
-        }\r
-\r
-        private string q_format;\r
-        /// <summary>\r
-        /// Returns a String \r
-        /// Full path of the destination.\r
-        /// </summary>\r
-        public string Format\r
-        {\r
-            get\r
-            {\r
-                return this.q_format;\r
-            }\r
-        }\r
-\r
-        private string q_videoEncoder;\r
-        /// <summary>\r
-        /// Returns an String\r
-        /// The Video Encoder used.\r
-        /// </summary>\r
-        public string VideoEncoder\r
-        {\r
-            get\r
-            {\r
-                return this.q_videoEncoder;\r
-            }\r
-        }\r
-        #endregion\r
-\r
-        #region Picture Settings\r
-        private int q_videoWidth;\r
-        /// <summary>\r
-        /// Returns an Int\r
-        /// The selected Width for the encoding.\r
-        /// </summary>\r
-        public int Width\r
-        {\r
-            get\r
-            {\r
-                return this.q_videoWidth;\r
-            }\r
-        }\r
-\r
-        private int q_videoHeight;\r
-        /// <summary>\r
-        /// Returns an Int\r
-        /// The selected Height for the encoding.\r
-        /// </summary>\r
-        public int Height\r
-        {\r
-            get\r
-            {\r
-                return this.q_videoHeight;\r
-            }\r
-        }\r
-\r
-        private int q_maxWidth;\r
-        /// <summary>\r
-        /// Returns an Int\r
-        /// The selected Width for the encoding.\r
-        /// </summary>\r
-        public int MaxWidth\r
-        {\r
-            get\r
-            {\r
-                return this.q_maxWidth;\r
-            }\r
-        }\r
-\r
-        private int q_maxHeight;\r
-        /// <summary>\r
-        /// Returns an Int\r
-        /// The selected Height for the encoding.\r
-        /// </summary>\r
-        public int MaxHeight\r
-        {\r
-            get\r
-            {\r
-                return this.q_maxHeight;\r
-            }\r
-        }\r
-\r
-        private string q_cropValues;\r
-        /// <summary>\r
-        /// Returns an String\r
-        /// Cropping values.\r
-        /// </summary>\r
-        public string CropValues\r
-        {\r
-            get\r
-            {\r
-                return this.q_cropValues;\r
-            }\r
-        }\r
-\r
-        private string q_croptop;\r
-        /// <summary>\r
-        /// Returns an String\r
-        /// Cropping values.\r
-        /// </summary>\r
-        public string CropTop\r
-        {\r
-            get\r
-            {\r
-                return this.q_croptop;\r
-            }\r
-        }\r
-\r
-        private string q_cropbottom;\r
-        /// <summary>\r
-        /// Returns an String\r
-        /// Cropping values.\r
-        /// </summary>\r
-        public string CropBottom\r
-        {\r
-            get\r
-            {\r
-                return this.q_cropbottom;\r
-            }\r
-        }\r
-\r
-        private string q_cropLeft;\r
-        /// <summary>\r
-        /// Returns an String\r
-        /// Cropping values.\r
-        /// </summary>\r
-        public string CropLeft\r
-        {\r
-            get\r
-            {\r
-                return this.q_cropLeft;\r
-            }\r
-        }\r
-\r
-        private string q_cropRight;\r
-        /// <summary>\r
-        /// Returns an String\r
-        /// Cropping values.\r
-        /// </summary>\r
-        public string CropRight\r
-        {\r
-            get\r
-            {\r
-                return this.q_cropRight;\r
-            }\r
-        }\r
-\r
-        private Boolean q_detelecine;\r
-        /// <summary>\r
-        /// Returns a boolean to indicate wither DeTelecine is on or off\r
-        /// </summary>\r
-        public Boolean DeTelecine\r
-        {\r
-            get\r
-            {\r
-                return this.q_detelecine;\r
-            }\r
-        }\r
-\r
-        private int q_deBlock;\r
-        /// <summary>\r
-        /// Returns a boolean to indicate wither DeBlock is on or off.\r
-        /// </summary>\r
-        public int DeBlock\r
-        {\r
-            get\r
-            {\r
-                return this.q_deBlock;\r
-            }\r
-        }\r
-\r
-        private string q_deinterlace;\r
-        /// <summary>\r
-        /// Returns a string with the De-Interlace option used.\r
-        /// </summary>\r
-        public string DeInterlace\r
-        {\r
-            get\r
-            {\r
-                return this.q_deinterlace;\r
-            }\r
-        }\r
-\r
-        private string q_denoise;\r
-        /// <summary>\r
-        /// Returns a string with the DeNoise option used.\r
-        /// </summary>\r
-        public string DeNoise\r
-        {\r
-            get\r
-            {\r
-                return this.q_denoise;\r
-            }\r
-        }\r
-\r
-        private Boolean q_decomb;\r
-        /// <summary>\r
-        /// Returns a string with the DeNoise option used.\r
-        /// </summary>\r
-        public Boolean Decomb\r
-        {\r
-            get\r
-            {\r
-                return this.q_decomb;\r
-            }\r
-        }\r
-\r
-        private Boolean q_anamorphic;\r
-        /// <summary>\r
-        /// Returns a boolean to indicate wither Anamorphic is on or off.\r
-        /// </summary>\r
-        public Boolean Anamorphic\r
-        {\r
-            get\r
-            {\r
-                return this.q_anamorphic;\r
-            }\r
-        }\r
-\r
-        private Boolean q_looseAnamorphic;\r
-        /// <summary>\r
-        /// Returns a boolean to indicate wither Anamorphic is on or off.\r
-        /// </summary>\r
-        public Boolean LooseAnamorphic\r
-        {\r
-            get\r
-            {\r
-                return this.q_looseAnamorphic;\r
-            }\r
-        }\r
-\r
-        private Boolean q_chapterMarkers;\r
-        /// <summary>\r
-        /// Returns a boolean to indicate wither Chapter Markers is on or off.\r
-        /// </summary>\r
-        public Boolean ChapterMarkers\r
-        {\r
-            get\r
-            {\r
-                return this.q_chapterMarkers;\r
-            }\r
-        }\r
-        #endregion\r
-\r
-        #region Video Settings\r
-        private Boolean q_grayscale;\r
-        /// <summary>\r
-        /// Returns a boolean to indicate wither Grayscale is on or off.\r
-        /// </summary>\r
-        public Boolean Grayscale\r
-        {\r
-            get\r
-            {\r
-                return this.q_grayscale;\r
-            }\r
-        }\r
-\r
-        private Boolean q_twoPass;\r
-        /// <summary>\r
-        /// Returns a boolean to indicate wither Two Pass Encoding is on or off.\r
-        /// </summary>\r
-        public Boolean TwoPass\r
-        {\r
-            get\r
-            {\r
-                return this.q_twoPass;\r
-            }\r
-        }\r
-\r
-        private Boolean q_turboFirst;\r
-        /// <summary>\r
-        /// Returns a boolean to indicate wither Chapter Markers is on or off.\r
-        /// </summary>\r
-        public Boolean TurboFirstPass\r
-        {\r
-            get\r
-            {\r
-                return this.q_turboFirst;\r
-            }\r
-        }\r
-\r
-        private Boolean q_largeMp4;\r
-        /// <summary>\r
-        /// Returns a boolean to indicate wither Larger MP4 files is on or off.\r
-        /// </summary>\r
-        public Boolean LargeMP4\r
-        {\r
-            get\r
-            {\r
-                return this.q_largeMp4;\r
-            }\r
-        }\r
-\r
-        private Boolean q_ipodAtom;\r
-        /// <summary>\r
-        /// Returns a boolean to indicate wither Larger MP4 files is on or off.\r
-        /// </summary>\r
-        public Boolean IpodAtom\r
-        {\r
-            get\r
-            {\r
-                return this.q_ipodAtom;\r
-            }\r
-        }\r
-\r
-        private Boolean q_optimizeMp4;\r
-        /// <summary>\r
-        /// Returns a boolean to indicate wither Larger MP4 files is on or off.\r
-        /// </summary>\r
-        public Boolean OptimizeMP4\r
-        {\r
-            get\r
-            {\r
-                return this.q_optimizeMp4;\r
-            }\r
-        }\r
-\r
-        private string q_videoFramerate;\r
-        /// <summary>\r
-        /// Returns a string with the video Framerate\r
-        /// </summary>\r
-        public string VideoFramerate\r
-        {\r
-            get\r
-            {\r
-                return this.q_videoFramerate;\r
-            }\r
-        }\r
-\r
-        private string q_avgBitrate;\r
-        /// <summary>\r
-        /// Returns a string with the average video bitrate\r
-        /// </summary>\r
-        public string AverageVideoBitrate\r
-        {\r
-            get\r
-            {\r
-                return this.q_avgBitrate;\r
-            }\r
-        }\r
-\r
-        private string q_videoTargetSize;\r
-        /// <summary>\r
-        /// Returns a string with the video target size\r
-        /// </summary>\r
-        public string VideoTargetSize\r
-        {\r
-            get\r
-            {\r
-                return this.q_videoTargetSize;\r
-            }\r
-        }\r
-\r
-        private int q_videoQuality;\r
-        /// <summary>\r
-        /// Returns a int with the video quality value\r
-        /// </summary>\r
-        public int VideoQuality\r
-        {\r
-            get\r
-            {\r
-                return this.q_videoQuality;\r
-            }\r
-        }\r
-\r
-        #endregion\r
-\r
-        #region Audio Settings\r
-        private string q_audioTrack1;\r
-        /// <summary>\r
-        /// Returns a string with the selected Audio track\r
-        /// </summary>\r
-        public string AudioTrack1\r
-        {\r
-            get\r
-            {\r
-                return this.q_audioTrack1;\r
-            }\r
-        }\r
-\r
-        private string q_audioTrack2;\r
-        /// <summary>\r
-        /// Returns a string with the selected Audio track\r
-        /// </summary>\r
-        public string AudioTrack2\r
-        {\r
-            get\r
-            {\r
-                return this.q_audioTrack2;\r
-            }\r
-        }\r
-\r
-        private string q_audioTrack3;\r
-        /// <summary>\r
-        /// Returns a string with the selected Audio track\r
-        /// </summary>\r
-        public string AudioTrack3\r
-        {\r
-            get\r
-            {\r
-                return this.q_audioTrack3;\r
-            }\r
-        }\r
-\r
-        private string q_audioTrack4;\r
-        /// <summary>\r
-        /// Returns a string with the selected Audio track\r
-        /// </summary>\r
-        public string AudioTrack4\r
-        {\r
-            get\r
-            {\r
-                return this.q_audioTrack4;\r
-            }\r
-        }\r
-\r
-        private string q_audioTrackMix1;\r
-        /// <summary>\r
-        /// Returns a string with the First selected Audio track Mix\r
-        /// </summary>\r
-        public string AudioTrackMix1\r
-        {\r
-            get\r
-            {\r
-                return this.q_audioTrackMix1;\r
-            }\r
-        }\r
-\r
-        private string q_audioTrackMix2;\r
-        /// <summary>\r
-        /// Returns a string with the First selected Audio track Mix\r
-        /// </summary>\r
-        public string AudioTrackMix2\r
-        {\r
-            get\r
-            {\r
-                return this.q_audioTrackMix2;\r
-            }\r
-        }\r
-\r
-        private string q_audioTrackMix3;\r
-        /// <summary>\r
-        /// Returns a string with the First selected Audio track Mix\r
-        /// </summary>\r
-        public string AudioTrackMix3\r
-        {\r
-            get\r
-            {\r
-                return this.q_audioTrackMix3;\r
-            }\r
-        }\r
-\r
-        private string q_audioTrackMix4;\r
-        /// <summary>\r
-        /// Returns a string with the First selected Audio track Mix\r
-        /// </summary>\r
-        public string AudioTrackMix4\r
-        {\r
-            get\r
-            {\r
-                return this.q_audioTrackMix4;\r
-            }\r
-        }\r
-\r
-        private string q_audioEncoder1;\r
-        /// <summary>\r
-        /// Returns an String\r
-        /// The Audio Encoder used.\r
-        /// </summary>\r
-        public string AudioEncoder1\r
-        {\r
-            get\r
-            {\r
-                return this.q_audioEncoder1;\r
-            }\r
-        }\r
-\r
-        private string q_audioEncoder2;\r
-        /// <summary>\r
-        /// Returns an String\r
-        /// The Audio Encoder used.\r
-        /// </summary>\r
-        public string AudioEncoder2\r
-        {\r
-            get\r
-            {\r
-                return this.q_audioEncoder2;\r
-            }\r
-        }\r
-\r
-        private string q_audioEncoder3;\r
-        /// <summary>\r
-        /// Returns an String\r
-        /// The Audio Encoder used.\r
-        /// </summary>\r
-        public string AudioEncoder3\r
-        {\r
-            get\r
-            {\r
-                return this.q_audioEncoder3;\r
-            }\r
-        }\r
-\r
-        private string q_audioEncoder4;\r
-        /// <summary>\r
-        /// Returns an String\r
-        /// The Audio Encoder used.\r
-        /// </summary>\r
-        public string AudioEncoder4\r
-        {\r
-            get\r
-            {\r
-                return this.q_audioEncoder4;\r
-            }\r
-        }\r
-\r
-        private string q_audioBitrate1;\r
-        /// <summary>\r
-        /// Returns a string with the audio bitrate\r
-        /// </summary>\r
-        public string AudioBitrate1\r
-        {\r
-            get\r
-            {\r
-                return this.q_audioBitrate1;\r
-            }\r
-        }\r
-\r
-        private string q_audioBitrate2;\r
-        /// <summary>\r
-        /// Returns a string with the audio bitrate\r
-        /// </summary>\r
-        public string AudioBitrate2\r
-        {\r
-            get\r
-            {\r
-                return this.q_audioBitrate2;\r
-            }\r
-        }\r
-\r
-        private string q_audioBitrate3;\r
-        /// <summary>\r
-        /// Returns a string with the audio bitrate\r
-        /// </summary>\r
-        public string AudioBitrate3\r
-        {\r
-            get\r
-            {\r
-                return this.q_audioBitrate3;\r
-            }\r
-        }\r
-\r
-        private string q_audioBitrate4;\r
-        /// <summary>\r
-        /// Returns a string with the audio bitrate\r
-        /// </summary>\r
-        public string AudioBitrate4\r
-        {\r
-            get\r
-            {\r
-                return this.q_audioBitrate4;\r
-            }\r
-        }\r
-\r
-        private string q_audioSamplerate1;\r
-        /// <summary>\r
-        /// Returns a string with the audio sample rate\r
-        /// </summary>\r
-        public string AudioSamplerate1\r
-        {\r
-            get\r
-            {\r
-                return this.q_audioSamplerate1;\r
-            }\r
-        }\r
-\r
-        private string q_audioSamplerate2;\r
-        /// <summary>\r
-        /// Returns a string with the audio sample rate\r
-        /// </summary>\r
-        public string AudioSamplerate2\r
-        {\r
-            get\r
-            {\r
-                return this.q_audioSamplerate2;\r
-            }\r
-        }\r
-\r
-        private string q_audioSamplerate3;\r
-        /// <summary>\r
-        /// Returns a string with the audio sample rate\r
-        /// </summary>\r
-        public string AudioSamplerate3\r
-        {\r
-            get\r
-            {\r
-                return this.q_audioSamplerate3;\r
-            }\r
-        }\r
-\r
-        private string q_audioSamplerate4;\r
-        /// <summary>\r
-        /// Returns a string with the audio sample rate\r
-        /// </summary>\r
-        public string AudioSamplerate4\r
-        {\r
-            get\r
-            {\r
-                return this.q_audioSamplerate4;\r
-            }\r
-        }\r
-\r
-        private double q_drc1;\r
-        /// <summary>\r
-        /// Returns a string with the selected subtitle track\r
-        /// </summary>\r
-        public double DRC1\r
-        {\r
-            get\r
-            {\r
-                return this.q_drc1;\r
-            }\r
-        }\r
-\r
-        private double q_drc2;\r
-        /// <summary>\r
-        /// Returns a string with the selected subtitle track\r
-        /// </summary>\r
-        public double DRC2\r
-        {\r
-            get\r
-            {\r
-                return this.q_drc2;\r
-            }\r
-        }\r
-\r
-        private double q_drc3;\r
-        /// <summary>\r
-        /// Returns a string with the selected subtitle track\r
-        /// </summary>\r
-        public double DRC3\r
-        {\r
-            get\r
-            {\r
-                return this.q_drc3;\r
-            }\r
-        }\r
-\r
-        private double q_drc4;\r
-        /// <summary>\r
-        /// Returns a string with the selected subtitle track\r
-        /// </summary>\r
-        public double DRC4\r
-        {\r
-            get\r
-            {\r
-                return this.q_drc4;\r
-            }\r
-        }\r
-\r
-        private string q_subtitles;\r
-        /// <summary>\r
-        /// Returns a string with the selected subtitle track\r
-        /// </summary>\r
-        public string Subtitles\r
-        {\r
-            get\r
-            {\r
-                return this.q_subtitles;\r
-            }\r
-        }\r
-\r
-        private Boolean q_forcedSubs;\r
-        /// <summary>\r
-        /// Returns a string with the selected subtitle track\r
-        /// </summary>\r
-        public Boolean ForcedSubtitles\r
-        {\r
-            get\r
-            {\r
-                return this.q_forcedSubs;\r
-            }\r
-        }\r
-\r
-        #endregion\r
-\r
-        #region Other\r
-        private string q_h264;\r
-        /// <summary>\r
-        /// Returns a string with the Advanced H264 query string\r
-        /// </summary>\r
-        public string H264Query\r
-        {\r
-            get\r
-            {\r
-                return this.q_h264;\r
-            }\r
-        }\r
-        private Boolean q_verbose;\r
-        /// <summary>\r
-        /// Returns a string with the Advanced H264 query string\r
-        /// </summary>\r
-        public Boolean Verbose\r
-        {\r
-            get\r
-            {\r
-                return this.q_verbose;\r
-            }\r
-        }\r
-        #endregion\r
+        // Source\r
+        public int DVDTitle { get; set; }\r
+        public int DVDChapterStart { get; set; }\r
+        public int DVDChapterFinish { get; set; }\r
+\r
+        // Output Settings\r
+        public string Format { get; set; }\r
+        public Boolean LargeMP4 { get; set; }\r
+        public Boolean IpodAtom { get; set; }\r
+        public Boolean OptimizeMP4 { get; set; }\r
+\r
+        // Picture Settings\r
+        public int Width { get; set; }\r
+        public int Height { get; set; }\r
+        public int MaxWidth { get; set; }\r
+        public int MaxHeight { get; set; }\r
+        public string CropValues { get; set; }\r
+        public string CropTop { get; set; }\r
+        public string CropBottom { get; set; }\r
+        public string CropLeft { get; set; }\r
+        public string CropRight { get; set; }\r
+        public int AnamorphicMode { get; set; }\r
+        public Boolean keepDisplayAsect { get; set; }\r
+        public double displayWidthValue { get; set; }\r
+        public int pixelAspectWidth { get; set; }\r
+        public int pixelAspectHeight { get; set; }\r
+        public int AnamorphicModulus { get; set; }\r
+\r
+        // Video Filters\r
+        public string DeTelecine { get; set; }\r
+        public int DeBlock { get; set; }\r
+        public string DeInterlace { get; set; }\r
+        public string DeNoise { get; set; }\r
+        public string Decomb { get; set; }\r
+\r
+        // Video Settings\r
+        public string VideoEncoder { get; set; }\r
+        public Boolean Grayscale { get; set; }\r
+        public Boolean TwoPass { get; set; }\r
+        public Boolean TurboFirstPass { get; set; }\r
+        public string VideoFramerate { get; set; }\r
+        public string AverageVideoBitrate { get; set; }\r
+        public string VideoTargetSize { get; set; }\r
+        public float VideoQuality { get; set; }\r
+\r
+        // Audio Settings\r
+        public ArrayList AudioInformation { get; set; }\r
+        public string Subtitles { get; set; }\r
+        public Boolean ForcedSubtitles { get; set; }\r
+\r
+        // Chapter Markers\r
+        public Boolean ChapterMarkers { get; set; }\r
+\r
+        // Other\r
+        public string H264Query { get; set; }\r
+        public Boolean Verbose { get; set; }\r
+\r
+        // Preset Information\r
+        public int PresetBuildNumber { get; set; }\r
+        public string PresetDescription { get; set; }\r
+        public string PresetName { get; set; }\r
+        public string Type { get; set; }\r
+        public Boolean UsesMaxPictureSettings { get; set; }\r
+        public Boolean UsesPictureFilters { get; set; }\r
+        public Boolean UsesPictureSettings { get; set; }\r
 \r
         #endregion\r
 \r
@@ -805,505 +92,346 @@ namespace Handbrake.Functions
         /// </summary>\r
         /// <param name="input">A ClI Query</param>\r
         /// <returns>A Parsed Query</returns>\r
\r
         public static QueryParser Parse(String input)\r
         {\r
-            QueryParser thisQuery = new QueryParser();\r
+            var thisQuery = new QueryParser();\r
 \r
             #region Regular Expressions\r
+\r
             //Source\r
-            Regex r1 = new Regex(@"(-i)(?:\s\"")([a-zA-Z0-9_\-:\\\s\.]+)(?:\"")");\r
-            Match source = r1.Match(input.Replace('"', '\"'));\r
             Match title = Regex.Match(input, @"-t ([0-9]*)");\r
             Match chapters = Regex.Match(input, @"-c ([0-9-]*)");\r
-            Match format = Regex.Match(input, @"-f ([a-z0-9a-z0-9a-z0-9]*)");\r
 \r
-            //Destination\r
-            Regex r2 = new Regex(@"(-o)(?:\s\"")([a-zA-Z0-9_\-:\\\s\.]+)(?:\"")");\r
-            Match destination = r2.Match(input.Replace('"', '\"'));\r
-            Match videoEncoder = Regex.Match(input, @"-e ([a-zA-Z0-9]*)");\r
+            //Output Settings\r
+            Match format = Regex.Match(input, @"-f ([a-z0-9a-z0-9a-z0-9]*)");\r
+            Match grayscale = Regex.Match(input, @" -g");\r
+            Match largerMp4 = Regex.Match(input, @" -4");\r
+            Match ipodAtom = Regex.Match(input, @" -I");\r
 \r
             //Picture Settings Tab\r
             Match width = Regex.Match(input, @"-w ([0-9]*)");\r
             Match height = Regex.Match(input, @"-l ([0-9]*)");\r
             Match maxWidth = Regex.Match(input, @"-X ([0-9]*)");\r
             Match maxHeight = Regex.Match(input, @"-Y ([0-9]*)");\r
-            Match deinterlace = Regex.Match(input, @"--deinterlace=\""([a-zA-Z]*)\""");\r
-            Match denoise = Regex.Match(input, @"--denoise=\""([a-zA-Z]*)\""");\r
-            Match deblock = Regex.Match(input, @"--deblock=([0-9]*)");\r
-            Match detelecine = Regex.Match(input, @"--detelecine");\r
-            Match anamorphic = Regex.Match(input, @" -p ");\r
-            Match chapterMarkers = Regex.Match(input, @" -m");\r
-            Match chapterMarkersFileMode = Regex.Match(input, @"--markers");\r
             Match crop = Regex.Match(input, @"--crop ([0-9]*):([0-9]*):([0-9]*):([0-9]*)");\r
-            Match lanamorphic = Regex.Match(input, @" -P");\r
+\r
+            Match looseAnamorphic = Regex.Match(input, @"--loose-anamorphic");\r
+            Match strictAnamorphic = Regex.Match(input, @"--strict-anamorphic");\r
+            Match customAnamorphic = Regex.Match(input, @"--custom-anamorphic");\r
+\r
+            Match keepDisplayAsect = Regex.Match(input, @"--keep-display-aspect");\r
+            Match displayWidth = Regex.Match(input, @"--display-width ([0-9*])");\r
+            Match pixelAspect = Regex.Match(input, @"--pixel-aspect ([0-9]*):([0-9]*)");\r
+            Match modulus = Regex.Match(input, @"--modulus ([0-9*])");\r
+\r
+            // Picture Settings - Filters\r
             Match decomb = Regex.Match(input, @" --decomb");\r
+            Match decombValue = Regex.Match(input, @" --decomb=\""([a-zA-Z0-9.:]*)\""");\r
+            Match deinterlace = Regex.Match(input, @"--deinterlace=\""([a-zA-Z0-9.:]*)\""");\r
+            Match denoise = Regex.Match(input, @"--denoise=\""([a-zA-Z0-9.:]*)\""");\r
+            Match deblock = Regex.Match(input, @"--deblock=([0-9:]*)");\r
+            Match detelecine = Regex.Match(input, @"--detelecine");\r
+            Match detelecineValue = Regex.Match(input, @" --detelecine=\""([a-zA-Z0-9.:]*)\""");\r
 \r
             //Video Settings Tab\r
-            Match videoFramerate = Regex.Match(input, @"-r ([0-9]*)");\r
+            Match videoEncoder = Regex.Match(input, @"-e ([a-zA-Z0-9]*)");\r
+            Match videoFramerate = Regex.Match(input, @"-r ([0-9.]*)");\r
             Match videoBitrate = Regex.Match(input, @"-b ([0-9]*)");\r
             Match videoQuality = Regex.Match(input, @"-q ([0-9.]*)");\r
             Match videoFilesize = Regex.Match(input, @"-S ([0-9.]*)");\r
             Match twoPass = Regex.Match(input, @" -2");\r
             Match turboFirstPass = Regex.Match(input, @" -T");\r
-            Match grayscale = Regex.Match(input, @" -g");\r
-            Match largerMp4 = Regex.Match(input, @" -4");\r
-            Match ipodAtom = Regex.Match(input, @" -I");\r
             Match optimizeMP4 = Regex.Match(input, @" -O");\r
 \r
             //Audio Settings Tab\r
-            Match audioTrack1 = Regex.Match(input, @"-a ([0-9]*)");\r
-            Match audioTrack2 = Regex.Match(input, @"-a ([0-9]*),([0-9]*)");\r
-            Match audioTrack3 = Regex.Match(input, @"-a ([0-9]*),([0-9]*),([0-9]*)");\r
-            Match audioTrack4 = Regex.Match(input, @"-a ([0-9]*),([0-9]*),([0-9]*),([0-9]*)");\r
-\r
-            Match audioTrack1Mix = Regex.Match(input, @"-6 ([0-9a-z0-9]*)");  \r
-            Match audioTrack2Mix = Regex.Match(input, @"-6 ([0-9a-z0-9]*),([0-9a-z0-9]*)");\r
-            Match audioTrack3Mix = Regex.Match(input, @"-6 ([0-9a-z0-9]*),([0-9a-z0-9]*),([0-9a-z0-9]*)");\r
-            Match audioTrack4Mix = Regex.Match(input, @"-6 ([0-9a-z0-9]*),([0-9a-z0-9]*),([0-9a-z0-9]*),([0-9a-z0-9]*)"); \r
-\r
-            Match audioEncoder1 = Regex.Match(input, @"-E ([a-zA-Z0-9+]*)");\r
-            Match audioEncoder2 = Regex.Match(input, @"-E ([a-zA-Z0-9+]*),([a-zA-Z0-9+]*)");\r
-            Match audioEncoder3 = Regex.Match(input, @"-E ([a-zA-Z0-9+]*),([a-zA-Z0-9+]*),([a-zA-Z0-9+]*)");\r
-            Match audioEncoder4 = Regex.Match(input, @"-E ([a-zA-Z0-9+]*),([a-zA-Z0-9+]*),([a-zA-Z0-9+]*),([a-zA-Z0-9+]*)");\r
-\r
-            Match audioBitrate1 = Regex.Match(input, @"-B ([0-9]*)");\r
-            Match audioBitrate2 = Regex.Match(input, @"-B ([0-9]*),([0-9]*)");\r
-            Match audioBitrate3 = Regex.Match(input, @"-B ([0-9]*),([0-9]*),([0-9]*)");\r
-            Match audioBitrate4 = Regex.Match(input, @"-B ([0-9]*),([0-9]*),([0-9]*),([0-9]*)");\r
-\r
-            Match audioSampleRate1 = Regex.Match(input, @"-R ([0-9.]*)");\r
-            Match audioSampleRate2 = Regex.Match(input, @"-R ([0-9.]*),([0-9.]*)");\r
-            Match audioSampleRate3 = Regex.Match(input, @"-R ([0-9.]*),([0-9.]*),([0-9.]*)");\r
-            Match audioSampleRate4 = Regex.Match(input, @"-R ([0-9.]*),([0-9.]*),([0-9.]*),([0-9.]*)");\r
-\r
-            Match drc1 = Regex.Match(input, @"-D ([0-9.]*)");\r
-            Match drc2 = Regex.Match(input, @"-D ([0-9.]*),([0-9.]*)");\r
-            Match drc3 = Regex.Match(input, @"-D ([0-9.]*),([0-9.]*),([0-9.]*)");\r
-            Match drc4 = Regex.Match(input, @"-D ([0-9.]*),([0-9.]*),([0-9.]*),([0-9.]*)");\r
+            Match noAudio = Regex.Match(input, @"-a none");\r
+            Match audioTracks = Regex.Match(input, @"-a ([0-9,]*)");\r
+            Match audioTrackMixes = Regex.Match(input, @"-6 ([0-9a-zA-Z,]*)");\r
+            Match audioEncoders = Regex.Match(input, @"-E ([a-zA-Z0-9+,]*)");\r
+            Match audioBitrates = Regex.Match(input, @"-B ([0-9a-zA-Z,]*)");       // Auto = a-z\r
+            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
+\r
             //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
+\r
             try\r
             {\r
-      \r
                 #region Source Tab\r
 \r
-                thisQuery.q_source = source.ToString().Replace("-i ", "").Replace("\"", "");\r
-                if (title.Success != false)\r
-                    thisQuery.q_dvdTitle = int.Parse(title.ToString().Replace("-t ", ""));\r
+                if (title.Success)\r
+                    thisQuery.DVDTitle = int.Parse(title.ToString().Replace("-t ", ""));\r
 \r
-                if (chapters.Success != false)\r
+                if (chapters.Success)\r
                 {\r
-                    string[] actTitles = new string[2];\r
-                    actTitles = chapters.ToString().Replace("-c ", "").Split('-');\r
-                    thisQuery.q_chaptersStart = int.Parse(actTitles[0]);\r
+                    string[] actTitles = chapters.ToString().Replace("-c ", "").Split('-');\r
+                    thisQuery.DVDChapterStart = int.Parse(actTitles[0]);\r
                     if (actTitles.Length > 1)\r
                     {\r
-                        thisQuery.q_chaptersFinish = int.Parse(actTitles[1]);\r
+                        thisQuery.DVDChapterFinish = int.Parse(actTitles[1]);\r
                     }\r
 \r
-                    if ((thisQuery.q_chaptersStart == 1) && (thisQuery.q_chaptersFinish == 0))\r
-                        thisQuery.q_chaptersFinish = thisQuery.q_chaptersStart;\r
+                    if ((thisQuery.DVDChapterStart == 1) && (thisQuery.DVDChapterFinish == 0))\r
+                        thisQuery.DVDChapterFinish = thisQuery.DVDChapterStart;\r
                 }\r
-\r
-                if (format.Success != false)\r
-                    thisQuery.q_format = format.ToString().Replace("-f ", "");\r
-\r
                 #endregion\r
 \r
-                #region Destination\r
-                thisQuery.q_destination = destination.ToString().Replace("-o ", "").Replace("\"", "");\r
-\r
-                string videoEncoderConvertion;\r
+                #region Output Settings\r
 \r
-                videoEncoderConvertion = videoEncoder.ToString().Replace("-e ", "");\r
-                switch (videoEncoderConvertion)\r
-                {\r
-                    case "ffmpeg":\r
-                        videoEncoderConvertion = "MPEG-4 (FFmpeg)";\r
-                        break;\r
-                    case "xvid":\r
-                        videoEncoderConvertion = "MPEG-4 (XviD)";\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
-                }\r
-                thisQuery.q_videoEncoder = videoEncoderConvertion;\r
+                if (format.Success)\r
+                    thisQuery.Format = format.ToString().Replace("-f ", "");\r
+                thisQuery.LargeMP4 = largerMp4.Success;\r
+                thisQuery.IpodAtom = ipodAtom.Success;\r
+                thisQuery.OptimizeMP4 = optimizeMP4.Success;\r
 \r
                 #endregion\r
 \r
                 #region Picture Tab\r
 \r
-                if (width.Success != false)\r
-                    thisQuery.q_videoWidth = int.Parse(width.ToString().Replace("-w ", ""));\r
-\r
-                if (height.Success != false)\r
-                    thisQuery.q_videoHeight = int.Parse(height.ToString().Replace("-l ", ""));\r
-\r
-                if (maxWidth.Success != false)\r
-                    thisQuery.q_maxWidth = int.Parse(maxWidth.ToString().Replace("-X ", ""));\r
-\r
-                if (maxHeight.Success != false)\r
-                    thisQuery.q_maxHeight = int.Parse(maxHeight.ToString().Replace("-Y ", ""));\r
-\r
-                if (crop.Success != false)\r
-                {\r
-                    thisQuery.q_cropValues = crop.ToString().Replace("--crop ", "");\r
-                    string[] actCropValues = new string[3];\r
-                    actCropValues = thisQuery.q_cropValues.Split(':');\r
-                    thisQuery.q_croptop = actCropValues[0];\r
-                    thisQuery.q_cropbottom = actCropValues[1];\r
-                    thisQuery.q_cropLeft = actCropValues[2];\r
-                    thisQuery.q_cropRight = actCropValues[3];\r
-                }\r
-\r
-                // Deblock Slider\r
-                string deblockValue = "";\r
-                thisQuery.q_deBlock = 0;\r
-                if (deblock.Success != false)\r
-                    deblockValue = deblock.ToString().Replace("--deblock=", "");\r
+                if (width.Success)\r
+                    thisQuery.Width = int.Parse(width.Groups[0].Value.Replace("-w ", ""));\r
 \r
-                if (deblockValue != "")\r
-                    int.TryParse(deblockValue, out thisQuery.q_deBlock);\r
+                if (height.Success)\r
+                    thisQuery.Height = int.Parse(height.Groups[0].Value.Replace("-l ", ""));\r
 \r
-                thisQuery.q_detelecine = detelecine.Success;\r
-                thisQuery.q_decomb = decomb.Success;\r
+                if (maxWidth.Success)\r
+                    thisQuery.MaxWidth = int.Parse(maxWidth.Groups[0].Value.Replace("-X ", ""));\r
 \r
-                thisQuery.q_deinterlace = "None";\r
-                if (deinterlace.Success != false)\r
-                {\r
-                    switch (deinterlace.ToString().Replace("--deinterlace=", "").Replace("\"",""))\r
-                    {\r
-                        case "fast":\r
-                            thisQuery.q_deinterlace = "Fast";\r
-                            break;\r
-                        case "slow":\r
-                            thisQuery.q_deinterlace = "Slow";\r
-                            break;\r
-                        case "slower":\r
-                            thisQuery.q_deinterlace = "Slower";\r
-                            break;\r
-                        case "slowest":\r
-                            thisQuery.q_deinterlace = "Slowest";\r
-                            break;\r
-                        default:\r
-                            thisQuery.q_deinterlace = "None";\r
-                            break;\r
-                    }\r
-                }\r
+                if (maxHeight.Success)\r
+                    thisQuery.MaxHeight = int.Parse(maxHeight.Groups[0].Value.Replace("-Y ", ""));\r
 \r
-                thisQuery.q_denoise = "None";\r
-                if (denoise.Success != false)\r
+                if (crop.Success)\r
                 {\r
-                    switch (denoise.ToString().Replace("--denoise=", "").Replace("\"", ""))\r
-                    {\r
-                        case "weak":\r
-                            thisQuery.q_denoise = "Weak";\r
-                            break;\r
-                        case "medium":\r
-                            thisQuery.q_denoise = "Medium";\r
-                            break;\r
-                        case "strong":\r
-                            thisQuery.q_denoise = "Strong";\r
-                            break;\r
-                        default:\r
-                            thisQuery.q_denoise = "None";\r
-                            break;\r
-                    }\r
-\r
+                    thisQuery.CropValues = crop.ToString().Replace("--crop ", "");\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
                 }\r
-                thisQuery.q_anamorphic = anamorphic.Success;\r
-                if (chapterMarkersFileMode.Success == true || chapterMarkers.Success == true)\r
-                    thisQuery.q_chapterMarkers = true;\r
-                \r
-                thisQuery.q_looseAnamorphic = lanamorphic.Success;\r
 \r
-                #endregion\r
-     \r
-                #region Video Settings Tab\r
-                thisQuery.q_grayscale = grayscale.Success;\r
-                thisQuery.q_twoPass = twoPass.Success;\r
-                thisQuery.q_turboFirst = turboFirstPass.Success;\r
-                thisQuery.q_largeMp4 = largerMp4.Success;\r
-                if (videoFramerate.Success != false)\r
-                    thisQuery.q_videoFramerate = videoFramerate.ToString().Replace("-r ", "");\r
+                if (strictAnamorphic.Success)\r
+                    thisQuery.AnamorphicMode = 1;\r
+                else if (looseAnamorphic.Success)\r
+                    thisQuery.AnamorphicMode = 2;\r
+                else if (customAnamorphic.Success)\r
+                    thisQuery.AnamorphicMode = 3;\r
                 else\r
-                    thisQuery.q_videoFramerate = "Same as source";\r
-\r
-                if (videoBitrate.Success != false)\r
-                    thisQuery.q_avgBitrate = videoBitrate.ToString().Replace("-b ", "");\r
-                if (videoFilesize.Success != false)\r
-                    thisQuery.q_videoTargetSize = videoFilesize.ToString().Replace("-S ", "");\r
+                    thisQuery.AnamorphicMode = 0;\r
 \r
-                double qConvert = 0;\r
-                if (videoQuality.Success != false)\r
-                {\r
-                    qConvert = double.Parse(videoQuality.ToString().Replace("-q ", ""), Functions.Encode.Culture) * 100;\r
-                    qConvert = System.Math.Ceiling(qConvert);\r
-                    thisQuery.q_videoQuality = int.Parse(qConvert.ToString());\r
-                }\r
-                thisQuery.q_ipodAtom = ipodAtom.Success;\r
-                thisQuery.q_optimizeMp4 = optimizeMP4.Success;\r
+                thisQuery.keepDisplayAsect = keepDisplayAsect.Success;\r
 \r
-                #endregion\r
+                if (displayWidth.Success)\r
+                    thisQuery.displayWidthValue = double.Parse(displayWidth.Groups[0].Value.Replace("--display-width ", ""));\r
 \r
-                #region Audio Tab\r
+                if (pixelAspect.Success)\r
+                    thisQuery.pixelAspectWidth = int.Parse(pixelAspect.Groups[1].Value.Replace("--pixel-aspect ", ""));\r
 \r
-                // Tracks\r
-                if (audioTrack1.Success != false)\r
-                    thisQuery.q_audioTrack1 = audioTrack1.ToString().Replace("-a ", "");\r
-                else\r
-                    thisQuery.q_audioTrack1 = "Automatic";\r
+                if (pixelAspect.Success && pixelAspect.Groups.Count >=3)\r
+                    thisQuery.pixelAspectHeight = int.Parse(pixelAspect.Groups[2].Value.Replace("--pixel-aspect ", ""));\r
 \r
-                if (audioTrack2.Success != false)\r
-                {\r
-                    string[] audioChan = audioTrack2.ToString().Split(',');\r
-                    thisQuery.q_audioTrack2 = audioChan[1];\r
-                }\r
-                else\r
-                    thisQuery.q_audioTrack2 = "None";\r
+                if (modulus.Success)\r
+                    thisQuery.AnamorphicModulus = int.Parse(modulus.Groups[0].Value.Replace("--modulus ", ""));\r
 \r
-                if (audioTrack3.Success != false)\r
-                {\r
-                    string[] audioChan = audioTrack3.ToString().Split(',');\r
-                    thisQuery.q_audioTrack3 = audioChan[2];\r
-                }\r
-                else\r
-                    thisQuery.q_audioTrack3 = "None";\r
 \r
-                if (audioTrack4.Success != false)\r
-                {\r
-                    string[] audioChan = audioTrack4.ToString().Split(',');\r
-                    thisQuery.q_audioTrack4 = audioChan[3];\r
-                }\r
-                else\r
-                    thisQuery.q_audioTrack4 = "None";\r
+                #endregion\r
 \r
-    \r
-                // Mixdowns\r
-                thisQuery.q_audioTrackMix1 = "Automatic";\r
-                if (audioTrack1Mix.Success != false)\r
-                {\r
-                    thisQuery.q_audioTrackMix1 = getMixDown(audioTrack1Mix.ToString().Replace("-6 ", "").Replace(" ", ""));\r
-                }\r
+                #region Filters\r
 \r
-                thisQuery.q_audioTrackMix2 = "Automatic";\r
-                if (audioTrack2Mix.Success != false)\r
+                thisQuery.Decomb = "Off";\r
+                if (decomb.Success)\r
                 {\r
-                    string[] audio2mix = audioTrack2Mix.ToString().Split(',');\r
-                    audio2mix[1] = audio2mix[1].Trim();\r
-                    thisQuery.q_audioTrackMix2 = getMixDown(audio2mix[1]);\r
+                    thisQuery.Decomb = "Default";\r
+                    if (decombValue.Success)\r
+                        thisQuery.Decomb = decombValue.ToString().Replace("--decomb=", "").Replace("\"", "");\r
                 }\r
 \r
-                thisQuery.q_audioTrackMix3 = "Automatic";\r
-                if (audioTrack3Mix.Success != false)\r
+                thisQuery.DeInterlace = "Off";\r
+                if (deinterlace.Success)\r
                 {\r
-                    string[] audio3mix = audioTrack3Mix.ToString().Split(',');\r
-                    audio3mix[1] = audio3mix[2].Trim();\r
-                    thisQuery.q_audioTrackMix3 = getMixDown(audio3mix[1]);\r
+                    thisQuery.DeInterlace = deinterlace.ToString().Replace("--deinterlace=", "").Replace("\"", "");\r
+                    thisQuery.DeInterlace = thisQuery.DeInterlace.Replace("fast", "Fast").Replace("slow", "Slow").Replace("slower", "Slower");\r
+                    thisQuery.DeInterlace = thisQuery.DeInterlace.Replace("slowest", "Slowest");\r
                 }\r
 \r
-                thisQuery.q_audioTrackMix4 = "Automatic";\r
-                if (audioTrack4Mix.Success != false)\r
+                thisQuery.DeNoise = "Off";\r
+                if (denoise.Success)\r
                 {\r
-                    string[] audio4mix = audioTrack4Mix.ToString().Split(',');\r
-                    audio4mix[1] = audio4mix[3].Trim();\r
-                    thisQuery.q_audioTrackMix4 = getMixDown(audio4mix[1]);\r
+                    thisQuery.DeNoise = denoise.ToString().Replace("--denoise=", "").Replace("\"", "");\r
+                    thisQuery.DeNoise = thisQuery.DeNoise.Replace("weak", "Weak").Replace("medium", "Medium").Replace("strong", "Strong");\r
                 }\r
-                \r
-\r
-                // Audio Encoders\r
-                if (audioEncoder1.Success != false)\r
-                    thisQuery.q_audioEncoder1 = getAudioEncoder(audioEncoder1.ToString().Replace("-E ", ""));\r
 \r
-                if (audioEncoder2.Success != false)\r
-                {\r
-                    string[] audio2enc = audioEncoder2.ToString().Split(',');\r
-                    thisQuery.q_audioEncoder2 = getAudioEncoder(audio2enc[1].Trim());\r
-                }\r
+                string deblockValue = "";\r
+                thisQuery.DeBlock = 0;\r
+                if (deblock.Success)\r
+                    deblockValue = deblock.ToString().Replace("--deblock=", "");\r
 \r
-                if (audioEncoder3.Success != false)\r
-                {\r
-                    string[] audio3enc = audioEncoder3.ToString().Split(',');\r
-                    thisQuery.q_audioEncoder3 = getAudioEncoder(audio3enc[2].Trim());\r
-                }\r
+                int dval = 0;\r
+                if (deblockValue != "")\r
+                    int.TryParse(deblockValue, out dval);\r
+                thisQuery.DeBlock = dval;\r
 \r
-                if (audioEncoder4.Success != false)\r
+                thisQuery.DeTelecine = "Off";\r
+                if (detelecine.Success)\r
                 {\r
-                    string[] audio4enc = audioEncoder4.ToString().Split(',');\r
-                    thisQuery.q_audioEncoder4 = getAudioEncoder(audio4enc[3].Trim());\r
+                    thisQuery.DeTelecine = "Default";\r
+                    if (detelecineValue.Success)\r
+                        thisQuery.DeTelecine = detelecineValue.ToString().Replace("--detelecine=", "").Replace("\"", "");\r
                 }\r
 \r
+                #endregion\r
 \r
-                // Audio Bitrate\r
-                if (audioBitrate1.Success != false)\r
-                    thisQuery.q_audioBitrate1 = audioBitrate1.ToString().Replace("-B ", "").Trim();\r
-                else\r
-                    thisQuery.q_audioBitrate1 = "";\r
-\r
-                if (audioBitrate2.Success != false)\r
-                {\r
-                    string[] audioBitrateSelect = audioBitrate2.ToString().Split(',');\r
-                    thisQuery.q_audioBitrate2 = audioBitrateSelect[1].Trim();\r
-                }\r
-                else\r
-                    thisQuery.q_audioBitrate2 = "";\r
+                #region Video Settings Tab\r
 \r
-                if (audioBitrate3.Success != false)\r
+                string videoEncoderConvertion = videoEncoder.ToString().Replace("-e ", "");\r
+                switch (videoEncoderConvertion)\r
                 {\r
-                    string[] audioBitrateSelect = audioBitrate3.ToString().Split(',');\r
-                    thisQuery.q_audioBitrate3 = audioBitrateSelect[2].Trim();\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
                 }\r
-                else\r
-                    thisQuery.q_audioBitrate3 = "";\r
-\r
-                if (audioBitrate4.Success != false)\r
+                thisQuery.VideoEncoder = videoEncoderConvertion;\r
+                thisQuery.VideoFramerate = videoFramerate.Success ? videoFramerate.ToString().Replace("-r ", "") : "Same as source";\r
+                thisQuery.Grayscale = grayscale.Success;\r
+                thisQuery.TwoPass = twoPass.Success;\r
+                thisQuery.TurboFirstPass = turboFirstPass.Success;\r
+\r
+                if (videoBitrate.Success)\r
+                    thisQuery.AverageVideoBitrate = videoBitrate.ToString().Replace("-b ", "");\r
+                if (videoFilesize.Success)\r
+                    thisQuery.VideoTargetSize = videoFilesize.ToString().Replace("-S ", "");\r
+\r
+                if (videoQuality.Success)\r
                 {\r
-                    string[] audioBitrateSelect = audioBitrate4.ToString().Split(',');\r
-                    thisQuery.q_audioBitrate4 = audioBitrateSelect[3].Trim();\r
+                    float qConvert = float.Parse(videoQuality.ToString().Replace("-q ", ""), Culture);\r
+                    thisQuery.VideoQuality = qConvert;\r
                 }\r
-                else\r
-                    thisQuery.q_audioBitrate4 = "";\r
-\r
+                #endregion\r
 \r
-                // Audio Sample Rate\r
-                // Make sure to change 0 to Auto\r
-                if (audioSampleRate1.Success != false)\r
+                #region Audio Tab\r
+                // Find out how many tracks we need to add by checking how many encoders or audio tracks are selected.\r
+                int encoderCount = 0;\r
+                if (audioEncoders.Success)\r
                 {\r
-                    thisQuery.q_audioSamplerate1 = audioSampleRate1.ToString().Replace("-R ", "").Trim();\r
-                    if (thisQuery.q_audioSamplerate1 == "0")\r
-                        thisQuery.q_audioSamplerate1 = "Auto";\r
+                    string[] audioDataCounters = audioEncoders.ToString().Replace("-E ", "").Split(',');\r
+                    encoderCount = audioDataCounters.Length;\r
                 }\r
-                else\r
-                    thisQuery.q_audioSamplerate1 = "Auto";\r
 \r
-                if (audioSampleRate2.Success != false)\r
+                // Get the data from the regular expression results\r
+                string[] trackData = null;\r
+                string[] trackMixes = null;\r
+                string[] trackEncoders = null;\r
+                string[] trackBitrates = null;\r
+                string[] trackSamplerates = null;\r
+                string[] trackDRCvalues = null;\r
+\r
+                if (audioTracks.Success)\r
+                    trackData = audioTracks.ToString().Replace("-a ", "").Split(',');\r
+                if (audioTrackMixes.Success)\r
+                    trackMixes = audioTrackMixes.ToString().Replace("-6 ", "").Split(',');\r
+                if (audioEncoders.Success)\r
+                    trackEncoders = audioEncoders.ToString().Replace("-E ", "").Split(',');\r
+                if (audioBitrates.Success)\r
+                    trackBitrates = audioBitrates.ToString().Replace("-B ", "").Split(',');\r
+                if (audioSampleRates.Success)\r
+                    trackSamplerates = audioSampleRates.ToString().Replace("-R ", "").Split(',');\r
+                if (drcValues.Success)\r
+                    trackDRCvalues = drcValues.ToString().Replace("-D ", "").Split(',');\r
+\r
+                // Create new Audio Track Classes and store them in the ArrayList\r
+                ArrayList AllAudioTrackInfo = new ArrayList();\r
+                for (int x = 0; x < encoderCount; x++)\r
                 {\r
-                    string[] audioSRSelect = audioSampleRate2.ToString().Split(',');\r
-                    if (audioSRSelect[1] == "0")\r
-                        audioSRSelect[1] = "Auto";\r
-                    thisQuery.q_audioSamplerate2 = audioSRSelect[1].Trim();\r
-                }\r
+                    AudioTrack track = new AudioTrack();\r
+                    if (trackData != null)\r
+                        if (trackData.Length >= (x + 1))                         // Audio Track\r
+                            track.Track = trackData[x].Trim();\r
 \r
-                if (audioSampleRate3.Success != false)\r
-                {\r
-                    string[] audioSRSelect = audioSampleRate3.ToString().Split(',');\r
-                    if (audioSRSelect[1] == "0")\r
-                        audioSRSelect[1] = "Auto";\r
-                    thisQuery.q_audioSamplerate3 = audioSRSelect[2].Trim();\r
-                }\r
+                    if (trackMixes != null)\r
+                        if (trackMixes.Length >= (x + 1))                        // Audio Mix\r
+                            track.MixDown = getMixDown(trackMixes[x].Trim());\r
 \r
-                if (audioSampleRate4.Success != false)\r
-                {\r
-                    string[] audioSRSelect = audioSampleRate4.ToString().Split(',');\r
-                    if (audioSRSelect[1] == "0")\r
-                        audioSRSelect[1] = "Auto";\r
-                    thisQuery.q_audioSamplerate4 = audioSRSelect[3].Trim();\r
-                }\r
+                    if (trackEncoders != null)\r
+                        if (trackEncoders.Length >= (x + 1))                     // Audio Mix\r
+                            track.Encoder = getAudioEncoder(trackEncoders[x].Trim());\r
 \r
-                // DRC\r
-                if (drc1.Success != false)\r
-                {\r
-                    string value = drc1.ToString().Replace("-D ", "");\r
-                    float drcValue = float.Parse(value);\r
-                    drcValue = drcValue * 10;\r
-                    thisQuery.q_drc1 = drcValue;\r
-                }\r
-                else\r
-                    thisQuery.q_drc1 = 10;\r
+                    if (trackBitrates != null)\r
+                        if (trackBitrates.Length >= (x + 1))                     // Audio Encoder\r
+                            track.Bitrate = trackBitrates[x].Trim() == "auto" ? "Auto" : trackBitrates[x].Trim();\r
 \r
-                if (drc2.Success != false)\r
-                {\r
-                    string[] drcPoint = drc2.ToString().Split(',');\r
-                    string value = drcPoint[1];\r
-                    float drcValue = float.Parse(value);\r
-                    drcValue = drcValue * 10;\r
-                    thisQuery.q_drc2 = drcValue;\r
-                }\r
-                else\r
-                    thisQuery.q_drc2 = 10;\r
+                    if (trackSamplerates != null)\r
+                        if (trackSamplerates.Length >= (x + 1))                  // Audio SampleRate\r
+                            track.SampleRate = trackSamplerates[x].Trim() == "0" ? "Auto" : trackSamplerates[x].Trim();\r
 \r
-                if (drc3.Success != false)\r
-                {\r
-                    string[] drcPoint = drc3.ToString().Split(',');\r
-                    string value = drcPoint[2];\r
-                    float drcValue = float.Parse(value);\r
-                    drcValue = drcValue * 10;\r
-                    thisQuery.q_drc3 = drcValue;\r
-                }\r
-                else\r
-                    thisQuery.q_drc3 = 10;\r
+                    if (trackDRCvalues != null)\r
+                        if (trackDRCvalues.Length >= (x + 1))                   // Audio DRC Values\r
+                            track.DRC = trackDRCvalues[x].Trim();\r
 \r
-                if (drc4.Success != false)\r
-                {\r
-                    string[] drcPoint = drc4.ToString().Split(',');\r
-                    string value = drcPoint[3];\r
-                    float drcValue = float.Parse(value);\r
-                    drcValue = drcValue * 10;\r
-                    thisQuery.q_drc4 = drcValue;\r
+                    AllAudioTrackInfo.Add(track);\r
                 }\r
-                else\r
-                    thisQuery.q_drc4 = 10;\r
-\r
+                thisQuery.AudioInformation = AllAudioTrackInfo;\r
 \r
                 // Subtitle Stuff\r
-                if (subtitles.Success != false)\r
-                    thisQuery.q_subtitles = subtitles.ToString().Replace("-s ", "");\r
+                if (subtitles.Success)\r
+                    thisQuery.Subtitles = subtitles.ToString().Replace("-s ", "");\r
                 else\r
-                {\r
-                    if (subScan.Success)\r
-                        thisQuery.q_subtitles = "Autoselect";\r
-                    else\r
-                        thisQuery.q_subtitles = "None";\r
-                }\r
+                    thisQuery.Subtitles = subScan.Success ? "Autoselect" : "None";\r
 \r
-                thisQuery.q_forcedSubs = forcedSubtitles.Success;\r
+                thisQuery.ForcedSubtitles = forcedSubtitles.Success;\r
+                #endregion\r
 \r
+                #region Chapters Tab\r
+                if (chapterMarkersFileMode.Success || chapterMarkers.Success)\r
+                    thisQuery.ChapterMarkers = true;\r
                 #endregion\r
 \r
                 #region H.264 and other\r
-                //\r
-                //H264 Tab\r
-                //\r
-                if (x264.Success != false)\r
-                    thisQuery.q_h264 = x264.ToString().Replace("-x ", "");\r
-\r
-                //\r
-                //Progam Options\r
-                //\r
-                thisQuery.q_verbose = verbose.Success;\r
+\r
+                if (x264.Success)\r
+                    thisQuery.H264Query = x264.ToString().Replace("-x ", "");\r
+\r
+                thisQuery.Verbose = verbose.Success;\r
+\r
                 #endregion\r
             }\r
             catch (Exception exc)\r
             {\r
-                MessageBox.Show("An error has occured in the Query Parser. Please report this error on the forum in the 'Windows' support section. \n\n" + exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
+                MessageBox.Show(\r
+                    "An error has occured in the Query Parser. Please report this error on the forum in the 'Windows' support section. \n\n" +\r
+                    exc, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
             }\r
+\r
             #endregion\r
 \r
             return thisQuery;\r
         }\r
-\r
         private static string getMixDown(string mixdown)\r
         {\r
-            switch (mixdown)\r
+            switch (mixdown.Trim())\r
             {\r
                 case "mono":\r
                     return "Mono";\r
@@ -1324,16 +452,37 @@ namespace Handbrake.Functions
             switch (audioEnc)\r
             {\r
                 case "faac":\r
-                    return "AAC";\r
+                    return "AAC (faac)";\r
                 case "lame":\r
-                    return "MP3";\r
+                    return "MP3 (lame)";\r
                 case "vorbis":\r
-                    return "Vorbis";\r
+                    return "Vorbis (vorbis)";\r
                 case "ac3":\r
-                    return "AC3";\r
+                    return "AC3 Passthru";\r
+                case "dts":\r
+                    return "DTS Passthru";\r
                 default:\r
-                    return "AAC";\r
+                    return "AAC (faac)";\r
             }\r
         }\r
     }\r
+\r
+    public class AudioTrack\r
+    {\r
+        public AudioTrack()\r
+        {\r
+            // Default Values\r
+            Track = "Automatic";\r
+            MixDown = "Automatic";\r
+            SampleRate = "Auto";\r
+            Bitrate = "Auto";\r
+            DRC = "1";\r
+        }\r
+        public string Track { get; set; }\r
+        public string MixDown { get; set; }\r
+        public string Encoder { get; set; }\r
+        public string Bitrate { get; set; }\r
+        public string SampleRate { get; set; }\r
+        public string DRC { get; set; }\r
+    }\r
 }
\ No newline at end of file