OSDN Git Service

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