2 using System.Windows.Forms;
\r
4 namespace Handbrake.Controls
\r
6 public partial class x264Panel : UserControl
\r
10 InitializeComponent();
\r
12 if (Properties.Settings.Default.tooltipEnable == "Checked")
\r
13 setToolTipActive(true);
\r
18 public string x264Query
\r
20 get { return rtf_x264Query.Text; }
\r
21 set { rtf_x264Query.Text = value; }
\r
23 public void setToolTipActive(Boolean active)
\r
25 ToolTip.Active = active;
\r
28 #region Controls Changed
\r
29 private void drop_refFrames_SelectedIndexChanged(object sender, EventArgs e)
\r
31 on_x264_WidgetChange("ref");
\r
33 private void check_mixedReferences_CheckedChanged(object sender, EventArgs e)
\r
35 on_x264_WidgetChange("mixed-refs");
\r
37 private void drop_bFrames_SelectedIndexChanged(object sender, EventArgs e)
\r
39 on_x264_WidgetChange("bframes");
\r
41 private void drop_directPrediction_SelectedIndexChanged(object sender, EventArgs e)
\r
43 on_x264_WidgetChange("direct");
\r
45 private void check_weightedBFrames_CheckedChanged(object sender, EventArgs e)
\r
47 on_x264_WidgetChange("weightb");
\r
49 private void check_pyrmidalBFrames_CheckedChanged(object sender, EventArgs e)
\r
51 on_x264_WidgetChange("b-pyramid");
\r
53 private void drop_MotionEstimationMethod_SelectedIndexChanged(object sender, EventArgs e)
\r
55 on_x264_WidgetChange("me");
\r
57 private void drop_MotionEstimationRange_SelectedIndexChanged(object sender, EventArgs e)
\r
59 on_x264_WidgetChange("merange");
\r
61 private void drop_subpixelMotionEstimation_SelectedIndexChanged(object sender, EventArgs e)
\r
63 on_x264_WidgetChange("subq");
\r
65 private void drop_analysis_SelectedIndexChanged(object sender, EventArgs e)
\r
67 on_x264_WidgetChange("analyse");
\r
69 private void check_8x8DCT_CheckedChanged(object sender, EventArgs e)
\r
71 on_x264_WidgetChange("8x8dct");
\r
73 private void drop_deblockAlpha_SelectedIndexChanged(object sender, EventArgs e)
\r
75 on_x264_WidgetChange("deblock");
\r
77 private void drop_deblockBeta_SelectedIndexChanged(object sender, EventArgs e)
\r
79 on_x264_WidgetChange("deblock");
\r
81 private void drop_trellis_SelectedIndexChanged(object sender, EventArgs e)
\r
83 on_x264_WidgetChange("trellis");
\r
85 private void check_noFastPSkip_CheckedChanged(object sender, EventArgs e)
\r
87 on_x264_WidgetChange("no-fast-pskip");
\r
89 private void check_noDCTDecimate_CheckedChanged(object sender, EventArgs e)
\r
91 on_x264_WidgetChange("no-dct-decimate");
\r
93 private void check_Cabac_CheckedChanged(object sender, EventArgs e)
\r
95 on_x264_WidgetChange("cabac");
\r
97 private void slider_psyrd_Scroll(object sender, EventArgs e)
\r
99 on_x264_WidgetChange("psy-rd");
\r
101 private void slider_psytrellis_Scroll(object sender, EventArgs e)
\r
103 on_x264_WidgetChange("psy-rd");
\r
105 private void drop_adaptBFrames_SelectedIndexChanged(object sender, EventArgs e)
\r
107 on_x264_WidgetChange("b-adapt");
\r
109 private void rtf_x264Query_TextChanged(object sender, EventArgs e)
\r
111 if (rtf_x264Query.Text.EndsWith("\n"))
\r
113 string query = rtf_x264Query.Text.Replace("\n", "");
\r
115 rtf_x264Query.Text = query;
\r
116 X264_StandardizeOptString();
\r
117 X264_SetCurrentSettingsInPanel();
\r
119 if (rtf_x264Query.Text == string.Empty)
\r
123 private void btn_reset_Click(object sender, EventArgs e)
\r
125 rtf_x264Query.Text = "";
\r
131 /// Reset all components to defaults and clears the x264 rtf box
\r
133 public void reset2Defaults()
\r
135 check_8x8DCT.CheckState = CheckState.Unchecked;
\r
136 check_Cabac.CheckState = CheckState.Checked;
\r
137 check_mixedReferences.CheckState = CheckState.Unchecked;
\r
138 check_noDCTDecimate.CheckState = CheckState.Unchecked;
\r
139 check_noFastPSkip.CheckState = CheckState.Unchecked;
\r
140 check_pyrmidalBFrames.CheckState = CheckState.Unchecked;
\r
141 check_weightedBFrames.CheckState = CheckState.Unchecked;
\r
142 drop_analysis.SelectedIndex = 0;
\r
143 drop_bFrames.SelectedIndex = 0;
\r
144 drop_deblockAlpha.SelectedIndex = 0;
\r
145 drop_deblockBeta.SelectedIndex = 0;
\r
146 drop_directPrediction.SelectedIndex = 0;
\r
147 drop_MotionEstimationMethod.SelectedIndex = 0;
\r
148 drop_MotionEstimationRange.SelectedIndex = 0;
\r
149 drop_refFrames.SelectedIndex = 0;
\r
150 drop_subpixelMotionEstimation.SelectedIndex = 0;
\r
151 drop_trellis.SelectedIndex = 0;
\r
152 slider_psyrd.Value = 10;
\r
153 slider_psytrellis.Value = 0;
\r
154 drop_adaptBFrames.SelectedIndex = 0;
\r
156 rtf_x264Query.Text = "";
\r
160 /// Iterate over every x264 option, standardize it, write the full string to the x264 rtf box
\r
162 public void X264_StandardizeOptString()
\r
164 /* Set widgets depending on the opt string in field */
\r
165 String thisOpt; // The separated option such as "bframes=3"
\r
166 String optName; // The option name such as "bframes"
\r
167 String optValue;// The option value such as "3"
\r
168 String changedOptString = "";
\r
169 String[] currentOptsArray;
\r
171 /*First, we get an opt string to process */
\r
172 String currentOptString = rtf_x264Query.Text;
\r
174 /*verify there is an opt string to process */
\r
175 if (currentOptString.Contains("="))
\r
177 /*Put individual options into an array based on the ":" separator for processing, result is "<opt>=<value>"*/
\r
178 currentOptsArray = currentOptString.Split(':');
\r
180 /*iterate through the array and get <opts> and <values*/
\r
182 int currentOptsArrayCount = currentOptsArray.Length;
\r
183 for (loopcounter = 0; loopcounter < currentOptsArrayCount; loopcounter++)
\r
185 thisOpt = currentOptsArray[loopcounter];
\r
186 if (currentOptsArray[currentOptsArrayCount - 1] == string.Empty)
\r
189 String[] splitOptRange = thisOpt.Split('=');
\r
192 if (thisOpt.Contains("="))
\r
194 optName = splitOptRange[0];
\r
195 optValue = splitOptRange[1];
\r
197 /* Standardize the names here depending on whats in the string */
\r
198 optName = X264_StandardizeOptNames(optName);
\r
199 thisOpt = optName + "=" + optValue;
\r
201 else // No value given so we use a default of "1"
\r
204 /* Standardize the names here depending on whats in the string */
\r
205 optName = X264_StandardizeOptNames(optName);
\r
206 thisOpt = optName + "=1";
\r
210 /* Construct New String for opts here */
\r
211 if (thisOpt == string.Empty)
\r
212 changedOptString = changedOptString + thisOpt;
\r
215 if (changedOptString == string.Empty)
\r
216 changedOptString = thisOpt;
\r
218 changedOptString = changedOptString + ":" + thisOpt;
\r
223 /* Change the option string to reflect the new standardized option string */
\r
224 if (changedOptString != "")
\r
225 rtf_x264Query.Text = changedOptString;
\r
229 /// Take a single option and standardize it. Returns as a String
\r
230 /// Input: String. - Single X264 Option. Name only
\r
231 /// Output: String - Single X264 Option. Name only. Changed to standard format
\r
233 /// <param name="cleanOptNameString"></param>
\r
234 /// <returns></returns>
\r
235 private static string X264_StandardizeOptNames(String cleanOptNameString)
\r
237 String input = cleanOptNameString;
\r
239 if (input.Equals("ref") || input.Equals("frameref"))
\r
240 cleanOptNameString = "ref";
\r
242 /*No Fast PSkip nofast_pskip*/
\r
243 if (input.Equals("no-fast-pskip") || input.Equals("no_fast_pskip") || input.Equals("nofast_pskip"))
\r
244 cleanOptNameString = "no-fast-pskip";
\r
246 /*No Dict Decimate*/
\r
247 if (input.Equals("no-dct-decimate") || input.Equals("no_dct_decimate") || input.Equals("nodct_decimate"))
\r
248 cleanOptNameString = "no-dct-decimate";
\r
251 if (input.Equals("subme"))
\r
252 cleanOptNameString = "subq";
\r
255 if (input.Equals("me-range") || input.Equals("me_range"))
\r
256 cleanOptNameString = "merange";
\r
259 if (input.Equals("weight-b") || input.Equals("weight_b"))
\r
260 cleanOptNameString = "weightb";
\r
263 if (input.Equals("b_pyramid"))
\r
264 cleanOptNameString = "b-pyramid";
\r
266 /*Direct Prediction*/
\r
267 if (input.Equals("direct-pred") || input.Equals("direct_pred"))
\r
268 cleanOptNameString = "direct";
\r
271 if (input.Equals("filter"))
\r
272 cleanOptNameString = "deblock";
\r
275 if (input.Equals("partitions"))
\r
276 cleanOptNameString = "analyse";
\r
278 return cleanOptNameString;
\r
282 /// Resets the GUI widgets to the contents of the option string.
\r
284 public void X264_SetCurrentSettingsInPanel()
\r
286 /* Set widgets depending on the opt string in field */
\r
287 String thisOpt; // The separated option such as "bframes=3"
\r
288 String optName; // The option name such as "bframes"
\r
289 String optValue;// The option value such as "3"
\r
290 String[] currentOptsArray;
\r
292 //Set currentOptString to the contents of the text box.
\r
293 String currentOptString = rtf_x264Query.Text.Replace("\n", "");
\r
295 /*verify there is an opt string to process */
\r
296 if (currentOptString.Contains("="))
\r
298 /*Put individual options into an array based on the ":" separator for processing, result is "<opt>=<value>"*/
\r
299 currentOptsArray = currentOptString.Split(':');
\r
301 /*iterate through the array and get <opts> and <values*/
\r
303 int currentOptsArrayCount = currentOptsArray.Length;
\r
305 /*iterate through the array and get <opts> and <values*/
\r
306 for (loopcounter = 0; loopcounter < currentOptsArrayCount; loopcounter++)
\r
308 thisOpt = currentOptsArray[loopcounter];
\r
309 String[] splitOptRange = thisOpt.Split('=');
\r
311 if (thisOpt.Contains("="))
\r
313 optName = splitOptRange[0];
\r
314 optValue = splitOptRange[1];
\r
316 /*Run through the available widgets for x264 opts and set them, as you add widgets,
\r
317 they need to be added here. This should be moved to its own method probably*/
\r
321 drop_bFrames.SelectedItem = optValue;
\r
324 drop_refFrames.SelectedItem = optValue;
\r
326 case "no-fast-pskip":
\r
327 check_noFastPSkip.CheckState = CheckState.Checked;
\r
329 case "no-dct-decimate":
\r
330 check_noDCTDecimate.CheckState = CheckState.Checked;
\r
333 drop_subpixelMotionEstimation.SelectedItem = optValue;
\r
336 drop_trellis.SelectedItem = optValue;
\r
339 check_mixedReferences.CheckState = CheckState.Checked;
\r
342 if (optValue.Equals("dia"))
\r
343 drop_MotionEstimationMethod.SelectedItem = "Diamond";
\r
344 else if (optValue.Equals("hex"))
\r
345 drop_MotionEstimationMethod.SelectedItem = "Hexagon";
\r
346 else if (optValue.Equals("umh"))
\r
347 drop_MotionEstimationMethod.SelectedItem = "Uneven Multi-Hexagon";
\r
348 else if (optValue.Equals("esa"))
\r
349 drop_MotionEstimationMethod.SelectedItem = "Exhaustive";
\r
350 else if (optValue.Equals("tesa"))
\r
351 drop_MotionEstimationMethod.SelectedItem = "Transformed Exhaustive";
\r
354 drop_MotionEstimationRange.SelectedItem = optValue;
\r
358 int.TryParse(optValue, out badapt);
\r
359 drop_adaptBFrames.SelectedIndex = (badapt + 1);
\r
362 check_weightedBFrames.CheckState = CheckState.Checked;
\r
365 check_pyrmidalBFrames.CheckState = CheckState.Checked;
\r
368 if (optValue == "auto")
\r
369 optValue = "Automatic";
\r
371 if (optValue != "")
\r
373 Char[] letters = optValue.ToCharArray();
\r
374 letters[0] = Char.ToUpper(letters[0]);
\r
375 optValue = new string(letters);
\r
378 drop_directPrediction.SelectedItem = optValue;
\r
381 string[] splitDeblock = optValue.Split(',');
\r
382 string alphaDeblock = splitDeblock[0];
\r
383 string betaDeblock = splitDeblock[1];
\r
385 if (alphaDeblock.Equals("0") && betaDeblock.Replace("\n", "").Equals("0"))
\r
387 drop_deblockAlpha.SelectedItem = "Default (0)";
\r
388 drop_deblockBeta.SelectedItem = "Default (0)";
\r
392 drop_deblockAlpha.SelectedItem = !alphaDeblock.Equals("0") ? alphaDeblock : "0";
\r
394 drop_deblockBeta.SelectedItem = !betaDeblock.Replace("\n", "").Equals("0") ? betaDeblock.Replace("\n", "") : "0";
\r
398 if (optValue.Equals("p8x8,b8x8,i8x8,i4x4"))
\r
399 drop_analysis.SelectedItem = "Default (some)";
\r
400 if (optValue.Equals("none"))
\r
401 drop_analysis.SelectedItem = "None";
\r
402 if (optValue.Equals("all"))
\r
403 drop_analysis.SelectedItem = "All";
\r
406 check_8x8DCT.CheckState = CheckState.Checked;
\r
409 check_Cabac.CheckState = CheckState.Unchecked;
\r
412 string[] x = optValue.Split(',');
\r
414 double psyrd, psytrellis;
\r
417 // default psy-rd = 1 (10 for the slider)
\r
418 psyrd = double.TryParse(x[0], out psyrd) ? psyrd * 10 : 10.0;
\r
419 // default psy-trellis = 0
\r
420 psytrellis = double.TryParse(x[1], out psytrellis) ? psytrellis * 10 : 0.0;
\r
422 int.TryParse(psyrd.ToString(), out val);
\r
423 int.TryParse(psytrellis.ToString(), out val2);
\r
425 slider_psyrd.Value = val;
\r
426 slider_psytrellis.Value = val2;
\r
435 /// This function will update the X264 Query when one of the GUI widgets changes.
\r
437 private void on_x264_WidgetChange(string sender)
\r
440 String optNameToChange = sender;
\r
441 String currentOptString = rtf_x264Query.Text;
\r
443 /*First, we create a pattern to check for ":"optNameToChange"=" to modify the option if the name falls after
\r
444 the first character of the opt string (hence the ":") */
\r
445 String checkOptNameToChange = ":" + optNameToChange + "=";
\r
446 String checkOptNameToChangeBegin = optNameToChange + "=";
\r
448 // IF the current H264 Option String Contains Multiple Items or Just 1 Item
\r
449 if ((currentOptString.Contains(checkOptNameToChange)) || (currentOptString.StartsWith(checkOptNameToChangeBegin)))
\r
450 hasOptions(currentOptString, optNameToChange);
\r
451 else // IF there is no options in the rich text box!
\r
452 hasNoOptions(optNameToChange);
\r
456 /// Called when the current x264 option string contains multiple (or a single) item(s) in it seperated by :
\r
457 /// it updates the current option that the widget corrosponds to, if it is already in thes string.
\r
459 /// <param name="currentOptString"></param>
\r
460 /// <param name="optNameToChange"></param>
\r
461 private void hasOptions(string currentOptString, string optNameToChange)
\r
463 String thisOpt; // The separated option such as "bframes=3"
\r
464 String optName; // The option name such as "bframes"
\r
465 String[] currentOptsArray;
\r
467 /* Create new empty opt string*/
\r
468 String changedOptString = "";
\r
470 /*Put individual options into an array based on the ":" separator for processing, result is "<opt>=<value>"*/
\r
471 currentOptsArray = currentOptString.Split(':');
\r
473 /*iterate through the array and get <opts> and <values*/
\r
474 for (int loopcounter = 0; loopcounter < currentOptsArray.Length; loopcounter++)
\r
476 thisOpt = currentOptsArray[loopcounter];
\r
478 if (thisOpt.Contains("="))
\r
480 string[] splitOptRange = thisOpt.Split('=');
\r
482 optName = splitOptRange[0]; // e.g bframes
\r
485 * Run through the available widgets for x264 opts and set them, as you add widgets,
\r
486 * they need to be added here. This should be moved to its own method probably
\r
487 * If the optNameToChange is found, appropriately change the value or delete it if
\r
488 * "unspecified" is set.
\r
490 if (optName.Equals(optNameToChange))
\r
492 if (optNameToChange.Equals("deblock"))
\r
494 String da = drop_deblockAlpha.SelectedItem.ToString();
\r
495 String db = drop_deblockBeta.SelectedItem.ToString();
\r
497 if (((da.Contains("Default")) && (db.Contains("Default"))) || ((da.Contains("0")) && (db.Contains("0"))))
\r
499 drop_deblockBeta.SelectedItem = "Default (0)";
\r
500 drop_deblockAlpha.SelectedItem = "Default (0)";
\r
503 else if ((!da.Contains("Default")) && (db.Contains("Default")))
\r
505 drop_deblockBeta.SelectedItem = "0";
\r
506 thisOpt = "deblock=" + da + ",0";
\r
508 else if ((da.Contains("Default")) && (!db.Contains("Default")))
\r
510 drop_deblockAlpha.SelectedItem = "0";
\r
511 thisOpt = "deblock=0," + db;
\r
513 else if ((!da.Contains("Default")) && (!db.Contains("Default")))
\r
514 thisOpt = "deblock=" + da + "," + db;
\r
516 else if (optNameToChange.Equals("psy-rd"))
\r
518 if (slider_psyrd.Value == 10 && slider_psytrellis.Value == 0)
\r
522 double psyrd = slider_psyrd.Value * 0.1;
\r
523 double psytre = slider_psytrellis.Value * 0.1;
\r
525 string rd = psyrd.ToString("f1");
\r
526 string rt = psytre.ToString("f1");
\r
528 thisOpt = "psy-rd=" + rd + "," + rt;
\r
531 else if (optNameToChange.Equals("mixed-refs"))
\r
532 thisOpt = check_mixedReferences.CheckState == CheckState.Checked ? "mixed-refs=1" : "";
\r
533 else if (optNameToChange.Equals("weightb"))
\r
534 thisOpt = check_weightedBFrames.CheckState == CheckState.Checked ? "weightb=1" : "";
\r
535 else if (optNameToChange.Equals("b-pyramid"))
\r
536 thisOpt = check_pyrmidalBFrames.CheckState == CheckState.Checked ? "b-pyramid=1" : "";
\r
537 else if (optNameToChange.Equals("no-fast-pskip"))
\r
538 thisOpt = check_noFastPSkip.CheckState == CheckState.Checked ? "no-fast-pskip=1" : "";
\r
539 else if (optNameToChange.Equals("no-dct-decimate"))
\r
540 thisOpt = check_noDCTDecimate.CheckState == CheckState.Checked ? "no-dct-decimate=1" : "";
\r
541 else if (optNameToChange.Equals("8x8dct"))
\r
542 thisOpt = check_8x8DCT.CheckState == CheckState.Checked ? "8x8dct=1" : "";
\r
543 else if (optNameToChange.Equals("cabac"))
\r
544 thisOpt = check_Cabac.CheckState == CheckState.Checked ? "" : "cabac=0";
\r
545 else if (optNameToChange.Equals("me"))
\r
547 switch (drop_MotionEstimationMethod.SelectedIndex)
\r
550 thisOpt = "me=dia";
\r
554 thisOpt = "me=hex";
\r
558 thisOpt = "me=umh";
\r
562 thisOpt = "me=esa";
\r
566 thisOpt = "me=tesa";
\r
574 else if (optNameToChange.Equals("direct"))
\r
576 switch (drop_directPrediction.SelectedIndex)
\r
579 thisOpt = "direct=none";
\r
583 thisOpt = "direct=spatial";
\r
587 thisOpt = "direct=temporal";
\r
591 thisOpt = "direct=auto";
\r
599 else if (optNameToChange.Equals("analyse"))
\r
601 switch (drop_analysis.SelectedIndex)
\r
604 thisOpt = "analyse=none";
\r
608 thisOpt = "analyse=all";
\r
616 else if (optNameToChange.Equals("merange"))
\r
618 thisOpt = !drop_MotionEstimationRange.SelectedItem.ToString().Contains("Default")
\r
619 ? "merange=" + drop_MotionEstimationRange.SelectedItem
\r
622 else if (optNameToChange.Equals("b-adapt"))
\r
624 thisOpt = !drop_adaptBFrames.SelectedItem.ToString().Contains("Default")
\r
625 ? "b-adapt=" + (drop_adaptBFrames.SelectedIndex - 1)
\r
628 else if (optNameToChange.Equals("ref"))
\r
630 thisOpt = !drop_refFrames.SelectedItem.ToString().Contains("Default")
\r
631 ? "ref=" + drop_refFrames.SelectedItem
\r
634 else if (optNameToChange.Equals("bframes"))
\r
636 String value = drop_bFrames.SelectedItem.ToString();
\r
637 thisOpt = !drop_bFrames.SelectedItem.ToString().Contains("Default")
\r
638 ? "bframes=" + value
\r
641 else if (optNameToChange.Equals("subq"))
\r
643 String value = drop_subpixelMotionEstimation.SelectedItem.ToString();
\r
644 thisOpt = !drop_subpixelMotionEstimation.SelectedItem.ToString().Contains("Default")
\r
648 else if (optNameToChange.Equals("trellis"))
\r
650 String value = drop_trellis.SelectedItem.ToString();
\r
651 thisOpt = !drop_trellis.SelectedItem.ToString().Contains("Default")
\r
652 ? "trellis=" + value
\r
658 /* Construct New String for opts here */
\r
659 if (!thisOpt.Equals(""))
\r
660 changedOptString = changedOptString.Equals("") ? thisOpt : changedOptString + ":" + thisOpt;
\r
663 /* Change the option string to reflect the new mod settings */
\r
664 rtf_x264Query.Text = changedOptString;
\r
668 /// Add's an option to the x264 query string.
\r
669 /// Handles 2 cases. 1 Where rtf_x264Query.Text is empty, and one where there is an option with no value,
\r
670 /// e.g no-fast-pskip
\r
672 /// <param name="optNameToChange"></param>
\r
673 private void hasNoOptions(string optNameToChange)
\r
676 if (rtf_x264Query.Text != "")
\r
679 string query = rtf_x264Query.Text;
\r
680 if (optNameToChange.Equals("me"))
\r
682 switch (drop_MotionEstimationMethod.SelectedIndex)
\r
685 query = query + colon + "me=dia";
\r
689 query = query + colon + "me=hex";
\r
693 query = query + colon + "me=umh";
\r
697 query = query + colon + "me=esa";
\r
701 query = query + colon + "me=tesa";
\r
708 else if (optNameToChange.Equals("direct"))
\r
710 switch (drop_directPrediction.SelectedIndex)
\r
713 query = query + colon + "direct=none";
\r
717 query = query + colon + "direct=spatial";
\r
721 query = query + colon + "direct=temporal";
\r
725 query = query + colon + "direct=auto";
\r
732 else if (optNameToChange.Equals("analyse"))
\r
734 switch (drop_analysis.SelectedIndex)
\r
737 query = query + colon + "analyse=none";
\r
741 query = query + colon + "analyse=all";
\r
748 else if (optNameToChange.Equals("merange"))
\r
750 int value = drop_MotionEstimationRange.SelectedIndex + 3;
\r
751 query = query + colon + "merange=" + value;
\r
753 else if (optNameToChange.Equals("b-adapt"))
\r
755 int value = drop_adaptBFrames.SelectedIndex - 1;
\r
756 query = query + colon + "b-adapt=" + value;
\r
759 else if (optNameToChange.Equals("deblock"))
\r
761 String da = drop_deblockAlpha.SelectedItem.ToString();
\r
762 String db = drop_deblockBeta.Text;
\r
764 if (((da.Contains("Default")) && (db.Contains("Default"))) || ((da.Contains("0")) && (db.Contains("0"))))
\r
766 drop_deblockBeta.SelectedItem = "Default (0)";
\r
767 drop_deblockAlpha.SelectedItem = "Default (0)";
\r
771 if (db.Contains("Default"))
\r
774 if (da.Contains("Default"))
\r
777 query = query + colon + "deblock=" + da + "," + db;
\r
780 else if (optNameToChange.Equals("psy-rd"))
\r
782 if (slider_psyrd.Value == 10 && slider_psytrellis.Value == 0)
\r
786 double psyrd = slider_psyrd.Value * 0.1;
\r
787 double psytre = slider_psytrellis.Value * 0.1;
\r
789 string rd = psyrd.ToString("f1");
\r
790 string rt = psytre.ToString("f1");
\r
792 query += colon + "psy-rd=" + rd + "," + rt;
\r
795 else if (optNameToChange.Equals("mixed-refs"))
\r
797 if (check_mixedReferences.CheckState == CheckState.Checked)
\r
798 query = query + colon + "mixed-refs=1";
\r
800 else if (optNameToChange.Equals("weightb"))
\r
802 if (check_weightedBFrames.CheckState == CheckState.Checked)
\r
803 query = query + colon + "weightb=1";
\r
805 else if (optNameToChange.Equals("b-pyramid"))
\r
807 if (check_pyrmidalBFrames.CheckState == CheckState.Checked)
\r
808 query = query + colon + "b-pyramid=1";
\r
810 else if (optNameToChange.Equals("no-fast-pskip"))
\r
812 if (check_noFastPSkip.CheckState == CheckState.Checked)
\r
813 query = query + colon + "no-fast-pskip=1";
\r
815 else if (optNameToChange.Equals("no-dct-decimate"))
\r
817 if (check_noDCTDecimate.CheckState == CheckState.Checked)
\r
818 query = query + colon + "no-dct-decimate=1";
\r
820 else if (optNameToChange.Equals("8x8dct"))
\r
822 if (check_8x8DCT.CheckState == CheckState.Checked)
\r
823 query = query + colon + "8x8dct=1";
\r
825 else if (optNameToChange.Equals("cabac"))
\r
827 if (check_Cabac.CheckState != CheckState.Checked)
\r
828 query = query + colon + "cabac=0";
\r
830 else if (optNameToChange.Equals("ref"))
\r
832 if (!drop_refFrames.SelectedItem.ToString().Contains("Default"))
\r
833 query = query + colon + "ref=" + drop_refFrames.SelectedItem;
\r
835 else if (optNameToChange.Equals("bframes"))
\r
837 String value = drop_bFrames.SelectedItem.ToString();
\r
838 if (!drop_bFrames.SelectedItem.ToString().Contains("Default"))
\r
839 query = query + colon + "bframes=" + value;
\r
841 else if (optNameToChange.Equals("subq"))
\r
843 String value = drop_subpixelMotionEstimation.SelectedItem.ToString();
\r
844 if (!drop_subpixelMotionEstimation.SelectedItem.ToString().Contains("Default"))
\r
845 query = query + colon + "subq=" + value;
\r
847 else if (optNameToChange.Equals("trellis"))
\r
849 if (!drop_trellis.SelectedItem.ToString().Contains("Default"))
\r
850 query = query + colon + "trellis=" + drop_trellis.SelectedItem;
\r
853 rtf_x264Query.Text = query;
\r
857 /// Shows and hides controls based on the values of other controls.
\r
859 /// <param name="sender"></param>
\r
860 private void animate(string sender)
\r
862 /* Lots of situations to cover.
\r
863 - B-frames (when 0 turn of b-frame specific stuff, when < 2 disable b-pyramid)
\r
864 - CABAC (when 0 turn off trellis)
\r
865 - analysis (if none, turn off 8x8dct)
\r
866 - refs (under 2, disable mixed-refs)
\r
867 - subme (if under 6, turn off psy-rd and psy-trel)
\r
868 - trellis (if 0, turn off psy-trel)
\r
874 if (drop_bFrames.SelectedIndex < 2)
\r
876 /* If the b-frame widget is at 0 or 1, the user has chosen
\r
877 not to use b-frames at all. So disable the options
\r
878 that can only be used when b-frames are enabled. */
\r
879 check_weightedBFrames.Visible = false;
\r
880 check_pyrmidalBFrames.Visible = false;
\r
881 drop_directPrediction.Visible = false;
\r
882 lbl_direct_prediction.Visible = false;
\r
884 check_weightedBFrames.CheckState = CheckState.Unchecked;
\r
885 check_pyrmidalBFrames.CheckState = CheckState.Unchecked;
\r
886 drop_directPrediction.SelectedIndex = 0;
\r
888 drop_adaptBFrames.Visible = false;
\r
889 lbl_adaptBFrames.Visible = false;
\r
890 drop_adaptBFrames.SelectedIndex = 0;
\r
892 else if (drop_bFrames.SelectedIndex == 2)
\r
894 /* Only 1 b-frame? Disable b-pyramid. */
\r
895 check_pyrmidalBFrames.Visible = false;
\r
896 check_pyrmidalBFrames.CheckState = CheckState.Unchecked;
\r
898 check_weightedBFrames.Visible = true;
\r
899 drop_directPrediction.Visible = true;
\r
900 lbl_direct_prediction.Visible = true;
\r
902 drop_adaptBFrames.Visible = true;
\r
903 lbl_adaptBFrames.Visible = true;
\r
907 check_weightedBFrames.Visible = true;
\r
908 check_pyrmidalBFrames.Visible = true;
\r
909 drop_directPrediction.Visible = true;
\r
910 lbl_direct_prediction.Visible = true;
\r
912 drop_adaptBFrames.Visible = true;
\r
913 lbl_adaptBFrames.Visible = true;
\r
917 if (check_Cabac.Checked == false)
\r
919 /* Without CABAC entropy coding, trellis doesn't run. */
\r
920 drop_trellis.Visible = false;
\r
921 drop_trellis.SelectedIndex = 0;
\r
922 lbl_trellis.Visible = false;
\r
926 drop_trellis.Visible = true;
\r
927 lbl_trellis.Visible = true;
\r
931 if (drop_analysis.SelectedIndex == 1)
\r
933 /* No analysis? Disable 8x8dct */
\r
934 check_8x8DCT.Visible = false;
\r
935 if (sender != "8x8dct")
\r
936 check_8x8DCT.CheckState = CheckState.Unchecked;
\r
939 check_8x8DCT.Visible = true;
\r
942 if (drop_refFrames.SelectedIndex < 3)
\r
944 check_mixedReferences.Visible = false;
\r
945 if (sender != "mixed-refs")
\r
946 check_mixedReferences.CheckState = CheckState.Unchecked;
\r
949 check_mixedReferences.Visible = true;
\r
951 case "me": // Motion Estimation
\r
952 if (drop_MotionEstimationMethod.SelectedIndex < 3)
\r
954 drop_MotionEstimationRange.Visible = false;
\r
955 lbl_merange.Visible = false;
\r
956 drop_MotionEstimationRange.SelectedIndex = 0;
\r
960 drop_MotionEstimationRange.Visible = true;
\r
961 lbl_merange.Visible = true;
\r
964 case "subq": // subme
\r
965 if (drop_subpixelMotionEstimation.SelectedIndex != 0 && drop_subpixelMotionEstimation.SelectedIndex < 7)
\r
967 slider_psyrd.Visible = false;
\r
968 slider_psyrd.Value = 10;
\r
969 lbl_psyrd.Visible = false;
\r
972 slider_psytrellis.Visible = false;
\r
973 slider_psytrellis.Value = 0;
\r
974 lbl_psytrellis.Visible = false;
\r
978 slider_psyrd.Visible = true;
\r
979 lbl_psyrd.Visible = true;
\r
981 if (drop_trellis.SelectedIndex >= 2 && check_Cabac.Checked && slider_psytrellis.Visible == false)
\r
983 slider_psytrellis.Visible = true;
\r
984 lbl_psytrellis.Visible = true;
\r
988 case "trellis": // subme
\r
989 if (drop_trellis.SelectedIndex < 2)
\r
991 slider_psytrellis.Visible = false;
\r
992 slider_psytrellis.Value = 0;
\r
993 lbl_psytrellis.Visible = false;
\r
997 if ((drop_subpixelMotionEstimation.SelectedIndex == 0 || drop_subpixelMotionEstimation.SelectedIndex >= 7) && check_Cabac.Checked && slider_psytrellis.Visible == false)
\r
999 slider_psytrellis.Visible = true;
\r
1000 lbl_psytrellis.Visible = true;
\r