OSDN Git Service

e277a853e87c29e1fe38812219cbdd2b1b7d96ae
[handbrake-jp/handbrake-jp-git.git] / win / C# / frmMain.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Collections.Specialized;\r
4 using System.ComponentModel;\r
5 using System.Data;\r
6 using System.Drawing;\r
7 using System.Text;\r
8 using System.Windows.Forms;\r
9 using System.Net;\r
10 using System.IO;\r
11 using System.Diagnostics;\r
12 using System.Threading;\r
13 using System.Runtime.InteropServices;\r
14 \r
15 \r
16 namespace Handbrake\r
17 {\r
18 \r
19     public partial class frmMain : Form\r
20     {\r
21         // -------------------------------------------------------------- \r
22         // Applicaiton Startup Stuff\r
23         // --------------------------------------------------------------\r
24 \r
25         #region Application Startup\r
26 \r
27         private Process hbProc;\r
28         private Parsing.DVD thisDVD;        \r
29         private frmQueue queueWindow = new frmQueue();  \r
30 \r
31         public frmMain()\r
32         {\r
33 \r
34             // Load the splash screen on another thread. Once completed wait for 1 second.\r
35             ThreadPool.QueueUserWorkItem(showSplash); \r
36             Thread.Sleep(1000);\r
37 \r
38             InitializeComponent();\r
39 \r
40             // This is a quick Hack fix for the cross-thread problem with frmDvdIndo ************************\r
41             //dvdInfoWindow.Show();\r
42             //dvdInfoWindow.Hide();\r
43             // **********************************************************************************************\r
44 \r
45             // Set the Version number lable to the corect version.\r
46             Version.Text = "Version " + Properties.Settings.Default.CliVersion;\r
47 \r
48             // Run the update checker.\r
49             updateCheck();\r
50 \r
51             // Now load the users default if required. (Will overide the above setting)\r
52             loadUserDefaults();\r
53 \r
54             // Display the quick start window if required.\r
55             quickStart();\r
56 \r
57             // Enable or disable tooltips\r
58             tooltip();\r
59 \r
60             // Hide the presets part of the window\r
61             this.Width = 590;\r
62 \r
63             showPresets();\r
64 \r
65             /*\r
66              * This code can be used for storing preset and preset name information in future versions.\r
67              * Please ignore it for the moment.\r
68             // Create and initialize a new StringCollection.\r
69             StringCollection myCol = new StringCollection();\r
70             // Add a range of elements from an array to the end of the StringCollection.\r
71             String[] myArr = new String[] { "RED", "orange", "yellow", "RED", "green", "blue", "RED", "indigo", "violet", "RED" };\r
72             myCol.AddRange(myArr);\r
73             Properties.Settings.Default.BuiltInPresets = myCol;\r
74             MessageBox.Show(Properties.Settings.Default.BuiltInPresets.ToString());\r
75             */\r
76         }\r
77 \r
78         private void showSplash(object sender)\r
79         {\r
80             // Display splash screen for 1.5 Seconds\r
81             Form splash = new frmSplashScreen();\r
82             splash.Show();\r
83             Thread.Sleep(1500);  \r
84             splash.Close(); // Then close.\r
85         }\r
86 \r
87         private void loadUserDefaults()\r
88         { \r
89             try\r
90             {\r
91                 // Load the users default settings or if the user has not got this option enabled, load the normal preset.\r
92                 if (Properties.Settings.Default.defaultSettings == "Checked")\r
93                 {\r
94                     // Source\r
95                     text_source.Text = Properties.Settings.Default.DVDSource;\r
96                     drp_dvdtitle.Text = Properties.Settings.Default.DVDTitle;\r
97                     drop_chapterStart.Text = Properties.Settings.Default.ChapterStart;\r
98                     drop_chapterFinish.Text = Properties.Settings.Default.ChapterFinish;\r
99 \r
100                     // Destination\r
101                     text_destination.Text = Properties.Settings.Default.VideoDest;\r
102                     drp_videoEncoder.Text = Properties.Settings.Default.VideoEncoder;\r
103                     drp_audioCodec.Text = Properties.Settings.Default.AudioEncoder;\r
104                     text_width.Text = Properties.Settings.Default.Width;\r
105                     text_height.Text = Properties.Settings.Default.Height;\r
106 \r
107                     // Picture Settings Tab\r
108                     drp_crop.Text = Properties.Settings.Default.CroppingOption;\r
109                     text_top.Text = Properties.Settings.Default.CropTop;\r
110                     text_bottom.Text = Properties.Settings.Default.CropBottom;\r
111                     text_left.Text = Properties.Settings.Default.CropLeft;\r
112                     text_right.Text = Properties.Settings.Default.CropRight;\r
113                     drp_subtitle.Text = Properties.Settings.Default.Subtitles;\r
114 \r
115                     // Video Settings Tab\r
116                     text_bitrate.Text = Properties.Settings.Default.VideoBitrate;\r
117                     text_filesize.Text = Properties.Settings.Default.VideoFilesize;\r
118                     slider_videoQuality.Value = Properties.Settings.Default.VideoQuality;\r
119 \r
120                     if (Properties.Settings.Default.TwoPass == "Checked")\r
121                     {\r
122                         check_2PassEncode.CheckState = CheckState.Checked;\r
123                     }\r
124 \r
125                     drp_deInterlace_option.Text = Properties.Settings.Default.DeInterlace;\r
126                     drp_deNoise.Text = Properties.Settings.Default.denoise;\r
127 \r
128                     if (Properties.Settings.Default.detelecine == "Checked")\r
129                     {\r
130                         check_detelecine.CheckState = CheckState.Checked;\r
131                     }\r
132 \r
133                     if (Properties.Settings.Default.detelecine == "Checked")\r
134                     {\r
135                         check_deblock.CheckState = CheckState.Checked;\r
136                     }\r
137 \r
138 \r
139                     if (Properties.Settings.Default.Grayscale == "Checked")\r
140                     {\r
141                         check_grayscale.CheckState = CheckState.Checked;\r
142                     }\r
143 \r
144                     drp_videoFramerate.Text = Properties.Settings.Default.Framerate;\r
145 \r
146                     if (Properties.Settings.Default.PixelRatio == "Checked")\r
147                     {\r
148                         CheckPixelRatio.CheckState = CheckState.Checked;\r
149                     }\r
150                     if (Properties.Settings.Default.turboFirstPass == "Checked")\r
151                     {\r
152                         check_turbo.CheckState = CheckState.Checked;\r
153                     }\r
154                     if (Properties.Settings.Default.largeFile == "Checked")\r
155                     {\r
156                         check_largeFile.CheckState = CheckState.Checked;\r
157                     }\r
158                     // Audio Settings Tab\r
159                     drp_audioBitrate.Text = Properties.Settings.Default.AudioBitrate;\r
160                     drp_audioSampleRate.Text = Properties.Settings.Default.AudioSampleRate;\r
161                     drp_audioChannels.Text = Properties.Settings.Default.AudioChannels;\r
162 \r
163                     // H264 Tab\r
164                     if (Properties.Settings.Default.CRF == "Checked")\r
165                     {\r
166                         CheckCRF.CheckState = CheckState.Checked;\r
167                     }\r
168                     rtf_h264advanced.Text = Properties.Settings.Default.H264;\r
169 \r
170                     groupBox_output.Text = "Output Settings (Preset: " + Properties.Settings.Default.selectedPreset + ")";\r
171                 }\r
172                 else\r
173                 {\r
174                     // Load the default preset on lauch\r
175                     ListBox_Presets.SelectedItem = "Normal";\r
176                 }\r
177             }\r
178             catch (Exception)\r
179             {\r
180                 // No real need to alert the user. Try/Catch only in just incase there is a problem reading the settings xml file.\r
181             }\r
182         }\r
183 \r
184         private Boolean updateCheck()\r
185         {\r
186             try\r
187             {\r
188                 if (Properties.Settings.Default.updateStatus == "Checked")\r
189                 {\r
190                     String updateFile = Properties.Settings.Default.updateFile;\r
191                     WebClient client = new WebClient();\r
192                     String data = client.DownloadString(updateFile);\r
193                     String[] versionData = data.Split('\n');\r
194 \r
195                     int verdata = int.Parse(versionData[0].Replace(".", ""));\r
196                     int vergui = int.Parse(Properties.Settings.Default.GuiVersion.Replace(".", ""));\r
197                     int verd1 = int.Parse(versionData[1].Replace(".", ""));\r
198                     int cliversion = int.Parse(Properties.Settings.Default.CliVersion.Replace(".", ""));\r
199 \r
200                     Boolean update = ((verdata > vergui) || (verd1 > cliversion));\r
201    \r
202                     lbl_update.Visible = update;\r
203 \r
204                     return update;   \r
205                 }\r
206                 else\r
207                 {\r
208                     return false;\r
209                 }\r
210             }\r
211             catch (Exception)\r
212             {\r
213                 // Silently ignore the error\r
214                 return false;\r
215             }\r
216         }\r
217 \r
218         private void quickStart()\r
219         {\r
220             if ((Properties.Settings.Default.QuickStartWindow == "Checked") || (Properties.Settings.Default.QuickStartWindow == ""))\r
221             {\r
222                 frmQuickStart quickstart = new frmQuickStart();\r
223                 quickstart.ShowDialog();\r
224             }\r
225         }\r
226 \r
227         private void tooltip()\r
228         {\r
229             if (Properties.Settings.Default.tooltipEnable == "Checked")\r
230             {\r
231                 ToolTip.Active = true;\r
232             }\r
233         }\r
234 \r
235         private void showPresets()\r
236         {\r
237             if (Properties.Settings.Default.showPresets == "Checked")\r
238             {\r
239                 btn_presets.Visible = false;\r
240                 this.Width = 881;\r
241             }\r
242 \r
243         }\r
244 \r
245         #endregion\r
246 \r
247         // -------------------------------------------------------------- \r
248         // The main Menu bar.\r
249         // -------------------------------------------------------------- \r
250 \r
251         #region File Menu\r
252 \r
253         private void mnu_exit_Click(object sender, EventArgs e)\r
254         {\r
255             Application.Exit();\r
256         }\r
257 \r
258         #endregion\r
259 \r
260         #region Tools Menu\r
261 \r
262         private void mnu_encode_Click(object sender, EventArgs e)\r
263         {\r
264             showQueue();\r
265         }\r
266    \r
267         private void mnu_viewDVDdata_Click(object sender, EventArgs e)\r
268         {\r
269             frmDvdInfo dvdInfoWindow = new frmDvdInfo();\r
270             dvdInfoWindow.Show();\r
271         }\r
272 \r
273         private void mnu_options_Click(object sender, EventArgs e)\r
274         {\r
275             Form Options = new frmOptions();\r
276             Options.ShowDialog();\r
277         }\r
278 \r
279         #endregion\r
280 \r
281         #region Presets Menu\r
282 \r
283         private void mnu_presetReset_Click(object sender, EventArgs e)\r
284         {\r
285             ListBox_Presets.Items.Clear();\r
286             ListBox_Presets.Items.Add("Animation");\r
287             ListBox_Presets.Items.Add("AppleTV");\r
288             ListBox_Presets.Items.Add("Bedlam");\r
289             ListBox_Presets.Items.Add("Blind");\r
290             ListBox_Presets.Items.Add("Broke");\r
291             ListBox_Presets.Items.Add("Classic");\r
292             ListBox_Presets.Items.Add("Constant Quality Rate");\r
293             ListBox_Presets.Items.Add("Deux Six Quatre");\r
294             ListBox_Presets.Items.Add("Film");\r
295             ListBox_Presets.Items.Add("iPhone");\r
296             ListBox_Presets.Items.Add("iPod High-Rez");\r
297             ListBox_Presets.Items.Add("iPod Low-Rez");\r
298             ListBox_Presets.Items.Add("Normal");\r
299             ListBox_Presets.Items.Add("PS3");\r
300             ListBox_Presets.Items.Add("PSP");\r
301             ListBox_Presets.Items.Add("QuickTime");\r
302             ListBox_Presets.Items.Add("Television");\r
303 \r
304             if (presetStatus == false)\r
305             {\r
306                 this.Width = 881;\r
307                 presetStatus = true;\r
308                 btn_presets.Text = "Hide Presets";\r
309             }\r
310         }\r
311 \r
312         private void mnu_SelectDefault_Click(object sender, EventArgs e)\r
313         {\r
314             ListBox_Presets.SelectedItem = "Normal";\r
315             if (presetStatus == false)\r
316             {\r
317                 this.Width = 881;\r
318                 presetStatus = true;\r
319                 btn_presets.Text = "Hide Presets";\r
320             }\r
321         }\r
322 \r
323         #endregion\r
324 \r
325         #region Help Menu\r
326 \r
327         private void mnu_wiki_Click(object sender, EventArgs e)\r
328         {\r
329            Process.Start("http://handbrake.m0k.org/trac");\r
330         }\r
331 \r
332         private void mnu_faq_Click(object sender, EventArgs e)\r
333         {\r
334             Process.Start("http://handbrake.m0k.org/trac/wiki/WindowsGuiFaq");\r
335         }\r
336 \r
337         private void mnu_onlineDocs_Click(object sender, EventArgs e)\r
338         {\r
339             Process.Start("http://handbrake.m0k.org/?page_id=11");\r
340         }\r
341 \r
342         private void mnu_homepage_Click(object sender, EventArgs e)\r
343         {\r
344            Process.Start("http://handbrake.m0k.org");\r
345         }\r
346 \r
347         private void mnu_forum_Click(object sender, EventArgs e)\r
348         {\r
349             Process.Start("http://handbrake.m0k.org/forum");\r
350         }\r
351 \r
352         private void mnu_UpdateCheck_Click(object sender, EventArgs e)\r
353         {\r
354             Boolean update = updateCheck();\r
355             if (update == true)\r
356             {\r
357                 MessageBox.Show("There is a new update available. Please visit http://handbrake.m0k.org for details!", "Update Check", MessageBoxButtons.OK, MessageBoxIcon.Information);\r
358             }\r
359             else\r
360             {\r
361                 MessageBox.Show("There are no new updates at this time.", "Update Check", MessageBoxButtons.OK, MessageBoxIcon.Information);\r
362             }\r
363         }\r
364 \r
365         private void mnu_about_Click(object sender, EventArgs e)\r
366         {\r
367                         Form About = new frmAbout();\r
368             About.ShowDialog();\r
369         }\r
370 \r
371         #endregion\r
372 \r
373         // -------------------------------------------------------------- \r
374         // Buttons on the main Window\r
375         // --------------------------------------------------------------\r
376 \r
377         #region Buttons\r
378 \r
379         private void btn_Browse_Click(object sender, EventArgs e)\r
380         {\r
381             String filename = ""; \r
382                     text_source.Text = "";\r
383             frmDvdInfo dvdInfoWindow = new frmDvdInfo();                 \r
384                     if (RadioDVD.Checked) \r
385                     { \r
386                         DVD_Open.ShowDialog(); \r
387                         filename = DVD_Open.SelectedPath; \r
388                         if (filename != "") \r
389                         { \r
390                             Form frmRD = new frmReadDVD(filename, this, dvdInfoWindow); \r
391                             text_source.Text = filename; \r
392                             frmRD.ShowDialog(); \r
393                         } \r
394                      } \r
395                      else \r
396                      { \r
397                         ISO_Open.ShowDialog(); \r
398                         filename = ISO_Open.FileName; \r
399                         if (filename != "") \r
400                         { \r
401                             Form frmRD = new frmReadDVD(filename, this, dvdInfoWindow); \r
402                             text_source.Text = filename; \r
403                             frmRD.ShowDialog(); \r
404                         } \r
405                      }   \r
406                  \r
407                      // Check if there was titles in the dvd title dropdown \r
408                      if (filename == "") \r
409                      { \r
410                         text_source.Text = "Click 'Browse' to continue"; \r
411                      } \r
412                     \r
413              // If there are no titles in the dropdown menu then the scan has obviously failed. Display an error message explaining to the user.\r
414                      if (drp_dvdtitle.Items.Count == 0) \r
415                      { \r
416                         MessageBox.Show("No Title(s) found. Please make sure you have selected a valid, non-copy protected source. Please refer to the FAQ (see Help Menu).", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand); \r
417                      }                  \r
418         }\r
419 \r
420         private void btn_destBrowse_Click(object sender, EventArgs e)\r
421         {\r
422             DVD_Save.ShowDialog();\r
423             text_destination.Text = DVD_Save.FileName;\r
424 \r
425             if (Check_ChapterMarkers.Checked)\r
426             {\r
427                 string destination = text_destination.Text;\r
428                 destination = destination.Replace(".mp4", ".m4v");\r
429                 text_destination.Text = destination;\r
430             }\r
431         }\r
432 \r
433         private void btn_h264Clear_Click(object sender, EventArgs e)\r
434         {\r
435             rtf_h264advanced.Text = "";\r
436         }\r
437 \r
438         private void GenerateQuery_Click(object sender, EventArgs e)\r
439         {\r
440             String query = GenerateTheQuery();\r
441             QueryEditorText.Text = query;\r
442         }\r
443 \r
444         private void btn_ClearQuery_Click(object sender, EventArgs e)\r
445         {\r
446             QueryEditorText.Text = "";\r
447         }\r
448 \r
449         private void btn_queue_Click(object sender, EventArgs e)\r
450         {\r
451             if (text_source.Text == "" || text_source.Text == "Click 'Browse' to continue" || text_destination.Text == "")\r
452                 MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
453             else\r
454             {\r
455                 string query;\r
456                 if (QueryEditorText.Text == "")\r
457                 {\r
458                     query = GenerateTheQuery();\r
459                 }\r
460                 else\r
461                 {\r
462                     query = QueryEditorText.Text;\r
463                 }\r
464                 queueWindow.list_queue.Items.Add(query);\r
465                 queueWindow.Show();\r
466             } \r
467         }\r
468 \r
469         private void btn_copy_Click(object sender, EventArgs e)\r
470         {\r
471             Clipboard.SetText(QueryEditorText.Text, TextDataFormat.Text);\r
472         }\r
473 \r
474         private void showQueue()\r
475         {\r
476             queueWindow.Show();\r
477         }\r
478 \r
479         #endregion\r
480 \r
481         // -------------------------------------------------------------- \r
482         // Main Window Preset System\r
483         // --------------------------------------------------------------\r
484 \r
485         #region Preset System\r
486 \r
487         // Varibles\r
488         private Boolean presetStatus = false;\r
489 \r
490         // Buttons\r
491         private void btn_presets_Click(object sender, EventArgs e)\r
492         {\r
493             if (presetStatus == false)\r
494             {\r
495                 this.Width = 881;\r
496                 presetStatus = true;\r
497                 btn_presets.Text = "Hide Presets";\r
498             }\r
499             else\r
500             {\r
501                 this.Width = 590;\r
502                 presetStatus = false;\r
503                 btn_presets.Text = "Show Presets";\r
504             }\r
505 \r
506         }\r
507 \r
508         private void btn_addPreset_Click(object sender, EventArgs e)\r
509         {\r
510             string filename;\r
511             File_Open.ShowDialog();\r
512             filename = File_Open.FileName;\r
513             if (filename != "")\r
514             {\r
515                 try\r
516                 {\r
517                     // Create StreamReader & open file\r
518                     StreamReader line = new StreamReader(filename);\r
519                     string temporyLine; // Used for reading the line into a varible before processing on the checkState items below.\r
520 \r
521                     // Read in the data and set the correct GUI component with the setting.\r
522                     text_source.Text = line.ReadLine();\r
523                     drp_dvdtitle.Text = line.ReadLine();\r
524                     drop_chapterStart.Text = line.ReadLine();\r
525                     drop_chapterFinish.Text = line.ReadLine();\r
526                     text_destination.Text = line.ReadLine();\r
527                     drp_videoEncoder.Text = line.ReadLine();\r
528                     drp_audioCodec.Text = line.ReadLine();\r
529                     text_width.Text = line.ReadLine();\r
530                     text_height.Text = line.ReadLine();\r
531                     text_top.Text = line.ReadLine();\r
532                     text_bottom.Text = line.ReadLine();\r
533                     text_left.Text = line.ReadLine();\r
534                     text_right.Text = line.ReadLine();\r
535                     drp_subtitle.Text = line.ReadLine();\r
536                     text_bitrate.Text = line.ReadLine();\r
537                     text_filesize.Text = line.ReadLine();\r
538                     slider_videoQuality.Value = int.Parse(line.ReadLine());\r
539 \r
540                     temporyLine = line.ReadLine();\r
541                     if (temporyLine == "Checked")\r
542                     {\r
543                         check_2PassEncode.CheckState = CheckState.Checked;\r
544                     }\r
545 \r
546                     drp_deInterlace_option.Text = line.ReadLine();\r
547 \r
548                     temporyLine = line.ReadLine();\r
549                     if (temporyLine == "Checked")\r
550                     {\r
551                         check_grayscale.CheckState = CheckState.Checked;\r
552                     }\r
553 \r
554                     drp_videoFramerate.Text = line.ReadLine();\r
555 \r
556                     temporyLine = line.ReadLine();\r
557                     if (temporyLine == "Checked")\r
558                     {\r
559                         Check_ChapterMarkers.CheckState = CheckState.Checked;\r
560                     }\r
561 \r
562                     temporyLine = line.ReadLine();\r
563                     if (temporyLine == "Checked")\r
564                     {\r
565                         CheckPixelRatio.CheckState = CheckState.Checked;\r
566                     }\r
567 \r
568                     temporyLine = line.ReadLine();\r
569                     if (temporyLine == "Checked")\r
570                     {\r
571                         check_turbo.CheckState = CheckState.Checked;\r
572                     }\r
573 \r
574                     temporyLine = line.ReadLine();\r
575                     if (temporyLine == "Checked")\r
576                     {\r
577                         check_largeFile.CheckState = CheckState.Checked;\r
578                     }\r
579 \r
580                     drp_audioBitrate.Text = line.ReadLine();\r
581                     drp_audioSampleRate.Text = line.ReadLine();\r
582                     drp_audioChannels.Text = line.ReadLine();\r
583                     drp_audioMixDown.Text = line.ReadLine();\r
584 \r
585                     // Advanced H264 Options\r
586                     temporyLine = line.ReadLine();\r
587                     if (temporyLine == "Checked")\r
588                     {\r
589                         CheckCRF.CheckState = CheckState.Checked;\r
590                     }\r
591                     rtf_h264advanced.Text = line.ReadLine();\r
592 \r
593                     // Close the stream\r
594                     line.Close();\r
595 \r
596 \r
597                     // Fix for SliderValue not appearing when Opening saved file\r
598                     SliderValue.Text = slider_videoQuality.Value + "%";\r
599 \r
600                 }\r
601                 catch (Exception)\r
602                 {\r
603                     MessageBox.Show("Unable to load profile.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);\r
604                 }\r
605             }\r
606         }\r
607 \r
608         private void btn_removePreset_Click(object sender, EventArgs e)\r
609         {\r
610             string filename;\r
611             File_Save.ShowDialog();\r
612             filename = File_Save.FileName;\r
613             if (filename != "")\r
614             {\r
615                 try\r
616                 {\r
617                     // Create a StreamWriter and open the file\r
618                     StreamWriter line = new StreamWriter(filename);\r
619 \r
620                     //Source\r
621                     line.WriteLine(text_source.Text);\r
622                     line.WriteLine(drp_dvdtitle.Text);\r
623                     line.WriteLine(drop_chapterStart.Text);\r
624                     line.WriteLine(drop_chapterFinish.Text);\r
625                     //Destination\r
626                     line.WriteLine(text_destination.Text);\r
627                     line.WriteLine(drp_videoEncoder.Text);\r
628                     line.WriteLine(drp_audioCodec.Text);\r
629                     line.WriteLine(text_width.Text);\r
630                     line.WriteLine(text_height.Text);\r
631                     //Picture Settings Tab\r
632                     line.WriteLine(text_top.Text);\r
633                     line.WriteLine(text_bottom.Text);\r
634                     line.WriteLine(text_left.Text);\r
635                     line.WriteLine(text_right.Text);\r
636                     line.WriteLine(drp_subtitle.Text);\r
637                     //Video Settings Tab\r
638                     line.WriteLine(text_bitrate.Text);\r
639                     line.WriteLine(text_filesize.Text);\r
640                     line.WriteLine(slider_videoQuality.Value.ToString());\r
641                     line.WriteLine(check_2PassEncode.CheckState.ToString());\r
642                     line.WriteLine(drp_deInterlace_option.Text);\r
643                     line.WriteLine(check_grayscale.CheckState.ToString());\r
644                     line.WriteLine(drp_videoFramerate.Text);\r
645                     line.WriteLine(Check_ChapterMarkers.CheckState.ToString());\r
646                     line.WriteLine(CheckPixelRatio.CheckState.ToString());\r
647                     line.WriteLine(check_turbo.CheckState.ToString());\r
648                     line.WriteLine(check_largeFile.CheckState.ToString());\r
649                     //Audio Settings Tab\r
650                     line.WriteLine(drp_audioBitrate.Text);\r
651                     line.WriteLine(drp_audioSampleRate.Text);\r
652                     line.WriteLine(drp_audioChannels.Text);\r
653                     line.WriteLine(drp_audioMixDown.Text);\r
654                     //H264 Tab\r
655                     line.WriteLine(CheckCRF.CheckState.ToString());\r
656                     line.WriteLine(rtf_h264advanced.Text);\r
657                     // close the stream\r
658                     line.Close();\r
659                     MessageBox.Show("Your profile has been sucessfully saved.", "Status", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);\r
660                 }\r
661                 catch (Exception)\r
662                 {\r
663                     MessageBox.Show("Unable to write to the file. Please make sure the location has the correct permissions for file writing.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);\r
664                 }\r
665 \r
666             }\r
667         }\r
668 \r
669         private void btn_setDefault_Click(object sender, EventArgs e)\r
670         {\r
671             //Source\r
672             Properties.Settings.Default.DVDSource = text_source.Text;\r
673             Properties.Settings.Default.DVDTitle = drp_dvdtitle.Text;\r
674             Properties.Settings.Default.ChapterStart = drop_chapterStart.Text;\r
675             Properties.Settings.Default.ChapterFinish = drop_chapterFinish.Text;\r
676             //Destination\r
677             Properties.Settings.Default.VideoDest = text_destination.Text;\r
678             Properties.Settings.Default.VideoEncoder = drp_videoEncoder.Text;\r
679             Properties.Settings.Default.AudioEncoder = drp_audioCodec.Text;\r
680             Properties.Settings.Default.Width = text_width.Text;\r
681             Properties.Settings.Default.Height = text_height.Text;\r
682             //Picture Settings Tab\r
683             Properties.Settings.Default.CroppingOption = drp_crop.Text;\r
684             Properties.Settings.Default.CropTop = text_top.Text;\r
685             Properties.Settings.Default.CropBottom = text_bottom.Text;\r
686             Properties.Settings.Default.CropLeft = text_left.Text;\r
687             Properties.Settings.Default.CropRight = text_right.Text;\r
688             Properties.Settings.Default.Subtitles = drp_subtitle.Text;\r
689             //Video Settings Tab\r
690             Properties.Settings.Default.VideoBitrate = text_bitrate.Text;\r
691             Properties.Settings.Default.VideoFilesize = text_filesize.Text;\r
692             Properties.Settings.Default.VideoQuality = slider_videoQuality.Value;\r
693             Properties.Settings.Default.TwoPass = check_2PassEncode.CheckState.ToString();\r
694             Properties.Settings.Default.DeInterlace = drp_deInterlace_option.Text;\r
695             Properties.Settings.Default.Grayscale = check_grayscale.CheckState.ToString();\r
696             Properties.Settings.Default.Framerate = drp_videoFramerate.Text;\r
697             Properties.Settings.Default.PixelRatio = CheckPixelRatio.CheckState.ToString();\r
698             Properties.Settings.Default.turboFirstPass = check_turbo.CheckState.ToString();\r
699             Properties.Settings.Default.largeFile = check_largeFile.CheckState.ToString();\r
700             Properties.Settings.Default.detelecine = check_detelecine.CheckState.ToString();\r
701             Properties.Settings.Default.denoise = drp_deNoise.Text;\r
702             Properties.Settings.Default.deblock = check_deblock.CheckState.ToString();\r
703             //Audio Settings Tab\r
704             Properties.Settings.Default.AudioBitrate = drp_audioBitrate.Text;\r
705             Properties.Settings.Default.AudioSampleRate = drp_audioSampleRate.Text;\r
706             Properties.Settings.Default.AudioChannels = drp_audioChannels.Text;\r
707             //H264 Tab\r
708             Properties.Settings.Default.CRF = CheckCRF.CheckState.ToString();\r
709             Properties.Settings.Default.H264 = rtf_h264advanced.Text;\r
710             try\r
711             {\r
712                 Properties.Settings.Default.selectedPreset = ListBox_Presets.SelectedItem.ToString();\r
713             }\r
714             catch (Exception exc)\r
715             {\r
716                 // If the user has not selected an item, then an exception may be thrown. Catch and ignore.\r
717             }\r
718             Properties.Settings.Default.Save();\r
719         }\r
720 \r
721         // Preset Seleciton\r
722         private void ListBox_Presets_SelectedIndexChanged(object sender, EventArgs e)\r
723         {\r
724             string selectedPreset = null;\r
725             if (ListBox_Presets.SelectedItem != null)\r
726             {\r
727                 selectedPreset = ListBox_Presets.SelectedItem.ToString();\r
728             }\r
729             else\r
730             {\r
731                 selectedPreset = "";\r
732             }\r
733 \r
734             switch (selectedPreset)\r
735             {\r
736                 case "Animation":\r
737                     setGuiSetttings(CheckState.Checked, "", "", "H.264", "1000", "", 0, "0%", "160", CheckState.Checked, "48", "ref=5:mixed-refs:bframes=6:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=5:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip:filter=2,2", "Origional (Fast)", CheckState.Checked, "No Crop", CheckState.Checked, "AAC", "Output Settings (Preset: Apple Animation)");\r
738                     setMkv();\r
739                     break;\r
740                 case "AppleTV":\r
741                     setGuiSetttings(CheckState.Checked, "", "", "H.264", "2500", "", 0, "0%", "160", CheckState.Checked, "48", "bframes=3:ref=1:subme=5:me=umh:no-fast-pskip=1:trellis=2", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: Apple TV)");\r
742                     break;\r
743                 case "Bedlam":\r
744                     setGuiSetttings(CheckState.Checked, "", "", "H.264", "1800", "", 0, "0%", "160", CheckState.Checked, "48", "ref=16:mixed-refs:bframes=6:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=7:me-range=64:analyse=all:8x8dct:trellis=2:no-fast-pskip:no-dct-decimate:filter=-2,-1", "None", CheckState.Checked, "No Crop", CheckState.Checked, "AAC", "Output Settings (Preset: Bedlam)");\r
745                     setMkv();\r
746                     break;\r
747                 case "Blind":\r
748                     setGuiSetttings(CheckState.Unchecked, "512", "", "H.264", "512", "", 0, "0%", "128", CheckState.Checked, "48", "", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: Blind)");\r
749                     break;\r
750                 case "Broke":\r
751                     setGuiSetttings(CheckState.Unchecked, "640", "", "H.264", "", "695", 0, "0%", "128", CheckState.Checked, "48", "ref=3:mixed-refs:bframes=6:bime:weightb:b-rdo:b-pyramid::direct=auto:me=umh:subme=6:trellis=1:analyse=all:8x8dct:no-fast-pskip", "None", CheckState.Checked, "No Crop", CheckState.Checked, "AAC", "Output Settings (Preset: Broke)");\r
752                     break;\r
753                 case "Classic":\r
754                     setGuiSetttings(CheckState.Unchecked, "", "", "H.264", "1000", "", 0, "0%", "160", CheckState.Unchecked, "48", "", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: Classic)");\r
755                     break;\r
756                 case "Constant Quality Rate":\r
757                     setGuiSetttings(CheckState.Checked, "", "", "H.264", "", "", 64, "64%", "160", CheckState.Checked, "48", "ref=3:mixed-refs:bframes=3:b-pyramid:b-rdo:bime:weightb:filter=-2,-1:subme=6:trellis=1:analyse=all:8x8dct:me=umh", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AC3", "Output Settings (Preset: CQR)");\r
758                     setMkv();\r
759                     break;\r
760                 case "Deux Six Quatre":\r
761                     setGuiSetttings(CheckState.Checked, "", "", "H.264", "1600", "", 0, "0%", "160", CheckState.Checked, "48", "ref=5:mixed-refs:bframes=3:bime:weightb:b-rdo:b-pyramid:me=umh:subme=7:trellis=1:analyse=all:8x8dct:no-fast-pskip", "None", CheckState.Checked, "No Crop", CheckState.Checked, "AC3", "Output Settings (Preset: DSQ)");\r
762                     setMkv();\r
763                     break;\r
764                 case "Film":\r
765                     setGuiSetttings(CheckState.Checked, "", "", "H.264", "2000", "", 0, "0%", "160", CheckState.Checked, "48", "ref=3:mixed-refs:bframes=3:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=6:analyse=all:8x8dct:trellis=1:no-fast-pskip", "None", CheckState.Checked, "No Crop", CheckState.Checked, "AC3", "Output Settings (Preset: Film)");\r
766                     setMkv();\r
767                     break;\r
768                 case "iPhone":\r
769                     setGuiSetttings(CheckState.Unchecked, "480", "", "H.264", "960", "", 0, "0%", "128", CheckState.Checked, "48", "cabac=0:ref=1:analyse=all:me=umh:subme=6:no-fast-pskip=1:trellis=1", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: iPhone)");\r
770                     break;\r
771                 case "iPod High-Rez":\r
772                     setGuiSetttings(CheckState.Unchecked, "640", "", "H.264", "1500", "", 0, "0%", "160", CheckState.Checked, "48", "keyint=300:keyint-min=30:bframes=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsize=2000:analyse=all:me=umh:subme=6:no-fast-pskip=1", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: iPod High Rez)");\r
773                     break;\r
774                 case "iPod Low-Rez":\r
775                     setGuiSetttings(CheckState.Unchecked, "320", "", "H.264", "700", "", 0, "0%", "160", CheckState.Checked, "48", "keyint=300:keyint-min=30:bframes=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:subme=6:no-fast-pskip=1", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: iPod Low Rez)");\r
776                     break;\r
777                 case "Normal":\r
778                     setGuiSetttings(CheckState.Checked, "", "", "H.264", "1500", "", 0, "0%", "160", CheckState.Checked, "48", "ref=2:bframes=2:subme=5:me=umh", "None", CheckState.Checked, "No Crop", CheckState.Checked, "AAC", "Output Settings (Preset: Normal)");\r
779                     break;\r
780                 case "PS3":\r
781                     setGuiSetttings(CheckState.Checked, "", "", "H.264", "2500", "", 0, "0%", "160", CheckState.Checked, "48", "level=41:subme=5:me=umh", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: PS3)");\r
782                     break;\r
783                 case "PSP":\r
784                     setGuiSetttings(CheckState.Unchecked, "368", "208", "Mpeg 4", "1024", "", 0, "0%", "160", CheckState.Unchecked, "48", "", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: PSP)");\r
785                     break;\r
786                 case "QuickTime":\r
787                     setGuiSetttings(CheckState.Checked, "", "", "H.264", "2000", "", 0, "0%", "160", CheckState.Checked, "48", "ref=3:mixed-refs:bframes=3:bime:weightb:b-rdo:direct-auto:me=umh:subme=5:analyse=all:8x8dct:trellis=1:no-fast-pskip", "None", CheckState.Checked, "No Crop", CheckState.Checked, "AAC", "Output Settings (Preset: Quicktime)");\r
788                     break;\r
789                 case "Television":\r
790                     setGuiSetttings(CheckState.Unchecked, "", "", "H.264", "1300", "", 0, "0%", "160", CheckState.Checked, "48", "ref=3:mixed-refs:bframes=6:bime:weightb:direct=auto:b-pyramid:me=umh:subme=6:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip", "Origional (Fast)", CheckState.Checked, "No Crop", CheckState.Checked, "AAC", "Output Settings (Preset: Television)");\r
791                     setMkv();\r
792                     break;\r
793                 default:\r
794                     break;\r
795             }\r
796         }\r
797 \r
798         // Functions - It's a bit dirty but i'll sort this out later. Simply done to reduce the amount of code above.\r
799         private void setGuiSetttings(CheckState anamorphic, string width, string height, string vencoder, string bitrate, string filesize, int quality, string qpercent, string audioBit, CheckState chpt, string audioSample, string h264, string deinterlace, CheckState twopass, string crop, CheckState turbo, string audioCodec, string preset)\r
800         {\r
801             CheckPixelRatio.CheckState = anamorphic;\r
802             text_width.Text = width;\r
803             text_height.Text = height;\r
804             drp_videoEncoder.Text = vencoder;\r
805             text_bitrate.Text = bitrate;\r
806             text_filesize.Text = filesize;\r
807             slider_videoQuality.Value = quality;\r
808             SliderValue.Text = qpercent;\r
809             drp_audioBitrate.Text = audioBit;\r
810             Check_ChapterMarkers.CheckState = chpt;\r
811             drp_audioSampleRate.Text = audioSample;\r
812             rtf_h264advanced.Text = h264;\r
813             drp_deInterlace_option.Text = deinterlace;\r
814             check_2PassEncode.CheckState = twopass;\r
815             drp_crop.Text = crop;\r
816             check_turbo.CheckState = turbo;\r
817             drp_audioCodec.Text = audioCodec;\r
818 \r
819             groupBox_output.Text = preset;\r
820         }\r
821 \r
822         private void setMkv()\r
823         {\r
824             // Set file extension to MKV\r
825             string destination = text_destination.Text;\r
826             destination = destination.Replace(".mp4", ".mkv");\r
827             destination = destination.Replace(".avi", ".mkv");\r
828             destination = destination.Replace(".m4v", ".mkv");\r
829             destination = destination.Replace(".ogm", ".mkv");\r
830             text_destination.Text = destination;\r
831         }\r
832 \r
833         #endregion\r
834 \r
835         //---------------------------------------------------\r
836         // Encode / Cancel Buttons\r
837         // Encode Progress Text Handler\r
838         //---------------------------------------------------\r
839 \r
840         #region Encode/CLI\r
841 \r
842         Functions.CLI process = new Functions.CLI();\r
843 \r
844         private void btn_encode_Click(object sender, EventArgs e)\r
845         {\r
846             if (text_source.Text == "" || text_source.Text == "Click 'Browse' to continue" || text_destination.Text == "")\r
847                 MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
848             else\r
849             {\r
850                 btn_eCancel.Enabled = true;\r
851                 String query = "";\r
852                 if (QueryEditorText.Text == "")\r
853                 {\r
854                     query = GenerateTheQuery();\r
855                 }\r
856                 else\r
857                 {\r
858                     query = QueryEditorText.Text;\r
859                 }\r
860 \r
861                 ThreadPool.QueueUserWorkItem(procMonitor, query);\r
862                 lbl_encode.Visible = true;\r
863                 lbl_encode.Text = "Encoding in Progress";\r
864             }\r
865         }\r
866 \r
867         private void btn_eCancel_Click(object sender, EventArgs e)\r
868         {\r
869             process.killCLI();\r
870             process.setNull();\r
871             lbl_encode.Text = "Encoding Canceled";\r
872         }\r
873 \r
874         [DllImport("user32.dll")]\r
875         public static extern void LockWorkStation();\r
876         [DllImport("user32.dll")]\r
877         public static extern int ExitWindowsEx(int uFlags, int dwReason); \r
878 \r
879         private void procMonitor(object state)\r
880         {\r
881             // Make sure we are not already encoding and if we are then display an error.\r
882             if (hbProc != null)\r
883             {\r
884                 MessageBox.Show("Handbrake is already encoding a video!", "Status", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
885             }\r
886             else\r
887             {\r
888                 hbProc = process.runCli(this, (string)state, false, false, false, false);\r
889                 hbProc.WaitForExit();\r
890 \r
891                 try\r
892                 {\r
893                     /*\r
894                     //*****************************************************************************************\r
895                     // BUG!\r
896                     // When the below code is used and standard error is set to true, hbcli is outputing a\r
897                     // video stream which has mild corruption issues every few seconds.\r
898                     // Maybe an issue with the Parser cauing the CLI to hickup/pause?\r
899                     //*****************************************************************************************\r
900 \r
901                     \r
902                     Parsing.Parser encode = new Parsing.Parser(hbProc.StandardOutput.BaseStream);\r
903                     encode.OnEncodeProgress += encode_OnEncodeProgress;\r
904                     while (!encode.EndOfStream)\r
905                     {\r
906                         encode.ReadLine();\r
907                     }\r
908 \r
909                     hbProc.WaitForExit();\r
910                     process.closeCLI();\r
911                      */\r
912                     \r
913                 }\r
914                 catch (Exception exc)\r
915                 {\r
916                     // Do nothing\r
917                     MessageBox.Show(exc.ToString());\r
918                 }\r
919 \r
920 \r
921                 setEncodeLabel();\r
922                 hbProc = null;\r
923 \r
924                 // Do something whent he encode ends.\r
925                 switch (Properties.Settings.Default.CompletionOption)\r
926                 {\r
927                     case "Shutdown":\r
928                         System.Diagnostics.Process.Start("Shutdown", "-s -t 60");\r
929                         break;\r
930                     case "Log Off":\r
931                         ExitWindowsEx(0, 0); \r
932                         break;\r
933                     case "Suspend":\r
934                         Application.SetSuspendState(PowerState.Suspend, true, true);\r
935                         break;\r
936                     case "Hibernate":\r
937                         Application.SetSuspendState(PowerState.Hibernate, true, true);\r
938                         break;\r
939                     case "Lock System":\r
940                         LockWorkStation();\r
941                         break;\r
942                     case "Quit HandBrake":\r
943                         Application.Exit();\r
944                         break;\r
945                     default:\r
946                         break;\r
947                 }\r
948             }\r
949         }\r
950 \r
951         private delegate void UpdateUIHandler();\r
952 \r
953         private void setEncodeLabel()\r
954         {\r
955             if (this.InvokeRequired)\r
956             {\r
957                 this.BeginInvoke(new UpdateUIHandler(setEncodeLabel));\r
958                 return;\r
959             }\r
960             lbl_encode.Text = "Encoding Finished";\r
961         }\r
962 \r
963         private void encode_OnEncodeProgress(object Sender, int CurrentTask, int TaskCount, float PercentComplete, float CurrentFps, float AverageFps, TimeSpan TimeRemaining)\r
964         {\r
965             \r
966             if (this.InvokeRequired)\r
967             {\r
968                 this.BeginInvoke(new Parsing.EncodeProgressEventHandler(encode_OnEncodeProgress),\r
969                     new object[] { Sender, CurrentTask, TaskCount, PercentComplete, CurrentFps, AverageFps, TimeRemaining });\r
970                 return;\r
971             }\r
972             lbl_encode.Text = string.Format("Encode Progress: {0}%,       FPS: {1},       Avg FPS: {2},       Time Remaining: {3} ", PercentComplete, CurrentFps, AverageFps, TimeRemaining);\r
973         }\r
974 \r
975         #endregion\r
976 \r
977         //---------------------------------------------------\r
978         //  Items that require actions on frmMain\r
979         //---------------------------------------------------\r
980 \r
981         #region frmMain Actions\r
982 \r
983         private void drop_chapterStart_SelectedIndexChanged(object sender, EventArgs e)\r
984         {\r
985             drop_chapterStart.BackColor = Color.White;\r
986             QueryEditorText.Text = "";\r
987             if ((drop_chapterFinish.Text != "Auto") && (drop_chapterStart.Text != "Auto"))\r
988             {\r
989                 try\r
990                 {\r
991                     int chapterFinish = int.Parse(drop_chapterFinish.Text);\r
992                     int chapterStart = int.Parse(drop_chapterStart.Text);\r
993 \r
994                     if (chapterFinish < chapterStart)\r
995                     {\r
996                         drop_chapterStart.BackColor = Color.LightCoral;\r
997                     }\r
998                 }\r
999                 catch (Exception)\r
1000                 {\r
1001                     drop_chapterStart.BackColor = Color.LightCoral;\r
1002                 }\r
1003             }\r
1004 \r
1005             \r
1006         }\r
1007 \r
1008         private void drop_chapterFinish_SelectedIndexChanged(object sender, EventArgs e)\r
1009         {\r
1010             drop_chapterFinish.BackColor = Color.White;\r
1011             QueryEditorText.Text = "";\r
1012             if ((drop_chapterFinish.Text != "Auto") && (drop_chapterStart.Text != "Auto"))\r
1013             {\r
1014                 try\r
1015                 {\r
1016                     int chapterFinish = int.Parse(drop_chapterFinish.Text);\r
1017                     int chapterStart = int.Parse(drop_chapterStart.Text);\r
1018 \r
1019                     if (chapterFinish < chapterStart)\r
1020                     {\r
1021                         drop_chapterFinish.BackColor = Color.LightCoral;\r
1022                     }\r
1023                 }\r
1024                 catch (Exception)\r
1025                 {\r
1026                     drop_chapterFinish.BackColor = Color.LightCoral;\r
1027                 }\r
1028             }\r
1029         }\r
1030 \r
1031         private void text_bitrate_TextChanged(object sender, EventArgs e)\r
1032         {\r
1033             text_filesize.Text = "";\r
1034             slider_videoQuality.Value = 0;\r
1035             SliderValue.Text = "0%";\r
1036             CheckCRF.CheckState = CheckState.Unchecked;\r
1037             CheckCRF.Enabled = false;\r
1038         }\r
1039 \r
1040         private void text_filesize_TextChanged(object sender, EventArgs e)\r
1041         {\r
1042             text_bitrate.Text = "";\r
1043             slider_videoQuality.Value = 0;\r
1044             SliderValue.Text = "0%";\r
1045             CheckCRF.CheckState = CheckState.Unchecked;\r
1046             CheckCRF.Enabled = false;\r
1047         }\r
1048 \r
1049         private void slider_videoQuality_Scroll(object sender, EventArgs e)\r
1050         {\r
1051             SliderValue.Text = slider_videoQuality.Value.ToString() + "%";\r
1052             text_bitrate.Text = "";\r
1053             text_filesize.Text = "";\r
1054             CheckCRF.Enabled = true;\r
1055         }\r
1056 \r
1057         private void label_h264_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)\r
1058         {\r
1059             Process.Start("http://handbrake.m0k.org/trac/wiki/x264Options");\r
1060         }\r
1061 \r
1062         private void text_width_TextChanged(object sender, EventArgs e)\r
1063         {\r
1064 \r
1065             try\r
1066             {\r
1067                 if (CheckPixelRatio.Checked)\r
1068                 {\r
1069                     text_width.Text = "";\r
1070                     text_width.BackColor = Color.White;\r
1071                 }\r
1072                 else\r
1073                 {\r
1074                     if ((int.Parse(text_width.Text) % 16) != 0)\r
1075                     {\r
1076                         text_width.BackColor = Color.LightCoral;\r
1077                     }\r
1078                     else\r
1079                     {\r
1080                         text_width.BackColor = Color.LightGreen;\r
1081                     }\r
1082                 }\r
1083 \r
1084                 if (lbl_Aspect.Text != "Select a Title")\r
1085                 {\r
1086                     double height = int.Parse(text_width.Text) / double.Parse(lbl_Aspect.Text);\r
1087                     double mod16 = height % 16;\r
1088                     height = height - mod16;\r
1089 \r
1090                     if (text_width.Text == "")\r
1091                     {\r
1092                         text_height.Text = "";\r
1093                         text_width.BackColor = Color.White;\r
1094                     }\r
1095                     else\r
1096                     {\r
1097                         text_height.Text = height.ToString();\r
1098                     }\r
1099                 }\r
1100             }\r
1101             catch (Exception)\r
1102             {\r
1103                 // No need to throw an error here.\r
1104                 // Note on non english systems, this will throw an error because of double.Parse(lbl_Aspect.Text); not working.\r
1105             }\r
1106                \r
1107           \r
1108         }\r
1109 \r
1110         private void text_height_TextChanged(object sender, EventArgs e)\r
1111         {\r
1112             try\r
1113             {\r
1114                 if (text_height.Text != "Auto")\r
1115                 {\r
1116                     if (CheckPixelRatio.Checked)\r
1117                     {\r
1118                         text_height.Text = "";\r
1119                         text_width.BackColor = Color.White;\r
1120                     }\r
1121                     else\r
1122                     {\r
1123                         if ((int.Parse(text_height.Text) % 16) != 0)\r
1124                         {\r
1125                             text_height.BackColor = Color.LightCoral;\r
1126                         }\r
1127                         else\r
1128                         {\r
1129                             text_height.BackColor = Color.LightGreen;\r
1130                         }\r
1131                     }\r
1132                 }\r
1133             } catch(Exception){\r
1134                 // No need to alert the user.\r
1135             }\r
1136         }\r
1137 \r
1138         private void drp_crop_SelectedIndexChanged(object sender, EventArgs e)\r
1139         {\r
1140             if ((string)drp_crop.SelectedItem == "Manual")\r
1141             {\r
1142             text_left.Enabled = true;\r
1143             text_right.Enabled = true;\r
1144             text_top.Enabled = true;\r
1145             text_bottom.Enabled = true;\r
1146             }\r
1147 \r
1148             if ((string)drp_crop.SelectedItem == "Auto Crop")\r
1149             {\r
1150                 text_left.Enabled = false;\r
1151                 text_right.Enabled = false;\r
1152                 text_top.Enabled = false;\r
1153                 text_bottom.Enabled = false;\r
1154                 text_left.Text = "";\r
1155                 text_right.Text = "";\r
1156                 text_top.Text = "";\r
1157                 text_bottom.Text = "";\r
1158 \r
1159                 if (lbl_RecomendedCrop.Text != "Select a Title")\r
1160                 {\r
1161                     string[] temp = new string[4];\r
1162                     temp = lbl_RecomendedCrop.Text.Split('/');\r
1163                     text_left.Text = temp[2];\r
1164                     text_right.Text = temp[3];\r
1165                     text_top.Text = temp[0];\r
1166                     text_bottom.Text = temp[1];\r
1167                 }\r
1168             }\r
1169 \r
1170             if ((string)drp_crop.SelectedItem == "No Crop")\r
1171             {\r
1172                 text_left.Enabled = false;\r
1173                 text_right.Enabled = false;\r
1174                 text_top.Enabled = false;\r
1175                 text_bottom.Enabled = false;\r
1176                 text_left.Text = "0";\r
1177                 text_right.Text = "0";\r
1178                 text_top.Text = "0";\r
1179                 text_bottom.Text = "0";\r
1180 \r
1181             }\r
1182         }\r
1183         \r
1184         private void CheckPixelRatio_CheckedChanged(object sender, EventArgs e)\r
1185         {\r
1186             text_width.Text = "";\r
1187             text_height.Text = "";\r
1188             text_width.BackColor = Color.White;\r
1189             text_height.BackColor = Color.White;\r
1190         }\r
1191 \r
1192         private void drp_dvdtitle_Click(object sender, EventArgs e)\r
1193         {\r
1194             if (drp_dvdtitle.Items.Count == 0)\r
1195             {\r
1196                 MessageBox.Show("There are no titles to select. Please scan the DVD by clicking the 'browse' button above before trying to select a title.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);\r
1197             }\r
1198         }\r
1199 \r
1200         private void drp_audioCodec_SelectedIndexChanged(object sender, EventArgs e)\r
1201         {\r
1202 \r
1203             //CLI Audio mixdown Names: mono stereo dpl1 dpl2 6ch\r
1204 \r
1205             drp_audioMixDown.Items.Clear();\r
1206 \r
1207             if (drp_audioCodec.Text == "AAC")\r
1208             {\r
1209                 drp_audioMixDown.Items.Clear();\r
1210                 drp_audioMixDown.Items.Add("Mono");\r
1211                 drp_audioMixDown.Items.Add("Stereo");\r
1212                 drp_audioMixDown.Items.Add("Dolby Surround");\r
1213                 drp_audioMixDown.Items.Add("Dolby Pro Logic II");\r
1214                 drp_audioMixDown.Items.Add("6 Channel Discrete");\r
1215                 \r
1216                 drp_audioBitrate.Items.Clear();\r
1217                 drp_audioBitrate.Items.Add("32");\r
1218                 drp_audioBitrate.Items.Add("40");\r
1219                 drp_audioBitrate.Items.Add("48");\r
1220                 drp_audioBitrate.Items.Add("56");\r
1221                 drp_audioBitrate.Items.Add("64");\r
1222                 drp_audioBitrate.Items.Add("80");\r
1223                 drp_audioBitrate.Items.Add("86");\r
1224                 drp_audioBitrate.Items.Add("112");\r
1225                 drp_audioBitrate.Items.Add("128");\r
1226                 drp_audioBitrate.Items.Add("160");\r
1227 \r
1228             }\r
1229             else\r
1230             {\r
1231                 drp_audioMixDown.Items.Clear();\r
1232                 drp_audioMixDown.Items.Add("Stereo");\r
1233                 drp_audioMixDown.Items.Add("Dolby Surround");\r
1234                 drp_audioMixDown.Items.Add("Dolby Pro Logic II");\r
1235 \r
1236                 drp_audioBitrate.Items.Clear();\r
1237                 drp_audioBitrate.Items.Add("32");\r
1238                 drp_audioBitrate.Items.Add("40");\r
1239                 drp_audioBitrate.Items.Add("48");\r
1240                 drp_audioBitrate.Items.Add("56");\r
1241                 drp_audioBitrate.Items.Add("64");\r
1242                 drp_audioBitrate.Items.Add("80");\r
1243                 drp_audioBitrate.Items.Add("86");\r
1244                 drp_audioBitrate.Items.Add("112");\r
1245                 drp_audioBitrate.Items.Add("128");\r
1246                 drp_audioBitrate.Items.Add("160");\r
1247                 drp_audioBitrate.Items.Add("192");\r
1248                 drp_audioBitrate.Items.Add("224");\r
1249                 drp_audioBitrate.Items.Add("256");\r
1250                 drp_audioBitrate.Items.Add("320");\r
1251             }\r
1252         }\r
1253 \r
1254         private void drp_audioMixDown_SelectedIndexChanged(object sender, EventArgs e)\r
1255         {\r
1256             if (drp_audioCodec.Text == "AAC")\r
1257             {\r
1258                 if (drp_audioMixDown.Text == "6 Channel Discrete")\r
1259                 {\r
1260 \r
1261                     drp_audioBitrate.Items.Clear();\r
1262                     drp_audioBitrate.Items.Add("32");\r
1263                     drp_audioBitrate.Items.Add("40");\r
1264                     drp_audioBitrate.Items.Add("48");\r
1265                     drp_audioBitrate.Items.Add("56");\r
1266                     drp_audioBitrate.Items.Add("64");\r
1267                     drp_audioBitrate.Items.Add("80");\r
1268                     drp_audioBitrate.Items.Add("86");\r
1269                     drp_audioBitrate.Items.Add("112");\r
1270                     drp_audioBitrate.Items.Add("128");\r
1271                     drp_audioBitrate.Items.Add("160");\r
1272                     drp_audioBitrate.Items.Add("192");\r
1273                     drp_audioBitrate.Items.Add("224");\r
1274                     drp_audioBitrate.Items.Add("256");\r
1275                     drp_audioBitrate.Items.Add("320");\r
1276                     drp_audioBitrate.Items.Add("384");\r
1277                 }\r
1278             }\r
1279         }\r
1280 \r
1281         private void Check_ChapterMarkers_CheckedChanged(object sender, EventArgs e)\r
1282         {\r
1283             if (Check_ChapterMarkers.Checked)\r
1284             {\r
1285                 string destination = text_destination.Text;\r
1286                 destination = destination.Replace(".mp4", ".m4v");\r
1287                 text_destination.Text = destination;\r
1288             }\r
1289             else\r
1290             {\r
1291                 string destination = text_destination.Text;\r
1292                 destination = destination.Replace(".m4v", ".mp4");\r
1293                 text_destination.Text = destination;\r
1294             }\r
1295         }\r
1296 \r
1297         private void check_largeFile_CheckedChanged(object sender, EventArgs e)\r
1298         {\r
1299             if (!text_destination.Text.Contains(".mp4"))\r
1300             {\r
1301                 MessageBox.Show("This option is only compatible with the mp4 file container.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1302                 check_largeFile.CheckState = CheckState.Unchecked;\r
1303             }\r
1304         }\r
1305 \r
1306         private void drp_videoEncoder_SelectedIndexChanged(object sender, EventArgs e)\r
1307         {\r
1308             //Turn off some options which are H.264 only when the user selects a non h.264 encoder\r
1309             if (!drp_videoEncoder.Text.Contains("H.264"))\r
1310             {\r
1311                 check_turbo.CheckState = CheckState.Unchecked;\r
1312                 CheckCRF.CheckState = CheckState.Unchecked;\r
1313                 CheckCRF.Enabled = false;\r
1314                 check_turbo.Enabled = false;\r
1315                 h264Tab.Enabled = false;\r
1316             }\r
1317             else\r
1318             {\r
1319                 CheckCRF.Enabled = true;\r
1320                 check_turbo.Enabled = true;\r
1321                 h264Tab.Enabled = true;\r
1322             }\r
1323 \r
1324         }\r
1325 \r
1326         public void setStreamReader(Parsing.DVD dvd)\r
1327         {\r
1328             this.thisDVD = dvd;\r
1329         }\r
1330 \r
1331         private void drp_dvdtitle_SelectedIndexChanged(object sender, EventArgs e)\r
1332         {\r
1333             // Reset some values on the form\r
1334             lbl_Aspect.Text = "Select a Title";\r
1335             lbl_RecomendedCrop.Text = "Select a Title";\r
1336             drop_chapterStart.Items.Clear();\r
1337             drop_chapterFinish.Items.Clear();\r
1338             QueryEditorText.Text = "";\r
1339 \r
1340             // If the dropdown is set to automatic nothing else needs to be done.\r
1341             // Otheriwse if its not, title data has to be loased from parsing.\r
1342             if (drp_dvdtitle.Text != "Automatic")\r
1343             {\r
1344                 Parsing.Title selectedTitle = drp_dvdtitle.SelectedItem as Parsing.Title;\r
1345 \r
1346                 // Set the Aspect Ratio\r
1347                 lbl_Aspect.Text = selectedTitle.AspectRatio.ToString();\r
1348 \r
1349                 // Set the Recommended Cropping values\r
1350                 lbl_RecomendedCrop.Text = string.Format("{0}/{1}/{2}/{3}", selectedTitle.AutoCropDimensions[0], selectedTitle.AutoCropDimensions[1], selectedTitle.AutoCropDimensions[2], selectedTitle.AutoCropDimensions[3]);\r
1351                 \r
1352                 // Populate the Start chapter Dropdown\r
1353                 drop_chapterStart.Items.Clear();\r
1354                 drop_chapterStart.Items.AddRange(selectedTitle.Chapters.ToArray());\r
1355                 if (drop_chapterStart.Items.Count > 0)\r
1356                 {\r
1357                     drop_chapterStart.Text = drop_chapterStart.Items[0].ToString();\r
1358                 }\r
1359 \r
1360                 // Populate the Final Chapter Dropdown\r
1361                 drop_chapterFinish.Items.Clear();\r
1362                 drop_chapterFinish.Items.AddRange(selectedTitle.Chapters.ToArray());\r
1363                 if (drop_chapterFinish.Items.Count > 0)\r
1364                 {\r
1365                     drop_chapterFinish.Text = drop_chapterFinish.Items[drop_chapterFinish.Items.Count - 1].ToString();\r
1366                 }\r
1367 \r
1368                 // Populate the Audio Channels Dropdown\r
1369                 drp_audioChannels.Items.Clear();\r
1370                 drp_audioChannels.Items.Add("Automatic");\r
1371                 drp_audioChannels.Items.AddRange(selectedTitle.AudioTracks.ToArray());\r
1372                 if (drp_audioChannels.Items.Count > 0)\r
1373                 {\r
1374                     drp_audioChannels.Text = drp_audioChannels.Items[0].ToString();\r
1375                 }\r
1376 \r
1377                 // Populate the Subtitles dropdown\r
1378                 drp_subtitle.Items.Clear();\r
1379                 drp_subtitle.Items.Add("None");\r
1380                 drp_subtitle.Items.AddRange(selectedTitle.Subtitles.ToArray());\r
1381                 if (drp_subtitle.Items.Count > 0)\r
1382                 {\r
1383                     drp_subtitle.Text = drp_subtitle.Items[0].ToString();\r
1384                 }\r
1385             }\r
1386         }\r
1387 \r
1388         #endregion\r
1389 \r
1390         //---------------------------------------------------\r
1391         //  Some Functions\r
1392         //  - Query Generation\r
1393         //---------------------------------------------------\r
1394 \r
1395         #region Program Functions\r
1396 \r
1397         public string GenerateTheQuery()\r
1398         {\r
1399             string source = text_source.Text;\r
1400             string dvdTitle = drp_dvdtitle.Text;\r
1401             string chapterStart = drop_chapterStart.Text;\r
1402             string chapterFinish = drop_chapterFinish.Text;\r
1403             int totalChapters = drop_chapterFinish.Items.Count - 1;\r
1404             string dvdChapter = "";\r
1405 \r
1406             source = " -i " + '"' + source+ '"';\r
1407 \r
1408             if (dvdTitle ==  "Automatic")\r
1409                 dvdTitle = "";\r
1410             else\r
1411             {\r
1412                 string[] titleInfo = dvdTitle.Split(' ');\r
1413                 dvdTitle = " -t "+ titleInfo[0];\r
1414             }\r
1415 \r
1416             if (chapterFinish.Equals("Auto") && chapterStart.Equals("Auto"))\r
1417                 dvdChapter = "";\r
1418             else if (chapterFinish == chapterStart)\r
1419                 dvdChapter = " -c " + chapterStart;\r
1420             else\r
1421                 dvdChapter = " -c " + chapterStart + "-" + chapterFinish;\r
1422 \r
1423             string querySource = source+ dvdTitle+ dvdChapter;\r
1424             // ----------------------------------------------------------------------\r
1425 \r
1426             // Destination\r
1427 \r
1428             string destination = text_destination.Text;\r
1429             string videoEncoder = drp_videoEncoder.Text;\r
1430             string audioEncoder = drp_audioCodec.Text;\r
1431             string width = text_width.Text;\r
1432             string height = text_height.Text;\r
1433 \r
1434             if (destination ==  "")\r
1435                 MessageBox.Show("No destination has been selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1436             else\r
1437                 destination = " -o " + '"' + destination + '"'; //'"'+ \r
1438 \r
1439 \r
1440             switch (videoEncoder)\r
1441             {\r
1442                 case "Mpeg 4":\r
1443                     videoEncoder = " -e ffmpeg";\r
1444                     break;\r
1445                 case "Xvid":\r
1446                     videoEncoder = " -e xvid";\r
1447                     break;\r
1448                 case "H.264":\r
1449                     videoEncoder = " -e x264";\r
1450                     break;\r
1451                 case "H.264 Baseline 1.3":\r
1452                     videoEncoder = " -e x264b13";\r
1453                     break;\r
1454                 case "H.264 (iPod)":\r
1455                     videoEncoder = " -e x264b30";\r
1456                     break;\r
1457                 default:\r
1458                     videoEncoder = " -e x264";\r
1459                     break;\r
1460             }\r
1461            \r
1462             switch (audioEncoder)\r
1463             {\r
1464                 case "AAC":\r
1465                     audioEncoder = " -E faac";\r
1466                     break;\r
1467                 case "MP3":\r
1468                     audioEncoder = " -E lame";\r
1469                     break;\r
1470                 case "Vorbis":\r
1471                     audioEncoder = " -E vorbis";\r
1472                     break;\r
1473                 case "AC3":\r
1474                     audioEncoder = " -E ac3";\r
1475                     break;\r
1476                 default:\r
1477                     audioEncoder = " -E faac";\r
1478                     break;\r
1479             }\r
1480 \r
1481             if (width !=  "")\r
1482                 width = " -w "+ width;\r
1483 \r
1484 \r
1485             if (height == "Auto")\r
1486             {\r
1487                 height = "";\r
1488             }\r
1489             else if (height != "")\r
1490             {\r
1491                 height = " -l " + height;\r
1492             }\r
1493             \r
1494 \r
1495             string queryDestination = destination+ videoEncoder+ audioEncoder+ width+ height;\r
1496             // ----------------------------------------------------------------------\r
1497 \r
1498             // Picture Settings Tab\r
1499 \r
1500             string cropSetting = drp_crop.Text;\r
1501             string cropTop = text_top.Text;\r
1502             string cropBottom = text_bottom.Text;\r
1503             string cropLeft = text_left.Text;\r
1504             string cropRight = text_right.Text;\r
1505             string subtitles = drp_subtitle.Text;\r
1506             string cropOut = "";\r
1507             string deInterlace_Option = drp_deInterlace_option.Text;\r
1508             string deinterlace = "";\r
1509             string grayscale = "";\r
1510             string pixelRatio = "";\r
1511             string ChapterMarkers = "";\r
1512             // Returns Crop Query\r
1513 \r
1514             if (cropSetting == "Auto Crop")\r
1515                 cropOut = "";\r
1516             else if (cropSetting == "No Crop")\r
1517                 cropOut = " --crop 0:0:0:0 ";\r
1518             else\r
1519             {\r
1520                 if (text_top.Text == "")\r
1521                     cropTop = "0";\r
1522                 if (text_bottom.Text == "")\r
1523                     cropBottom = "0";\r
1524                 if (text_left.Text == "")\r
1525                     cropLeft = "0";\r
1526                 if (text_right.Text == "")\r
1527                     cropRight = "0";\r
1528 \r
1529                 cropOut = " --crop " + cropTop + ":" + cropBottom + ":" + cropLeft + ":" + cropRight;\r
1530             }\r
1531 \r
1532             if (subtitles ==  "None")\r
1533                 subtitles = "";\r
1534             else if (subtitles ==  "")\r
1535                 subtitles = "";\r
1536             else\r
1537             {\r
1538                 string[] tempSub;\r
1539                 tempSub = subtitles.Split(' ');\r
1540                 subtitles = " -s "+ tempSub[0];\r
1541             }\r
1542 \r
1543             switch (deInterlace_Option)\r
1544             {\r
1545                 case "None":\r
1546                     deinterlace = "";\r
1547                     break;\r
1548                 case "Origional (Fast)":\r
1549                     deinterlace = " --deinterlace=1";\r
1550                     break;\r
1551                 case "yadif (Slow)":\r
1552                     deinterlace = " --deinterlace=" + '"' + "0" + '"';\r
1553                     break;\r
1554                 case "yadif + mcdeint (Slower)":\r
1555                     deinterlace = " --deinterlace=" + '"' + "2:-1:1" + '"';\r
1556                     break;\r
1557                 case "yadif + mcdeint (Slowest)":\r
1558                     deinterlace = " --deinterlace=" + '"' + "1:-1:1" + '"';\r
1559                     break;\r
1560                 default:\r
1561                     deinterlace = "";\r
1562                     break;\r
1563             }\r
1564 \r
1565             if (check_grayscale.Checked)\r
1566                 grayscale = " -g ";\r
1567 \r
1568             if (CheckPixelRatio.Checked)\r
1569                 pixelRatio = " -p ";\r
1570 \r
1571             if (Check_ChapterMarkers.Checked)\r
1572                 ChapterMarkers = " -m ";\r
1573 \r
1574             string queryPictureSettings = cropOut + subtitles + deinterlace + grayscale + pixelRatio + ChapterMarkers;\r
1575             // ----------------------------------------------------------------------\r
1576 \r
1577             // Video Settings Tab\r
1578 \r
1579             string videoBitrate = text_bitrate.Text;\r
1580             string videoFilesize = text_filesize.Text;\r
1581             double videoQuality = slider_videoQuality.Value;\r
1582             string vidQSetting = "";\r
1583             string twoPassEncoding = "";\r
1584             string videoFramerate = drp_videoFramerate.Text;\r
1585             string turboH264 = "";\r
1586             string largeFile = "";\r
1587             string deblock = "";\r
1588             string detelecine = "";\r
1589             string denoise = "";\r
1590             string CRF = CheckCRF.CheckState.ToString();\r
1591 \r
1592 \r
1593             if ((CRF == "Checked"))\r
1594                 CRF = " -Q ";\r
1595             else\r
1596                 CRF = "";\r
1597 \r
1598             if (videoBitrate !=  "")\r
1599                 videoBitrate = " -b "+ videoBitrate;\r
1600 \r
1601             if (videoFilesize !=  "")\r
1602                 videoFilesize = " -S "+ videoFilesize;\r
1603 \r
1604             // Video Quality Setting\r
1605 \r
1606             if ((videoQuality ==  0))\r
1607                 vidQSetting = "";\r
1608             else\r
1609             {\r
1610                 videoQuality = videoQuality / 100;\r
1611                 if (videoQuality ==  1)\r
1612                 {\r
1613                     vidQSetting = "1.0";\r
1614                 }\r
1615 \r
1616                 vidQSetting = " -q " + videoQuality.ToString();\r
1617             }\r
1618 \r
1619             if (check_2PassEncode.Checked)\r
1620                 twoPassEncoding = " -2 ";\r
1621 \r
1622             if (videoFramerate ==  "Automatic")\r
1623                 videoFramerate = "";\r
1624             else\r
1625                 videoFramerate = " -r "+ videoFramerate;\r
1626 \r
1627             if (check_turbo.Checked)\r
1628                 turboH264 = " -T ";\r
1629 \r
1630             if (check_largeFile.Checked)\r
1631                 largeFile = " -4 ";\r
1632 \r
1633             if (check_deblock.Checked)\r
1634                 deblock = " --deblock";\r
1635 \r
1636             if (check_detelecine.Checked)\r
1637                 detelecine = " --detelecine";\r
1638 \r
1639             switch (drp_deNoise.Text)\r
1640             {\r
1641                 case "None":\r
1642                     denoise = "";\r
1643                     break;\r
1644                 case "Weak":\r
1645                     denoise = " --denoise=2:1:2:3";\r
1646                     break;\r
1647                 case "Medium":\r
1648                     denoise = " --denoise=3:2:2:3";\r
1649                     break;\r
1650                 case "Strong":\r
1651                     denoise = " --denoise=7:7:5:5";\r
1652                     break;\r
1653                 default:\r
1654                     denoise = "";\r
1655                     break;\r
1656             }\r
1657 \r
1658             string queryVideoSettings = videoBitrate + videoFilesize + vidQSetting + twoPassEncoding + videoFramerate + turboH264 + largeFile + deblock + detelecine + denoise;\r
1659             // ----------------------------------------------------------------------\r
1660 \r
1661             // Audio Settings Tab\r
1662 \r
1663             string audioBitrate = drp_audioBitrate.Text;\r
1664             string audioSampleRate = drp_audioSampleRate.Text;\r
1665             string audioChannels = drp_audioChannels.Text;\r
1666             string Mixdown = drp_audioMixDown.Text;\r
1667             string SixChannelAudio = "";\r
1668 \r
1669             if (audioBitrate !=  "")\r
1670                 audioBitrate = " -B "+ audioBitrate;\r
1671 \r
1672             if (audioSampleRate !=  "")\r
1673                 audioSampleRate = " -R "+ audioSampleRate;\r
1674 \r
1675             if (audioChannels ==  "Automatic")\r
1676                 audioChannels = "";\r
1677             else if (audioChannels ==  "")\r
1678                 audioChannels = "";\r
1679             else\r
1680             {\r
1681                 string[] tempSub;\r
1682                 tempSub = audioChannels.Split(' ');\r
1683                 audioChannels = " -a "+ tempSub[0];\r
1684             }\r
1685 \r
1686             switch (Mixdown)\r
1687             {\r
1688                 case "Automatic":\r
1689                     Mixdown = "";\r
1690                     break;\r
1691                 case "Mono":\r
1692                     Mixdown = "mono";\r
1693                     break;\r
1694                 case "Stereo":\r
1695                     Mixdown = "stereo";\r
1696                     break;\r
1697                 case "Dolby Surround":\r
1698                     Mixdown = "dpl1";\r
1699                     break;\r
1700                 case "Dolby Pro Logic II":\r
1701                     Mixdown = "dpl2";\r
1702                     break;\r
1703                 case "6 Channel Discrete":\r
1704                     Mixdown = "6ch";\r
1705                     break;\r
1706                 default:\r
1707                     Mixdown = "stero";\r
1708                     break;\r
1709             }\r
1710 \r
1711             if (Mixdown !=  "")\r
1712                 SixChannelAudio = " -6 "+ Mixdown;\r
1713             else\r
1714                 SixChannelAudio = "";\r
1715 \r
1716             string queryAudioSettings = audioBitrate+ audioSampleRate+ audioChannels+ SixChannelAudio;\r
1717             // ----------------------------------------------------------------------\r
1718 \r
1719             //  H.264 Tab\r
1720 \r
1721             \r
1722             string h264Advanced = rtf_h264advanced.Text;\r
1723             \r
1724             if ((h264Advanced ==  ""))\r
1725                 h264Advanced = "";\r
1726             else\r
1727                 h264Advanced = " -x "+ h264Advanced;\r
1728     \r
1729 \r
1730             string h264Settings = h264Advanced;\r
1731             // ----------------------------------------------------------------------\r
1732 \r
1733             // Processors (Program Settings)\r
1734 \r
1735             string processors = Properties.Settings.Default.Processors;\r
1736             //  Number of Processors Handler\r
1737 \r
1738             if (processors ==  "Automatic")\r
1739                 processors = "";\r
1740             else\r
1741                 processors = " -C "+ processors+ " ";\r
1742 \r
1743 \r
1744             string queryAdvancedSettings = processors;\r
1745             // ----------------------------------------------------------------------\r
1746 \r
1747             //  Verbose option (Program Settings)\r
1748 \r
1749             string verbose = "";\r
1750             if (Properties.Settings.Default.verbose ==  "Checked")\r
1751                 verbose = " -v ";\r
1752 \r
1753             // ----------------------------------------------------------------------\r
1754 \r
1755             return querySource+ queryDestination+ queryPictureSettings+ queryVideoSettings+ h264Settings+ queryAudioSettings+ queryAdvancedSettings+ verbose;\r
1756         }\r
1757 \r
1758         #endregion\r
1759 \r
1760         // This is the END of the road ------------------------------------------------------------------------------\r
1761     }\r
1762 }\r