OSDN Git Service

WinGui:
authorsr55 <sr55@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Mon, 10 Aug 2009 19:59:27 +0000 (19:59 +0000)
committersr55 <sr55@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Mon, 10 Aug 2009 19:59:27 +0000 (19:59 +0000)
- Changing the CQ step for the quality slider when using x264 no longer requires a program restart.

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

win/C#/Functions/PresetLoader.cs
win/C#/Functions/QueryGenerator.cs
win/C#/Properties/Settings.Designer.cs
win/C#/Properties/Settings.settings
win/C#/frmMain.cs
win/C#/frmOptions.Designer.cs
win/C#/frmOptions.cs

index 1366414..4345f6f 100644 (file)
@@ -151,8 +151,10 @@ namespace Handbrake.Functions
                 mainWindow.radio_cq.Checked = true;\r
                 if (presetQuery.VideoEncoder == "H.264 (x264)")\r
                 {\r
+                    double cqStep;\r
+                    double.TryParse(Properties.Settings.Default.x264cqstep, out cqStep);\r
                     int value;\r
-                    double x264step = Properties.Settings.Default.x264cqstep;\r
+                    double x264step = cqStep;\r
                     double presetValue = presetQuery.VideoQuality;\r
 \r
                     double x = 51 / x264step;\r
@@ -169,7 +171,8 @@ namespace Handbrake.Functions
                         double val = Math.Round(calculated, 0);\r
                         int.TryParse(val.ToString(), out value);\r
                     }\r
-                    mainWindow.slider_videoQuality.Value = value;\r
+                    if (value < mainWindow.slider_videoQuality.Maximum)\r
+                        mainWindow.slider_videoQuality.Value = value;\r
                 }\r
                 else\r
                 {\r
index 42b9625..b67dfa9 100644 (file)
@@ -192,6 +192,9 @@ namespace Handbrake.Functions
             // Video Quality Setting\r
             if (mainWindow.radio_cq.Checked)\r
             {\r
+                double cqStep;\r
+                double.TryParse(Properties.Settings.Default.x264cqstep, out cqStep);\r
+\r
                 double value;\r
                 switch (mainWindow.drp_videoEncoder.Text)\r
                 {\r
@@ -201,7 +204,7 @@ namespace Handbrake.Functions
                         break;\r
                     case "H.264 (x264)":\r
                         CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");\r
-                        value = 51 - mainWindow.slider_videoQuality.Value * Properties.Settings.Default.x264cqstep;\r
+                        value = 51 - mainWindow.slider_videoQuality.Value * cqStep;\r
                         value = Math.Round(value, 2);\r
                         query += " -q " + value.ToString(culture);\r
                         break;\r
index 4cf4635..b20cb37 100644 (file)
@@ -302,9 +302,9 @@ namespace Handbrake.Properties {
         [global::System.Configuration.UserScopedSettingAttribute()]\r
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r
         [global::System.Configuration.DefaultSettingValueAttribute("0.25")]\r
-        public double x264cqstep {\r
+        public string x264cqstep {\r
             get {\r
-                return ((double)(this["x264cqstep"]));\r
+                return ((string)(this["x264cqstep"]));\r
             }\r
             set {\r
                 this["x264cqstep"] = value;\r
index 0f9c5ff..7bb901b 100644 (file)
@@ -71,7 +71,7 @@
     <Setting Name="QueryEditorTab" Type="System.Boolean" Scope="User">\r
       <Value Profile="(Default)">False</Value>\r
     </Setting>\r
-    <Setting Name="x264cqstep" Type="System.Double" Scope="User">\r
+    <Setting Name="x264cqstep" Type="System.String" Scope="User">\r
       <Value Profile="(Default)">0.25</Value>\r
     </Setting>\r
     <Setting Name="verboseLevel" Type="System.Int32" Scope="User">\r
index 584764f..91fb789 100644 (file)
@@ -343,7 +343,7 @@ namespace Handbrake
         }\r
         private void mnu_options_Click(object sender, EventArgs e)\r
         {\r
-            Form options = new frmOptions();\r
+            Form options = new frmOptions(this);\r
             options.ShowDialog();\r
         }\r
         #endregion\r
@@ -1153,7 +1153,9 @@ namespace Handbrake
                     slider_videoQuality.TickFrequency = 1;\r
 \r
                     CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");\r
-                    double multiplier = 1.0 / Properties.Settings.Default.x264cqstep;\r
+                    double cqStep;\r
+                    double.TryParse(Properties.Settings.Default.x264cqstep, out cqStep);\r
+                    double multiplier = 1.0 / cqStep;\r
                     double value = slider_videoQuality.Value * multiplier;\r
 \r
                     switch (Properties.Settings.Default.x264cqstep.ToString(culture))\r
@@ -1165,7 +1167,7 @@ namespace Handbrake
                             slider_videoQuality.Maximum = 204;\r
                             break;\r
                         case "0.50":\r
-                            slider_videoQuality.Maximum = 40;\r
+                            slider_videoQuality.Maximum = 102;\r
                             break;\r
                         case "1.0":\r
                             slider_videoQuality.Maximum = 51;\r
@@ -1207,8 +1209,58 @@ namespace Handbrake
                 check_iPodAtom.Checked = false;\r
             }\r
         }\r
+        private string _cachedCqStep = Properties.Settings.Default.x264cqstep;   \r
+        /// <summary>\r
+        /// Update the CQ slider for x264 for a new CQ step. This is set from option\r
+        /// </summary>\r
+        public void setQualityFromSlider()\r
+        {\r
+            // Work out the current RF value.\r
+            double cqStep;\r
+            double.TryParse(_cachedCqStep, out cqStep);\r
+            double rfValue = 51.0 - slider_videoQuality.Value * cqStep;\r
+            \r
+            // Change the maximum value for the slider\r
+            CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");\r
+            switch (Properties.Settings.Default.x264cqstep.ToString(culture))\r
+            {\r
+                case "0.20":\r
+                    slider_videoQuality.Maximum = 255;\r
+                    break;\r
+                case "0.25":\r
+                    slider_videoQuality.Maximum = 204;\r
+                    break;\r
+                case "0.50":\r
+                    slider_videoQuality.Maximum = 102;\r
+                    break;\r
+                case "1.0":\r
+                    slider_videoQuality.Maximum = 51;\r
+                    break;\r
+                default:\r
+                    slider_videoQuality.Maximum = 51;\r
+                    break;\r
+            }\r
+\r
+            // Reset the CQ slider to RF0\r
+            slider_videoQuality.Value = slider_videoQuality.Maximum;\r
+\r
+            // Reset the CQ slider back to the previous value as close as possible\r
+            double cqStepNew;\r
+            double.TryParse(Properties.Settings.Default.x264cqstep, out cqStepNew);\r
+            double rfValueCurrent = 51.0 - slider_videoQuality.Value * cqStepNew;\r
+            while (rfValueCurrent < rfValue)\r
+            {\r
+                slider_videoQuality.Value--;\r
+                rfValueCurrent = 51.0 - slider_videoQuality.Value * cqStepNew;\r
+            }\r
+\r
+            // Cache the CQ step for the next calculation\r
+            _cachedCqStep = Properties.Settings.Default.x264cqstep;\r
+        }\r
         private void slider_videoQuality_Scroll(object sender, EventArgs e)\r
         {\r
+            double cqStep;\r
+            double.TryParse(Properties.Settings.Default.x264cqstep, out cqStep);\r
             switch (drp_videoEncoder.Text)\r
             {\r
                 case "MPEG-4 (FFmpeg)":\r
@@ -1219,8 +1271,8 @@ namespace Handbrake
                     SliderValue.Text = Math.Round((val * 100), 2) + "% QP:" + (32 - slider_videoQuality.Value);\r
                     break;\r
                 case "H.264 (x264)":\r
-                    rfValue = 51.0 - slider_videoQuality.Value * Properties.Settings.Default.x264cqstep;\r
-                    max = slider_videoQuality.Maximum * Properties.Settings.Default.x264cqstep;\r
+                    rfValue = 51.0 - slider_videoQuality.Value * cqStep;\r
+                    max = slider_videoQuality.Maximum * cqStep;\r
                     min = slider_videoQuality.Minimum;\r
                     val = ((max - min) - (rfValue - min)) / (max - min);\r
                     rfValue = Math.Round(rfValue, 2);\r
index ec7065e..92c9cff 100644 (file)
@@ -1019,7 +1019,7 @@ namespace Handbrake
             "0.50",\r
             "0.25",\r
             "0.20"});\r
-            this.drop_x264step.Location = new System.Drawing.Point(358, 184);\r
+            this.drop_x264step.Location = new System.Drawing.Point(262, 184);\r
             this.drop_x264step.Name = "drop_x264step";\r
             this.drop_x264step.Size = new System.Drawing.Size(85, 21);\r
             this.drop_x264step.TabIndex = 86;\r
@@ -1034,9 +1034,9 @@ namespace Handbrake
             this.tableLayoutPanel4.SetColumnSpan(this.label30, 2);\r
             this.label30.Location = new System.Drawing.Point(67, 188);\r
             this.label30.Name = "label30";\r
-            this.label30.Size = new System.Drawing.Size(285, 13);\r
+            this.label30.Size = new System.Drawing.Size(189, 13);\r
             this.label30.TabIndex = 87;\r
-            this.label30.Text = "Constant quality fractional granularity (Requires Restart):\r\n";\r
+            this.label30.Text = "Constant quality fractional granularity";\r
             // \r
             // btn_drive_detect\r
             // \r
index 66adf04..0206d1c 100644 (file)
@@ -14,9 +14,13 @@ namespace Handbrake
 {\r
     public partial class frmOptions : Form\r
     {\r
-        public frmOptions()\r
+        private frmMain mainWindow;\r
+\r
+        public frmOptions(frmMain mw)\r
         {\r
             InitializeComponent();\r
+            mainWindow = mw;\r
+\r
             IDictionary<string, string> langList = Main.mapLanguages();\r
             foreach (string item in langList.Keys)\r
                 drop_preferredLang.Items.Add(item);\r
@@ -155,7 +159,8 @@ namespace Handbrake
 \r
             // x264 step\r
             CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");\r
-            drop_x264step.SelectedItem = Properties.Settings.Default.x264cqstep.ToString(culture);\r
+            string test = Properties.Settings.Default.x264cqstep.ToString(culture);\r
+            drop_x264step.SelectedItem = test;\r
 \r
             // Use Experimental dvdnav\r
             if (Properties.Settings.Default.dvdnav)\r
@@ -370,18 +375,19 @@ namespace Handbrake
             switch (drop_x264step.SelectedIndex)\r
             {\r
                 case 0:\r
-                    Properties.Settings.Default.x264cqstep = 1.0;\r
+                    Properties.Settings.Default.x264cqstep = "1.0";\r
                     break;\r
                 case 1:\r
-                    Properties.Settings.Default.x264cqstep = 0.50;\r
+                    Properties.Settings.Default.x264cqstep = "0.50";\r
                     break;\r
                 case 2:\r
-                    Properties.Settings.Default.x264cqstep = 0.25;\r
+                    Properties.Settings.Default.x264cqstep = "0.25";\r
                     break;\r
                 case 3:\r
-                    Properties.Settings.Default.x264cqstep = 0.20;\r
+                    Properties.Settings.Default.x264cqstep = "0.20";\r
                     break;\r
             }\r
+            mainWindow.setQualityFromSlider();\r
         }\r
 \r
         private void check_dvdnav_CheckedChanged(object sender, EventArgs e)\r