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
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
// 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
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
[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
<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
}\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
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
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
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
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
"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
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
{\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
\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
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