OSDN Git Service

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