2 using System.Collections.Generic;
\r
3 using System.ComponentModel;
\r
4 using System.Drawing;
\r
7 using System.Windows.Forms;
\r
9 namespace Handbrake.Controls
\r
11 public partial class x264Panel : UserControl
\r
15 InitializeComponent();
\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 = 0;
\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 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 if (!alphaDeblock.Equals("0"))
\r
393 drop_deblockAlpha.SelectedItem = alphaDeblock;
\r
395 drop_deblockAlpha.SelectedItem = "0";
\r
397 if (!betaDeblock.Replace("\n", "").Equals("0"))
\r
398 drop_deblockBeta.SelectedItem = betaDeblock.Replace("\n", "");
\r
400 drop_deblockBeta.SelectedItem = "0";
\r
404 if (optValue.Equals("p8x8,b8x8,i8x8,i4x4"))
\r
405 drop_analysis.SelectedItem = "Default (some)";
\r
406 if (optValue.Equals("none"))
\r
407 drop_analysis.SelectedItem = "None";
\r
408 if (optValue.Equals("all"))
\r
409 drop_analysis.SelectedItem = "All";
\r
412 check_8x8DCT.CheckState = CheckState.Checked;
\r
415 check_Cabac.CheckState = CheckState.Unchecked;
\r
418 string[] x = optValue.Split(',');
\r
420 double psyrd = 0, psytrellis = 0;
\r
422 double.TryParse(x[0], out psyrd);
\r
423 double.TryParse(x[1], out psytrellis);
\r
425 psyrd = psyrd * 10;
\r
426 psytrellis = psytrellis * 10;
\r
428 int.TryParse(psyrd.ToString(), out val);
\r
429 int.TryParse(psytrellis.ToString(), out val2);
\r
431 slider_psyrd.Value = val;
\r
432 slider_psytrellis.Value = val2;
\r
441 /// This function will update the X264 Query when one of the GUI widgets changes.
\r
443 private void on_x264_WidgetChange(string sender)
\r
446 String optNameToChange = sender;
\r
447 String currentOptString = rtf_x264Query.Text;
\r
449 /*First, we create a pattern to check for ":"optNameToChange"=" to modify the option if the name falls after
\r
450 the first character of the opt string (hence the ":") */
\r
451 String checkOptNameToChange = ":" + optNameToChange + "=";
\r
452 String checkOptNameToChangeBegin = optNameToChange + "=";
\r
454 // IF the current H264 Option String Contains Multiple Items or Just 1 Item
\r
455 if ((currentOptString.Contains(checkOptNameToChange)) || (currentOptString.StartsWith(checkOptNameToChangeBegin)))
\r
456 hasOptions(currentOptString, optNameToChange);
\r
457 else // IF there is no options in the rich text box!
\r
458 hasNoOptions(optNameToChange);
\r
462 /// Called when the current x264 option string contains multiple (or a single) item(s) in it seperated by :
\r
463 /// it updates the current option that the widget corrosponds to, if it is already in thes string.
\r
465 /// <param name="currentOptString"></param>
\r
466 /// <param name="optNameToChange"></param>
\r
467 private void hasOptions(string currentOptString, string optNameToChange)
\r
469 String thisOpt; // The separated option such as "bframes=3"
\r
470 String optName; // The option name such as "bframes"
\r
471 String[] currentOptsArray;
\r
473 /* Create new empty opt string*/
\r
474 String changedOptString = "";
\r
476 /*Put individual options into an array based on the ":" separator for processing, result is "<opt>=<value>"*/
\r
477 currentOptsArray = currentOptString.Split(':');
\r
479 /*iterate through the array and get <opts> and <values*/
\r
480 for (int loopcounter = 0; loopcounter < currentOptsArray.Length; loopcounter++)
\r
482 thisOpt = currentOptsArray[loopcounter];
\r
484 if (thisOpt.Contains("="))
\r
486 string[] splitOptRange = thisOpt.Split('=');
\r
488 optName = splitOptRange[0]; // e.g bframes
\r
491 * Run through the available widgets for x264 opts and set them, as you add widgets,
\r
492 * they need to be added here. This should be moved to its own method probably
\r
493 * If the optNameToChange is found, appropriately change the value or delete it if
\r
494 * "unspecified" is set.
\r
496 if (optName.Equals(optNameToChange))
\r
498 if (optNameToChange.Equals("deblock"))
\r
500 String da = drop_deblockAlpha.SelectedItem.ToString();
\r
501 String db = drop_deblockBeta.SelectedItem.ToString();
\r
503 if (((da.Contains("Default")) && (db.Contains("Default"))) || ((da.Contains("0")) && (db.Contains("0"))))
\r
505 drop_deblockBeta.SelectedItem = "Default (0)";
\r
506 drop_deblockAlpha.SelectedItem = "Default (0)";
\r
509 else if ((!da.Contains("Default")) && (db.Contains("Default")))
\r
511 drop_deblockBeta.SelectedItem = "0";
\r
512 thisOpt = "deblock=" + da + ",0";
\r
514 else if ((da.Contains("Default")) && (!db.Contains("Default")))
\r
516 drop_deblockAlpha.SelectedItem = "0";
\r
517 thisOpt = "deblock=0," + db;
\r
519 else if ((!da.Contains("Default")) && (!db.Contains("Default")))
\r
520 thisOpt = "deblock=" + da + "," + db;
\r
522 else if (optNameToChange.Equals("psy-rd"))
\r
524 if (slider_psyrd.Value == 10 && slider_psytrellis.Value == 0)
\r
528 double psyrd = slider_psyrd.Value * 0.1;
\r
529 double psytre = slider_psytrellis.Value * 0.1;
\r
534 rd = psyrd.ToString();
\r
539 rt = psytre.ToString();
\r
541 thisOpt = "psy-rd=" + rd + "," + rt;
\r
544 else if (optNameToChange.Equals("mixed-refs"))
\r
546 if (check_mixedReferences.CheckState == CheckState.Checked)
\r
547 thisOpt = "mixed-refs=1";
\r
551 else if (optNameToChange.Equals("weightb"))
\r
553 if (check_weightedBFrames.CheckState == CheckState.Checked)
\r
554 thisOpt = "weightb=1";
\r
558 else if (optNameToChange.Equals("b-pyramid"))
\r
560 if (check_pyrmidalBFrames.CheckState == CheckState.Checked)
\r
561 thisOpt = "b-pyramid=1";
\r
565 else if (optNameToChange.Equals("no-fast-pskip"))
\r
567 if (check_noFastPSkip.CheckState == CheckState.Checked)
\r
568 thisOpt = "no-fast-pskip=1";
\r
572 else if (optNameToChange.Equals("no-dct-decimate"))
\r
574 if (check_noDCTDecimate.CheckState == CheckState.Checked)
\r
575 thisOpt = "no-dct-decimate=1";
\r
579 else if (optNameToChange.Equals("8x8dct"))
\r
581 if (check_8x8DCT.CheckState == CheckState.Checked)
\r
582 thisOpt = "8x8dct=1";
\r
586 else if (optNameToChange.Equals("cabac"))
\r
588 if (check_Cabac.CheckState == CheckState.Checked)
\r
591 thisOpt = "cabac=0";
\r
593 else if (optNameToChange.Equals("me"))
\r
595 switch (drop_MotionEstimationMethod.SelectedIndex)
\r
598 thisOpt = "me=dia";
\r
602 thisOpt = "me=hex";
\r
606 thisOpt = "me=umh";
\r
610 thisOpt = "me=esa";
\r
614 thisOpt = "me=tesa";
\r
622 else if (optNameToChange.Equals("direct"))
\r
624 switch (drop_directPrediction.SelectedIndex)
\r
627 thisOpt = "direct=none";
\r
631 thisOpt = "direct=spatial";
\r
635 thisOpt = "direct=temporal";
\r
639 thisOpt = "direct=auto";
\r
647 else if (optNameToChange.Equals("analyse"))
\r
649 switch (drop_analysis.SelectedIndex)
\r
652 thisOpt = "analyse=none";
\r
656 thisOpt = "analyse=all";
\r
664 else if (optNameToChange.Equals("merange"))
\r
666 if (!drop_MotionEstimationRange.SelectedItem.ToString().Contains("Default"))
\r
667 thisOpt = "merange=" + drop_MotionEstimationRange.SelectedItem;
\r
671 else if (optNameToChange.Equals("b-adapt"))
\r
673 if (!drop_adaptBFrames.SelectedItem.ToString().Contains("Default"))
\r
674 thisOpt = "b-adapt=" + (drop_adaptBFrames.SelectedIndex - 1);
\r
678 else if (optNameToChange.Equals("ref"))
\r
680 if (!drop_refFrames.SelectedItem.ToString().Contains("Default"))
\r
681 thisOpt = "ref=" + drop_refFrames.SelectedItem;
\r
685 else if (optNameToChange.Equals("bframes"))
\r
687 String value = drop_bFrames.SelectedItem.ToString();
\r
688 if (!drop_bFrames.SelectedItem.ToString().Contains("Default"))
\r
689 thisOpt = "bframes=" + value;
\r
693 else if (optNameToChange.Equals("subq"))
\r
695 String value = drop_subpixelMotionEstimation.SelectedItem.ToString();
\r
696 if (!drop_subpixelMotionEstimation.SelectedItem.ToString().Contains("Default"))
\r
697 thisOpt = "subq=" + value;
\r
701 else if (optNameToChange.Equals("trellis"))
\r
703 String value = drop_trellis.SelectedItem.ToString();
\r
704 if (!drop_trellis.SelectedItem.ToString().Contains("Default"))
\r
705 thisOpt = "trellis=" + value;
\r
712 /* Construct New String for opts here */
\r
713 if (!thisOpt.Equals(""))
\r
715 if (changedOptString.Equals(""))
\r
716 changedOptString = thisOpt;
\r
718 changedOptString = changedOptString + ":" + thisOpt;
\r
722 /* Change the option string to reflect the new mod settings */
\r
723 rtf_x264Query.Text = changedOptString;
\r
727 /// Add's an option to the x264 query string.
\r
728 /// Handles 2 cases. 1 Where rtf_x264Query.Text is empty, and one where there is an option with no value,
\r
729 /// e.g no-fast-pskip
\r
731 /// <param name="optNameToChange"></param>
\r
732 private void hasNoOptions(string optNameToChange)
\r
735 if (rtf_x264Query.Text != "")
\r
738 string query = rtf_x264Query.Text;
\r
739 if (optNameToChange.Equals("me"))
\r
741 switch (drop_MotionEstimationMethod.SelectedIndex)
\r
744 query = query + colon + "me=dia";
\r
748 query = query + colon + "me=hex";
\r
752 query = query + colon + "me=umh";
\r
756 query = query + colon + "me=esa";
\r
760 query = query + colon + "me=tesa";
\r
767 else if (optNameToChange.Equals("direct"))
\r
769 switch (drop_directPrediction.SelectedIndex)
\r
772 query = query + colon + "direct=none";
\r
776 query = query + colon + "direct=spatial";
\r
780 query = query + colon + "direct=temporal";
\r
784 query = query + colon + "direct=auto";
\r
791 else if (optNameToChange.Equals("analyse"))
\r
793 switch (drop_analysis.SelectedIndex)
\r
796 query = query + colon + "analyse=none";
\r
800 query = query + colon + "analyse=all";
\r
807 else if (optNameToChange.Equals("merange"))
\r
809 int value = drop_MotionEstimationRange.SelectedIndex + 3;
\r
810 query = query + colon + "merange=" + value;
\r
812 else if (optNameToChange.Equals("b-adapt"))
\r
814 int value = drop_adaptBFrames.SelectedIndex - 1;
\r
815 query = query + colon + "b-adapt=" + value;
\r
818 else if (optNameToChange.Equals("deblock"))
\r
820 String da = drop_deblockAlpha.SelectedItem.ToString();
\r
821 String db = drop_deblockBeta.Text;
\r
823 if (((da.Contains("Default")) && (db.Contains("Default"))) || ((da.Contains("0")) && (db.Contains("0"))))
\r
825 drop_deblockBeta.SelectedItem = "Default (0)";
\r
826 drop_deblockAlpha.SelectedItem = "Default (0)";
\r
830 if (db.Contains("Default"))
\r
833 if (da.Contains("Default"))
\r
836 query = query + colon + "deblock=" + da + "," + db;
\r
839 else if (optNameToChange.Equals("psy-rd"))
\r
841 if (slider_psyrd.Value == 10 && slider_psytrellis.Value == 0)
\r
845 double psyrd = slider_psyrd.Value * 0.1;
\r
846 double psytre = slider_psytrellis.Value * 0.1;
\r
851 rd = psyrd.ToString();
\r
856 rt = psytre.ToString();
\r
858 query += colon + "psy-rd=" + rd + "," + rt;
\r
861 else if (optNameToChange.Equals("mixed-refs"))
\r
863 if (check_mixedReferences.CheckState == CheckState.Checked)
\r
864 query = query + colon + "mixed-refs=1";
\r
866 else if (optNameToChange.Equals("weightb"))
\r
868 if (check_weightedBFrames.CheckState == CheckState.Checked)
\r
869 query = query + colon + "weightb=1";
\r
871 else if (optNameToChange.Equals("b-pyramid"))
\r
873 if (check_pyrmidalBFrames.CheckState == CheckState.Checked)
\r
874 query = query + colon + "b-pyramid=1";
\r
876 else if (optNameToChange.Equals("no-fast-pskip"))
\r
878 if (check_noFastPSkip.CheckState == CheckState.Checked)
\r
879 query = query + colon + "no-fast-pskip=1";
\r
881 else if (optNameToChange.Equals("no-dct-decimate"))
\r
883 if (check_noDCTDecimate.CheckState == CheckState.Checked)
\r
884 query = query + colon + "no-dct-decimate=1";
\r
886 else if (optNameToChange.Equals("8x8dct"))
\r
888 if (check_8x8DCT.CheckState == CheckState.Checked)
\r
889 query = query + colon + "8x8dct=1";
\r
891 else if (optNameToChange.Equals("cabac"))
\r
893 if (check_Cabac.CheckState != CheckState.Checked)
\r
894 query = query + colon + "cabac=0";
\r
896 else if (optNameToChange.Equals("ref"))
\r
898 if (!drop_refFrames.SelectedItem.ToString().Contains("Default"))
\r
899 query = query + colon + "ref=" + drop_refFrames.SelectedItem;
\r
901 else if (optNameToChange.Equals("bframes"))
\r
903 String value = drop_bFrames.SelectedItem.ToString();
\r
904 if (!drop_bFrames.SelectedItem.ToString().Contains("Default"))
\r
905 query = query + colon + "bframes=" + value;
\r
907 else if (optNameToChange.Equals("subq"))
\r
909 String value = drop_subpixelMotionEstimation.SelectedItem.ToString();
\r
910 if (!drop_subpixelMotionEstimation.SelectedItem.ToString().Contains("Default"))
\r
911 query = query + colon + "subq=" + value;
\r
913 else if (optNameToChange.Equals("trellis"))
\r
915 if (!drop_trellis.SelectedItem.ToString().Contains("Default"))
\r
916 query = query + colon + "trellis=" + drop_trellis.SelectedItem;
\r
919 rtf_x264Query.Text = query;
\r
923 /// Shows and hides controls based on the values of other controls.
\r
925 /// <param name="sender"></param>
\r
926 private void animate(string sender)
\r
928 /* Lots of situations to cover.
\r
929 - B-frames (when 0 turn of b-frame specific stuff, when < 2 disable b-pyramid)
\r
930 - CABAC (when 0 turn off trellis)
\r
931 - analysis (if none, turn off 8x8dct)
\r
932 - refs (under 2, disable mixed-refs)
\r
933 - subme (if under 6, turn off psy-rd and psy-trel)
\r
934 - trellis (if 0, turn off psy-trel)
\r
940 if (drop_bFrames.SelectedIndex < 2)
\r
942 /* If the b-frame widget is at 0 or 1, the user has chosen
\r
943 not to use b-frames at all. So disable the options
\r
944 that can only be used when b-frames are enabled. */
\r
945 check_weightedBFrames.Visible = false;
\r
946 check_pyrmidalBFrames.Visible = false;
\r
947 drop_directPrediction.Visible = false;
\r
948 lbl_direct_prediction.Visible = false;
\r
950 check_weightedBFrames.CheckState = CheckState.Unchecked;
\r
951 check_pyrmidalBFrames.CheckState = CheckState.Unchecked;
\r
952 drop_directPrediction.SelectedIndex = 0;
\r
954 drop_adaptBFrames.Visible = false;
\r
955 lbl_adaptBFrames.Visible = false;
\r
956 drop_adaptBFrames.SelectedIndex = 0;
\r
958 else if (drop_bFrames.SelectedIndex == 2)
\r
960 /* Only 1 b-frame? Disable b-pyramid. */
\r
961 check_pyrmidalBFrames.Visible = false;
\r
962 check_pyrmidalBFrames.CheckState = CheckState.Unchecked;
\r
964 check_weightedBFrames.Visible = true;
\r
965 drop_directPrediction.Visible = true;
\r
966 lbl_direct_prediction.Visible = true;
\r
968 drop_adaptBFrames.Visible = true;
\r
969 lbl_adaptBFrames.Visible = true;
\r
973 check_weightedBFrames.Visible = true;
\r
974 check_pyrmidalBFrames.Visible = true;
\r
975 drop_directPrediction.Visible = true;
\r
976 lbl_direct_prediction.Visible = true;
\r
978 drop_adaptBFrames.Visible = true;
\r
979 lbl_adaptBFrames.Visible = true;
\r
983 if (check_Cabac.Checked == false)
\r
985 /* Without CABAC entropy coding, trellis doesn't run. */
\r
986 drop_trellis.Visible = false;
\r
987 drop_trellis.SelectedIndex = 0;
\r
988 lbl_trellis.Visible = false;
\r
992 drop_trellis.Visible = true;
\r
993 lbl_trellis.Visible = true;
\r
997 if (drop_analysis.SelectedIndex == 1)
\r
999 /* No analysis? Disable 8x8dct */
\r
1000 check_8x8DCT.Visible = false;
\r
1001 if (sender != "8x8dct")
\r
1002 check_8x8DCT.CheckState = CheckState.Unchecked;
\r
1005 check_8x8DCT.Visible = true;
\r
1008 if (drop_refFrames.SelectedIndex < 3)
\r
1010 check_mixedReferences.Visible = false;
\r
1011 if (sender != "mixed-refs")
\r
1012 check_mixedReferences.CheckState = CheckState.Unchecked;
\r
1015 check_mixedReferences.Visible = true;
\r
1017 case "me": // Motion Estimation
\r
1018 if (drop_MotionEstimationMethod.SelectedIndex < 3)
\r
1020 drop_MotionEstimationRange.Visible = false;
\r
1021 lbl_merange.Visible = false;
\r
1022 drop_MotionEstimationRange.SelectedIndex = 0;
\r
1026 drop_MotionEstimationRange.Visible = true;
\r
1027 lbl_merange.Visible = true;
\r
1030 case "subq": // subme
\r
1031 if (drop_subpixelMotionEstimation.SelectedIndex != 0 && drop_subpixelMotionEstimation.SelectedIndex < 7)
\r
1033 slider_psyrd.Visible = false;
\r
1034 slider_psyrd.Value = 10;
\r
1035 lbl_psyrd.Visible = false;
\r
1038 slider_psytrellis.Visible = false;
\r
1039 slider_psytrellis.Value = 0;
\r
1040 lbl_psytrellis.Visible = false;
\r
1044 slider_psyrd.Visible = true;
\r
1045 lbl_psyrd.Visible = true;
\r
1047 if (drop_trellis.SelectedIndex >= 2 && check_Cabac.Checked && slider_psytrellis.Visible == false)
\r
1049 slider_psytrellis.Visible = true;
\r
1050 lbl_psytrellis.Visible = true;
\r
1054 case "trellis": // subme
\r
1055 if (drop_trellis.SelectedIndex < 2)
\r
1057 slider_psytrellis.Visible = false;
\r
1058 slider_psytrellis.Value = 0;
\r
1059 lbl_psytrellis.Visible = false;
\r
1063 if ((drop_subpixelMotionEstimation.SelectedIndex == 0 || drop_subpixelMotionEstimation.SelectedIndex >= 7) && check_Cabac.Checked && slider_psytrellis.Visible == false)
\r
1065 slider_psytrellis.Visible = true;
\r
1066 lbl_psytrellis.Visible = true;
\r