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