OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / Functions / QueryParser.cs
index 2e1f470..413f8fa 100644 (file)
@@ -8,102 +8,85 @@ using System;
 using System.Globalization;\r
 using System.Text.RegularExpressions;\r
 using System.Windows.Forms;\r
+using System.Collections;\r
+using Handbrake.Model;\r
 \r
 namespace Handbrake.Functions\r
 {\r
-    internal class QueryParser\r
+    public class QueryParser\r
     {\r
         private static readonly CultureInfo Culture = new CultureInfo("en-US", false);\r
 \r
         #region Varibles\r
 \r
-        #region Source\r
-        public int DVDTitle { get; private set; }\r
-        public int DVDChapterStart { get; private set; }\r
-        public int DVDChapterFinish { get; private set; }\r
-        #endregion\r
-\r
-        #region Output Settings\r
-        public string Format { get; private set; }\r
-        public Boolean LargeMP4 { get; private set; }\r
-        public Boolean IpodAtom { get; private set; }\r
-        public Boolean OptimizeMP4 { get; private set; }\r
-        #endregion\r
-\r
-        #region Picture Settings\r
-        public int Width { get; private set; }\r
-        public int Height { get; private set; }\r
-        public int MaxWidth { get; private set; }\r
-        public int MaxHeight { get; private set; }\r
-        public string CropValues { get; private set; }\r
-        public string CropTop { get; private set; }\r
-        public string CropBottom { get; private set; }\r
-        public string CropLeft { get; private set; }\r
-        public string CropRight { get; private set; }\r
-        public Boolean Anamorphic { get; private set; }\r
-        public Boolean LooseAnamorphic { get; private set; }\r
-        #endregion\r
-\r
-        #region Video Filters\r
-        public string DeTelecine { get; private set; }\r
-        public int DeBlock { get; private set; }\r
-        public string DeInterlace { get; private set; }\r
-        public string DeNoise { get; private set; }\r
-        public string Decomb { get; private set; }\r
-        #endregion    \r
-\r
-        #region Video Settings\r
-        public string VideoEncoder { get; private set; }\r
-        public Boolean Grayscale { get; private set; }\r
-        public Boolean TwoPass { get; private set; }\r
-        public Boolean TurboFirstPass { get; private set; }\r
-        public string VideoFramerate { get; private set; }\r
-        public string AverageVideoBitrate { get; private set; }\r
-        public string VideoTargetSize { get; private set; }\r
-        public float VideoQuality { get; private set; }\r
-        #endregion\r
-\r
-        #region Audio Settings\r
-        public string AudioTrack1 { get; private set; }\r
-        public string AudioTrack2 { get; private set; }\r
-        public string AudioTrack3 { get; private set; }\r
-        public string AudioTrack4 { get; private set; }\r
-        public string AudioTrackMix1 { get; private set; }\r
-        public string AudioTrackMix2 { get; private set; }\r
-        public string AudioTrackMix3 { get; private set; }\r
-        public string AudioTrackMix4 { get; private set; }\r
-        public string AudioEncoder1 { get; private set; }\r
-        public string AudioEncoder2 { get; private set; }\r
-        public string AudioEncoder3 { get; private set; }\r
-        public string AudioEncoder4 { get; private set; }\r
-        public string AudioBitrate1 { get; private set; }\r
-        public string AudioBitrate2 { get; private set; }\r
-        public string AudioBitrate3 { get; private set; }\r
-        public string AudioBitrate4 { get; private set; }\r
-        public string AudioSamplerate1 { get; private set; }\r
-        public string AudioSamplerate2 { get; private set; }\r
-        public string AudioSamplerate3 { get; private set; }\r
-        public string AudioSamplerate4 { get; private set; }\r
-        public double DRC1 { get; private set; }\r
-        public double DRC2 { get; private set; }\r
-        public double DRC3 { get; private set; }\r
-        public double DRC4 { get; private set; }\r
-        public string Subtitles { get; private set; }\r
-        public Boolean ForcedSubtitles { get; private set; }\r
-        #endregion\r
-\r
-        #region Chapter Markers\r
-        public Boolean ChapterMarkers { get; private set; }\r
-        #endregion\r
-\r
-        #region Other\r
-        public string H264Query { get; private set; }\r
-        public Boolean Verbose { get; private set; }\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
-        // All the Main Window GUI options\r
         /// <summary>\r
         /// Takes in a query which can be in any order and parses it. \r
         /// All varibles are then set so they can be used elsewhere.\r
@@ -116,14 +99,10 @@ namespace Handbrake.Functions
 \r
             #region Regular Expressions\r
 \r
-            // Useful Destination Finder\r
-            //Regex r1 = new Regex(@"(-i)(?:\s\"")([a-zA-Z0-9?';!^%&*()_\-:\\\s\.]+)(?:\"")");\r
-            //Match source = r1.Match(input.Replace('"', '\"'));\r
-\r
             //Source\r
             Match title = Regex.Match(input, @"-t ([0-9]*)");\r
             Match chapters = Regex.Match(input, @"-c ([0-9-]*)");\r
-           \r
+\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
@@ -136,8 +115,15 @@ namespace Handbrake.Functions
             Match maxWidth = Regex.Match(input, @"-X ([0-9]*)");\r
             Match maxHeight = Regex.Match(input, @"-Y ([0-9]*)");\r
             Match crop = Regex.Match(input, @"--crop ([0-9]*):([0-9]*):([0-9]*):([0-9]*)");\r
-            Match lanamorphic = Regex.Match(input, @" -P");\r
-            Match anamorphic = 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
@@ -160,35 +146,12 @@ namespace Handbrake.Functions
 \r
             //Audio Settings Tab\r
             Match noAudio = Regex.Match(input, @"-a none");\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-z]*)");\r
-            Match audioTrack2Mix = Regex.Match(input, @"-6 ([0-9a-z]*),([0-9a-z]*)");\r
-            Match audioTrack3Mix = Regex.Match(input, @"-6 ([0-9a-z]*),([0-9a-z]*),([0-9a-z]*)");\r
-            Match audioTrack4Mix = Regex.Match(input, @"-6 ([0-9a-z]*),([0-9a-z]*),([0-9a-z]*),([0-9a-z]*)");\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-9auto]*)");\r
-            Match audioBitrate2 = Regex.Match(input, @"-B ([0-9auto]*),([0-9auto]*)");\r
-            Match audioBitrate3 = Regex.Match(input, @"-B ([0-9auto]*),([0-9auto]*),([0-9auto]*)");\r
-            Match audioBitrate4 = Regex.Match(input, @"-B ([0-9auto]*),([0-9auto]*),([0-9auto]*),([0-9auto]*)");\r
-\r
-            Match audioSampleRate1 = Regex.Match(input, @"-R ([0-9Auto.]*)");\r
-            Match audioSampleRate2 = Regex.Match(input, @"-R ([0-9Auto.]*),([0-9Auto.]*)");\r
-            Match audioSampleRate3 = Regex.Match(input, @"-R ([0-9Auto.]*),([0-9Auto.]*),([0-9Auto.]*)");\r
-            Match audioSampleRate4 = Regex.Match(input, @"-R ([0-9Auto.]*),([0-9Auto.]*),([0-9Auto.]*),([0-9Auto.]*)");\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 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
@@ -242,16 +205,16 @@ namespace Handbrake.Functions
                 #region Picture Tab\r
 \r
                 if (width.Success)\r
-                    thisQuery.Width = int.Parse(width.ToString().Replace("-w ", ""));\r
+                    thisQuery.Width = int.Parse(width.Groups[0].Value.Replace("-w ", ""));\r
 \r
                 if (height.Success)\r
-                    thisQuery.Height = int.Parse(height.ToString().Replace("-l ", ""));\r
+                    thisQuery.Height = int.Parse(height.Groups[0].Value.Replace("-l ", ""));\r
 \r
                 if (maxWidth.Success)\r
-                    thisQuery.MaxWidth = int.Parse(maxWidth.ToString().Replace("-X ", ""));\r
+                    thisQuery.MaxWidth = int.Parse(maxWidth.Groups[0].Value.Replace("-X ", ""));\r
 \r
                 if (maxHeight.Success)\r
-                    thisQuery.MaxHeight = int.Parse(maxHeight.ToString().Replace("-Y ", ""));\r
+                    thisQuery.MaxHeight = int.Parse(maxHeight.Groups[0].Value.Replace("-Y ", ""));\r
 \r
                 if (crop.Success)\r
                 {\r
@@ -262,9 +225,30 @@ namespace Handbrake.Functions
                     thisQuery.CropLeft = actCropValues[2];\r
                     thisQuery.CropRight = actCropValues[3];\r
                 }\r
-                \r
-                thisQuery.Anamorphic = anamorphic.Success;\r
-                thisQuery.LooseAnamorphic = lanamorphic.Success;\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.AnamorphicMode = 0;\r
+\r
+                thisQuery.KeepDisplayAsect = keepDisplayAsect.Success;\r
+\r
+                if (displayWidth.Success)\r
+                    thisQuery.DisplayWidthValue = double.Parse(displayWidth.Groups[0].Value.Replace("--display-width ", ""));\r
+\r
+                if (pixelAspect.Success)\r
+                    thisQuery.PixelAspectWidth = int.Parse(pixelAspect.Groups[1].Value.Replace("--pixel-aspect ", ""));\r
+\r
+                if (pixelAspect.Success && pixelAspect.Groups.Count >=3)\r
+                    thisQuery.PixelAspectHeight = int.Parse(pixelAspect.Groups[2].Value.Replace("--pixel-aspect ", ""));\r
+\r
+                if (modulus.Success)\r
+                    thisQuery.AnamorphicModulus = int.Parse(modulus.Groups[0].Value.Replace("--modulus ", ""));\r
+\r
 \r
                 #endregion\r
 \r
@@ -278,7 +262,7 @@ namespace Handbrake.Functions
                         thisQuery.Decomb = decombValue.ToString().Replace("--decomb=", "").Replace("\"", "");\r
                 }\r
 \r
-                thisQuery.DeInterlace = "None";\r
+                thisQuery.DeInterlace = "Off";\r
                 if (deinterlace.Success)\r
                 {\r
                     thisQuery.DeInterlace = deinterlace.ToString().Replace("--deinterlace=", "").Replace("\"", "");\r
@@ -286,7 +270,7 @@ namespace Handbrake.Functions
                     thisQuery.DeInterlace = thisQuery.DeInterlace.Replace("slowest", "Slowest");\r
                 }\r
 \r
-                thisQuery.DeNoise = "None";\r
+                thisQuery.DeNoise = "Off";\r
                 if (denoise.Success)\r
                 {\r
                     thisQuery.DeNoise = denoise.ToString().Replace("--denoise=", "").Replace("\"", "");\r
@@ -336,7 +320,7 @@ namespace Handbrake.Functions
                 thisQuery.Grayscale = grayscale.Success;\r
                 thisQuery.TwoPass = twoPass.Success;\r
                 thisQuery.TurboFirstPass = turboFirstPass.Success;\r
-                \r
+\r
                 if (videoBitrate.Success)\r
                     thisQuery.AverageVideoBitrate = videoBitrate.ToString().Replace("-b ", "");\r
                 if (videoFilesize.Success)\r
@@ -344,194 +328,75 @@ namespace Handbrake.Functions
 \r
                 if (videoQuality.Success)\r
                 {\r
-                   float qConvert = float.Parse(videoQuality.ToString().Replace("-q ", ""), Culture);\r
-                    //qConvert = Math.Ceiling(qConvert);\r
+                    float qConvert = float.Parse(videoQuality.ToString().Replace("-q ", ""), Culture);\r
                     thisQuery.VideoQuality = qConvert;\r
-                }\r
+                } \r
+                else\r
+                    thisQuery.VideoQuality = -1;\r
                 #endregion\r
 \r
                 #region Audio Tab\r
-\r
-                // Tracks\r
-                if (noAudio.Success)\r
-                    thisQuery.AudioTrack1 = "None";\r
-                else if (audioTrack1.Success)\r
-                    thisQuery.AudioTrack1 = "Automatic";\r
-\r
-                if (audioTrack2.Success)\r
-                {\r
-                    string[] audioChan = audioTrack2.ToString().Split(',');\r
-                    thisQuery.AudioTrack2 = audioChan[1];\r
-                }\r
-                else\r
-                    thisQuery.AudioTrack2 = "None";\r
-\r
-                if (audioTrack3.Success)\r
-                {\r
-                    string[] audioChan = audioTrack3.ToString().Split(',');\r
-                    thisQuery.AudioTrack3 = audioChan[2];\r
-                }\r
-                else\r
-                    thisQuery.AudioTrack3 = "None";\r
-\r
-                if (audioTrack4.Success)\r
-                {\r
-                    string[] audioChan = audioTrack4.ToString().Split(',');\r
-                    thisQuery.AudioTrack4 = audioChan[3];\r
-                }\r
-                else\r
-                    thisQuery.AudioTrack4 = "None";\r
-\r
-\r
-                // Mixdowns\r
-                thisQuery.AudioTrackMix1 = "Automatic";\r
-                if (audioTrack1Mix.Success)\r
-                    thisQuery.AudioTrackMix1 =\r
-                        getMixDown(audioTrack1Mix.ToString().Replace("-6 ", "").Replace(" ", ""));\r
-\r
-                thisQuery.AudioTrackMix2 = "Automatic";\r
-                if (audioTrack2Mix.Success)\r
-                {\r
-                    string[] audio2mix = audioTrack2Mix.ToString().Split(',');\r
-                    thisQuery.AudioTrackMix2 = getMixDown(audio2mix[1].Trim());\r
-                }\r
-\r
-                thisQuery.AudioTrackMix3 = "Automatic";\r
-                if (audioTrack3Mix.Success)\r
-                {\r
-                    string[] audio3mix = audioTrack3Mix.ToString().Split(',');\r
-                    thisQuery.AudioTrackMix3 = getMixDown(audio3mix[2].Trim());\r
-                }\r
-\r
-                thisQuery.AudioTrackMix4 = "Automatic";\r
-                if (audioTrack4Mix.Success)\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
-                    string[] audio4mix = audioTrack4Mix.ToString().Split(',');\r
-                    thisQuery.AudioTrackMix4 = getMixDown(audio4mix[3].Trim());\r
+                    string[] audioDataCounters = audioEncoders.ToString().Replace("-E ", "").Split(',');\r
+                    encoderCount = audioDataCounters.Length;\r
                 }\r
 \r
-\r
-                // Audio Encoders\r
-                if (audioEncoder1.Success)\r
-                    thisQuery.AudioEncoder1 = getAudioEncoder(audioEncoder1.ToString().Replace("-E ", ""));\r
-\r
-                if (audioEncoder2.Success)\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[] audio2enc = audioEncoder2.ToString().Split(',');\r
-                    thisQuery.AudioEncoder2 = getAudioEncoder(audio2enc[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 (audioEncoder3.Success)\r
-                {\r
-                    string[] audio3enc = audioEncoder3.ToString().Split(',');\r
-                    thisQuery.AudioEncoder3 = getAudioEncoder(audio3enc[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 (audioEncoder4.Success)\r
-                {\r
-                    string[] audio4enc = audioEncoder4.ToString().Split(',');\r
-                    thisQuery.AudioEncoder4 = getAudioEncoder(audio4enc[3].Trim());\r
-                }\r
+                    if (trackEncoders != null)\r
+                        if (trackEncoders.Length >= (x + 1))                     // Audio Mix\r
+                            track.Encoder = GetAudioEncoder(trackEncoders[x].Trim());\r
 \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
-                // Audio Bitrate\r
-                thisQuery.AudioBitrate1 = "";\r
-                if (audioBitrate1.Success)\r
-                {\r
-                    thisQuery.AudioBitrate1 = audioBitrate1.ToString().Replace("-B ", "").Trim();\r
-                    if (audioBitrate1.ToString().Replace("-B ", "").Trim() == "0") thisQuery.AudioBitrate1 = "Auto";\r
-                }\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
-                thisQuery.AudioBitrate2 = "";\r
-                if (audioBitrate2.Success && audioTrack2.Success)\r
-                {\r
-                    string[] audioBitrateSelect = audioBitrate2.ToString().Split(',');\r
-                    if (audioBitrateSelect[1].Trim() == "0") audioBitrateSelect[1] = "Auto";\r
-                    thisQuery.AudioBitrate2 = audioBitrateSelect[1].Trim();\r
-                }\r
+                    if (trackDRCvalues != null)\r
+                        if (trackDRCvalues.Length >= (x + 1))                   // Audio DRC Values\r
+                            track.DRC = trackDRCvalues[x].Trim();\r
 \r
-                thisQuery.AudioBitrate3 = "";\r
-                if (audioBitrate3.Success && audioTrack3.Success)\r
-                {\r
-                    string[] audioBitrateSelect = audioBitrate3.ToString().Split(',');\r
-                    if (audioBitrateSelect[2].Trim() == "0") audioBitrateSelect[2] = "Auto";\r
-                    thisQuery.AudioBitrate3 = audioBitrateSelect[2].Trim();\r
-                }\r
-\r
-                thisQuery.AudioBitrate4 = "";\r
-                if (audioBitrate4.Success)\r
-                {\r
-                    string[] audioBitrateSelect = audioBitrate4.ToString().Split(',');\r
-                    if (audioBitrateSelect[3].Trim() == "0") audioBitrateSelect[3] = "Auto";\r
-                    thisQuery.AudioBitrate4 = audioBitrateSelect[3].Trim();\r
-                }\r
-\r
-\r
-                // Audio Sample Rate\r
-                // Make sure to change 0 to Auto\r
-                thisQuery.AudioSamplerate1 = "Auto";\r
-                if (audioSampleRate1.Success)\r
-                {\r
-                    thisQuery.AudioSamplerate1 = audioSampleRate1.ToString().Replace("-R ", "").Trim();\r
-                    if (thisQuery.AudioSamplerate1 == "0") thisQuery.AudioSamplerate1 = "Auto";\r
-                }\r
-\r
-\r
-                if (audioSampleRate2.Success)\r
-                {\r
-                    string[] audioSRSelect = audioSampleRate2.ToString().Split(',');\r
-                    if (audioSRSelect[1] == "0") audioSRSelect[1] = "Auto";\r
-                    thisQuery.AudioSamplerate2 = audioSRSelect[1].Trim();\r
-                }\r
-\r
-                if (audioSampleRate3.Success)\r
-                {\r
-                    string[] audioSRSelect = audioSampleRate3.ToString().Split(',');\r
-                    if (audioSRSelect[2] == "0") audioSRSelect[2] = "Auto";\r
-                    thisQuery.AudioSamplerate3 = audioSRSelect[2].Trim();\r
-                }\r
-\r
-                if (audioSampleRate4.Success)\r
-                {\r
-                    string[] audioSRSelect = audioSampleRate4.ToString().Split(',');\r
-                    if (audioSRSelect[3] == "0") audioSRSelect[3] = "Auto";\r
-                    thisQuery.AudioSamplerate4 = audioSRSelect[3].Trim();\r
-                }\r
-\r
-                // DRC\r
-                float drcValue;\r
-\r
-                thisQuery.DRC1 = 1;\r
-                if (drc1.Success)\r
-                {\r
-                    string value = drc1.ToString().Replace("-D ", "");\r
-                    float.TryParse(value, out drcValue);\r
-                    thisQuery.DRC1 = drcValue;\r
-                }\r
-\r
-                thisQuery.DRC2 = 1;\r
-                if (drc2.Success)\r
-                {\r
-                    string[] drcPoint = drc2.ToString().Split(',');\r
-                    float.TryParse(drcPoint[1], out drcValue);\r
-                    thisQuery.DRC2 = drcValue;\r
-                }\r
-\r
-                thisQuery.DRC3 = 1;\r
-                if (drc3.Success)\r
-                {\r
-                    string[] drcPoint = drc3.ToString().Split(',');\r
-                    float.TryParse(drcPoint[2], out drcValue);\r
-                    thisQuery.DRC3 = drcValue;\r
-                }\r
-\r
-                thisQuery.DRC4 = 1;\r
-                if (drc4.Success)\r
-                {\r
-                    string[] drcPoint = drc4.ToString().Split(',');\r
-                    float.TryParse(drcPoint[3], out drcValue);\r
-                    thisQuery.DRC4 = drcValue;\r
+                    allAudioTrackInfo.Add(track);\r
                 }\r
+                thisQuery.AudioInformation = allAudioTrackInfo;\r
 \r
                 // Subtitle Stuff\r
                 if (subtitles.Success)\r
@@ -540,7 +405,6 @@ namespace Handbrake.Functions
                     thisQuery.Subtitles = subScan.Success ? "Autoselect" : "None";\r
 \r
                 thisQuery.ForcedSubtitles = forcedSubtitles.Success;\r
-\r
                 #endregion\r
 \r
                 #region Chapters Tab\r
@@ -569,7 +433,12 @@ namespace Handbrake.Functions
             return thisQuery;\r
         }\r
 \r
-        private static string getMixDown(string mixdown)\r
+        /// <summary>\r
+        /// Get the GUI equiv to a CLI mixdown\r
+        /// </summary>\r
+        /// <param name="mixdown"></param>\r
+        /// <returns></returns>\r
+        private static string GetMixDown(string mixdown)\r
         {\r
             switch (mixdown.Trim())\r
             {\r
@@ -587,20 +456,28 @@ namespace Handbrake.Functions
                     return "Automatic";\r
             }\r
         }\r
-        private static string getAudioEncoder(string audioEnc)\r
+\r
+        /// <summary>\r
+        /// Get the GUI equiv to a CLI audio encoder\r
+        /// </summary>\r
+        /// <param name="audioEnc"></param>\r
+        /// <returns></returns>\r
+        private static string GetAudioEncoder(string audioEnc)\r
         {\r
             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