OSDN Git Service

39d29ca3d3e852bfe093c37393f002b5e95c329f
[handbrake-jp/handbrake-jp-git.git] / win / C# / frmMain.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.ComponentModel;\r
4 using System.Data;\r
5 using System.Drawing;\r
6 using System.Text;\r
7 using System.Windows.Forms;\r
8 using System.Net;\r
9 using System.IO;\r
10 using System.Diagnostics;\r
11 using System.Threading;\r
12 \r
13 namespace Handbrake\r
14 {\r
15     public partial class frmMain : Form\r
16     {\r
17         private Process hbProc;\r
18         private Parsing.DVD thisDVD;\r
19 \r
20         // --------------------------------------------------------------\r
21         // Some windows that require only 1 instance.\r
22         // --------------------------------------------------------------\r
23         private frmQueue queueWindow = new frmQueue();  \r
24         \r
25         // -------------------------------------------------------------- \r
26         // Stuff that needs doing on startup.\r
27         // - Load users default settings. (if required)\r
28         // - Do an update check (if required)\r
29         // --------------------------------------------------------------\r
30         private frmDvdInfo dvdInfoWindow = new frmDvdInfo();\r
31         \r
32         public frmMain()\r
33         {\r
34             \r
35             ThreadPool.QueueUserWorkItem(showSplash);\r
36             Thread.Sleep(3000);\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.GuiVersion;\r
47 \r
48             // Run the update checker.\r
49             updateCheck();\r
50 \r
51             // Now load the users default if required.\r
52             loadUserDefaults();\r
53         }\r
54 \r
55         public void showSplash(object sender)\r
56         {\r
57             Form splash = new frmSplashScreen();\r
58             splash.Show();\r
59             Thread.Sleep(3000);\r
60             splash.Close();\r
61         }\r
62         public void loadUserDefaults()\r
63         { \r
64             try\r
65             {\r
66                 if (Properties.Settings.Default.defaultSettings == "Checked")\r
67                 {\r
68                     // Source\r
69                     text_source.Text = Properties.Settings.Default.DVDSource;\r
70                     drp_dvdtitle.Text = Properties.Settings.Default.DVDTitle;\r
71                     drop_chapterStart.Text = Properties.Settings.Default.ChapterStart;\r
72                     drop_chapterFinish.Text = Properties.Settings.Default.ChapterFinish;\r
73 \r
74                     // Destination\r
75                     text_destination.Text = Properties.Settings.Default.VideoDest;\r
76                     drp_videoEncoder.Text = Properties.Settings.Default.VideoEncoder;\r
77                     drp_audioCodec.Text = Properties.Settings.Default.AudioEncoder;\r
78                     text_width.Text = Properties.Settings.Default.Width;\r
79                     text_height.Text = Properties.Settings.Default.Height;\r
80 \r
81                     // Picture Settings Tab\r
82                     drp_crop.Text = Properties.Settings.Default.CroppingOption;\r
83                     text_top.Text = Properties.Settings.Default.CropTop;\r
84                     text_bottom.Text = Properties.Settings.Default.CropBottom;\r
85                     text_left.Text = Properties.Settings.Default.CropLeft;\r
86                     text_right.Text = Properties.Settings.Default.CropRight;\r
87                     drp_subtitle.Text = Properties.Settings.Default.Subtitles;\r
88 \r
89                     // Video Settings Tab\r
90                     text_bitrate.Text = Properties.Settings.Default.VideoBitrate;\r
91                     text_filesize.Text = Properties.Settings.Default.VideoFilesize;\r
92                     slider_videoQuality.Value = Properties.Settings.Default.VideoQuality;\r
93 \r
94                     if (Properties.Settings.Default.TwoPass == "Checked")\r
95                     {\r
96                         check_2PassEncode.CheckState = CheckState.Checked;\r
97                     }\r
98                     if (Properties.Settings.Default.DeInterlace == "Checked")\r
99                     {\r
100                         check_DeInterlace.CheckState = CheckState.Checked;\r
101                     }\r
102                     if (Properties.Settings.Default.Grayscale == "Checked")\r
103                     {\r
104                         check_grayscale.CheckState = CheckState.Checked;\r
105                     }\r
106 \r
107                     drp_videoFramerate.Text = Properties.Settings.Default.Framerate;\r
108 \r
109                     if (Properties.Settings.Default.PixelRatio == "Checked")\r
110                     {\r
111                         CheckPixelRatio.CheckState = CheckState.Checked;\r
112                     }\r
113                     if (Properties.Settings.Default.turboFirstPass == "Checked")\r
114                     {\r
115                         check_turbo.CheckState = CheckState.Checked;\r
116                     }\r
117                     if (Properties.Settings.Default.largeFile == "Checked")\r
118                     {\r
119                         check_largeFile.CheckState = CheckState.Checked;\r
120                     }\r
121                     // Audio Settings Tab\r
122                     drp_audioBitrate.Text = Properties.Settings.Default.AudioBitrate;\r
123                     drp_audioSampleRate.Text = Properties.Settings.Default.AudioSampleRate;\r
124                     drp_audioChannels.Text = Properties.Settings.Default.AudioChannels;\r
125 \r
126                     // H264 Tab\r
127                     if (Properties.Settings.Default.CRF == "Checked")\r
128                     {\r
129                         CheckCRF.CheckState = CheckState.Checked;\r
130                     }\r
131                     rtf_h264advanced.Text = Properties.Settings.Default.H264;\r
132                 }\r
133             }\r
134             catch (Exception)\r
135             {\r
136                 // No real need to alert the user. Try/Catch only in just incase there is a problem reading the settings xml file.\r
137             }\r
138         }\r
139 \r
140         public void updateCheck()\r
141         {\r
142             if (Properties.Settings.Default.updateStatus == "Checked")\r
143             {\r
144                 try\r
145                 {\r
146                     String updateFile = Properties.Settings.Default.updateFile;\r
147                     WebClient client = new WebClient();\r
148                     String data = client.DownloadString(updateFile);\r
149                     String[] versionData = data.Split('\n');\r
150 \r
151                     if ((versionData[0] != Properties.Settings.Default.GuiVersion) || (versionData[1] != Properties.Settings.Default.CliVersion))\r
152                     {\r
153                         lbl_update.Visible = true;\r
154                     }\r
155                 }\r
156                 catch (Exception)\r
157                 {\r
158                     // Silently ignore the error\r
159                 }\r
160             }\r
161         }\r
162 \r
163         // -------------------------------------------------------------- \r
164         // The main Menu bar.\r
165         // -------------------------------------------------------------- \r
166 \r
167         #region File Menu\r
168 \r
169         private void mnu_open_Click(object sender, EventArgs e)\r
170         {\r
171             string filename;\r
172             File_Open.ShowDialog();\r
173             filename = File_Open.FileName;\r
174             if (filename != "")\r
175             {\r
176                 try\r
177                 {\r
178                     // Create StreamReader & open file\r
179                     StreamReader line = new StreamReader(filename);\r
180                     string temporyLine; // Used for reading the line into a varible before processing on the checkState items below.\r
181                     \r
182                     // Read in the data and set the correct GUI component with the setting.\r
183                     text_source.Text = line.ReadLine();\r
184                     drp_dvdtitle.Text = line.ReadLine();\r
185                     drop_chapterStart.Text = line.ReadLine();\r
186                     drop_chapterFinish.Text = line.ReadLine();\r
187                     text_destination.Text = line.ReadLine();\r
188                     drp_videoEncoder.Text = line.ReadLine();\r
189                     drp_audioCodec.Text = line.ReadLine();\r
190                     text_width.Text = line.ReadLine();\r
191                     text_height.Text = line.ReadLine();\r
192                     text_top.Text = line.ReadLine();\r
193                     text_bottom.Text = line.ReadLine();\r
194                     text_left.Text = line.ReadLine();\r
195                     text_right.Text = line.ReadLine();\r
196                     drp_subtitle.Text = line.ReadLine();\r
197                     text_bitrate.Text = line.ReadLine();\r
198                     text_filesize.Text = line.ReadLine();\r
199                     slider_videoQuality.Value = int.Parse(line.ReadLine());\r
200 \r
201                     temporyLine = line.ReadLine();\r
202                     if (temporyLine == "Checked")\r
203                     {\r
204                         check_2PassEncode.CheckState = CheckState.Checked;\r
205                     }\r
206 \r
207                     temporyLine = line.ReadLine();\r
208                     if (temporyLine == "Checked")\r
209                     {\r
210                         check_DeInterlace.CheckState = CheckState.Checked;\r
211                     }\r
212 \r
213                     temporyLine = line.ReadLine();\r
214                     if (temporyLine == "Checked")\r
215                     {\r
216                         check_grayscale.CheckState = CheckState.Checked;\r
217                     }\r
218 \r
219                     drp_videoFramerate.Text = line.ReadLine();\r
220 \r
221                     temporyLine = line.ReadLine();\r
222                     if (temporyLine == "Checked")\r
223                     {\r
224                         Check_ChapterMarkers.CheckState = CheckState.Checked;\r
225                     }\r
226 \r
227                     temporyLine = line.ReadLine();\r
228                     if (temporyLine == "Checked")\r
229                     {\r
230                         CheckPixelRatio.CheckState = CheckState.Checked;\r
231                     }\r
232 \r
233                     temporyLine = line.ReadLine();\r
234                     if (temporyLine == "Checked")\r
235                     {\r
236                         check_turbo.CheckState = CheckState.Checked;\r
237                     }\r
238 \r
239                     temporyLine = line.ReadLine();\r
240                     if (temporyLine == "Checked")\r
241                     {\r
242                         check_largeFile.CheckState = CheckState.Checked;\r
243                     }\r
244    \r
245                     drp_audioBitrate.Text = line.ReadLine();\r
246                     drp_audioSampleRate.Text = line.ReadLine();\r
247                     drp_audioChannels.Text = line.ReadLine();\r
248                     drp_audioMixDown.Text = line.ReadLine();\r
249                     \r
250                     // Advanced H264 Options\r
251                     temporyLine = line.ReadLine();\r
252                     if (temporyLine == "Checked")\r
253                     {\r
254                         CheckCRF.CheckState = CheckState.Checked;\r
255                     }\r
256                     rtf_h264advanced.Text = line.ReadLine();\r
257 \r
258                     // Close the stream\r
259                     line.Close();\r
260 \r
261 \r
262                     // Fix for SliderValue not appearing when Opening saved file\r
263                     SliderValue.Text = slider_videoQuality.Value + "%";\r
264 \r
265                 } catch (Exception){\r
266                     MessageBox.Show("Unable to load profile.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);\r
267                 }\r
268             }\r
269         }\r
270 \r
271         private void mnu_save_Click(object sender, EventArgs e)\r
272         {\r
273 \r
274             string filename;\r
275             File_Save.ShowDialog();\r
276             filename = File_Save.FileName;\r
277             if (filename != "")\r
278             {\r
279                 try\r
280                 {\r
281                     // Create a StreamWriter and open the file\r
282                     StreamWriter line = new StreamWriter(filename);\r
283 \r
284                     //Source\r
285                     line.WriteLine(text_source.Text);\r
286                     line.WriteLine(drp_dvdtitle.Text);\r
287                     line.WriteLine(drop_chapterStart.Text);\r
288                     line.WriteLine(drop_chapterFinish.Text);\r
289                     //Destination\r
290                     line.WriteLine(text_destination.Text);\r
291                     line.WriteLine(drp_videoEncoder.Text);\r
292                     line.WriteLine(drp_audioCodec.Text);\r
293                     line.WriteLine(text_width.Text);\r
294                     line.WriteLine(text_height.Text);\r
295                     //Picture Settings Tab\r
296                     line.WriteLine(text_top.Text);\r
297                     line.WriteLine(text_bottom.Text);\r
298                     line.WriteLine(text_left.Text);\r
299                     line.WriteLine(text_right.Text);\r
300                     line.WriteLine(drp_subtitle.Text);\r
301                     //Video Settings Tab\r
302                     line.WriteLine(text_bitrate.Text);\r
303                     line.WriteLine(text_filesize.Text);\r
304                     line.WriteLine(slider_videoQuality.Value.ToString());\r
305                     line.WriteLine(check_2PassEncode.CheckState.ToString());\r
306                     line.WriteLine(check_DeInterlace.CheckState.ToString());\r
307                     line.WriteLine(check_grayscale.CheckState.ToString());\r
308                     line.WriteLine(drp_videoFramerate.Text);\r
309                     line.WriteLine(Check_ChapterMarkers.CheckState.ToString());\r
310                     line.WriteLine(CheckPixelRatio.CheckState.ToString());\r
311                     line.WriteLine(check_turbo.CheckState.ToString());\r
312                     line.WriteLine(check_largeFile.CheckState.ToString());\r
313                     //Audio Settings Tab\r
314                     line.WriteLine(drp_audioBitrate.Text);\r
315                     line.WriteLine(drp_audioSampleRate.Text);\r
316                     line.WriteLine(drp_audioChannels.Text);\r
317                     line.WriteLine(drp_audioMixDown.Text);\r
318                     //H264 Tab\r
319                     line.WriteLine(CheckCRF.CheckState.ToString());\r
320                     line.WriteLine(rtf_h264advanced.Text);\r
321                     // close the stream\r
322                     line.Close();\r
323                     MessageBox.Show("Your profile has been sucessfully saved.", "Status", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);\r
324                 }\r
325                 catch(Exception)\r
326                 {\r
327                     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
328                 }\r
329                 \r
330             }\r
331         }\r
332 \r
333         private void mnu_update_Click(object sender, EventArgs e)\r
334         {\r
335             Form Update = new frmUpdate();\r
336             Update.ShowDialog();\r
337         }\r
338 \r
339         private void mnu_exit_Click(object sender, EventArgs e)\r
340         {\r
341             this.Close();\r
342         }\r
343 \r
344         #endregion\r
345 \r
346         #region Tools Menu\r
347 \r
348         private void mnu_encode_Click(object sender, EventArgs e)\r
349         {\r
350             showQueue();\r
351         }\r
352 \r
353        \r
354         private void mnu_viewDVDdata_Click(object sender, EventArgs e)\r
355         {\r
356             try\r
357             {\r
358                 dvdInfoWindow.Show();\r
359                 \r
360             }\r
361             catch (Exception)\r
362             {\r
363             }\r
364 \r
365             // BUG *******************************************************\r
366             // Cross-thread operation not valid: Control 'rtf_dvdInfo' accessed from a thread other than the thread it was created on.\r
367             // This happens when the DVD is scanned and this item is then selected.\r
368             // If this item is selected so a blank copy of the window appears, then a DVD is scanned, there is no cross-thread issue.\r
369             // NOTE: Try/catch added to prevent final build crashing.\r
370             // NOTE2: Included a quick fix in frmMain(). Simply show and hide the window when starting the app.\r
371             // Note3: Suspect the problem lies with line 30.\r
372             // ***********************************************************\r
373 \r
374         }\r
375 \r
376         private void mnu_options_Click(object sender, EventArgs e)\r
377         {\r
378             Form Options = new frmOptions();\r
379             Options.ShowDialog();\r
380         }\r
381 \r
382         #endregion\r
383 \r
384         #region Presets Menu\r
385 \r
386         private void mnu_preset_ipod133_Click(object sender, EventArgs e)\r
387         {\r
388             CheckPixelRatio.CheckState = CheckState.Unchecked;\r
389             text_width.Text = "640";\r
390             text_height.Text = "480";\r
391             drp_videoEncoder.Text = "H.264 (iPod)";\r
392             text_bitrate.Text = "1000";\r
393             text_filesize.Text = "";\r
394             slider_videoQuality.Value = 0;\r
395             SliderValue.Text = "0%";\r
396             drp_audioBitrate.Text = "160";\r
397             rtf_h264advanced.Text = "";\r
398             drp_crop.Text = "No Crop";\r
399         }\r
400 \r
401         private void mnu_preset_ipod178_Click(object sender, EventArgs e)\r
402         {\r
403             CheckPixelRatio.CheckState = CheckState.Unchecked;\r
404             text_width.Text = "640";\r
405             text_height.Text = "352";\r
406             drp_videoEncoder.Text = "H.264 (iPod)";\r
407             text_bitrate.Text = "1000";\r
408             text_filesize.Text = "";\r
409             slider_videoQuality.Value = 0;\r
410             SliderValue.Text = "0%";\r
411             drp_audioBitrate.Text = "160";\r
412             rtf_h264advanced.Text = "";\r
413             drp_crop.Text = "No Crop";\r
414         }\r
415 \r
416         private void mnu_preset_ipod235_Click(object sender, EventArgs e)\r
417         {\r
418             CheckPixelRatio.CheckState = CheckState.Unchecked;\r
419             text_width.Text = "640";\r
420             text_height.Text = "272";\r
421             drp_videoEncoder.Text = "H.264 (iPod)";\r
422             text_bitrate.Text = "1000";\r
423             text_filesize.Text = "";\r
424             slider_videoQuality.Value = 0;\r
425             SliderValue.Text = "0%";\r
426             drp_audioBitrate.Text = "160";\r
427             rtf_h264advanced.Text = "";\r
428             drp_crop.Text = "No Crop";\r
429         }\r
430 \r
431         private void mnu_appleTv_Click(object sender, EventArgs e)\r
432         {\r
433             text_width.Text = "";\r
434             text_height.Text = "";\r
435             drp_videoEncoder.Text = "H.264";\r
436             text_bitrate.Text = "3000";\r
437             text_filesize.Text = "";\r
438             slider_videoQuality.Value = 0;\r
439             SliderValue.Text = "0%";\r
440             drp_audioBitrate.Text = "160";\r
441             CheckPixelRatio.CheckState = CheckState.Checked;\r
442             drp_audioSampleRate.Text = "48";\r
443             rtf_h264advanced.Text = "bframes=3:ref=1:subme=5:me=umh:no-fast-pskip=1:no-dct-decimate=1:trellis=2";\r
444             drp_crop.Text = "No Crop";\r
445             \r
446         }\r
447 \r
448         private void mnu_presetPS3_Click(object sender, EventArgs e)\r
449         {\r
450             CheckPixelRatio.CheckState = CheckState.Unchecked;\r
451             text_width.Text = "";\r
452             text_height.Text = "";\r
453             drp_videoEncoder.Text = "H.264";\r
454             text_bitrate.Text = "3000";\r
455             text_filesize.Text = "";\r
456             slider_videoQuality.Value = 0;\r
457             SliderValue.Text = "0%";\r
458             drp_audioBitrate.Text = "160";\r
459             CheckPixelRatio.CheckState = CheckState.Checked;\r
460             drp_audioSampleRate.Text = "48";\r
461             rtf_h264advanced.Text = "level=41";\r
462             drp_crop.Text = "No Crop";\r
463         }\r
464 \r
465         private void mnu_ProgramDefaultOptions_Click(object sender, EventArgs e)\r
466         {\r
467             //Source\r
468             Properties.Settings.Default.DVDSource = text_source.Text;\r
469             Properties.Settings.Default.DVDTitle = drp_dvdtitle.Text;\r
470             Properties.Settings.Default.ChapterStart = drop_chapterStart.Text;\r
471             Properties.Settings.Default.ChapterFinish = drop_chapterFinish.Text;\r
472             //Destination\r
473             Properties.Settings.Default.VideoDest = text_destination.Text;\r
474             Properties.Settings.Default.VideoEncoder = drp_videoEncoder.Text;\r
475             Properties.Settings.Default.AudioEncoder = drp_audioCodec.Text;\r
476             Properties.Settings.Default.Width = text_width.Text;\r
477             Properties.Settings.Default.Height = text_height.Text;\r
478             //Picture Settings Tab\r
479             Properties.Settings.Default.CroppingOption = drp_crop.Text;\r
480             Properties.Settings.Default.CropTop = text_top.Text;\r
481             Properties.Settings.Default.CropBottom = text_bottom.Text;\r
482             Properties.Settings.Default.CropLeft = text_left.Text;\r
483             Properties.Settings.Default.CropRight = text_right.Text;\r
484             Properties.Settings.Default.Subtitles = drp_subtitle.Text;\r
485             //Video Settings Tab\r
486             Properties.Settings.Default.VideoBitrate = text_bitrate.Text;\r
487             Properties.Settings.Default.VideoFilesize = text_filesize.Text;\r
488             Properties.Settings.Default.VideoQuality = slider_videoQuality.Value;\r
489             Properties.Settings.Default.TwoPass = check_2PassEncode.CheckState.ToString();\r
490             Properties.Settings.Default.DeInterlace = check_DeInterlace.CheckState.ToString();\r
491             Properties.Settings.Default.Grayscale = check_grayscale.CheckState.ToString();\r
492             Properties.Settings.Default.Framerate = drp_videoFramerate.Text;\r
493             Properties.Settings.Default.PixelRatio = CheckPixelRatio.CheckState.ToString();\r
494             Properties.Settings.Default.turboFirstPass = check_turbo.CheckState.ToString();\r
495             Properties.Settings.Default.largeFile = check_largeFile.CheckState.ToString();\r
496             //Audio Settings Tab\r
497             Properties.Settings.Default.AudioBitrate = drp_audioBitrate.Text;\r
498             Properties.Settings.Default.AudioSampleRate = drp_audioSampleRate.Text;\r
499             Properties.Settings.Default.AudioChannels = drp_audioChannels.Text;\r
500             //H264 Tab\r
501             Properties.Settings.Default.CRF = CheckCRF.CheckState.ToString();\r
502             Properties.Settings.Default.H264 = rtf_h264advanced.Text;\r
503             Properties.Settings.Default.Save();\r
504         }\r
505 \r
506         #endregion\r
507 \r
508         #region Help Menu\r
509 \r
510         private void mnu_wiki_Click(object sender, EventArgs e)\r
511         {\r
512            Process.Start("http://handbrake.m0k.org/trac");\r
513         }\r
514 \r
515         private void mnu_onlineDocs_Click(object sender, EventArgs e)\r
516         {\r
517             Process.Start("http://handbrake.m0k.org/?page_id=11");\r
518         }\r
519 \r
520         private void mnu_faq_Click(object sender, EventArgs e)\r
521         {\r
522             Process.Start("http://handbrake.m0k.org/trac/wiki/WindowsGuiFaq");\r
523         }\r
524 \r
525         private void mnu_homepage_Click(object sender, EventArgs e)\r
526         {\r
527            Process.Start("http://handbrake.m0k.org");\r
528         }\r
529 \r
530         private void mnu_forum_Click(object sender, EventArgs e)\r
531         {\r
532             Process.Start("http://handbrake.m0k.org/forum");\r
533         }\r
534 \r
535         private void mnu_about_Click(object sender, EventArgs e)\r
536         {\r
537                         Form About = new frmAbout();\r
538             About.ShowDialog();\r
539         }\r
540 \r
541         #endregion\r
542 \r
543         // -------------------------------------------------------------- \r
544         // Buttons on the main Window\r
545         // --------------------------------------------------------------\r
546         private void btn_Browse_Click(object sender, EventArgs e)\r
547         {\r
548             \r
549             String filename ="";\r
550             text_source.Text = "";\r
551             \r
552             //int scanTwice = 0;\r
553 \r
554             if (RadioDVD.Checked)\r
555             {\r
556                 DVD_Open.ShowDialog();\r
557                 filename = DVD_Open.SelectedPath;\r
558                 if (filename != "")\r
559                 {\r
560                     Form frmRD = new frmReadDVD(filename, this, dvdInfoWindow);\r
561                     text_source.Text = filename;\r
562                     frmRD.ShowDialog();\r
563                 }\r
564             }\r
565             else\r
566             {\r
567                 ISO_Open.ShowDialog();\r
568                 filename = ISO_Open.FileName;\r
569                 if (filename != "")\r
570                 {\r
571                     Form frmRD = new frmReadDVD(filename, this, dvdInfoWindow);\r
572                     text_source.Text = filename;\r
573                     frmRD.ShowDialog();\r
574                 }\r
575             }  \r
576 \r
577             // Check if there was titles in the dvd title dropdown\r
578             // If there isn't any, rescan the DVD. hbcli occasionally fails (see bug in encode) with standard error.\r
579             if (filename != "")\r
580             {\r
581                // Disbaled the 2nd pass for the time being.\r
582                /* if (drp_dvdtitle.Items.Count == 0) \r
583                 {\r
584                     if (scanTwice == 0)\r
585                     {\r
586                         MessageBox.Show("Scan Failed. Waiting 5 Seconds before attempting to re-scan the source a 2nd time.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);\r
587                         Thread.Sleep(3000);\r
588                         Form frmRD = new frmReadDVD(filename, this, dvdInfoWindow);\r
589                         frmRD.ShowDialog();\r
590                         scanTwice = 1;\r
591                     }\r
592                 }*/\r
593             }\r
594             else\r
595             {\r
596                 text_source.Text = "Click 'Browse' to continue";\r
597             }\r
598 \r
599             if (drp_dvdtitle.Items.Count == 0)\r
600             {\r
601                 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
602            }\r
603 \r
604         }\r
605 \r
606         private void btn_destBrowse_Click(object sender, EventArgs e)\r
607         {\r
608             // TODO: Need to write some code to check if there is a reasonable amount of disk space left.\r
609 \r
610             DVD_Save.ShowDialog();\r
611             text_destination.Text = DVD_Save.FileName;\r
612 \r
613             if (Check_ChapterMarkers.Checked)\r
614             {\r
615                 string destination = text_destination.Text;\r
616                 destination = destination.Replace(".mp4", ".m4v");\r
617                 text_destination.Text = destination;\r
618             }\r
619         }\r
620 \r
621         private void btn_h264Clear_Click(object sender, EventArgs e)\r
622         {\r
623             rtf_h264advanced.Text = "";\r
624         }\r
625 \r
626         private void GenerateQuery_Click(object sender, EventArgs e)\r
627         {\r
628             String query = GenerateTheQuery();\r
629             QueryEditorText.Text = query;\r
630         }\r
631 \r
632         private void btn_ClearQuery_Click(object sender, EventArgs e)\r
633         {\r
634             QueryEditorText.Text = "";\r
635         }\r
636 \r
637         private void btn_queue_Click(object sender, EventArgs e)\r
638         {\r
639             if (text_destination.Text != "" && text_source.Text != "")\r
640             {\r
641 \r
642                 String query = GenerateTheQuery();\r
643                 queueWindow.list_queue.Items.Add(query);\r
644                 queueWindow.Show();\r
645             } \r
646             else \r
647             {\r
648                 MessageBox.Show("No Source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
649             }\r
650         }\r
651 \r
652         private void showQueue()\r
653         {\r
654             queueWindow.Show();\r
655         }\r
656 \r
657 \r
658 \r
659 \r
660 \r
661         //---------------------------------------------------\r
662         // Encode / Cancel Buttons\r
663         // Encode Progress Text Handler\r
664         //---------------------------------------------------\r
665 \r
666         Functions.CLI process = new Functions.CLI();\r
667 \r
668         private void btn_encode_Click(object sender, EventArgs e)\r
669         {\r
670             btn_eCancel.Enabled = true;\r
671             String query = "";\r
672             lbl_encode.Visible = true;\r
673  \r
674             if (QueryEditorText.Text == "")\r
675             {\r
676                 query = GenerateTheQuery();\r
677             }\r
678             else\r
679             {\r
680                 query = QueryEditorText.Text;\r
681             }\r
682 \r
683             ThreadPool.QueueUserWorkItem(procMonitor, query);\r
684             lbl_encode.Text = "Encoding Started";\r
685         }\r
686 \r
687         private void btn_eCancel_Click(object sender, EventArgs e)\r
688         {\r
689             process.killCLI();\r
690             process.setNull();\r
691             lbl_encode.Text = "Encoding Canceled";\r
692         }\r
693    \r
694         private void procMonitor(object state)\r
695         {\r
696             // Make sure we are not already encoding and if we are then display an error.\r
697             if (hbProc != null)\r
698             {\r
699                 MessageBox.Show("Handbrake is already encoding a video!", "Status", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
700             }\r
701             else\r
702             {\r
703                 hbProc = process.runCli(this, (string)state, true, true, false, false);\r
704 \r
705                 MessageBox.Show("The encode process has now started.", "Status", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);\r
706 \r
707                 try\r
708                 {\r
709 \r
710                     //*****************************************************************************************\r
711                     // BUG!\r
712                     // When the below code is used and standard error is set to true, hbcli is outputing a\r
713                     // video stream which has mild corruption issues every few seconds.\r
714                     // Maybe an issue with the Parser cauing the CLI to hickup/pause?\r
715                     //*****************************************************************************************\r
716 \r
717                     \r
718                     /*Parsing.Parser encode = new Parsing.Parser(hbProc.StandardError.BaseStream);\r
719                     encode.OnEncodeProgress += encode_OnEncodeProgress;\r
720                     while (!encode.EndOfStream)\r
721                     {\r
722                         encode.ReadLine();\r
723                     }\r
724 \r
725                     hbProc.WaitForExit();\r
726                     process.closeCLI();\r
727                     */\r
728                 }\r
729                 catch (Exception)\r
730                 {\r
731                     // Do nothing\r
732                 }\r
733 \r
734                 MessageBox.Show("The encode process has now ended.", "Status", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);\r
735                 hbProc = null;\r
736             }\r
737         }\r
738 \r
739         private void encode_OnEncodeProgress(object Sender, int CurrentTask, int TaskCount, float PercentComplete, float CurrentFps, float AverageFps, TimeSpan TimeRemaining)\r
740         {\r
741             if (this.InvokeRequired)\r
742             {\r
743                 this.BeginInvoke(new Parsing.EncodeProgressEventHandler(encode_OnEncodeProgress),\r
744                     new object[] { Sender, CurrentTask, TaskCount, PercentComplete, CurrentFps, AverageFps, TimeRemaining });\r
745                 return;\r
746             }\r
747             lbl_encode.Text = string.Format("Encode Progress: {0}%,       FPS: {1},       Avg FPS: {2},       Time Remaining: {3} ", PercentComplete, CurrentFps, AverageFps, TimeRemaining);\r
748         }\r
749         \r
750         //---------------------------------------------------\r
751         //  Items that require actions on frmMain\r
752         //---------------------------------------------------\r
753 \r
754         private void drop_chapterStart_SelectedIndexChanged(object sender, EventArgs e)\r
755         {\r
756             lbl_chptWarn.Visible = false;\r
757             QueryEditorText.Text = "";\r
758             if ((drop_chapterFinish.Text != "Auto") && (drop_chapterStart.Text != "Auto"))\r
759             {\r
760                 try\r
761                 {\r
762                     int chapterFinish = int.Parse(drop_chapterFinish.Text);\r
763                     int chapterStart = int.Parse(drop_chapterStart.Text);\r
764 \r
765                     if (chapterFinish < chapterStart)\r
766                     {\r
767                         lbl_chptWarn.Visible = true;\r
768                         lbl_chptWarn.Text = "Invalid Chapter Range!";\r
769                     }\r
770                 }\r
771                 catch (Exception)\r
772                 {\r
773                     lbl_chptWarn.Visible = true;\r
774                     lbl_chptWarn.Text = "Invalid Chapter Range!";\r
775                 }\r
776             }\r
777 \r
778             \r
779         }\r
780 \r
781         private void drop_chapterFinish_SelectedIndexChanged(object sender, EventArgs e)\r
782         {\r
783             lbl_chptWarn.Visible = false;\r
784             QueryEditorText.Text = "";\r
785             if ((drop_chapterFinish.Text != "Auto") && (drop_chapterStart.Text != "Auto"))\r
786             {\r
787                 try\r
788                 {\r
789                     int chapterFinish = int.Parse(drop_chapterFinish.Text);\r
790                     int chapterStart = int.Parse(drop_chapterStart.Text);\r
791 \r
792                     if (chapterFinish < chapterStart)\r
793                     {\r
794                         lbl_chptWarn.Visible = true;\r
795                         lbl_chptWarn.Text = "Invalid Chapter Range!";\r
796                     }\r
797                 }\r
798                 catch (Exception)\r
799                 {\r
800                     lbl_chptWarn.Visible = true;\r
801                     lbl_chptWarn.Text = "Invalid Chapter Range!";\r
802                 }\r
803             }\r
804         }\r
805 \r
806         private void text_bitrate_TextChanged(object sender, EventArgs e)\r
807         {\r
808             text_filesize.Text = "";\r
809             slider_videoQuality.Value = 0;\r
810             SliderValue.Text = "0%";\r
811             CheckCRF.CheckState = CheckState.Unchecked;\r
812             CheckCRF.Enabled = false;\r
813         }\r
814 \r
815         private void text_filesize_TextChanged(object sender, EventArgs e)\r
816         {\r
817             text_bitrate.Text = "";\r
818             slider_videoQuality.Value = 0;\r
819             SliderValue.Text = "0%";\r
820             CheckCRF.CheckState = CheckState.Unchecked;\r
821             CheckCRF.Enabled = false;\r
822         }\r
823 \r
824         private void slider_videoQuality_Scroll(object sender, EventArgs e)\r
825         {\r
826             SliderValue.Text = slider_videoQuality.Value.ToString() + "%";\r
827             text_bitrate.Text = "";\r
828             text_filesize.Text = "";\r
829             CheckCRF.Enabled = true;\r
830         }\r
831 \r
832         private void label_h264_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)\r
833         {\r
834             Process.Start("http://handbrake.m0k.org/trac/wiki/x264Options");\r
835         }\r
836 \r
837         private void text_width_TextChanged(object sender, EventArgs e)\r
838         {\r
839 \r
840             try\r
841             {\r
842                 if (CheckPixelRatio.Checked)\r
843                 {\r
844                     text_width.Text = "";\r
845                     text_width.BackColor = Color.White;\r
846                 }\r
847                 else\r
848                 {\r
849                     if ((int.Parse(text_width.Text) % 16) != 0)\r
850                     {\r
851                         text_width.BackColor = Color.LightCoral;\r
852                     }\r
853                     else\r
854                     {\r
855                         text_width.BackColor = Color.LightGreen;\r
856                     }\r
857                 }\r
858 \r
859                 if (lbl_Aspect.Text != "Select a Title")\r
860                 {\r
861                     double height = int.Parse(text_width.Text) / double.Parse(lbl_Aspect.Text);\r
862                     double mod16 = height % 16;\r
863                     height = height - mod16;\r
864 \r
865                     if (text_width.Text == "")\r
866                     {\r
867                         text_height.Text = "";\r
868                         text_width.BackColor = Color.White;\r
869                     }\r
870                     else\r
871                     {\r
872                         text_height.Text = height.ToString();\r
873                     }\r
874                 }\r
875             }\r
876             catch (Exception)\r
877             {\r
878                 // No need to throw an error here.\r
879             }\r
880                \r
881           \r
882         }\r
883 \r
884         private void text_height_TextChanged(object sender, EventArgs e)\r
885         {\r
886             try\r
887             {\r
888                 if (CheckPixelRatio.Checked)\r
889                 {\r
890                     text_height.Text = "";\r
891                     text_width.BackColor = Color.White;\r
892                 }\r
893                 else\r
894                 {\r
895                     if ((int.Parse(text_height.Text) % 16) != 0)\r
896                     {\r
897                         text_height.BackColor = Color.LightCoral;\r
898                     }\r
899                     else\r
900                     {\r
901                         text_height.BackColor = Color.LightGreen;\r
902                     }\r
903                 }\r
904             } catch(Exception){\r
905                 // No need to alert the user.\r
906             }\r
907         }\r
908 \r
909         private void drp_crop_SelectedIndexChanged(object sender, EventArgs e)\r
910         {\r
911             if ((string)drp_crop.SelectedItem == "Manual")\r
912             {\r
913             text_left.Enabled = true;\r
914             text_right.Enabled = true;\r
915             text_top.Enabled = true;\r
916             text_bottom.Enabled = true;\r
917             }\r
918 \r
919             if ((string)drp_crop.SelectedItem == "Auto Crop")\r
920             {\r
921                 text_left.Enabled = false;\r
922                 text_right.Enabled = false;\r
923                 text_top.Enabled = false;\r
924                 text_bottom.Enabled = false;\r
925                 text_left.Text = "";\r
926                 text_right.Text = "";\r
927                 text_top.Text = "";\r
928                 text_bottom.Text = "";\r
929 \r
930                 if (lbl_RecomendedCrop.Text != "Select a Title")\r
931                 {\r
932                     string[] temp = new string[4];\r
933                     temp = lbl_RecomendedCrop.Text.Split('/');\r
934                     text_left.Text = temp[2];\r
935                     text_right.Text = temp[3];\r
936                     text_top.Text = temp[0];\r
937                     text_bottom.Text = temp[1];\r
938                 }\r
939             }\r
940 \r
941             if ((string)drp_crop.SelectedItem == "No Crop")\r
942             {\r
943                 text_left.Enabled = false;\r
944                 text_right.Enabled = false;\r
945                 text_top.Enabled = false;\r
946                 text_bottom.Enabled = false;\r
947                 text_left.Text = "0";\r
948                 text_right.Text = "0";\r
949                 text_top.Text = "0";\r
950                 text_bottom.Text = "0";\r
951 \r
952             }\r
953         }\r
954         \r
955         private void CheckPixelRatio_CheckedChanged(object sender, EventArgs e)\r
956         {\r
957             text_width.Text = "";\r
958             text_height.Text = "";\r
959             text_width.BackColor = Color.White;\r
960             text_height.BackColor = Color.White;\r
961         }\r
962 \r
963         private void drp_dvdtitle_Click(object sender, EventArgs e)\r
964         {\r
965             if (drp_dvdtitle.Items.Count == 1)\r
966             {\r
967                 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
968             }\r
969         }\r
970 \r
971         private void drp_audioCodec_SelectedIndexChanged(object sender, EventArgs e)\r
972         {\r
973 \r
974             //CLI Audio mixdown Names: mono stereo dpl1 dpl2 6ch\r
975 \r
976             drp_audioMixDown.Items.Clear();\r
977 \r
978             if (drp_audioCodec.Text == "AAC")\r
979             {\r
980                 drp_audioMixDown.Items.Clear();\r
981                 drp_audioMixDown.Items.Add("Mono");\r
982                 drp_audioMixDown.Items.Add("Stereo");\r
983                 drp_audioMixDown.Items.Add("Dolby Surround");\r
984                 drp_audioMixDown.Items.Add("Dolby Pro Logic II");\r
985                 drp_audioMixDown.Items.Add("6 Channel Discrete");\r
986                 \r
987                 drp_audioBitrate.Items.Clear();\r
988                 drp_audioBitrate.Items.Add("32");\r
989                 drp_audioBitrate.Items.Add("40");\r
990                 drp_audioBitrate.Items.Add("48");\r
991                 drp_audioBitrate.Items.Add("56");\r
992                 drp_audioBitrate.Items.Add("64");\r
993                 drp_audioBitrate.Items.Add("80");\r
994                 drp_audioBitrate.Items.Add("86");\r
995                 drp_audioBitrate.Items.Add("112");\r
996                 drp_audioBitrate.Items.Add("128");\r
997                 drp_audioBitrate.Items.Add("160");\r
998 \r
999             }\r
1000             else\r
1001             {\r
1002                 drp_audioMixDown.Items.Clear();\r
1003                 drp_audioMixDown.Items.Add("Stereo");\r
1004                 drp_audioMixDown.Items.Add("Dolby Surround");\r
1005                 drp_audioMixDown.Items.Add("Dolby Pro Logic II");\r
1006 \r
1007                 drp_audioBitrate.Items.Clear();\r
1008                 drp_audioBitrate.Items.Add("32");\r
1009                 drp_audioBitrate.Items.Add("40");\r
1010                 drp_audioBitrate.Items.Add("48");\r
1011                 drp_audioBitrate.Items.Add("56");\r
1012                 drp_audioBitrate.Items.Add("64");\r
1013                 drp_audioBitrate.Items.Add("80");\r
1014                 drp_audioBitrate.Items.Add("86");\r
1015                 drp_audioBitrate.Items.Add("112");\r
1016                 drp_audioBitrate.Items.Add("128");\r
1017                 drp_audioBitrate.Items.Add("160");\r
1018                 drp_audioBitrate.Items.Add("192");\r
1019                 drp_audioBitrate.Items.Add("224");\r
1020                 drp_audioBitrate.Items.Add("256");\r
1021                 drp_audioBitrate.Items.Add("320");\r
1022                 drp_audioBitrate.Items.Add("384");\r
1023             }\r
1024         }\r
1025 \r
1026         private void drp_audioMixDown_SelectedIndexChanged(object sender, EventArgs e)\r
1027         {\r
1028             if (drp_audioCodec.Text == "AAC")\r
1029             {\r
1030                 if (drp_audioMixDown.Text == "6 Channel Discrete")\r
1031                 {\r
1032 \r
1033                     drp_audioBitrate.Items.Clear();\r
1034                     drp_audioBitrate.Items.Add("32");\r
1035                     drp_audioBitrate.Items.Add("40");\r
1036                     drp_audioBitrate.Items.Add("48");\r
1037                     drp_audioBitrate.Items.Add("56");\r
1038                     drp_audioBitrate.Items.Add("64");\r
1039                     drp_audioBitrate.Items.Add("80");\r
1040                     drp_audioBitrate.Items.Add("86");\r
1041                     drp_audioBitrate.Items.Add("112");\r
1042                     drp_audioBitrate.Items.Add("128");\r
1043                     drp_audioBitrate.Items.Add("160");\r
1044                     drp_audioBitrate.Items.Add("192");\r
1045                     drp_audioBitrate.Items.Add("224");\r
1046                     drp_audioBitrate.Items.Add("256");\r
1047                     drp_audioBitrate.Items.Add("320");\r
1048                     drp_audioBitrate.Items.Add("384");\r
1049                 }\r
1050             }\r
1051         }\r
1052 \r
1053         private void Check_ChapterMarkers_CheckedChanged(object sender, EventArgs e)\r
1054         {\r
1055             if (Check_ChapterMarkers.Checked)\r
1056             {\r
1057                 string destination = text_destination.Text;\r
1058                 destination = destination.Replace(".mp4", ".m4v");\r
1059                 text_destination.Text = destination;\r
1060             }\r
1061         }\r
1062 \r
1063         private void check_largeFile_CheckedChanged(object sender, EventArgs e)\r
1064         {\r
1065             if (!text_destination.Text.Contains(".mp4"))\r
1066             {\r
1067                 MessageBox.Show("This option is only compatible with the mp4 file container.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1068                 check_largeFile.CheckState = CheckState.Unchecked;\r
1069             }\r
1070         }\r
1071 \r
1072         private void drp_videoEncoder_SelectedIndexChanged(object sender, EventArgs e)\r
1073         {\r
1074             //Turn off some options which are H.264 only when the user selects a non h.264 encoder\r
1075             if (!drp_videoEncoder.Text.Contains("H.264"))\r
1076             {\r
1077                 check_turbo.CheckState = CheckState.Unchecked;\r
1078                 CheckCRF.CheckState = CheckState.Unchecked;\r
1079                 CheckCRF.Enabled = false;\r
1080                 check_turbo.Enabled = false;\r
1081                 h264Tab.Enabled = false;\r
1082             }\r
1083             else\r
1084             {\r
1085                 CheckCRF.Enabled = true;\r
1086                 check_turbo.Enabled = true;\r
1087                 h264Tab.Enabled = true;\r
1088             }\r
1089 \r
1090         }\r
1091 \r
1092         public void setStreamReader(Parsing.DVD dvd)\r
1093         {\r
1094             this.thisDVD = dvd;\r
1095         }\r
1096 \r
1097         private void drp_dvdtitle_SelectedIndexChanged(object sender, EventArgs e)\r
1098         {\r
1099             // Reset some values on the form\r
1100             lbl_Aspect.Text = "Select a Title";\r
1101             lbl_RecomendedCrop.Text = "Select a Title";\r
1102             drop_chapterStart.Items.Clear();\r
1103             drop_chapterFinish.Items.Clear();\r
1104             QueryEditorText.Text = "";\r
1105 \r
1106             // If the dropdown is set to automatic nothing else needs to be done.\r
1107             // Otheriwse if its not, title data has to be loased from parsing.\r
1108             if (drp_dvdtitle.Text != "Automatic")\r
1109             {\r
1110                 Parsing.Title selectedTitle = drp_dvdtitle.SelectedItem as Parsing.Title;\r
1111 \r
1112                 // Set the Aspect Ratio\r
1113                 lbl_Aspect.Text = selectedTitle.AspectRatio.ToString();\r
1114 \r
1115                 // Set the Recommended Cropping values\r
1116                 lbl_RecomendedCrop.Text = string.Format("{0}/{1}/{2}/{3}", selectedTitle.AutoCropDimensions[0], selectedTitle.AutoCropDimensions[1], selectedTitle.AutoCropDimensions[2], selectedTitle.AutoCropDimensions[3]);\r
1117                 \r
1118                 // Populate the Start chapter Dropdown\r
1119                 drop_chapterStart.Items.Clear();\r
1120                 drop_chapterStart.Items.AddRange(selectedTitle.Chapters.ToArray());\r
1121                 if (drop_chapterStart.Items.Count > 0)\r
1122                 {\r
1123                     drop_chapterStart.Text = drop_chapterStart.Items[0].ToString();\r
1124                 }\r
1125 \r
1126                 // Populate the Final Chapter Dropdown\r
1127                 drop_chapterFinish.Items.Clear();\r
1128                 drop_chapterFinish.Items.AddRange(selectedTitle.Chapters.ToArray());\r
1129                 if (drop_chapterFinish.Items.Count > 0)\r
1130                 {\r
1131                     drop_chapterFinish.Text = drop_chapterFinish.Items[drop_chapterFinish.Items.Count - 1].ToString();\r
1132                 }\r
1133 \r
1134                 // Populate the Audio Channels Dropdown\r
1135                 drp_audioChannels.Items.Clear();\r
1136                 drp_audioChannels.Items.Add("Automatic");\r
1137                 drp_audioChannels.Items.AddRange(selectedTitle.AudioTracks.ToArray());\r
1138                 if (drp_audioChannels.Items.Count > 0)\r
1139                 {\r
1140                     drp_audioChannels.Text = drp_audioChannels.Items[0].ToString();\r
1141                 }\r
1142 \r
1143                 // Populate the Subtitles dropdown\r
1144                 drp_subtitle.Items.Clear();\r
1145                 drp_subtitle.Items.Add("None");\r
1146                 drp_subtitle.Items.AddRange(selectedTitle.Subtitles.ToArray());\r
1147                 if (drp_subtitle.Items.Count > 0)\r
1148                 {\r
1149                     drp_subtitle.Text = drp_subtitle.Items[0].ToString();\r
1150                 }\r
1151             }\r
1152         }\r
1153 \r
1154         //---------------------------------------------------\r
1155         //  The query Generation function.\r
1156         //---------------------------------------------------\r
1157         public string GenerateTheQuery()\r
1158         {\r
1159             string source = text_source.Text;\r
1160             string dvdTitle = drp_dvdtitle.Text;\r
1161             string chapterStart = drop_chapterStart.Text;\r
1162             string chapterFinish = drop_chapterFinish.Text;\r
1163             int totalChapters = drop_chapterFinish.Items.Count - 1;\r
1164             string dvdChapter = "";\r
1165 \r
1166             if (source ==  "")\r
1167                 MessageBox.Show("No Source has been selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1168             else\r
1169             {\r
1170                 source = " -i " + '"' + source+ '"'; //'"'+\r
1171             }\r
1172 \r
1173             if (dvdTitle ==  "Automatic")\r
1174                 dvdTitle = "";\r
1175             else\r
1176             {\r
1177                 string[] titleInfo = dvdTitle.Split(' ');\r
1178                 dvdTitle = " -t "+ titleInfo[0];\r
1179             }\r
1180 \r
1181             if (chapterFinish.Equals("Auto") && chapterStart.Equals("Auto"))\r
1182                 dvdChapter = "";\r
1183             else if (chapterFinish == chapterStart)\r
1184                 dvdChapter = " -c " + chapterStart;\r
1185             else\r
1186                 dvdChapter = " -c " + chapterStart + "-" + chapterFinish;\r
1187 \r
1188             string querySource = source+ dvdTitle+ dvdChapter;\r
1189             // ----------------------------------------------------------------------\r
1190 \r
1191             // Destination\r
1192 \r
1193             string destination = text_destination.Text;\r
1194             string videoEncoder = drp_videoEncoder.Text;\r
1195             string audioEncoder = drp_audioCodec.Text;\r
1196             string width = text_width.Text;\r
1197             string height = text_height.Text;\r
1198 \r
1199             if (destination ==  "")\r
1200                 MessageBox.Show("No destination has been selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1201             else\r
1202                 destination = " -o " + '"' + destination + '"'; //'"'+ \r
1203 \r
1204 \r
1205             switch (videoEncoder)\r
1206             {\r
1207                 case "Mpeg 4":\r
1208                     videoEncoder = " -e ffmpeg";\r
1209                     break;\r
1210                 case "Xvid":\r
1211                     videoEncoder = " -e xvid";\r
1212                     break;\r
1213                 case "H.264":\r
1214                     videoEncoder = " -e x264";\r
1215                     break;\r
1216                 case "H.264 Baseline 1.3":\r
1217                     videoEncoder = " -e x264b13";\r
1218                     break;\r
1219                 case "H.264 (iPod)":\r
1220                     videoEncoder = " -e x264b30";\r
1221                     break;\r
1222                 default:\r
1223                     videoEncoder = " -e x264";\r
1224                     break;\r
1225             }\r
1226            \r
1227             switch (audioEncoder)\r
1228             {\r
1229                 case "AAC":\r
1230                     audioEncoder = " -E faac";\r
1231                     break;\r
1232                 case "MP3":\r
1233                     audioEncoder = " -E lame";\r
1234                     break;\r
1235                 case "Vorbis":\r
1236                     audioEncoder = " -E vorbis";\r
1237                     break;\r
1238                 case "AC3":\r
1239                     audioEncoder = " -E ac3";\r
1240                     break;\r
1241                 default:\r
1242                     audioEncoder = " -E faac";\r
1243                     break;\r
1244             }\r
1245 \r
1246             if (width !=  "")\r
1247                 width = " -w "+ width;\r
1248             \r
1249 \r
1250             if (height !=  "")\r
1251                 height = " -l "+ height;\r
1252             \r
1253 \r
1254             string queryDestination = destination+ videoEncoder+ audioEncoder+ width+ height;\r
1255             // ----------------------------------------------------------------------\r
1256 \r
1257             // Picture Settings Tab\r
1258 \r
1259             string cropSetting = drp_crop.Text;\r
1260             string cropTop = text_top.Text;\r
1261             string cropBottom = text_bottom.Text;\r
1262             string cropLeft = text_left.Text;\r
1263             string cropRight = text_right.Text;\r
1264             string subtitles = drp_subtitle.Text;\r
1265             string cropOut = "";\r
1266             // Returns Crop Query\r
1267 \r
1268             if (cropSetting == "Auto Crop")\r
1269                 cropOut = "";\r
1270             else if (cropSetting == "No Crop")\r
1271                 cropOut = " --crop 0:0:0:0 ";\r
1272             else\r
1273                 cropOut = " --crop " + cropTop + ":" + cropBottom + ":" + cropLeft + ":" + cropRight;\r
1274 \r
1275             if (subtitles ==  "None")\r
1276                 subtitles = "";\r
1277             else if (subtitles ==  "")\r
1278                 subtitles = "";\r
1279             else\r
1280             {\r
1281                 string[] tempSub;\r
1282                 tempSub = subtitles.Split(' ');\r
1283                 subtitles = " -s "+ tempSub[0];\r
1284             }\r
1285 \r
1286             string queryPictureSettings = cropOut+ subtitles;\r
1287             // ----------------------------------------------------------------------\r
1288 \r
1289             // Video Settings Tab\r
1290 \r
1291             string videoBitrate = text_bitrate.Text;\r
1292             string videoFilesize = text_filesize.Text;\r
1293             int videoQuality = slider_videoQuality.Value;\r
1294             string vidQSetting = "";\r
1295             string twoPassEncoding = "";\r
1296             string deinterlace = "";\r
1297             string grayscale = "";\r
1298             string videoFramerate = drp_videoFramerate.Text;\r
1299             string pixelRatio = "";\r
1300             string ChapterMarkers = "";\r
1301             string turboH264 = "";\r
1302             string largeFile = "";\r
1303 \r
1304             if (videoBitrate !=  "")\r
1305                 videoBitrate = " -b "+ videoBitrate;\r
1306 \r
1307             if (videoFilesize !=  "")\r
1308                 videoFilesize = " -S "+ videoFilesize;\r
1309 \r
1310             // Video Quality Setting\r
1311 \r
1312             if ((videoQuality ==  0))\r
1313                 vidQSetting = "";\r
1314             else\r
1315             {\r
1316                 videoQuality = videoQuality/ 100;\r
1317                 if (videoQuality ==  1)\r
1318                 {\r
1319                     vidQSetting = "1.0";\r
1320                 }\r
1321 \r
1322                 vidQSetting = " -q " + videoQuality.ToString();\r
1323             }\r
1324 \r
1325             if (check_2PassEncode.Checked)\r
1326                 twoPassEncoding = " -2 ";\r
1327 \r
1328             if (check_DeInterlace.Checked)\r
1329                 deinterlace = " -d ";\r
1330 \r
1331             if (check_grayscale.Checked)\r
1332                 grayscale = " -g ";\r
1333 \r
1334             if (videoFramerate ==  "Automatic")\r
1335                 videoFramerate = "";\r
1336             else\r
1337                 videoFramerate = " -r "+ videoFramerate;\r
1338 \r
1339             if (CheckPixelRatio.Checked)\r
1340                 pixelRatio = " -p ";\r
1341 \r
1342             if (Check_ChapterMarkers.Checked)\r
1343                 ChapterMarkers = " -m ";\r
1344 \r
1345             if (check_turbo.Checked)\r
1346                 turboH264 = " -T ";\r
1347 \r
1348             if (check_largeFile.Checked)\r
1349                 largeFile = " -4 ";\r
1350 \r
1351             string queryVideoSettings = videoBitrate + videoFilesize + vidQSetting + twoPassEncoding + deinterlace + grayscale + videoFramerate + pixelRatio + ChapterMarkers + turboH264 + largeFile;\r
1352             // ----------------------------------------------------------------------\r
1353 \r
1354             // Audio Settings Tab\r
1355 \r
1356             string audioBitrate = drp_audioBitrate.Text;\r
1357             string audioSampleRate = drp_audioSampleRate.Text;\r
1358             string audioChannels = drp_audioChannels.Text;\r
1359             string Mixdown = drp_audioMixDown.Text;\r
1360             string SixChannelAudio = "";\r
1361 \r
1362             if (audioBitrate !=  "")\r
1363                 audioBitrate = " -B "+ audioBitrate;\r
1364 \r
1365             if (audioSampleRate !=  "")\r
1366                 audioSampleRate = " -R "+ audioSampleRate;\r
1367 \r
1368             if (audioChannels ==  "Automatic")\r
1369                 audioChannels = "";\r
1370             else if (audioChannels ==  "")\r
1371                 audioChannels = "";\r
1372             else\r
1373             {\r
1374                 string[] tempSub;\r
1375                 tempSub = audioChannels.Split(' ');\r
1376                 audioChannels = " -a "+ tempSub[0];\r
1377             }\r
1378 \r
1379             switch (Mixdown)\r
1380             {\r
1381                 case "Automatic":\r
1382                     Mixdown = "";\r
1383                     break;\r
1384                 case "Mono":\r
1385                     Mixdown = "mono";\r
1386                     break;\r
1387                 case "Stereo":\r
1388                     Mixdown = "stereo";\r
1389                     break;\r
1390                 case "Dolby Surround":\r
1391                     Mixdown = "dpl1";\r
1392                     break;\r
1393                 case "Dolby Pro Logic II":\r
1394                     Mixdown = "dpl2";\r
1395                     break;\r
1396                 case "6 Channel Discrete":\r
1397                     Mixdown = "6ch";\r
1398                     break;\r
1399                 default:\r
1400                     Mixdown = "stero";\r
1401                     break;\r
1402             }\r
1403 \r
1404             if (Mixdown !=  "")\r
1405                 SixChannelAudio = " -6 "+ Mixdown;\r
1406             else\r
1407                 SixChannelAudio = "";\r
1408 \r
1409             string queryAudioSettings = audioBitrate+ audioSampleRate+ audioChannels+ SixChannelAudio;\r
1410             // ----------------------------------------------------------------------\r
1411 \r
1412             //  H.264 Tab\r
1413 \r
1414             string CRF = CheckCRF.CheckState.ToString();\r
1415             string h264Advanced = rtf_h264advanced.Text;\r
1416             if ((CRF ==  "1"))\r
1417                 CRF = " -Q ";\r
1418             else\r
1419                 CRF = "";\r
1420 \r
1421             if ((h264Advanced ==  ""))\r
1422                 h264Advanced = "";\r
1423             else\r
1424                 h264Advanced = " -x "+ h264Advanced;\r
1425     \r
1426 \r
1427             string h264Settings = CRF+ h264Advanced;\r
1428             // ----------------------------------------------------------------------\r
1429 \r
1430             // Processors (Program Settings)\r
1431 \r
1432             string processors = Properties.Settings.Default.Processors;\r
1433             //  Number of Processors Handler\r
1434 \r
1435             if (processors ==  "Automatic")\r
1436                 processors = "";\r
1437             else\r
1438                 processors = " -C "+ processors+ " ";\r
1439 \r
1440 \r
1441             string queryAdvancedSettings = processors;\r
1442             // ----------------------------------------------------------------------\r
1443 \r
1444             //  Verbose option (Program Settings)\r
1445 \r
1446             string verbose = "";\r
1447             if (Properties.Settings.Default.verbose ==  "Checked")\r
1448                 verbose = " -v ";\r
1449 \r
1450             // ----------------------------------------------------------------------\r
1451 \r
1452             return querySource+ queryDestination+ queryPictureSettings+ queryVideoSettings+ h264Settings+ queryAudioSettings+ queryAdvancedSettings+ verbose;\r
1453         }\r
1454 \r
1455         \r
1456 \r
1457         // This is the END of the road ------------------------------------------------------------------------------\r
1458     }\r
1459 }