OSDN Git Service

ddb94b184a300c18a195ee43fa3711aa50da6395
[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                 if (drp_dvdtitle.Items.Count == 0) \r
582                 {\r
583                     MessageBox.Show(scanTwice.ToString());\r
584                     if (scanTwice == 0)\r
585                     {\r
586                         MessageBox.Show("Scan Failed. Will attempt to scan the source 1 more time.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);\r
587                         Form frmRD = new frmReadDVD(filename, this, dvdInfoWindow);\r
588                         frmRD.ShowDialog();\r
589                         scanTwice = 1;\r
590                     }\r
591                 }\r
592             }\r
593             else\r
594             {\r
595                 text_source.Text = "Click 'Browse' to continue";\r
596             }\r
597 \r
598             if (drp_dvdtitle.Items.Count == 0)\r
599             {\r
600                 MessageBox.Show("No Title(s) found. Please make sure you have selected a valid, non-copy protected source. Please refer to the FAQ for details.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);\r
601            }\r
602 \r
603         }\r
604 \r
605         private void btn_destBrowse_Click(object sender, EventArgs e)\r
606         {\r
607             // TODO: Need to write some code to check if there is a reasonable amount of disk space left.\r
608 \r
609             DVD_Save.ShowDialog();\r
610             text_destination.Text = DVD_Save.FileName;\r
611 \r
612             if (Check_ChapterMarkers.Checked)\r
613             {\r
614                 string destination = text_destination.Text;\r
615                 destination = destination.Replace(".mp4", ".m4v");\r
616                 text_destination.Text = destination;\r
617             }\r
618         }\r
619 \r
620         private void btn_h264Clear_Click(object sender, EventArgs e)\r
621         {\r
622             rtf_h264advanced.Text = "";\r
623         }\r
624 \r
625         private void GenerateQuery_Click(object sender, EventArgs e)\r
626         {\r
627             String query = GenerateTheQuery();\r
628             QueryEditorText.Text = query;\r
629         }\r
630 \r
631         private void btn_ClearQuery_Click(object sender, EventArgs e)\r
632         {\r
633             QueryEditorText.Text = "";\r
634         }\r
635 \r
636         private void btn_queue_Click(object sender, EventArgs e)\r
637         {\r
638             if (text_destination.Text != "" && text_source.Text != "")\r
639             {\r
640 \r
641                 String query = GenerateTheQuery();\r
642                 queueWindow.list_queue.Items.Add(query);\r
643                 queueWindow.Show();\r
644             } \r
645             else \r
646             {\r
647                 MessageBox.Show("No Source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
648             }\r
649         }\r
650 \r
651         private void showQueue()\r
652         {\r
653             queueWindow.Show();\r
654         }\r
655 \r
656 \r
657 \r
658 \r
659 \r
660         //---------------------------------------------------\r
661         // Encode / Cancel Buttons\r
662         // Encode Progress Text Handler\r
663         //---------------------------------------------------\r
664 \r
665         Functions.CLI process = new Functions.CLI();\r
666 \r
667         private void btn_encode_Click(object sender, EventArgs e)\r
668         {\r
669             btn_eCancel.Enabled = true;\r
670             String query = "";\r
671             lbl_encode.Visible = true;\r
672  \r
673             if (QueryEditorText.Text == "")\r
674             {\r
675                 query = GenerateTheQuery();\r
676             }\r
677             else\r
678             {\r
679                 query = QueryEditorText.Text;\r
680             }\r
681 \r
682             ThreadPool.QueueUserWorkItem(procMonitor, query);\r
683             lbl_encode.Text = "Encoding Started";\r
684         }\r
685 \r
686         private void btn_eCancel_Click(object sender, EventArgs e)\r
687         {\r
688             process.killCLI();\r
689             process.setNull();\r
690             lbl_encode.Text = "Encoding Canceled";\r
691         }\r
692    \r
693         private void procMonitor(object state)\r
694         {\r
695             // Make sure we are not already encoding and if we are then display an error.\r
696             if (hbProc != null)\r
697             {\r
698                 MessageBox.Show("Handbrake is already encoding a video!", "Status", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
699             }\r
700             else\r
701             {\r
702                 hbProc = process.runCli(this, (string)state, false, false, false, false);\r
703 \r
704                 MessageBox.Show("The encode process has now started.", "Status", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);\r
705 \r
706                 try\r
707                 {\r
708 \r
709                     //*****************************************************************************************\r
710                     // BUG!\r
711                     // When the below code is used and standard error is set to true, hbcli is outputing a\r
712                     // video stream which has mild corruption issues every few seconds.\r
713                     // Maybe an issue with the Parser cauing the CLI to hickup/pause?\r
714                     //*****************************************************************************************\r
715 \r
716                     //Parsing.Parser encode = new Parsing.Parser(hbProc.StandardError.BaseStream);\r
717                     //encode.OnEncodeProgress += encode_OnEncodeProgress;\r
718                     //while (!encode.EndOfStream)\r
719                     //{\r
720                     //    encode.ReadLine();\r
721                     //}\r
722 \r
723                     hbProc.WaitForExit();\r
724                     process.closeCLI();\r
725                     \r
726                 }\r
727                 catch (Exception)\r
728                 {\r
729                     // Do nothing\r
730                 }\r
731 \r
732                 MessageBox.Show("The encode process has now ended.", "Status", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);\r
733                 hbProc = null;\r
734             }\r
735         }\r
736 \r
737         private void encode_OnEncodeProgress(object Sender, int CurrentTask, int TaskCount, float PercentComplete, float CurrentFps, float AverageFps, TimeSpan TimeRemaining)\r
738         {\r
739             if (this.InvokeRequired)\r
740             {\r
741                 this.BeginInvoke(new Parsing.EncodeProgressEventHandler(encode_OnEncodeProgress),\r
742                     new object[] { Sender, CurrentTask, TaskCount, PercentComplete, CurrentFps, AverageFps, TimeRemaining });\r
743                 return;\r
744             }\r
745             lbl_encode.Text = string.Format("Encode Progress: {0}%,       FPS: {1},       Avg FPS: {2},       Time Remaining: {3} ", PercentComplete, CurrentFps, AverageFps, TimeRemaining);\r
746         }\r
747         \r
748         //---------------------------------------------------\r
749         //  Items that require actions on frmMain\r
750         //---------------------------------------------------\r
751 \r
752         private void drop_chapterStart_SelectedIndexChanged(object sender, EventArgs e)\r
753         {\r
754             lbl_chptWarn.Visible = false;\r
755             QueryEditorText.Text = "";\r
756             if ((drop_chapterFinish.Text != "Auto") && (drop_chapterStart.Text != "Auto"))\r
757             {\r
758                 try\r
759                 {\r
760                     int chapterFinish = int.Parse(drop_chapterFinish.Text);\r
761                     int chapterStart = int.Parse(drop_chapterStart.Text);\r
762 \r
763                     if (chapterFinish < chapterStart)\r
764                     {\r
765                         lbl_chptWarn.Visible = true;\r
766                         lbl_chptWarn.Text = "Invalid Chapter Range!";\r
767                     }\r
768                 }\r
769                 catch (Exception)\r
770                 {\r
771                     lbl_chptWarn.Visible = true;\r
772                     lbl_chptWarn.Text = "Invalid Chapter Range!";\r
773                 }\r
774             }\r
775 \r
776             \r
777         }\r
778 \r
779         private void drop_chapterFinish_SelectedIndexChanged(object sender, EventArgs e)\r
780         {\r
781             lbl_chptWarn.Visible = false;\r
782             QueryEditorText.Text = "";\r
783             if ((drop_chapterFinish.Text != "Auto") && (drop_chapterStart.Text != "Auto"))\r
784             {\r
785                 try\r
786                 {\r
787                     int chapterFinish = int.Parse(drop_chapterFinish.Text);\r
788                     int chapterStart = int.Parse(drop_chapterStart.Text);\r
789 \r
790                     if (chapterFinish < chapterStart)\r
791                     {\r
792                         lbl_chptWarn.Visible = true;\r
793                         lbl_chptWarn.Text = "Invalid Chapter Range!";\r
794                     }\r
795                 }\r
796                 catch (Exception)\r
797                 {\r
798                     lbl_chptWarn.Visible = true;\r
799                     lbl_chptWarn.Text = "Invalid Chapter Range!";\r
800                 }\r
801             }\r
802         }\r
803 \r
804         private void text_bitrate_TextChanged(object sender, EventArgs e)\r
805         {\r
806             text_filesize.Text = "";\r
807             slider_videoQuality.Value = 0;\r
808             SliderValue.Text = "0%";\r
809             CheckCRF.CheckState = CheckState.Unchecked;\r
810             CheckCRF.Enabled = false;\r
811         }\r
812 \r
813         private void text_filesize_TextChanged(object sender, EventArgs e)\r
814         {\r
815             text_bitrate.Text = "";\r
816             slider_videoQuality.Value = 0;\r
817             SliderValue.Text = "0%";\r
818             CheckCRF.CheckState = CheckState.Unchecked;\r
819             CheckCRF.Enabled = false;\r
820         }\r
821 \r
822         private void slider_videoQuality_Scroll(object sender, EventArgs e)\r
823         {\r
824             SliderValue.Text = slider_videoQuality.Value.ToString() + "%";\r
825             text_bitrate.Text = "";\r
826             text_filesize.Text = "";\r
827             CheckCRF.Enabled = true;\r
828         }\r
829 \r
830         private void label_h264_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)\r
831         {\r
832             Process.Start("http://handbrake.m0k.org/trac/wiki/x264Options");\r
833         }\r
834 \r
835         private void text_width_TextChanged(object sender, EventArgs e)\r
836         {\r
837 \r
838             try\r
839             {\r
840                 if (CheckPixelRatio.Checked)\r
841                 {\r
842                     text_width.Text = "";\r
843                     text_width.BackColor = Color.White;\r
844                 }\r
845                 else\r
846                 {\r
847                     if ((int.Parse(text_width.Text) % 16) != 0)\r
848                     {\r
849                         text_width.BackColor = Color.LightCoral;\r
850                     }\r
851                     else\r
852                     {\r
853                         text_width.BackColor = Color.LightGreen;\r
854                     }\r
855                 }\r
856 \r
857                 if (lbl_Aspect.Text != "Select a Title")\r
858                 {\r
859                     double height = int.Parse(text_width.Text) / double.Parse(lbl_Aspect.Text);\r
860                     double mod16 = height % 16;\r
861                     height = height - mod16;\r
862 \r
863                     if (text_width.Text == "")\r
864                     {\r
865                         text_height.Text = "";\r
866                         text_width.BackColor = Color.White;\r
867                     }\r
868                     else\r
869                     {\r
870                         text_height.Text = height.ToString();\r
871                     }\r
872                 }\r
873             }\r
874             catch (Exception)\r
875             {\r
876                 // No need to throw an error here.\r
877             }\r
878                \r
879           \r
880         }\r
881 \r
882         private void text_height_TextChanged(object sender, EventArgs e)\r
883         {\r
884             try\r
885             {\r
886                 if (CheckPixelRatio.Checked)\r
887                 {\r
888                     text_height.Text = "";\r
889                     text_width.BackColor = Color.White;\r
890                 }\r
891                 else\r
892                 {\r
893                     if ((int.Parse(text_height.Text) % 16) != 0)\r
894                     {\r
895                         text_height.BackColor = Color.LightCoral;\r
896                     }\r
897                     else\r
898                     {\r
899                         text_height.BackColor = Color.LightGreen;\r
900                     }\r
901                 }\r
902             } catch(Exception){\r
903                 // No need to alert the user.\r
904             }\r
905         }\r
906 \r
907         private void drp_crop_SelectedIndexChanged(object sender, EventArgs e)\r
908         {\r
909             if ((string)drp_crop.SelectedItem == "Manual")\r
910             {\r
911             text_left.Enabled = true;\r
912             text_right.Enabled = true;\r
913             text_top.Enabled = true;\r
914             text_bottom.Enabled = true;\r
915             }\r
916 \r
917             if ((string)drp_crop.SelectedItem == "Auto Crop")\r
918             {\r
919                 text_left.Enabled = false;\r
920                 text_right.Enabled = false;\r
921                 text_top.Enabled = false;\r
922                 text_bottom.Enabled = false;\r
923                 text_left.Text = "";\r
924                 text_right.Text = "";\r
925                 text_top.Text = "";\r
926                 text_bottom.Text = "";\r
927 \r
928                 if (lbl_RecomendedCrop.Text != "Select a Title")\r
929                 {\r
930                     string[] temp = new string[4];\r
931                     temp = lbl_RecomendedCrop.Text.Split('/');\r
932                     text_left.Text = temp[2];\r
933                     text_right.Text = temp[3];\r
934                     text_top.Text = temp[0];\r
935                     text_bottom.Text = temp[1];\r
936                 }\r
937             }\r
938 \r
939             if ((string)drp_crop.SelectedItem == "No Crop")\r
940             {\r
941                 text_left.Enabled = false;\r
942                 text_right.Enabled = false;\r
943                 text_top.Enabled = false;\r
944                 text_bottom.Enabled = false;\r
945                 text_left.Text = "0";\r
946                 text_right.Text = "0";\r
947                 text_top.Text = "0";\r
948                 text_bottom.Text = "0";\r
949 \r
950             }\r
951         }\r
952         \r
953         private void CheckPixelRatio_CheckedChanged(object sender, EventArgs e)\r
954         {\r
955             text_width.Text = "";\r
956             text_height.Text = "";\r
957             text_width.BackColor = Color.White;\r
958             text_height.BackColor = Color.White;\r
959         }\r
960 \r
961         private void drp_dvdtitle_Click(object sender, EventArgs e)\r
962         {\r
963             if (drp_dvdtitle.Items.Count == 1)\r
964             {\r
965                 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
966             }\r
967         }\r
968 \r
969         private void drp_audioCodec_SelectedIndexChanged(object sender, EventArgs e)\r
970         {\r
971 \r
972             //CLI Audio mixdown Names: mono stereo dpl1 dpl2 6ch\r
973 \r
974             drp_audioMixDown.Items.Clear();\r
975 \r
976             if (drp_audioCodec.Text == "AAC")\r
977             {\r
978                 drp_audioMixDown.Items.Clear();\r
979                 drp_audioMixDown.Items.Add("Mono");\r
980                 drp_audioMixDown.Items.Add("Stereo");\r
981                 drp_audioMixDown.Items.Add("Dolby Surround");\r
982                 drp_audioMixDown.Items.Add("Dolby Pro Logic II");\r
983                 drp_audioMixDown.Items.Add("6 Channel Discrete");\r
984                 \r
985                 drp_audioBitrate.Items.Clear();\r
986                 drp_audioBitrate.Items.Add("32");\r
987                 drp_audioBitrate.Items.Add("40");\r
988                 drp_audioBitrate.Items.Add("48");\r
989                 drp_audioBitrate.Items.Add("56");\r
990                 drp_audioBitrate.Items.Add("64");\r
991                 drp_audioBitrate.Items.Add("80");\r
992                 drp_audioBitrate.Items.Add("86");\r
993                 drp_audioBitrate.Items.Add("112");\r
994                 drp_audioBitrate.Items.Add("128");\r
995                 drp_audioBitrate.Items.Add("160");\r
996 \r
997             }\r
998             else\r
999             {\r
1000                 drp_audioMixDown.Items.Clear();\r
1001                 drp_audioMixDown.Items.Add("Stereo");\r
1002                 drp_audioMixDown.Items.Add("Dolby Surround");\r
1003                 drp_audioMixDown.Items.Add("Dolby Pro Logic II");\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                 drp_audioBitrate.Items.Add("192");\r
1017                 drp_audioBitrate.Items.Add("224");\r
1018                 drp_audioBitrate.Items.Add("256");\r
1019                 drp_audioBitrate.Items.Add("320");\r
1020                 drp_audioBitrate.Items.Add("384");\r
1021             }\r
1022         }\r
1023 \r
1024         private void drp_audioMixDown_SelectedIndexChanged(object sender, EventArgs e)\r
1025         {\r
1026             if (drp_audioCodec.Text == "AAC")\r
1027             {\r
1028                 if (drp_audioMixDown.Text == "6 Channel Discrete")\r
1029                 {\r
1030 \r
1031                     drp_audioBitrate.Items.Clear();\r
1032                     drp_audioBitrate.Items.Add("32");\r
1033                     drp_audioBitrate.Items.Add("40");\r
1034                     drp_audioBitrate.Items.Add("48");\r
1035                     drp_audioBitrate.Items.Add("56");\r
1036                     drp_audioBitrate.Items.Add("64");\r
1037                     drp_audioBitrate.Items.Add("80");\r
1038                     drp_audioBitrate.Items.Add("86");\r
1039                     drp_audioBitrate.Items.Add("112");\r
1040                     drp_audioBitrate.Items.Add("128");\r
1041                     drp_audioBitrate.Items.Add("160");\r
1042                     drp_audioBitrate.Items.Add("192");\r
1043                     drp_audioBitrate.Items.Add("224");\r
1044                     drp_audioBitrate.Items.Add("256");\r
1045                     drp_audioBitrate.Items.Add("320");\r
1046                     drp_audioBitrate.Items.Add("384");\r
1047                 }\r
1048             }\r
1049         }\r
1050 \r
1051         private void Check_ChapterMarkers_CheckedChanged(object sender, EventArgs e)\r
1052         {\r
1053             if (Check_ChapterMarkers.Checked)\r
1054             {\r
1055                 string destination = text_destination.Text;\r
1056                 destination = destination.Replace(".mp4", ".m4v");\r
1057                 text_destination.Text = destination;\r
1058             }\r
1059         }\r
1060 \r
1061         private void check_largeFile_CheckedChanged(object sender, EventArgs e)\r
1062         {\r
1063             if (!text_destination.Text.Contains(".mp4"))\r
1064             {\r
1065                 MessageBox.Show("This option is only compatible with the mp4 file container.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1066                 check_largeFile.CheckState = CheckState.Unchecked;\r
1067             }\r
1068         }\r
1069 \r
1070         private void drp_videoEncoder_SelectedIndexChanged(object sender, EventArgs e)\r
1071         {\r
1072             //Turn off some options which are H.264 only when the user selects a non h.264 encoder\r
1073             if (!drp_videoEncoder.Text.Contains("H.264"))\r
1074             {\r
1075                 check_turbo.CheckState = CheckState.Unchecked;\r
1076                 CheckCRF.CheckState = CheckState.Unchecked;\r
1077                 CheckCRF.Enabled = false;\r
1078                 check_turbo.Enabled = false;\r
1079                 h264Tab.Enabled = false;\r
1080             }\r
1081             else\r
1082             {\r
1083                 CheckCRF.Enabled = true;\r
1084                 check_turbo.Enabled = true;\r
1085                 h264Tab.Enabled = true;\r
1086             }\r
1087 \r
1088         }\r
1089 \r
1090         public void setStreamReader(Parsing.DVD dvd)\r
1091         {\r
1092             this.thisDVD = dvd;\r
1093         }\r
1094 \r
1095         private void drp_dvdtitle_SelectedIndexChanged(object sender, EventArgs e)\r
1096         {\r
1097             // Reset some values on the form\r
1098             lbl_Aspect.Text = "Select a Title";\r
1099             lbl_RecomendedCrop.Text = "Select a Title";\r
1100             drop_chapterStart.Items.Clear();\r
1101             drop_chapterFinish.Items.Clear();\r
1102             QueryEditorText.Text = "";\r
1103 \r
1104             // If the dropdown is set to automatic nothing else needs to be done.\r
1105             // Otheriwse if its not, title data has to be loased from parsing.\r
1106             if (drp_dvdtitle.Text != "Automatic")\r
1107             {\r
1108                 Parsing.Title selectedTitle = drp_dvdtitle.SelectedItem as Parsing.Title;\r
1109 \r
1110                 // Set the Aspect Ratio\r
1111                 lbl_Aspect.Text = selectedTitle.AspectRatio.ToString();\r
1112 \r
1113                 // Set the Recommended Cropping values\r
1114                 lbl_RecomendedCrop.Text = string.Format("{0}/{1}/{2}/{3}", selectedTitle.AutoCropDimensions[0], selectedTitle.AutoCropDimensions[1], selectedTitle.AutoCropDimensions[2], selectedTitle.AutoCropDimensions[3]);\r
1115                 \r
1116                 // Populate the Start chapter Dropdown\r
1117                 drop_chapterStart.Items.Clear();\r
1118                 drop_chapterStart.Items.AddRange(selectedTitle.Chapters.ToArray());\r
1119                 if (drop_chapterStart.Items.Count > 0)\r
1120                 {\r
1121                     drop_chapterStart.Text = drop_chapterStart.Items[0].ToString();\r
1122                 }\r
1123 \r
1124                 // Populate the Final Chapter Dropdown\r
1125                 drop_chapterFinish.Items.Clear();\r
1126                 drop_chapterFinish.Items.AddRange(selectedTitle.Chapters.ToArray());\r
1127                 if (drop_chapterFinish.Items.Count > 0)\r
1128                 {\r
1129                     drop_chapterFinish.Text = drop_chapterFinish.Items[drop_chapterFinish.Items.Count - 1].ToString();\r
1130                 }\r
1131 \r
1132                 // Populate the Audio Channels Dropdown\r
1133                 drp_audioChannels.Items.Clear();\r
1134                 drp_audioChannels.Items.Add("Automatic");\r
1135                 drp_audioChannels.Items.AddRange(selectedTitle.AudioTracks.ToArray());\r
1136                 if (drp_audioChannels.Items.Count > 0)\r
1137                 {\r
1138                     drp_audioChannels.Text = drp_audioChannels.Items[0].ToString();\r
1139                 }\r
1140 \r
1141                 // Populate the Subtitles dropdown\r
1142                 drp_subtitle.Items.Clear();\r
1143                 drp_subtitle.Items.Add("None");\r
1144                 drp_subtitle.Items.AddRange(selectedTitle.Subtitles.ToArray());\r
1145                 if (drp_subtitle.Items.Count > 0)\r
1146                 {\r
1147                     drp_subtitle.Text = drp_subtitle.Items[0].ToString();\r
1148                 }\r
1149             }\r
1150         }\r
1151 \r
1152         //---------------------------------------------------\r
1153         //  The query Generation function.\r
1154         //---------------------------------------------------\r
1155         public string GenerateTheQuery()\r
1156         {\r
1157             string source = text_source.Text;\r
1158             string dvdTitle = drp_dvdtitle.Text;\r
1159             string chapterStart = drop_chapterStart.Text;\r
1160             string chapterFinish = drop_chapterFinish.Text;\r
1161             int totalChapters = drop_chapterFinish.Items.Count - 1;\r
1162             string dvdChapter = "";\r
1163 \r
1164             if (source ==  "")\r
1165                 MessageBox.Show("No Source has been selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1166             else\r
1167             {\r
1168                 source = " -i " + '"' + source+ '"'; //'"'+\r
1169             }\r
1170 \r
1171             if (dvdTitle ==  "Automatic")\r
1172                 dvdTitle = "";\r
1173             else\r
1174             {\r
1175                 string[] titleInfo = dvdTitle.Split(' ');\r
1176                 dvdTitle = " -t "+ titleInfo[0];\r
1177             }\r
1178 \r
1179             if (chapterFinish.Equals("Auto") && chapterStart.Equals("Auto"))\r
1180                 dvdChapter = "";\r
1181             else if (chapterFinish == chapterStart)\r
1182                 dvdChapter = " -c " + chapterStart;\r
1183             else\r
1184                 dvdChapter = " -c " + chapterStart + "-" + chapterFinish;\r
1185 \r
1186             string querySource = source+ dvdTitle+ dvdChapter;\r
1187             // ----------------------------------------------------------------------\r
1188 \r
1189             // Destination\r
1190 \r
1191             string destination = text_destination.Text;\r
1192             string videoEncoder = drp_videoEncoder.Text;\r
1193             string audioEncoder = drp_audioCodec.Text;\r
1194             string width = text_width.Text;\r
1195             string height = text_height.Text;\r
1196 \r
1197             if (destination ==  "")\r
1198                 MessageBox.Show("No destination has been selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1199             else\r
1200                 destination = " -o " + '"' + destination + '"'; //'"'+ \r
1201 \r
1202 \r
1203             switch (videoEncoder)\r
1204             {\r
1205                 case "Mpeg 4":\r
1206                     videoEncoder = " -e ffmpeg";\r
1207                     break;\r
1208                 case "Xvid":\r
1209                     videoEncoder = " -e xvid";\r
1210                     break;\r
1211                 case "H.264":\r
1212                     videoEncoder = " -e x264";\r
1213                     break;\r
1214                 case "H.264 Baseline 1.3":\r
1215                     videoEncoder = " -e x264b13";\r
1216                     break;\r
1217                 case "H.264 (iPod)":\r
1218                     videoEncoder = " -e x264b30";\r
1219                     break;\r
1220                 default:\r
1221                     videoEncoder = " -e x264";\r
1222                     break;\r
1223             }\r
1224            \r
1225             switch (audioEncoder)\r
1226             {\r
1227                 case "AAC":\r
1228                     audioEncoder = " -E faac";\r
1229                     break;\r
1230                 case "MP3":\r
1231                     audioEncoder = " -E lame";\r
1232                     break;\r
1233                 case "Vorbis":\r
1234                     audioEncoder = " -E vorbis";\r
1235                     break;\r
1236                 case "AC3":\r
1237                     audioEncoder = " -E ac3";\r
1238                     break;\r
1239                 default:\r
1240                     audioEncoder = " -E faac";\r
1241                     break;\r
1242             }\r
1243 \r
1244             if (width !=  "")\r
1245                 width = " -w "+ width;\r
1246             \r
1247 \r
1248             if (height !=  "")\r
1249                 height = " -l "+ height;\r
1250             \r
1251 \r
1252             string queryDestination = destination+ videoEncoder+ audioEncoder+ width+ height;\r
1253             // ----------------------------------------------------------------------\r
1254 \r
1255             // Picture Settings Tab\r
1256 \r
1257             string cropSetting = drp_crop.Text;\r
1258             string cropTop = text_top.Text;\r
1259             string cropBottom = text_bottom.Text;\r
1260             string cropLeft = text_left.Text;\r
1261             string cropRight = text_right.Text;\r
1262             string subtitles = drp_subtitle.Text;\r
1263             string cropOut = "";\r
1264             // Returns Crop Query\r
1265 \r
1266             if (cropSetting == "Auto Crop")\r
1267                 cropOut = "";\r
1268             else if (cropSetting == "No Crop")\r
1269                 cropOut = " --crop 0:0:0:0 ";\r
1270             else\r
1271                 cropOut = " --crop " + cropTop + ":" + cropBottom + ":" + cropLeft + ":" + cropRight;\r
1272 \r
1273             if (subtitles ==  "None")\r
1274                 subtitles = "";\r
1275             else if (subtitles ==  "")\r
1276                 subtitles = "";\r
1277             else\r
1278             {\r
1279                 string[] tempSub;\r
1280                 tempSub = subtitles.Split(' ');\r
1281                 subtitles = " -s "+ tempSub[0];\r
1282             }\r
1283 \r
1284             string queryPictureSettings = cropOut+ subtitles;\r
1285             // ----------------------------------------------------------------------\r
1286 \r
1287             // Video Settings Tab\r
1288 \r
1289             string videoBitrate = text_bitrate.Text;\r
1290             string videoFilesize = text_filesize.Text;\r
1291             int videoQuality = slider_videoQuality.Value;\r
1292             string vidQSetting = "";\r
1293             string twoPassEncoding = "";\r
1294             string deinterlace = "";\r
1295             string grayscale = "";\r
1296             string videoFramerate = drp_videoFramerate.Text;\r
1297             string pixelRatio = "";\r
1298             string ChapterMarkers = "";\r
1299             string turboH264 = "";\r
1300             string largeFile = "";\r
1301 \r
1302             if (videoBitrate !=  "")\r
1303                 videoBitrate = " -b "+ videoBitrate;\r
1304 \r
1305             if (videoFilesize !=  "")\r
1306                 videoFilesize = " -S "+ videoFilesize;\r
1307 \r
1308             // Video Quality Setting\r
1309 \r
1310             if ((videoQuality ==  0))\r
1311                 vidQSetting = "";\r
1312             else\r
1313             {\r
1314                 videoQuality = videoQuality/ 100;\r
1315                 if (videoQuality ==  1)\r
1316                 {\r
1317                     vidQSetting = "1.0";\r
1318                 }\r
1319 \r
1320                 vidQSetting = " -q " + videoQuality.ToString();\r
1321             }\r
1322 \r
1323             if (check_2PassEncode.Checked)\r
1324                 twoPassEncoding = " -2 ";\r
1325 \r
1326             if (check_DeInterlace.Checked)\r
1327                 deinterlace = " -d ";\r
1328 \r
1329             if (check_grayscale.Checked)\r
1330                 grayscale = " -g ";\r
1331 \r
1332             if (videoFramerate ==  "Automatic")\r
1333                 videoFramerate = "";\r
1334             else\r
1335                 videoFramerate = " -r "+ videoFramerate;\r
1336 \r
1337             if (CheckPixelRatio.Checked)\r
1338                 pixelRatio = " -p ";\r
1339 \r
1340             if (Check_ChapterMarkers.Checked)\r
1341                 ChapterMarkers = " -m ";\r
1342 \r
1343             if (check_turbo.Checked)\r
1344                 turboH264 = " -T ";\r
1345 \r
1346             if (check_largeFile.Checked)\r
1347                 largeFile = " -4 ";\r
1348 \r
1349             string queryVideoSettings = videoBitrate + videoFilesize + vidQSetting + twoPassEncoding + deinterlace + grayscale + videoFramerate + pixelRatio + ChapterMarkers + turboH264 + largeFile;\r
1350             // ----------------------------------------------------------------------\r
1351 \r
1352             // Audio Settings Tab\r
1353 \r
1354             string audioBitrate = drp_audioBitrate.Text;\r
1355             string audioSampleRate = drp_audioSampleRate.Text;\r
1356             string audioChannels = drp_audioChannels.Text;\r
1357             string Mixdown = drp_audioMixDown.Text;\r
1358             string SixChannelAudio = "";\r
1359 \r
1360             if (audioBitrate !=  "")\r
1361                 audioBitrate = " -B "+ audioBitrate;\r
1362 \r
1363             if (audioSampleRate !=  "")\r
1364                 audioSampleRate = " -R "+ audioSampleRate;\r
1365 \r
1366             if (audioChannels ==  "Automatic")\r
1367                 audioChannels = "";\r
1368             else if (audioChannels ==  "")\r
1369                 audioChannels = "";\r
1370             else\r
1371             {\r
1372                 string[] tempSub;\r
1373                 tempSub = audioChannels.Split(' ');\r
1374                 audioChannels = " -a "+ tempSub[0];\r
1375             }\r
1376 \r
1377             switch (Mixdown)\r
1378             {\r
1379                 case "Automatic":\r
1380                     Mixdown = "";\r
1381                     break;\r
1382                 case "Mono":\r
1383                     Mixdown = "mono";\r
1384                     break;\r
1385                 case "Stereo":\r
1386                     Mixdown = "stereo";\r
1387                     break;\r
1388                 case "Dolby Surround":\r
1389                     Mixdown = "dpl1";\r
1390                     break;\r
1391                 case "Dolby Pro Logic II":\r
1392                     Mixdown = "dpl2";\r
1393                     break;\r
1394                 case "6 Channel Discrete":\r
1395                     Mixdown = "6ch";\r
1396                     break;\r
1397                 default:\r
1398                     Mixdown = "stero";\r
1399                     break;\r
1400             }\r
1401 \r
1402             if (Mixdown !=  "")\r
1403                 SixChannelAudio = " -6 "+ Mixdown;\r
1404             else\r
1405                 SixChannelAudio = "";\r
1406 \r
1407             string queryAudioSettings = audioBitrate+ audioSampleRate+ audioChannels+ SixChannelAudio;\r
1408             // ----------------------------------------------------------------------\r
1409 \r
1410             //  H.264 Tab\r
1411 \r
1412             string CRF = CheckCRF.CheckState.ToString();\r
1413             string h264Advanced = rtf_h264advanced.Text;\r
1414             if ((CRF ==  "1"))\r
1415                 CRF = " -Q ";\r
1416             else\r
1417                 CRF = "";\r
1418 \r
1419             if ((h264Advanced ==  ""))\r
1420                 h264Advanced = "";\r
1421             else\r
1422                 h264Advanced = " -x "+ h264Advanced;\r
1423     \r
1424 \r
1425             string h264Settings = CRF+ h264Advanced;\r
1426             // ----------------------------------------------------------------------\r
1427 \r
1428             // Processors (Program Settings)\r
1429 \r
1430             string processors = Properties.Settings.Default.Processors;\r
1431             //  Number of Processors Handler\r
1432 \r
1433             if (processors ==  "Automatic")\r
1434                 processors = "";\r
1435             else\r
1436                 processors = " -C "+ processors+ " ";\r
1437 \r
1438 \r
1439             string queryAdvancedSettings = processors;\r
1440             // ----------------------------------------------------------------------\r
1441 \r
1442             //  Verbose option (Program Settings)\r
1443 \r
1444             string verbose = "";\r
1445             if (Properties.Settings.Default.verbose ==  "Checked")\r
1446                 verbose = " -v ";\r
1447 \r
1448             // ----------------------------------------------------------------------\r
1449 \r
1450             return querySource+ queryDestination+ queryPictureSettings+ queryVideoSettings+ h264Settings+ queryAudioSettings+ queryAdvancedSettings+ verbose;\r
1451         }\r
1452 \r
1453         \r
1454 \r
1455         // This is the END of the road ------------------------------------------------------------------------------\r
1456     }\r
1457 }