OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / Functions / Common.cs
1 /*  Common.cs $\r
2         \r
3            This file is part of the HandBrake source code.\r
4            Homepage: <http://handbrake.fr>.\r
5            It may be used under the terms of the GNU General Public License. */\r
6 \r
7 using System;\r
8 using System.Collections.Generic;\r
9 using System.Text;\r
10 using System.Windows.Forms;\r
11 using System.Globalization;\r
12 using System.IO;\r
13 using System.Drawing;\r
14 \r
15 namespace Handbrake.Functions\r
16 {\r
17     class Common\r
18     {\r
19         /*\r
20          * Checks for updates and returns "true" boolean if one exists.\r
21          */\r
22         public Boolean updateCheck(Boolean debug)\r
23         {\r
24             try\r
25             {\r
26                 Functions.RssReader rssRead = new Functions.RssReader();\r
27                 string build = rssRead.build();\r
28 \r
29                 int latest = int.Parse(build);\r
30                 int current = Properties.Settings.Default.hb_build;\r
31                 int skip = Properties.Settings.Default.skipversion;\r
32 \r
33                 if (latest == skip)\r
34                 {\r
35                     return false;\r
36                 }\r
37                 else\r
38                 {\r
39                     Boolean update = (latest > current);\r
40                     return update;\r
41                 }\r
42             }\r
43             catch (Exception exc)\r
44             {\r
45                 if (debug == true)\r
46                     MessageBox.Show("Unable to check for updates, Please try again later. \n" + exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
47                 return false;\r
48             }\r
49         }\r
50 \r
51         /*\r
52          * Function which generates the filename and path automatically based on the Source Name, DVD title and DVD Chapters\r
53          */\r
54         public void autoName(frmMain mainWindow)\r
55         {\r
56             if (Properties.Settings.Default.autoNaming == "Checked")\r
57             {\r
58                 if (mainWindow.drp_dvdtitle.Text != "Automatic")\r
59                 {\r
60                     string source = mainWindow.text_source.Text;\r
61                     string[] sourceName = source.Split('\\');\r
62                     source = sourceName[sourceName.Length - 1].Replace(".iso", "").Replace(".mpg", "").Replace(".ts", "").Replace(".ps", "");\r
63 \r
64                     string title = mainWindow.drp_dvdtitle.Text;\r
65                     string[] titlesplit = title.Split(' ');\r
66                     title = titlesplit[0];\r
67 \r
68                     string cs = mainWindow.drop_chapterStart.Text;\r
69                     string cf = mainWindow.drop_chapterFinish.Text;\r
70 \r
71                     if (title == "Automatic")\r
72                         title = "";\r
73                     if (cs == "Auto")\r
74                         cs = "";\r
75                     if (cf == "Auto")\r
76                         cf = "";\r
77 \r
78                     string dash = "";\r
79                     if (cf != "Auto")\r
80                         dash = "-";\r
81 \r
82                     if (!mainWindow.text_destination.Text.Contains("\\"))\r
83                     {\r
84                         string filePath = "";\r
85                         if (Properties.Settings.Default.autoNamePath.Trim() != "")\r
86                         {\r
87                             if (Properties.Settings.Default.autoNamePath.Trim() != "Click 'Browse' to set the default location")\r
88                                 filePath = Properties.Settings.Default.autoNamePath + "\\";\r
89                         }\r
90                         mainWindow.text_destination.Text = filePath + source + "_T" + title + "_C" + cs + dash + cf + ".mp4";\r
91                     }\r
92                     else\r
93                     {\r
94                         string dest = mainWindow.text_destination.Text;\r
95 \r
96                         string[] destName = dest.Split('\\');\r
97 \r
98 \r
99                         string[] extension = dest.Split('.');\r
100                         string ext = extension[extension.Length - 1];\r
101 \r
102                         destName[destName.Length - 1] = source + "_T" + title + "_C" + cs + dash + cf + "." + ext;\r
103 \r
104                         string fullDest = "";\r
105                         foreach (string part in destName)\r
106                         {\r
107                             if (fullDest != "")\r
108                                 fullDest = fullDest + "\\" + part;\r
109                             else\r
110                                 fullDest = fullDest + part;\r
111                         }\r
112 \r
113                         mainWindow.text_destination.Text = fullDest;\r
114                     }\r
115                 }\r
116             }\r
117         }\r
118 \r
119         /*\r
120          * This function takes in a Query which has been parsed by QueryParser and sets up the GUI.\r
121          */\r
122         public void presetLoader(frmMain mainWindow, Functions.QueryParser presetQuery, string name)\r
123         {\r
124             // ---------------------------\r
125             // Setup the GUI\r
126             // ---------------------------\r
127 \r
128             // Source tab\r
129             #region source\r
130             // Reset some vaules to stock first to prevent errors.\r
131             mainWindow.check_iPodAtom.CheckState = CheckState.Unchecked;\r
132 \r
133             // Now load all the new settings onto the main window\r
134             if (presetQuery.Source != "")\r
135                 mainWindow.text_source.Text = presetQuery.Source;\r
136 \r
137             if (presetQuery.DVDTitle != 0)\r
138                 mainWindow.drp_dvdtitle.Text = presetQuery.DVDTitle.ToString();\r
139 \r
140             if (presetQuery.DVDChapterStart != 0)\r
141                 mainWindow.drop_chapterStart.Text = presetQuery.DVDChapterStart.ToString();\r
142 \r
143             if (presetQuery.DVDChapterFinish != 0)\r
144                 mainWindow.drop_chapterFinish.Text = presetQuery.DVDChapterFinish.ToString();\r
145 \r
146             if (presetQuery.Format != null)\r
147             {\r
148                 string destination = mainWindow.text_destination.Text;\r
149                 destination = destination.Replace(".mp4", "." + presetQuery.Format);\r
150                 destination = destination.Replace(".m4v", "." + presetQuery.Format);\r
151                 destination = destination.Replace(".avi", "." + presetQuery.Format);\r
152                 destination = destination.Replace(".mkv", "." + presetQuery.Format);\r
153                 destination = destination.Replace(".ogm", "." + presetQuery.Format);\r
154                 mainWindow.text_destination.Text = destination;\r
155             }\r
156 \r
157             #endregion\r
158 \r
159             // Destination tab\r
160             #region destination\r
161 \r
162             if (presetQuery.Destination != "")\r
163                 mainWindow.text_destination.Text = presetQuery.Destination;\r
164 \r
165             mainWindow.drp_videoEncoder.Text = presetQuery.VideoEncoder;\r
166 \r
167             if (presetQuery.IpodAtom == true)\r
168                 mainWindow.check_iPodAtom.CheckState = CheckState.Checked;\r
169             else\r
170                 mainWindow.check_iPodAtom.CheckState = CheckState.Unchecked;\r
171 \r
172             if (presetQuery.OptimizeMP4 == true)\r
173                 mainWindow.check_optimiseMP4.CheckState = CheckState.Checked;\r
174             else\r
175                 mainWindow.check_optimiseMP4.CheckState = CheckState.Unchecked;\r
176 \r
177             #endregion\r
178 \r
179             // Picture Settings Tab\r
180             #region Picture\r
181             mainWindow.drp_crop.SelectedIndex = 1;\r
182             mainWindow.text_top.Text = presetQuery.CropTop;\r
183             mainWindow.text_bottom.Text = presetQuery.CropBottom;\r
184             mainWindow.text_left.Text = presetQuery.CropLeft;\r
185             mainWindow.text_right.Text = presetQuery.CropRight;\r
186 \r
187             mainWindow.drp_deInterlace_option.Text = presetQuery.DeInterlace;\r
188             mainWindow.drp_deNoise.Text = presetQuery.DeNoise;\r
189 \r
190             if (presetQuery.DeTelecine == true)\r
191                 mainWindow.check_detelecine.CheckState = CheckState.Checked;\r
192             else\r
193                 mainWindow.check_detelecine.CheckState = CheckState.Unchecked;\r
194 \r
195 \r
196             if (presetQuery.DeBlock == true)\r
197                 mainWindow.check_deblock.CheckState = CheckState.Checked;\r
198             else\r
199                 mainWindow.check_deblock.CheckState = CheckState.Unchecked;\r
200 \r
201 \r
202             if (presetQuery.Anamorphic == true)\r
203                 mainWindow.drp_anamorphic.SelectedIndex = 1;\r
204             else\r
205                 mainWindow.drp_anamorphic.SelectedIndex = 0;\r
206 \r
207             if (presetQuery.LooseAnamorphic == true)\r
208                 mainWindow.drp_anamorphic.SelectedIndex = 2;\r
209             else\r
210             {\r
211                 if (presetQuery.Anamorphic != true)\r
212                     mainWindow.drp_anamorphic.SelectedIndex = 0;\r
213             }\r
214 \r
215 \r
216             if (presetQuery.Width != 0)\r
217                 mainWindow.text_width.Text = presetQuery.Width.ToString();\r
218             else\r
219             {\r
220                 mainWindow.text_width.Text = "";\r
221             }\r
222 \r
223             if (presetQuery.Height != 0)\r
224                 mainWindow.text_height.Text = presetQuery.Height.ToString();\r
225             else\r
226             {\r
227                 mainWindow.text_height.Text = "";\r
228             }\r
229 \r
230             if (presetQuery.VFR == true)\r
231                 mainWindow.check_vfr.CheckState = CheckState.Checked;\r
232             else\r
233                 mainWindow.check_vfr.CheckState = CheckState.Unchecked;\r
234             #endregion\r
235 \r
236             // Video Settings Tab\r
237             #region video\r
238             mainWindow.text_bitrate.Text = presetQuery.AverageVideoBitrate;\r
239             mainWindow.text_filesize.Text = presetQuery.VideoTargetSize;\r
240             mainWindow.slider_videoQuality.Value = presetQuery.VideoQuality;\r
241             if (mainWindow.slider_videoQuality.Value != 0)\r
242             {\r
243                 int ql = presetQuery.VideoQuality;\r
244                 mainWindow.SliderValue.Text = ql.ToString() + "%";\r
245             }\r
246 \r
247             if (presetQuery.TwoPass == true)\r
248                 mainWindow.check_2PassEncode.CheckState = CheckState.Checked;\r
249             else\r
250                 mainWindow.check_2PassEncode.CheckState = CheckState.Unchecked;\r
251 \r
252             if (presetQuery.Grayscale == true)\r
253                 mainWindow.check_grayscale.CheckState = CheckState.Checked;\r
254             else\r
255                 mainWindow.check_grayscale.CheckState = CheckState.Unchecked;\r
256 \r
257             mainWindow.drp_videoFramerate.Text = presetQuery.VideoFramerate;\r
258 \r
259             if (presetQuery.TurboFirstPass == true)\r
260                 mainWindow.check_turbo.CheckState = CheckState.Checked;\r
261             else\r
262                 mainWindow.check_turbo.CheckState = CheckState.Unchecked;\r
263 \r
264             if (presetQuery.LargeMP4 == true)\r
265                 mainWindow.check_largeFile.CheckState = CheckState.Checked;\r
266             else\r
267             {\r
268                 mainWindow.check_largeFile.CheckState = CheckState.Unchecked;\r
269                 mainWindow.check_largeFile.BackColor = Color.Transparent;\r
270             }\r
271 \r
272 \r
273 \r
274             #endregion\r
275 \r
276             // Chapter Markers Tab\r
277             #region Chapter Markers\r
278 \r
279             if (presetQuery.ChapterMarkers == true)\r
280             {\r
281                 mainWindow.Check_ChapterMarkers.CheckState = CheckState.Checked;\r
282                 mainWindow.text_destination.Text = mainWindow.text_destination.Text.Replace(".mp4", ".m4v");\r
283             }\r
284             else\r
285                 mainWindow.Check_ChapterMarkers.CheckState = CheckState.Unchecked;\r
286 \r
287             #endregion\r
288 \r
289             // Audio Settings Tab\r
290             #region Audio\r
291             \r
292             if (presetQuery.AudioTrack1 == "")\r
293                 mainWindow.drp_track1Audio.Text = "Automatic";\r
294             else\r
295                 mainWindow.drp_track1Audio.Text = presetQuery.AudioTrack1;\r
296 \r
297             if (presetQuery.AudioTrack2 == "None")\r
298             {\r
299                 if (presetQuery.AudioEncoder2 != null)\r
300                 {\r
301                     mainWindow.drp_track2Audio.SelectedIndex = 1;\r
302                     mainWindow.drp_audsr_2.Enabled = true;\r
303                     mainWindow.drp_audmix_2.Enabled = true;\r
304                     mainWindow.drp_audenc_2.Enabled = true;\r
305                     mainWindow.drp_audbit_2.Enabled = true;\r
306                 }\r
307                 else\r
308                 {\r
309                     mainWindow.drp_track2Audio.SelectedIndex = 0;\r
310                     mainWindow.drp_audsr_2.Enabled = false;\r
311                     mainWindow.drp_audmix_2.Enabled = false;\r
312                     mainWindow.drp_audenc_2.Enabled = false;\r
313                     mainWindow.drp_audbit_2.Enabled = false;\r
314                 }\r
315 \r
316             }\r
317             else\r
318                 mainWindow.drp_track2Audio.Text = presetQuery.AudioTrack2;\r
319 \r
320             if (presetQuery.AudioEncoder1 != null)\r
321             mainWindow.drp_audenc_1.Text = presetQuery.AudioEncoder1;\r
322             mainWindow.drp_audenc_2.Text = presetQuery.AudioEncoder2;\r
323 \r
324             if (presetQuery.AudioBitrate1 != null)\r
325             mainWindow.drp_audbit_1.Text = presetQuery.AudioBitrate1;\r
326             mainWindow.drp_audbit_2.Text = presetQuery.AudioBitrate2;\r
327 \r
328             if (presetQuery.AudioSamplerate1 != null)\r
329             mainWindow.drp_audsr_1.Text = presetQuery.AudioSamplerate1;\r
330             mainWindow.drp_audsr_2.Text = presetQuery.AudioSamplerate2;\r
331 \r
332             mainWindow.drp_audmix_1.Text = presetQuery.AudioTrackMix1;\r
333             mainWindow.drp_audmix_2.Text = presetQuery.AudioTrackMix2;\r
334 \r
335             \r
336             \r
337             mainWindow.drp_subtitle.Text = presetQuery.Subtitles;\r
338 \r
339             if (presetQuery.ForcedSubtitles == true)\r
340             {\r
341                 mainWindow.check_forced.CheckState = CheckState.Checked;\r
342                 mainWindow.check_forced.Enabled = true;\r
343             }\r
344             else\r
345                 mainWindow.check_forced.CheckState = CheckState.Unchecked;\r
346 \r
347             // Dynamic Range Compression (Should be a float but we use double for ease)\r
348             double value = presetQuery.DRC;\r
349             if (value > 0)\r
350                 value = value - 10;\r
351             mainWindow.slider_drc.Value = int.Parse(value.ToString());\r
352 \r
353             double actualValue = presetQuery.DRC / 10;\r
354             mainWindow.lbl_drc.Text = actualValue.ToString();\r
355 \r
356 \r
357             #endregion\r
358 \r
359             // H264 Tab & Preset Name\r
360             #region other\r
361             mainWindow.rtf_x264Query.Text = presetQuery.H264Query;\r
362 \r
363             // Set the preset name\r
364             mainWindow.groupBox_output.Text = "Output Settings (Preset: " + name + ")";\r
365             #endregion\r
366         }\r
367 \r
368         /*\r
369          * This takes all the widgets on frmMain\r
370          */\r
371         public string GenerateTheQuery(frmMain mainWindow)\r
372         {\r
373 \r
374             // Source tab\r
375             #region source\r
376             string source = mainWindow.text_source.Text;\r
377             string dvdTitle = mainWindow.drp_dvdtitle.Text;\r
378             string chapterStart = mainWindow.drop_chapterStart.Text;\r
379             string chapterFinish = mainWindow.drop_chapterFinish.Text;\r
380             int totalChapters = mainWindow.drop_chapterFinish.Items.Count - 1;\r
381             string dvdChapter = "";\r
382 \r
383             if ((source != "") && (source.Trim() != "Click 'Browse' to continue"))\r
384                 source = " -i " + '"' + source + '"';\r
385             else\r
386                 source = "";\r
387 \r
388             if (dvdTitle == "Automatic")\r
389                 dvdTitle = "";\r
390             else\r
391             {\r
392                 string[] titleInfo = dvdTitle.Split(' ');\r
393                 dvdTitle = " -t " + titleInfo[0];\r
394             }\r
395 \r
396             if (chapterFinish.Equals("Auto") && chapterStart.Equals("Auto"))\r
397                 dvdChapter = "";\r
398             else if (chapterFinish == chapterStart)\r
399                 dvdChapter = " -c " + chapterStart;\r
400             else\r
401                 dvdChapter = " -c " + chapterStart + "-" + chapterFinish;\r
402 \r
403             string querySource = source + dvdTitle + dvdChapter;\r
404             #endregion\r
405 \r
406             // Destination tab\r
407             #region Destination\r
408 \r
409             string destination = mainWindow.text_destination.Text;\r
410             string videoEncoder = mainWindow.drp_videoEncoder.Text;\r
411             string width = mainWindow.text_width.Text;\r
412             string height = mainWindow.text_height.Text;\r
413 \r
414             if (destination != "")\r
415                 destination = " -o " + '"' + destination + '"'; //'"'+ \r
416 \r
417 \r
418             switch (videoEncoder)\r
419             {\r
420                 case "Mpeg 4":\r
421                     videoEncoder = " -e ffmpeg";\r
422                     break;\r
423                 case "Xvid":\r
424                     videoEncoder = " -e xvid";\r
425                     break;\r
426                 case "H.264":\r
427                     videoEncoder = " -e x264";\r
428                     break;\r
429                 case "H.264 (iPod)":\r
430                     videoEncoder = " -e x264b30";\r
431                     break;\r
432                 default:\r
433                     videoEncoder = " -e x264";\r
434                     break;\r
435             }\r
436 \r
437             if (width != "")\r
438                 width = " -w " + width;\r
439 \r
440 \r
441             if (height == "Auto")\r
442             {\r
443                 height = "";\r
444             }\r
445             else if (height != "")\r
446             {\r
447                 height = " -l " + height;\r
448             }\r
449 \r
450 \r
451             string queryDestination = destination + videoEncoder + width + height;\r
452             #endregion\r
453 \r
454             // Picture Settings Tab\r
455             #region Picture Settings Tab\r
456 \r
457             string cropSetting = mainWindow.drp_crop.Text;\r
458             string cropTop = mainWindow.text_top.Text;\r
459             string cropBottom = mainWindow.text_bottom.Text;\r
460             string cropLeft = mainWindow.text_left.Text;\r
461             string cropRight = mainWindow.text_right.Text;\r
462             string cropOut = "";\r
463             string deInterlace_Option = mainWindow.drp_deInterlace_option.Text;\r
464             string deinterlace = "";\r
465             string grayscale = "";\r
466             string pixelRatio = "";\r
467             string vfr = "";\r
468             string deblock = "";\r
469             string detelecine = "";\r
470             string lanamorphic = "";\r
471 \r
472 \r
473 \r
474             if (cropSetting == "Automatic")\r
475                 cropOut = "";\r
476             else if (cropSetting == "No Crop")\r
477                 cropOut = " --crop 0:0:0:0 ";\r
478             else\r
479             {\r
480                 if ((mainWindow.text_top.Text == "") && (mainWindow.text_bottom.Text == "") && (mainWindow.text_left.Text == "") && (mainWindow.text_right.Text == ""))\r
481                     cropOut = "";\r
482                 else\r
483                 {\r
484                     if (mainWindow.text_top.Text == "")\r
485                         cropTop = "0";\r
486                     if (mainWindow.text_bottom.Text == "")\r
487                         cropBottom = "0";\r
488                     if (mainWindow.text_left.Text == "")\r
489                         cropLeft = "0";\r
490                     if (mainWindow.text_right.Text == "")\r
491                         cropRight = "0";\r
492 \r
493                     cropOut = " --crop " + cropTop + ":" + cropBottom + ":" + cropLeft + ":" + cropRight;\r
494                 }\r
495             }\r
496 \r
497             switch (deInterlace_Option)\r
498             {\r
499                 case "None":\r
500                     deinterlace = "";\r
501                     break;\r
502                 case "Fast":\r
503                     deinterlace = " --deinterlace=\"fast\"";\r
504                     break;\r
505                 case "Slow":\r
506                     deinterlace = " --deinterlace=\"slow\"";\r
507                     break;\r
508                 case "Slower":\r
509                     deinterlace = " --deinterlace=\"slower\"";\r
510                     break;\r
511                 case "Slowest":\r
512                     deinterlace = " --deinterlace=\"slowest\"";\r
513                     break;\r
514                 default:\r
515                     deinterlace = "";\r
516                     break;\r
517             }\r
518 \r
519             if (mainWindow.check_grayscale.Checked)\r
520                 grayscale = " -g ";\r
521 \r
522             if (mainWindow.drp_anamorphic.SelectedIndex == 1)\r
523                 pixelRatio = " -p ";\r
524             else if (mainWindow.drp_anamorphic.SelectedIndex == 2)\r
525                 pixelRatio = " -P ";\r
526             else\r
527                 pixelRatio = " ";\r
528 \r
529 \r
530             if (mainWindow.check_deblock.Checked)\r
531                 deblock = " --deblock";\r
532 \r
533             if (mainWindow.check_detelecine.Checked)\r
534                 detelecine = " --detelecine";\r
535 \r
536             if (mainWindow.check_vfr.Checked)\r
537                 vfr = " -V ";\r
538 \r
539 \r
540 \r
541             string queryPictureSettings = cropOut + deinterlace + deblock + detelecine + vfr + grayscale + pixelRatio + lanamorphic;\r
542             #endregion\r
543 \r
544             // Video Settings Tab\r
545             #region Video Settings Tab\r
546 \r
547             string videoBitrate = mainWindow.text_bitrate.Text;\r
548             string videoFilesize = mainWindow.text_filesize.Text;\r
549             double videoQuality = mainWindow.slider_videoQuality.Value;\r
550             string vidQSetting = "";\r
551             string twoPassEncoding = "";\r
552             string videoFramerate = mainWindow.drp_videoFramerate.Text;\r
553             string vid_frame_rate = "";\r
554             string turboH264 = "";\r
555             string largeFile = "";\r
556             string denoise = "";\r
557             string ipodAtom = "";\r
558             string optimizeMP4 = "";\r
559 \r
560             if (videoBitrate != "")\r
561                 videoBitrate = " -b " + videoBitrate;\r
562 \r
563             if (videoFilesize != "")\r
564                 videoFilesize = " -S " + videoFilesize;\r
565 \r
566             // Video Quality Setting\r
567 \r
568             if ((videoQuality == 0))\r
569                 vidQSetting = "";\r
570             else\r
571             {\r
572                 videoQuality = videoQuality / 100;\r
573                 if (videoQuality == 1)\r
574                 {\r
575                     vidQSetting = "1.0";\r
576                 }\r
577                 vidQSetting = " -q " + videoQuality.ToString(new CultureInfo("en-US"));\r
578             }\r
579 \r
580             if (mainWindow.check_2PassEncode.Checked)\r
581                 twoPassEncoding = " -2 ";\r
582 \r
583             if (videoFramerate == "Same as source")\r
584                 vid_frame_rate = "";\r
585             else\r
586             {\r
587                 if (!mainWindow.check_vfr.Checked)\r
588                     vid_frame_rate = " -r " + videoFramerate;\r
589             }\r
590 \r
591             if (mainWindow.check_turbo.Checked)\r
592                 turboH264 = " -T ";\r
593 \r
594             if (mainWindow.check_largeFile.Checked)\r
595                 largeFile = " -4 ";\r
596 \r
597 \r
598             switch (mainWindow.drp_deNoise.Text)\r
599             {\r
600                 case "None":\r
601                     denoise = "";\r
602                     break;\r
603                 case "Weak":\r
604                     denoise = " --denoise=\"weak\"";\r
605                     break;\r
606                 case "Medium":\r
607                     denoise = " --denoise=\"medium\"";\r
608                     break;\r
609                 case "Strong":\r
610                     denoise = " --denoise=\"strong\"";\r
611                     break;\r
612                 default:\r
613                     denoise = "";\r
614                     break;\r
615             }\r
616 \r
617             if (mainWindow.check_iPodAtom.Checked)\r
618                 ipodAtom = " -I ";\r
619 \r
620             if (mainWindow.check_optimiseMP4.Checked)\r
621                 optimizeMP4 = " -O ";\r
622 \r
623 \r
624             string queryVideoSettings = videoBitrate + videoFilesize + vidQSetting + twoPassEncoding + vid_frame_rate + turboH264 + ipodAtom + optimizeMP4 + largeFile + denoise;\r
625             #endregion\r
626 \r
627             // Audio Settings Tab\r
628             #region Audio Settings Tab\r
629 \r
630             // Used Varibles\r
631             string audioBitrate = "";\r
632             string audioChannels = "";\r
633             string SixChannelAudio = "";\r
634             string subScan = "";\r
635             string forced = "";\r
636             string drc = "";\r
637             string audioSampleRate = "";\r
638             string audioEncoder = "";\r
639 \r
640             // Track 1\r
641             string track1 = mainWindow.drp_track1Audio.Text;\r
642             string vencoder1 = mainWindow.drp_audenc_1.Text;\r
643             string audioBitrate1 = mainWindow.drp_audbit_1.Text;\r
644             string audioSampleRate1 = mainWindow.drp_audsr_1.Text;\r
645             string Mixdown1 = mainWindow.drp_audmix_1.Text;\r
646 \r
647             // Track 2\r
648             string track2 = mainWindow.drp_track2Audio.Text;\r
649             string vencoder2 = mainWindow.drp_audenc_2.Text;\r
650             string audioBitrate2 = mainWindow.drp_audbit_2.Text;\r
651             string audioSampleRate2 = mainWindow.drp_audsr_2.Text;\r
652             string Mixdown2 = mainWindow.drp_audmix_2.Text;\r
653 \r
654             // Audio Track Selections\r
655             if (track1 == "Automatic")\r
656                 audioChannels = "";\r
657             else if (track1 == "")\r
658                 audioChannels = "";\r
659             else if (track1 == "None")\r
660                 audioChannels = " -a none";\r
661             else\r
662             {\r
663                 string[] tempSub;\r
664                 tempSub = track1.Split(' ');\r
665                 audioChannels = " -a " + tempSub[0];\r
666             }\r
667 \r
668             if (audioChannels != "")\r
669             {\r
670                 if ((track2 != "") && (track2 != "None"))\r
671                 {\r
672                     string[] tempSub;\r
673                     tempSub = track2.Split(' ');\r
674                     audioChannels = audioChannels + "," + tempSub[0];\r
675                 }\r
676             }\r
677             else\r
678             {\r
679                 if ((track2 != "") && (track2 != "None"))\r
680                 {\r
681                     string[] tempSub;\r
682                     tempSub = track2.Split(' ');\r
683                     audioChannels = " -a " + tempSub[0];\r
684                 }\r
685             }\r
686 \r
687             // Audio Mixdown Selections\r
688             switch (Mixdown1)\r
689             {\r
690                 case "Automatic":\r
691                     Mixdown1 = "";\r
692                     break;\r
693                 case "Mono":\r
694                     Mixdown1 = "mono";\r
695                     break;\r
696                 case "Stereo":\r
697                     Mixdown1 = "stereo";\r
698                     break;\r
699                 case "Dolby Surround":\r
700                     Mixdown1 = "dpl1";\r
701                     break;\r
702                 case "Dolby Pro Logic II":\r
703                     Mixdown1 = "dpl2";\r
704                     break;\r
705                 case "6 Channel Discrete":\r
706                     Mixdown1 = "6ch";\r
707                     break;\r
708                 default:\r
709                     Mixdown1 = "";\r
710                     break;\r
711             }\r
712 \r
713             if (Mixdown1 != "")\r
714                 SixChannelAudio = " -6 " + Mixdown1;\r
715             else\r
716             {\r
717                 if (mainWindow.drp_track2Audio.Text == "None")\r
718                     SixChannelAudio = "";\r
719                 else\r
720                 {\r
721                     if (mainWindow.drp_audmix_2.Text == "Automatic")\r
722                         SixChannelAudio = "";\r
723                     else\r
724                         SixChannelAudio = " -6 dpl2";\r
725                 }\r
726             }\r
727 \r
728             switch (Mixdown2)\r
729             {\r
730                 case "Automatic":\r
731                     Mixdown2 = "";\r
732                     break;\r
733                 case "Mono":\r
734                     Mixdown2 = "mono";\r
735                     break;\r
736                 case "Stereo":\r
737                     Mixdown2 = "stereo";\r
738                     break;\r
739                 case "Dolby Surround":\r
740                     Mixdown2 = "dpl1";\r
741                     break;\r
742                 case "Dolby Pro Logic II":\r
743                     Mixdown2 = "dpl2";\r
744                     break;\r
745                 case "6 Channel Discrete":\r
746                     Mixdown2 = "6ch";\r
747                     break;\r
748                 default:\r
749                     Mixdown2 = "";\r
750                     break;\r
751             }\r
752 \r
753             if (Mixdown2 != "")\r
754             {\r
755                 if (SixChannelAudio != "")\r
756                     SixChannelAudio = SixChannelAudio + "," + Mixdown2;\r
757                 else\r
758                     SixChannelAudio = " -6 " + Mixdown2;\r
759             }\r
760 \r
761             // Audio Encoder Selections\r
762             switch (mainWindow.drp_audenc_1.Text)\r
763             {\r
764                 case "AAC":\r
765                     audioEncoder = " -E faac";\r
766                     break;\r
767                 case "MP3":\r
768                     audioEncoder = " -E lame";\r
769                     break;\r
770                 case "Vorbis":\r
771                     audioEncoder = " -E vorbis";\r
772                     break;\r
773                 case "AC3":\r
774                     audioEncoder = " -E ac3";\r
775                     break;\r
776                 case "AAC + AC3":\r
777                     audioEncoder = " -E aac+ac3";\r
778                     break;\r
779                 default:\r
780                     break;\r
781             }\r
782 \r
783             switch (mainWindow.drp_audenc_2.Text)\r
784             {\r
785                 case "AAC":\r
786                     if (audioEncoder == "")\r
787                         audioEncoder = " -E faac";\r
788                     else\r
789                         audioEncoder = audioEncoder + ",faac";\r
790                     break;\r
791                 case "MP3":\r
792                     if (audioEncoder == "")\r
793                         audioEncoder = " -E lame";\r
794                     else\r
795                         audioEncoder = audioEncoder + ",lame";\r
796                     break;\r
797                 case "Vorbis":\r
798                     if (audioEncoder == "")\r
799                         audioEncoder = " -E vorbis";\r
800                     else\r
801                         audioEncoder = audioEncoder + ",vorbis";\r
802                     break;\r
803                 case "AC3":\r
804                     if (audioEncoder == "")\r
805                         audioEncoder = " -E ac3";\r
806                     else\r
807                         audioEncoder = audioEncoder + ",ac3";\r
808                     break;\r
809                 case "AAC + AC3":\r
810                     if (audioEncoder == "")\r
811                         audioEncoder = " -E aac+ac3";\r
812                     else\r
813                         audioEncoder = audioEncoder + ",aac+ac3";\r
814                     break;\r
815                 default:\r
816                     break;\r
817             }\r
818 \r
819             // Audio BitRate Selections\r
820             if (audioBitrate1 != "")\r
821                 audioBitrate = " -B " + audioBitrate1;\r
822 \r
823             if (audioBitrate2 != "")\r
824             {\r
825                 if (audioBitrate == "")\r
826                     audioBitrate = " -B " + audioBitrate2;\r
827                 else\r
828                     audioBitrate = audioBitrate + "," + audioBitrate2;\r
829             }\r
830 \r
831             // Audio SampleRate Selections\r
832             if (audioSampleRate1 != "")\r
833                 audioSampleRate = " -R " + audioSampleRate1;\r
834 \r
835             if (audioSampleRate2 != "")\r
836             {\r
837                 if (audioSampleRate == "")\r
838                     audioSampleRate = " -R " + audioSampleRate2;\r
839                 else\r
840                     audioSampleRate = audioSampleRate + "," + audioSampleRate2;\r
841             }\r
842 \r
843             //Dynamic Range Compression (expects a float but a double is used for ease)\r
844             double value = mainWindow.slider_drc.Value / 10.0;\r
845             value++;\r
846             drc = " -D " + value;\r
847 \r
848             // Subtitles\r
849             string subtitles = mainWindow.drp_subtitle.Text;\r
850             if (subtitles == "None")\r
851                 subtitles = "";\r
852             else if (subtitles == "")\r
853                 subtitles = "";\r
854             else if (subtitles == "Autoselect")\r
855             {\r
856                 subScan = " -U ";\r
857                 subtitles = "";\r
858             }\r
859             else\r
860             {\r
861                 string[] tempSub;\r
862                 tempSub = subtitles.Split(' ');\r
863                 subtitles = " -s " + tempSub[0];\r
864             }\r
865 \r
866             if (mainWindow.check_forced.Checked)\r
867                 forced = " -F ";\r
868 \r
869 \r
870             string queryAudioSettings = audioChannels + SixChannelAudio + audioEncoder + audioBitrate + audioSampleRate + drc + subScan + subtitles + forced;\r
871             #endregion\r
872 \r
873             // Chapter Markers Tab\r
874             #region Chapter Markers\r
875 \r
876             string ChapterMarkers = "";\r
877 \r
878             // Attach Source name and dvd title to the start of the chapters.csv filename.\r
879             // This is for the queue. It allows different chapter name files for each title.\r
880             string source_name = mainWindow.text_source.Text;\r
881             string[] sourceName = source.Split('\\');\r
882             source_name = sourceName[sourceName.Length - 1].Replace(".iso", "").Replace(".mpg", "").Replace(".ts", "").Replace(".ps", "");\r
883             source_name = source_name.Replace("\"", "");\r
884 \r
885             string source_title = mainWindow.drp_dvdtitle.Text;\r
886             string[] titlesplit = source_title.Split(' ');\r
887             source_title = titlesplit[0];\r
888 \r
889             if (mainWindow.Check_ChapterMarkers.Checked)\r
890             {\r
891 \r
892                 if ((source_name.Trim().Replace("-i ", "") != "Click 'Browse' to continue") && (source_name.Trim().Replace("-i ", "") != ""))\r
893                 {\r
894                     if (source_title != "Automatic")\r
895                     {\r
896                         string filename = source_name + "-" + source_title + "-chapters.csv";\r
897                         string path = Path.Combine(Path.GetTempPath(), filename);\r
898 \r
899                         Boolean saveCSV = chapterCSVSave(mainWindow, path);\r
900                         if (saveCSV == false)\r
901                             ChapterMarkers = " -m ";\r
902                         else\r
903                         {\r
904                             ChapterMarkers = " --markers=" + "\"" + path + "\"";\r
905                         }\r
906                     }\r
907                     else\r
908                     {\r
909                         string filename = source_name + "-chapters.csv";\r
910                         string path = Path.Combine(Path.GetTempPath(), filename);\r
911 \r
912                         Boolean saveCSV = chapterCSVSave(mainWindow, path);\r
913                         if (saveCSV == false)\r
914                             ChapterMarkers = " -m ";\r
915                         else\r
916                         {\r
917                             ChapterMarkers = " --markers=" + "\"" + path + "\"";\r
918                         }\r
919                     }\r
920                 }\r
921                 else\r
922                 {\r
923                     string path = Path.Combine(Path.GetTempPath(), "chapters.csv");\r
924                     ChapterMarkers = " --markers=" + "\"" + path + "\"";\r
925                 }\r
926             }\r
927 \r
928             string chapter_markers = ChapterMarkers;\r
929             #endregion\r
930 \r
931             // H264 Tab\r
932             #region  H264 Tab\r
933 \r
934             string h264Advanced = mainWindow.rtf_x264Query.Text;\r
935 \r
936             if ((h264Advanced == ""))\r
937                 h264Advanced = "";\r
938             else\r
939                 h264Advanced = " -x " + h264Advanced;\r
940 \r
941 \r
942             string h264Settings = h264Advanced;\r
943             #endregion\r
944 \r
945             // Other\r
946             #region Processors / Other\r
947 \r
948             string processors = Properties.Settings.Default.Processors;\r
949             //  Number of Processors Handler\r
950 \r
951             if (processors == "Automatic")\r
952                 processors = "";\r
953             else\r
954                 processors = " -C " + processors + " ";\r
955 \r
956 \r
957             string queryAdvancedSettings = processors;\r
958 \r
959             string verbose = " -v ";\r
960             #endregion\r
961 \r
962             return querySource + queryDestination + queryPictureSettings + queryVideoSettings + h264Settings + queryAudioSettings + ChapterMarkers + queryAdvancedSettings + verbose;\r
963         }\r
964 \r
965         /*\r
966          * Set's up the DataGridView on the Chapters tab (frmMain)\r
967          */\r
968         public void chapterNaming(frmMain mainWindow)\r
969         {\r
970             try\r
971             {\r
972                 mainWindow.data_chpt.Rows.Clear();\r
973                 int i = 0;\r
974                 int rowCount = 0;\r
975                 int start = 0;\r
976                 int finish = 0;\r
977                 if (mainWindow.drop_chapterFinish.Text != "Auto")\r
978                     finish = int.Parse(mainWindow.drop_chapterFinish.Text);\r
979 \r
980                 if (mainWindow.drop_chapterStart.Text != "Auto")\r
981                     start = int.Parse(mainWindow.drop_chapterStart.Text);\r
982 \r
983                 rowCount = finish - (start - 1);\r
984 \r
985                 while (i < rowCount)\r
986                 {\r
987                     DataGridViewRow row = new DataGridViewRow();\r
988 \r
989                     mainWindow.data_chpt.Rows.Insert(i, row);\r
990                     mainWindow.data_chpt.Rows[i].Cells[0].Value = (i + 1);\r
991                     mainWindow.data_chpt.Rows[i].Cells[1].Value = "Chapter " + (i + 1);\r
992                     i++;\r
993                 }\r
994             }\r
995             catch (Exception exc)\r
996             {\r
997                 MessageBox.Show("chapterNaming() Error has occured: \n" + exc.ToString());\r
998             }\r
999         }\r
1000 \r
1001         /*\r
1002          * This function saves the data in the chapters tab, dataGridView into a CSV file called chapters.csv in this applications\r
1003          * running directory.\r
1004          */\r
1005         private Boolean chapterCSVSave(frmMain mainWindow, string file_path_name)\r
1006         {\r
1007             try\r
1008             {\r
1009                 StringBuilder csv = new StringBuilder();\r
1010 \r
1011                 foreach (DataGridViewRow row in mainWindow.data_chpt.Rows)\r
1012                 {\r
1013                     csv.Append(row.Cells[0].Value.ToString());\r
1014                     csv.Append(",");\r
1015                     csv.Append(row.Cells[1].Value.ToString());\r
1016                     csv.Append(Environment.NewLine);\r
1017                 }\r
1018                 StreamWriter file = new StreamWriter(file_path_name);\r
1019                 file.Write(csv.ToString());\r
1020                 file.Close();\r
1021                 file.Dispose();\r
1022                 return true;\r
1023 \r
1024             }\r
1025             catch (Exception exc)\r
1026             {\r
1027                 MessageBox.Show("Unable to save Chapter Makrers file! \nChapter marker names will NOT be saved in your encode \n\n" + exc.ToString(), "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1028                 return false;\r
1029             }\r
1030         }\r
1031 \r
1032         // End of Functions\r
1033     }\r
1034 }\r