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