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.m0k.org/>.\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()\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                 MessageBox.Show(exc.ToString());\r
46                 return false;\r
47             }\r
48         }\r
49         \r
50         /*\r
51          * Function which generates the filename and path automatically based on the Source Name, DVD title and DVD Chapters\r
52          */\r
53         public void autoName(frmMain mainWindow)\r
54         {\r
55             if (Properties.Settings.Default.autoNaming == "Checked")\r
56             {\r
57                 if (mainWindow.drp_dvdtitle.Text != "Automatic")\r
58                 {\r
59                     string source = mainWindow.text_source.Text;\r
60                     string[] sourceName = source.Split('\\');\r
61                     source = sourceName[sourceName.Length - 1].Replace(".iso", "").Replace(".mpg", "").Replace(".ts", "").Replace(".ps", "");\r
62 \r
63                     string title = mainWindow.drp_dvdtitle.Text;\r
64                     string[] titlesplit = title.Split(' ');\r
65                     title = titlesplit[0];\r
66 \r
67                     string cs = mainWindow.drop_chapterStart.Text;\r
68                     string cf = mainWindow.drop_chapterFinish.Text;\r
69 \r
70                     if (title == "Automatic")\r
71                         title = "";\r
72                     if (cs == "Auto")\r
73                         cs = "";\r
74                     if (cf == "Auto")\r
75                         cf = "";\r
76 \r
77                     string dash = "";\r
78                     if (cf != "Auto")\r
79                         dash = "-";\r
80 \r
81                     if (!mainWindow.text_destination.Text.Contains("\\"))\r
82                     {\r
83                         string filePath = "";\r
84                         if (Properties.Settings.Default.autoNamePath.Trim() != "")\r
85                             filePath = Properties.Settings.Default.autoNamePath + "\\";\r
86                         mainWindow.text_destination.Text = filePath + source + "_T" + title + "_C" + cs + dash + cf + ".mp4";\r
87                     }\r
88                     else\r
89                     {\r
90                         string dest = mainWindow.text_destination.Text;\r
91 \r
92                         string[] destName = dest.Split('\\');\r
93 \r
94 \r
95                         string[] extension = dest.Split('.');\r
96                         string ext = extension[extension.Length - 1];\r
97 \r
98                         destName[destName.Length - 1] = source + "_T" + title + "_C" + cs + dash + cf + "." + ext;\r
99 \r
100                         string fullDest = "";\r
101                         foreach (string part in destName)\r
102                         {\r
103                             if (fullDest != "")\r
104                                 fullDest = fullDest + "\\" + part;\r
105                             else\r
106                                 fullDest = fullDest + part;\r
107                         }\r
108 \r
109                         mainWindow.text_destination.Text = fullDest;\r
110                     }\r
111                 }\r
112             }\r
113         }\r
114 \r
115         /*\r
116          * This function takes in a Query which has been parsed by QueryParser and sets up the GUI.\r
117          */\r
118         public void presetLoader(frmMain mainWindow, Functions.QueryParser presetQuery, string name)\r
119         {\r
120             // ---------------------------\r
121             // Setup the GUI\r
122             // ---------------------------\r
123 \r
124             // Source tab\r
125             #region source\r
126             if (presetQuery.Source != "")\r
127                 mainWindow.text_source.Text = presetQuery.Source;\r
128 \r
129             if (presetQuery.DVDTitle != 0)\r
130                 mainWindow.drp_dvdtitle.Text = presetQuery.DVDTitle.ToString();\r
131 \r
132             if (presetQuery.DVDChapterStart != 0)\r
133                 mainWindow.drop_chapterStart.Text = presetQuery.DVDChapterStart.ToString();\r
134 \r
135             if (presetQuery.DVDChapterFinish != 0)\r
136                 mainWindow.drop_chapterFinish.Text = presetQuery.DVDChapterFinish.ToString();\r
137 \r
138             if (presetQuery.Format != "")\r
139             {\r
140                 string destination = mainWindow.text_destination.Text;\r
141                 destination = destination.Replace(".mp4", "." + presetQuery.Format);\r
142                 destination = destination.Replace(".m4v", "." + presetQuery.Format);\r
143                 destination = destination.Replace(".avi", "." + presetQuery.Format);\r
144                 destination = destination.Replace(".mkv", "." + presetQuery.Format);\r
145                 destination = destination.Replace(".ogm", "." + presetQuery.Format);\r
146                 mainWindow.text_destination.Text = destination;\r
147             }\r
148 \r
149             #endregion\r
150 \r
151             // Destination tab\r
152             #region destination\r
153 \r
154             if (presetQuery.Destination != "")\r
155                 mainWindow.text_destination.Text = presetQuery.Destination;\r
156 \r
157             mainWindow.drp_videoEncoder.Text = presetQuery.VideoEncoder;\r
158             mainWindow.drp_audioCodec.Text = presetQuery.AudioEncoder;\r
159 \r
160             #endregion\r
161 \r
162             // Picture Settings Tab\r
163             #region Picture\r
164             mainWindow.drp_crop.Text = "Manual";\r
165             mainWindow.text_top.Text = presetQuery.CropTop;\r
166             mainWindow.text_bottom.Text = presetQuery.CropBottom;\r
167             mainWindow.text_left.Text = presetQuery.CropLeft;\r
168             mainWindow.text_right.Text = presetQuery.CropRight;\r
169 \r
170             mainWindow.drp_deInterlace_option.Text = presetQuery.DeInterlace;\r
171             mainWindow.drp_deNoise.Text = presetQuery.DeNoise;\r
172 \r
173             if (presetQuery.DeTelecine == true)\r
174                 mainWindow.check_detelecine.CheckState = CheckState.Checked;\r
175             else\r
176                 mainWindow.check_detelecine.CheckState = CheckState.Unchecked;\r
177 \r
178 \r
179             if (presetQuery.DeBlock == true)\r
180                 mainWindow.check_deblock.CheckState = CheckState.Checked;\r
181             else\r
182                 mainWindow.check_deblock.CheckState = CheckState.Unchecked;\r
183 \r
184             if (presetQuery.ChapterMarkers == true)\r
185                 mainWindow.Check_ChapterMarkers.CheckState = CheckState.Checked;\r
186             else\r
187                 mainWindow.Check_ChapterMarkers.CheckState = CheckState.Unchecked;\r
188 \r
189             if (presetQuery.Anamorphic == true)\r
190                 mainWindow.CheckPixelRatio.CheckState = CheckState.Checked;\r
191             else\r
192                 mainWindow.CheckPixelRatio.CheckState = CheckState.Unchecked;\r
193 \r
194             if (presetQuery.LooseAnamorphic == true)\r
195                 mainWindow.check_lAnamorphic.CheckState = CheckState.Checked;\r
196             else\r
197                 mainWindow.check_lAnamorphic.CheckState = CheckState.Unchecked;\r
198 \r
199             if (presetQuery.Width != 0)\r
200                 mainWindow.text_width.Text = presetQuery.Width.ToString();\r
201             else\r
202             {\r
203                 mainWindow.text_width.Text = "";\r
204                 mainWindow.text_width.BackColor = Color.White;\r
205             }\r
206 \r
207             if (presetQuery.Height != 0)\r
208                 mainWindow.text_height.Text = presetQuery.Height.ToString();\r
209             else\r
210             {\r
211                 mainWindow.text_height.Text = "";\r
212                 mainWindow.text_height.BackColor = Color.White;\r
213             }\r
214 \r
215             if (presetQuery.VFR == true)\r
216                 mainWindow.check_vfr.CheckState = CheckState.Checked;\r
217             else\r
218                 mainWindow.check_vfr.CheckState = CheckState.Unchecked;\r
219             #endregion\r
220 \r
221             // Video Settings Tab\r
222             #region video\r
223             mainWindow.text_bitrate.Text = presetQuery.AverageVideoBitrate;\r
224             mainWindow.text_filesize.Text = presetQuery.VideoTargetSize;\r
225             mainWindow.slider_videoQuality.Value = presetQuery.VideoQuality;\r
226             if (mainWindow.slider_videoQuality.Value != 0)\r
227             {\r
228                 int ql = presetQuery.VideoQuality;\r
229                 mainWindow.SliderValue.Text = ql.ToString() + "%";\r
230             }\r
231 \r
232             if (presetQuery.TwoPass == true)\r
233                 mainWindow.check_2PassEncode.CheckState = CheckState.Checked;\r
234             else\r
235                 mainWindow.check_2PassEncode.CheckState = CheckState.Unchecked;\r
236 \r
237             if (presetQuery.Grayscale == true)\r
238                 mainWindow.check_grayscale.CheckState = CheckState.Checked;\r
239             else\r
240                 mainWindow.check_grayscale.CheckState = CheckState.Unchecked;\r
241 \r
242             mainWindow.drp_videoFramerate.Text = presetQuery.VideoFramerate;\r
243 \r
244             if (presetQuery.TurboFirstPass == true)\r
245                 mainWindow.check_turbo.CheckState = CheckState.Checked;\r
246             else\r
247                 mainWindow.check_turbo.CheckState = CheckState.Unchecked;\r
248 \r
249             if (presetQuery.LargeMP4 == true)\r
250                 mainWindow.check_largeFile.CheckState = CheckState.Checked;\r
251             else\r
252                 mainWindow.check_largeFile.CheckState = CheckState.Unchecked;\r
253 \r
254             if (presetQuery.IpodAtom == true)\r
255                 mainWindow.check_iPodAtom.CheckState = CheckState.Checked;\r
256             else\r
257                 mainWindow.check_iPodAtom.CheckState = CheckState.Unchecked;\r
258 \r
259             if (presetQuery.OptimizeMP4 == true)\r
260                 mainWindow.check_optimiseMP4.CheckState = CheckState.Checked;\r
261             else\r
262                 mainWindow.check_optimiseMP4.CheckState = CheckState.Unchecked;\r
263 \r
264             #endregion\r
265 \r
266             // Audio Settings Tab\r
267             #region Audio\r
268             mainWindow.drp_audioBitrate.Text = presetQuery.AudioBitrate;\r
269             mainWindow.drp_audioSampleRate.Text = presetQuery.AudioSampleBitrate;\r
270             mainWindow.drp_track1Audio.Text = presetQuery.AudioTrack1;\r
271             mainWindow.drp_track2Audio.Text = presetQuery.AudioTrack2;\r
272             mainWindow.drp_audioMixDown.Text = presetQuery.AudioTrackMix;\r
273             mainWindow.drp_subtitle.Text = presetQuery.Subtitles;\r
274 \r
275             if (presetQuery.ForcedSubtitles == true)\r
276             {\r
277                 mainWindow.check_forced.CheckState = CheckState.Checked;\r
278                 mainWindow.check_forced.Enabled = true;\r
279             }\r
280             else\r
281                 mainWindow.check_forced.CheckState = CheckState.Unchecked;\r
282 \r
283             // Dynamic Range Compression (Should be a float but we use double for ease)\r
284             double value = presetQuery.DRC;\r
285             if (value > 0)\r
286                 value = value - 10;\r
287             mainWindow.slider_drc.Value = int.Parse(value.ToString());\r
288 \r
289             double actualValue = presetQuery.DRC / 10;\r
290             mainWindow.lbl_drc.Text = actualValue.ToString();\r
291 \r
292 \r
293             #endregion\r
294 \r
295             // H264 Tab & Preset Name\r
296             #region other\r
297             mainWindow.rtf_h264advanced.Text = presetQuery.H264Query;\r
298 \r
299             // Set the preset name\r
300             mainWindow.groupBox_output.Text = "Output Settings (Preset: " + name + ")";\r
301             #endregion\r
302         }\r
303 \r
304         /*\r
305          * This takes all the widgets on frmMain\r
306          */\r
307         public string GenerateTheQuery(frmMain mainWindow)\r
308         {\r
309 \r
310             // Source tab\r
311             #region source\r
312             string source = mainWindow.text_source.Text;\r
313             string dvdTitle = mainWindow.drp_dvdtitle.Text;\r
314             string chapterStart = mainWindow.drop_chapterStart.Text;\r
315             string chapterFinish = mainWindow.drop_chapterFinish.Text;\r
316             int totalChapters = mainWindow.drop_chapterFinish.Items.Count - 1;\r
317             string dvdChapter = "";\r
318 \r
319             if ((source != "") || (source != "Click 'Browse' to continue"))\r
320                 source = " -i " + '"' + source + '"';\r
321 \r
322             if (dvdTitle == "Automatic")\r
323                 dvdTitle = "";\r
324             else\r
325             {\r
326                 string[] titleInfo = dvdTitle.Split(' ');\r
327                 dvdTitle = " -t " + titleInfo[0];\r
328             }\r
329 \r
330             if (chapterFinish.Equals("Auto") && chapterStart.Equals("Auto"))\r
331                 dvdChapter = "";\r
332             else if (chapterFinish == chapterStart)\r
333                 dvdChapter = " -c " + chapterStart;\r
334             else\r
335                 dvdChapter = " -c " + chapterStart + "-" + chapterFinish;\r
336 \r
337             string querySource = source + dvdTitle + dvdChapter;\r
338             #endregion\r
339 \r
340             // Destination tab\r
341             #region Destination\r
342 \r
343             string destination = mainWindow.text_destination.Text;\r
344             string videoEncoder = mainWindow.drp_videoEncoder.Text;\r
345             string audioEncoder = mainWindow.drp_audioCodec.Text;\r
346             string width = mainWindow.text_width.Text;\r
347             string height = mainWindow.text_height.Text;\r
348 \r
349             if (destination != "")\r
350                 destination = " -o " + '"' + destination + '"'; //'"'+ \r
351 \r
352 \r
353             switch (videoEncoder)\r
354             {\r
355                 case "Mpeg 4":\r
356                     videoEncoder = " -e ffmpeg";\r
357                     break;\r
358                 case "Xvid":\r
359                     videoEncoder = " -e xvid";\r
360                     break;\r
361                 case "H.264":\r
362                     videoEncoder = " -e x264";\r
363                     break;\r
364                 case "H.264 (iPod)":\r
365                     videoEncoder = " -e x264b30";\r
366                     break;\r
367                 default:\r
368                     videoEncoder = " -e x264";\r
369                     break;\r
370             }\r
371 \r
372             switch (audioEncoder)\r
373             {\r
374                 case "AAC":\r
375                     audioEncoder = " -E faac";\r
376                     break;\r
377                 case "MP3":\r
378                     audioEncoder = " -E lame";\r
379                     break;\r
380                 case "Vorbis":\r
381                     audioEncoder = " -E vorbis";\r
382                     break;\r
383                 case "AC3":\r
384                     audioEncoder = " -E ac3";\r
385                     break;\r
386                 default:\r
387                     audioEncoder = " -E faac";\r
388                     break;\r
389             }\r
390 \r
391             if (width != "")\r
392                 width = " -w " + width;\r
393 \r
394 \r
395             if (height == "Auto")\r
396             {\r
397                 height = "";\r
398             }\r
399             else if (height != "")\r
400             {\r
401                 height = " -l " + height;\r
402             }\r
403 \r
404 \r
405             string queryDestination = destination + videoEncoder + audioEncoder + width + height;\r
406             #endregion\r
407 \r
408             // Picture Settings Tab\r
409             #region Picture Settings Tab\r
410 \r
411             string cropSetting = mainWindow.drp_crop.Text;\r
412             string cropTop = mainWindow.text_top.Text;\r
413             string cropBottom = mainWindow.text_bottom.Text;\r
414             string cropLeft = mainWindow.text_left.Text;\r
415             string cropRight = mainWindow.text_right.Text;\r
416             string cropOut = "";\r
417             string deInterlace_Option = mainWindow.drp_deInterlace_option.Text;\r
418             string deinterlace = "";\r
419             string grayscale = "";\r
420             string pixelRatio = "";\r
421             string vfr = "";\r
422             string deblock = "";\r
423             string detelecine = "";\r
424             string lanamorphic = "";\r
425 \r
426 \r
427 \r
428             if (cropSetting == "Automatic")\r
429                 cropOut = "";\r
430             else if (cropSetting == "No Crop")\r
431                 cropOut = " --crop 0:0:0:0 ";\r
432             else\r
433             {\r
434                 if (mainWindow.text_top.Text == "")\r
435                     cropTop = "0";\r
436                 if (mainWindow.text_bottom.Text == "")\r
437                     cropBottom = "0";\r
438                 if (mainWindow.text_left.Text == "")\r
439                     cropLeft = "0";\r
440                 if (mainWindow.text_right.Text == "")\r
441                     cropRight = "0";\r
442 \r
443                 cropOut = " --crop " + cropTop + ":" + cropBottom + ":" + cropLeft + ":" + cropRight;\r
444             }\r
445 \r
446             switch (deInterlace_Option)\r
447             {\r
448                 case "None":\r
449                     deinterlace = "";\r
450                     break;\r
451                 case "Fast":\r
452                     deinterlace = " --deinterlace=fast";\r
453                     break;\r
454                 case "Slow":\r
455                     deinterlace = " --deinterlace=slow";\r
456                     break;\r
457                 case "Slower":\r
458                     deinterlace = " --deinterlace=slower";\r
459                     break;\r
460                 case "Slowest":\r
461                     deinterlace = " --deinterlace=slowest";\r
462                     break;\r
463                 default:\r
464                     deinterlace = "";\r
465                     break;\r
466             }\r
467 \r
468             if (mainWindow.check_grayscale.Checked)\r
469                 grayscale = " -g ";\r
470 \r
471             if (mainWindow.CheckPixelRatio.Checked)\r
472                 pixelRatio = " -p ";\r
473 \r
474             if (mainWindow.check_deblock.Checked)\r
475                 deblock = " --deblock";\r
476 \r
477             if (mainWindow.check_detelecine.Checked)\r
478                 detelecine = " --detelecine";\r
479 \r
480             if (mainWindow.check_vfr.Checked)\r
481                 vfr = " -V ";\r
482 \r
483             if (mainWindow.check_lAnamorphic.Checked)\r
484                 lanamorphic = " -P ";\r
485 \r
486             string queryPictureSettings = cropOut + deinterlace + deblock + detelecine + vfr + grayscale + pixelRatio + lanamorphic;\r
487             #endregion\r
488 \r
489             // Video Settings Tab\r
490             #region Video Settings Tab\r
491 \r
492             string videoBitrate = mainWindow.text_bitrate.Text;\r
493             string videoFilesize = mainWindow.text_filesize.Text;\r
494             double videoQuality = mainWindow.slider_videoQuality.Value;\r
495             string vidQSetting = "";\r
496             string twoPassEncoding = "";\r
497             string videoFramerate = mainWindow.drp_videoFramerate.Text;\r
498             string turboH264 = "";\r
499             string largeFile = "";\r
500             string denoise = "";\r
501             string ipodAtom = "";\r
502             string optimizeMP4 = "";\r
503 \r
504             if (videoBitrate != "")\r
505                 videoBitrate = " -b " + videoBitrate;\r
506 \r
507             if (videoFilesize != "")\r
508                 videoFilesize = " -S " + videoFilesize;\r
509 \r
510             // Video Quality Setting\r
511 \r
512             if ((videoQuality == 0))\r
513                 vidQSetting = "";\r
514             else\r
515             {\r
516                 videoQuality = videoQuality / 100;\r
517                 if (videoQuality == 1)\r
518                 {\r
519                     vidQSetting = "1.0";\r
520                 }\r
521                 vidQSetting = " -q " + videoQuality.ToString(new CultureInfo("en-US"));\r
522             }\r
523 \r
524             if (mainWindow.check_2PassEncode.Checked)\r
525                 twoPassEncoding = " -2 ";\r
526 \r
527             if (videoFramerate == "Automatic")\r
528                 videoFramerate = "";\r
529             else\r
530                 videoFramerate = " -r " + videoFramerate;\r
531 \r
532             if (mainWindow.check_turbo.Checked)\r
533                 turboH264 = " -T ";\r
534 \r
535             if (mainWindow.check_largeFile.Checked)\r
536                 largeFile = " -4 ";\r
537 \r
538 \r
539             switch (mainWindow.drp_deNoise.Text)\r
540             {\r
541                 case "None":\r
542                     denoise = "";\r
543                     break;\r
544                 case "Weak":\r
545                     denoise = " --denoise=weak";\r
546                     break;\r
547                 case "Medium":\r
548                     denoise = " --denoise=medium";\r
549                     break;\r
550                 case "Strong":\r
551                     denoise = " --denoise=strong";\r
552                     break;\r
553                 default:\r
554                     denoise = "";\r
555                     break;\r
556             }\r
557 \r
558             if (mainWindow.check_iPodAtom.Checked)\r
559                 ipodAtom = " -I ";\r
560 \r
561             if (mainWindow.check_optimiseMP4.Checked)\r
562                 optimizeMP4 = " -O ";\r
563 \r
564 \r
565             string queryVideoSettings = videoBitrate + videoFilesize + vidQSetting + twoPassEncoding + videoFramerate + turboH264 + ipodAtom + optimizeMP4 + largeFile + denoise;\r
566             #endregion\r
567 \r
568             // Audio Settings Tab\r
569             #region Audio Settings Tab\r
570 \r
571             string audioBitrate = mainWindow.drp_audioBitrate.Text;\r
572             string audioSampleRate = mainWindow.drp_audioSampleRate.Text;\r
573             string track1 = mainWindow.drp_track1Audio.Text;\r
574             string track2 = mainWindow.drp_track2Audio.Text;\r
575             string audioChannels = "";\r
576             string Mixdown = mainWindow.drp_audioMixDown.Text;\r
577             string SixChannelAudio = "";\r
578             string subtitles = mainWindow.drp_subtitle.Text;\r
579             string subScan = "";\r
580             string forced = "";\r
581             string drc = "";\r
582 \r
583             if (audioBitrate != "")\r
584                 audioBitrate = " -B " + audioBitrate;\r
585 \r
586             if (audioSampleRate != "")\r
587                 audioSampleRate = " -R " + audioSampleRate;\r
588 \r
589             // Audio Track 1\r
590             if (track1 == "Automatic")\r
591                 audioChannels = "";\r
592             else if (track1 == "")\r
593                 audioChannels = "";\r
594             else if (track1 == "None")\r
595                 audioChannels = " -a none";\r
596             else\r
597             {\r
598                 string[] tempSub;\r
599                 tempSub = track1.Split(' ');\r
600                 audioChannels = " -a " + tempSub[0];\r
601             }\r
602 \r
603             // Audio Track 2\r
604             if (audioChannels != "")\r
605             {\r
606                 if ((track2 != "") && (track2 != "None"))\r
607                 {\r
608                     string[] tempSub;\r
609                     tempSub = track2.Split(' ');\r
610                     audioChannels = audioChannels + "," + tempSub[0];\r
611                 }\r
612             }\r
613             else\r
614             {\r
615                 if ((track2 != "") && (track2 != "None"))\r
616                 {\r
617                     string[] tempSub;\r
618                     tempSub = track2.Split(' ');\r
619                     audioChannels = " -a " + tempSub[0];\r
620                 }\r
621             }\r
622 \r
623 \r
624 \r
625             switch (Mixdown)\r
626             {\r
627                 case "Automatic":\r
628                     Mixdown = "";\r
629                     break;\r
630                 case "Mono":\r
631                     Mixdown = "mono";\r
632                     break;\r
633                 case "Stereo":\r
634                     Mixdown = "stereo";\r
635                     break;\r
636                 case "Dolby Surround":\r
637                     Mixdown = "dpl1";\r
638                     break;\r
639                 case "Dolby Pro Logic II":\r
640                     Mixdown = "dpl2";\r
641                     break;\r
642                 case "6 Channel Discrete":\r
643                     Mixdown = "6ch";\r
644                     break;\r
645                 default:\r
646                     Mixdown = "";\r
647                     break;\r
648             }\r
649 \r
650             if (Mixdown != "")\r
651                 SixChannelAudio = " -6 " + Mixdown;\r
652             else\r
653                 SixChannelAudio = "";\r
654 \r
655             if (subtitles == "None")\r
656                 subtitles = "";\r
657             else if (subtitles == "")\r
658                 subtitles = "";\r
659             else if (subtitles == "Autoselect")\r
660             {\r
661                 subScan = " -U ";\r
662                 subtitles = "";\r
663             }\r
664             else\r
665             {\r
666                 string[] tempSub;\r
667                 tempSub = subtitles.Split(' ');\r
668                 subtitles = " -s " + tempSub[0];\r
669             }\r
670 \r
671             if (mainWindow.check_forced.Checked)\r
672                 forced = " -F ";\r
673 \r
674             //Dynamic Range Compression (expects a float but a double is used for ease)\r
675             double value = mainWindow.slider_drc.Value / 10.0;\r
676             value++;\r
677             drc = " -D " + value;\r
678 \r
679             string queryAudioSettings = audioBitrate + audioSampleRate + drc + audioChannels + SixChannelAudio + subScan + subtitles + forced;\r
680             #endregion\r
681 \r
682             // Chapter Markers Tab\r
683             #region Chapter Markers\r
684 \r
685             string ChapterMarkers = "";\r
686 \r
687             if (mainWindow.Check_ChapterMarkers.Checked)\r
688             {\r
689                 Boolean saveCSV = chapterCSVSave(mainWindow);\r
690                 if (saveCSV == false)\r
691                 {\r
692                     MessageBox.Show("Unable to save Chapter Makrers file! \n Chapter marker names will NOT be saved in your encode \n\n", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
693                     ChapterMarkers = " -m ";\r
694                 }\r
695                 else\r
696                 {\r
697                     string path = Path.Combine(Path.GetTempPath(), "chapters.csv");\r
698 \r
699                     ChapterMarkers = " --markers=" + path;\r
700                 }\r
701             }\r
702 \r
703             string chapter_markers = ChapterMarkers;\r
704             #endregion\r
705 \r
706             // H264 Tab\r
707             #region  H264 Tab\r
708 \r
709             string h264Advanced = mainWindow.rtf_h264advanced.Text;\r
710 \r
711             if ((h264Advanced == ""))\r
712                 h264Advanced = "";\r
713             else\r
714                 h264Advanced = " -x " + h264Advanced;\r
715 \r
716 \r
717             string h264Settings = h264Advanced;\r
718             #endregion\r
719 \r
720             // Other\r
721             #region Processors / Other\r
722 \r
723             string processors = Properties.Settings.Default.Processors;\r
724             //  Number of Processors Handler\r
725 \r
726             if (processors == "Automatic")\r
727                 processors = "";\r
728             else\r
729                 processors = " -C " + processors + " ";\r
730 \r
731 \r
732             string queryAdvancedSettings = processors;\r
733 \r
734             string verbose = "";\r
735             if (Properties.Settings.Default.verbose == "Checked")\r
736                 verbose = " -v ";\r
737             #endregion\r
738 \r
739             return querySource + queryDestination + queryPictureSettings + queryVideoSettings + h264Settings + queryAudioSettings + ChapterMarkers + queryAdvancedSettings + verbose;\r
740         }\r
741 \r
742         /*\r
743          * Set's up the DataGridView on the Chapters tab (frmMain)\r
744          */\r
745         public void chapterNaming(frmMain mainWindow)\r
746         {\r
747             try\r
748             {\r
749                 mainWindow.data_chpt.Rows.Clear();\r
750                 int i = 0;\r
751                 int rowCount = 0;\r
752                 int start = 0;\r
753                 int finish = 0;\r
754                 if (mainWindow.drop_chapterFinish.Text != "Auto")\r
755                     finish = int.Parse(mainWindow.drop_chapterFinish.Text);\r
756 \r
757                 if (mainWindow.drop_chapterStart.Text != "Auto")\r
758                     start = int.Parse(mainWindow.drop_chapterStart.Text);\r
759 \r
760                 rowCount = finish - (start - 1);\r
761 \r
762                 while (i < rowCount)\r
763                 {\r
764                     DataGridViewRow row = new DataGridViewRow();\r
765 \r
766                     mainWindow.data_chpt.Rows.Insert(i, row);\r
767                     mainWindow.data_chpt.Rows[i].Cells[0].Value = (i + 1);\r
768                     mainWindow.data_chpt.Rows[i].Cells[1].Value = "Chapter " + (i + 1);\r
769                     i++;\r
770                 }\r
771             }\r
772             catch (Exception exc)\r
773             {\r
774                 MessageBox.Show("chapterNaming() Error has occured: \n" + exc.ToString());\r
775             }\r
776         }\r
777 \r
778         /*\r
779          * This function saves the data in the chapters tab, dataGridView into a CSV file called chapters.csv in this applications\r
780          * running directory.\r
781          */\r
782         private Boolean chapterCSVSave(frmMain mainWindow)\r
783         {\r
784             try\r
785             {\r
786                 string path = Path.Combine(Path.GetTempPath(), "chapters.csv");\r
787 \r
788                 StringBuilder csv = new StringBuilder();\r
789 \r
790                 foreach (DataGridViewRow row in mainWindow.data_chpt.Rows)\r
791                 {\r
792                     csv.Append(row.Cells[0].Value.ToString());\r
793                     csv.Append(",");\r
794                     csv.Append(row.Cells[1].Value.ToString());\r
795                     csv.Append(Environment.NewLine);\r
796                 }\r
797                 StreamWriter file = new StreamWriter(path);\r
798                 file.Write(csv.ToString());\r
799                 file.Close();\r
800                 file.Dispose();\r
801                 return true;\r
802 \r
803             }\r
804             catch (Exception exc)\r
805             {\r
806                 MessageBox.Show(exc.ToString(), "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
807                 return false;\r
808             }\r
809         }\r
810 \r
811         // End of Functions\r
812     }\r
813 }\r