OSDN Git Service

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