OSDN Git Service

WinGui:
authorsr55 <sr55@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Fri, 9 Apr 2010 19:52:09 +0000 (19:52 +0000)
committersr55 <sr55@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Fri, 9 Apr 2010 19:52:09 +0000 (19:52 +0000)
- Refactor the code to work out the slider value from the video quality. This fixes a bug when loading presets with ffmpeg and makes the code far easier to understand.

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

win/C#/Functions/PresetLoader.cs

index f5153e9..fc835a0 100644 (file)
@@ -7,6 +7,7 @@ namespace Handbrake.Functions
 {\r
     using System;\r
     using System.Drawing;\r
+    using System.Globalization;\r
     using System.Windows.Forms;\r
 \r
     /// <summary>\r
@@ -175,41 +176,10 @@ namespace Handbrake.Functions
             }\r
 \r
             // Quality\r
-\r
             if (presetQuery.VideoQuality != -1)\r
             {\r
                 mainWindow.radio_cq.Checked = true;\r
-                if (presetQuery.VideoEncoder == "H.264 (x264)")\r
-                {\r
-                    double cqStep = Properties.Settings.Default.x264cqstep;\r
-                    int value;\r
-                    double x264Step = cqStep;\r
-                    double presetValue = presetQuery.VideoQuality;\r
-\r
-                    double x = 51 / x264Step;\r
-\r
-                    double calculated = presetValue / x264Step;\r
-                    calculated = x - calculated;\r
-\r
-                    int.TryParse(calculated.ToString(), out value);\r
-\r
-                    // This will sometimes occur when the preset was generated \r
-                    // with a different granularity, so, round and try again.\r
-                    if (value == 0)\r
-                    {\r
-                        double val = Math.Round(calculated, 0);\r
-                        int.TryParse(val.ToString(), out value);\r
-                    }\r
-                    if (value <= mainWindow.slider_videoQuality.Maximum)\r
-                        mainWindow.slider_videoQuality.Value = value;\r
-                }\r
-                else\r
-                {\r
-                    int presetVal;\r
-                    int.TryParse(presetQuery.VideoQuality.ToString(), out presetVal);\r
-                    if (presetVal > mainWindow.slider_videoQuality.Minimum)\r
-                        mainWindow.slider_videoQuality.Value = presetVal;\r
-                }\r
+                mainWindow.slider_videoQuality.Value = QualityToSliderValue(presetQuery.VideoEncoder, presetQuery.VideoQuality);\r
             }\r
 \r
             mainWindow.check_2PassEncode.CheckState = presetQuery.TwoPass ? CheckState.Checked : CheckState.Unchecked;\r
@@ -247,5 +217,31 @@ namespace Handbrake.Functions
 \r
             #endregion\r
         }\r
+\r
+        /// <summary>\r
+        /// Convert a Quality Value to a position value for the Video Quality slider\r
+        /// </summary>\r
+        /// <param name="videoEncoder">The selected video encoder</param>\r
+        /// <param name="value">The Quality value</param>\r
+        /// <returns>The position on the video quality slider</returns>\r
+        private static int QualityToSliderValue(string videoEncoder, float value)\r
+        {\r
+            int sliderValue = 0;\r
+            switch (videoEncoder)\r
+            {\r
+                case "MPEG-4 (FFmpeg)":\r
+                    sliderValue = 32 - (int)value;\r
+                    break;\r
+                case "H.264 (x264)":\r
+                    double cqStep = Properties.Settings.Default.x264cqstep;\r
+                    sliderValue = (int)((51.0 / cqStep) - (value/cqStep));\r
+                    break;\r
+                case "VP3 (Theora)":\r
+                    sliderValue = (int)value;\r
+                    break;\r
+            }\r
+\r
+            return sliderValue;\r
+        }\r
     }\r
 }
\ No newline at end of file