3 This file is part of the HandBrake source code.
\r
4 Homepage: <http://handbrake.fr>.
\r
5 It may be used under the terms of the GNU General Public License. */
\r
8 using System.Collections.Generic;
\r
10 using System.Windows.Forms;
\r
11 using System.Globalization;
\r
13 using System.Drawing;
\r
15 namespace Handbrake.Functions
\r
20 * Checks for updates and returns "true" boolean if one exists.
\r
22 public Boolean updateCheck(Boolean debug)
\r
26 Functions.RssReader rssRead = new Functions.RssReader();
\r
27 string build = rssRead.build();
\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
39 Boolean update = (latest > current);
\r
43 catch (Exception exc)
\r
46 MessageBox.Show("Unable to check for updates, Please try again later. \n" + exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
52 * Function which generates the filename and path automatically based on the Source Name, DVD title and DVD Chapters
\r
54 public void autoName(frmMain mainWindow)
\r
56 if (Properties.Settings.Default.autoNaming == "Checked")
\r
58 if (mainWindow.drp_dvdtitle.Text != "Automatic")
\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
64 string title = mainWindow.drp_dvdtitle.Text;
\r
65 string[] titlesplit = title.Split(' ');
\r
66 title = titlesplit[0];
\r
68 string cs = mainWindow.drop_chapterStart.Text;
\r
69 string cf = mainWindow.drop_chapterFinish.Text;
\r
71 if (title == "Automatic")
\r
82 if (!mainWindow.text_destination.Text.Contains("\\"))
\r
84 string filePath = "";
\r
85 if (Properties.Settings.Default.autoNamePath.Trim() != "")
\r
87 if (Properties.Settings.Default.autoNamePath.Trim() != "Click 'Browse' to set the default location")
\r
88 filePath = Properties.Settings.Default.autoNamePath + "\\";
\r
90 mainWindow.text_destination.Text = filePath + source + "_T" + title + "_C" + cs + dash + cf + ".mp4";
\r
94 string dest = mainWindow.text_destination.Text;
\r
96 string[] destName = dest.Split('\\');
\r
99 string[] extension = dest.Split('.');
\r
100 string ext = extension[extension.Length - 1];
\r
102 destName[destName.Length - 1] = source + "_T" + title + "_C" + cs + dash + cf + "." + ext;
\r
104 string fullDest = "";
\r
105 foreach (string part in destName)
\r
107 if (fullDest != "")
\r
108 fullDest = fullDest + "\\" + part;
\r
110 fullDest = fullDest + part;
\r
113 mainWindow.text_destination.Text = fullDest;
\r
120 * This function takes in a Query which has been parsed by QueryParser and sets up the GUI.
\r
122 public void presetLoader(frmMain mainWindow, Functions.QueryParser presetQuery, string name)
\r
124 // ---------------------------
\r
126 // ---------------------------
\r
130 // Reset some vaules to stock first to prevent errors.
\r
131 mainWindow.check_iPodAtom.CheckState = CheckState.Unchecked;
\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
137 if (presetQuery.DVDTitle != 0)
\r
138 mainWindow.drp_dvdtitle.Text = presetQuery.DVDTitle.ToString();
\r
140 if (presetQuery.DVDChapterStart != 0)
\r
141 mainWindow.drop_chapterStart.Text = presetQuery.DVDChapterStart.ToString();
\r
143 if (presetQuery.DVDChapterFinish != 0)
\r
144 mainWindow.drop_chapterFinish.Text = presetQuery.DVDChapterFinish.ToString();
\r
146 if (presetQuery.Format != null)
\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
160 #region destination
\r
162 if (presetQuery.Destination != "")
\r
163 mainWindow.text_destination.Text = presetQuery.Destination;
\r
165 mainWindow.drp_videoEncoder.Text = presetQuery.VideoEncoder;
\r
167 if (presetQuery.IpodAtom == true)
\r
168 mainWindow.check_iPodAtom.CheckState = CheckState.Checked;
\r
170 mainWindow.check_iPodAtom.CheckState = CheckState.Unchecked;
\r
172 if (presetQuery.OptimizeMP4 == true)
\r
173 mainWindow.check_optimiseMP4.CheckState = CheckState.Checked;
\r
175 mainWindow.check_optimiseMP4.CheckState = CheckState.Unchecked;
\r
179 // Picture Settings Tab
\r
181 mainWindow.drp_crop.SelectedIndex = 1;
\r
182 mainWindow.text_top.Text = presetQuery.CropTop;
\r
183 mainWindow.text_bottom.Text = presetQuery.CropBottom;
\r
184 mainWindow.text_left.Text = presetQuery.CropLeft;
\r
185 mainWindow.text_right.Text = presetQuery.CropRight;
\r
187 mainWindow.drp_deInterlace_option.Text = presetQuery.DeInterlace;
\r
188 mainWindow.drp_deNoise.Text = presetQuery.DeNoise;
\r
190 if (presetQuery.DeTelecine == true)
\r
191 mainWindow.check_detelecine.CheckState = CheckState.Checked;
\r
193 mainWindow.check_detelecine.CheckState = CheckState.Unchecked;
\r
196 if (presetQuery.DeBlock == true)
\r
197 mainWindow.check_deblock.CheckState = CheckState.Checked;
\r
199 mainWindow.check_deblock.CheckState = CheckState.Unchecked;
\r
202 if (presetQuery.Anamorphic == true)
\r
203 mainWindow.drp_anamorphic.SelectedIndex = 1;
\r
205 mainWindow.drp_anamorphic.SelectedIndex = 0;
\r
207 if (presetQuery.LooseAnamorphic == true)
\r
208 mainWindow.drp_anamorphic.SelectedIndex = 2;
\r
211 if (presetQuery.Anamorphic != true)
\r
212 mainWindow.drp_anamorphic.SelectedIndex = 0;
\r
216 if (presetQuery.Width != 0)
\r
217 mainWindow.text_width.Text = presetQuery.Width.ToString();
\r
220 mainWindow.text_width.Text = "";
\r
223 if (presetQuery.Height != 0)
\r
224 mainWindow.text_height.Text = presetQuery.Height.ToString();
\r
227 mainWindow.text_height.Text = "";
\r
230 if (presetQuery.VFR == true)
\r
231 mainWindow.check_vfr.CheckState = CheckState.Checked;
\r
233 mainWindow.check_vfr.CheckState = CheckState.Unchecked;
\r
236 // Video Settings Tab
\r
238 mainWindow.text_bitrate.Text = presetQuery.AverageVideoBitrate;
\r
239 mainWindow.text_filesize.Text = presetQuery.VideoTargetSize;
\r
240 mainWindow.slider_videoQuality.Value = presetQuery.VideoQuality;
\r
241 if (mainWindow.slider_videoQuality.Value != 0)
\r
243 int ql = presetQuery.VideoQuality;
\r
244 mainWindow.SliderValue.Text = ql.ToString() + "%";
\r
247 if (presetQuery.TwoPass == true)
\r
248 mainWindow.check_2PassEncode.CheckState = CheckState.Checked;
\r
250 mainWindow.check_2PassEncode.CheckState = CheckState.Unchecked;
\r
252 if (presetQuery.Grayscale == true)
\r
253 mainWindow.check_grayscale.CheckState = CheckState.Checked;
\r
255 mainWindow.check_grayscale.CheckState = CheckState.Unchecked;
\r
257 mainWindow.drp_videoFramerate.Text = presetQuery.VideoFramerate;
\r
259 if (presetQuery.TurboFirstPass == true)
\r
260 mainWindow.check_turbo.CheckState = CheckState.Checked;
\r
262 mainWindow.check_turbo.CheckState = CheckState.Unchecked;
\r
264 if (presetQuery.LargeMP4 == true)
\r
265 mainWindow.check_largeFile.CheckState = CheckState.Checked;
\r
268 mainWindow.check_largeFile.CheckState = CheckState.Unchecked;
\r
269 mainWindow.check_largeFile.BackColor = Color.Transparent;
\r
276 // Chapter Markers Tab
\r
277 #region Chapter Markers
\r
279 if (presetQuery.ChapterMarkers == true)
\r
281 mainWindow.Check_ChapterMarkers.CheckState = CheckState.Checked;
\r
282 mainWindow.text_destination.Text = mainWindow.text_destination.Text.Replace(".mp4", ".m4v");
\r
285 mainWindow.Check_ChapterMarkers.CheckState = CheckState.Unchecked;
\r
289 // Audio Settings Tab
\r
292 if (presetQuery.AudioTrack1 == "")
\r
293 mainWindow.drp_track1Audio.Text = "Automatic";
\r
295 mainWindow.drp_track1Audio.Text = presetQuery.AudioTrack1;
\r
297 if (presetQuery.AudioTrack2 == "None")
\r
299 if (presetQuery.AudioEncoder2 != null)
\r
301 mainWindow.drp_track2Audio.SelectedIndex = 1;
\r
302 mainWindow.drp_audsr_2.Enabled = true;
\r
303 mainWindow.drp_audmix_2.Enabled = true;
\r
304 mainWindow.drp_audenc_2.Enabled = true;
\r
305 mainWindow.drp_audbit_2.Enabled = true;
\r
309 mainWindow.drp_track2Audio.SelectedIndex = 0;
\r
310 mainWindow.drp_audsr_2.Enabled = false;
\r
311 mainWindow.drp_audmix_2.Enabled = false;
\r
312 mainWindow.drp_audenc_2.Enabled = false;
\r
313 mainWindow.drp_audbit_2.Enabled = false;
\r
318 mainWindow.drp_track2Audio.Text = presetQuery.AudioTrack2;
\r
320 if (presetQuery.AudioEncoder1 != null)
\r
321 mainWindow.drp_audenc_1.Text = presetQuery.AudioEncoder1;
\r
322 mainWindow.drp_audenc_2.Text = presetQuery.AudioEncoder2;
\r
324 if (presetQuery.AudioBitrate1 != null)
\r
325 mainWindow.drp_audbit_1.Text = presetQuery.AudioBitrate1;
\r
326 mainWindow.drp_audbit_2.Text = presetQuery.AudioBitrate2;
\r
328 if (presetQuery.AudioSamplerate1 != null)
\r
329 mainWindow.drp_audsr_1.Text = presetQuery.AudioSamplerate1;
\r
330 mainWindow.drp_audsr_2.Text = presetQuery.AudioSamplerate2;
\r
332 mainWindow.drp_audmix_1.Text = presetQuery.AudioTrackMix1;
\r
333 mainWindow.drp_audmix_2.Text = presetQuery.AudioTrackMix2;
\r
337 mainWindow.drp_subtitle.Text = presetQuery.Subtitles;
\r
339 if (presetQuery.ForcedSubtitles == true)
\r
341 mainWindow.check_forced.CheckState = CheckState.Checked;
\r
342 mainWindow.check_forced.Enabled = true;
\r
345 mainWindow.check_forced.CheckState = CheckState.Unchecked;
\r
347 // Dynamic Range Compression (Should be a float but we use double for ease)
\r
348 double value = presetQuery.DRC;
\r
350 value = value - 10;
\r
351 mainWindow.slider_drc.Value = int.Parse(value.ToString());
\r
353 double actualValue = presetQuery.DRC / 10;
\r
354 mainWindow.lbl_drc.Text = actualValue.ToString();
\r
359 // H264 Tab & Preset Name
\r
361 mainWindow.rtf_x264Query.Text = presetQuery.H264Query;
\r
363 // Set the preset name
\r
364 mainWindow.groupBox_output.Text = "Output Settings (Preset: " + name + ")";
\r
369 * This takes all the widgets on frmMain
\r
371 public string GenerateTheQuery(frmMain mainWindow)
\r
376 string source = mainWindow.text_source.Text;
\r
377 string dvdTitle = mainWindow.drp_dvdtitle.Text;
\r
378 string chapterStart = mainWindow.drop_chapterStart.Text;
\r
379 string chapterFinish = mainWindow.drop_chapterFinish.Text;
\r
380 int totalChapters = mainWindow.drop_chapterFinish.Items.Count - 1;
\r
381 string dvdChapter = "";
\r
383 if ((source != "") && (source.Trim() != "Click 'Browse' to continue"))
\r
384 source = " -i " + '"' + source + '"';
\r
388 if (dvdTitle == "Automatic")
\r
392 string[] titleInfo = dvdTitle.Split(' ');
\r
393 dvdTitle = " -t " + titleInfo[0];
\r
396 if (chapterFinish.Equals("Auto") && chapterStart.Equals("Auto"))
\r
398 else if (chapterFinish == chapterStart)
\r
399 dvdChapter = " -c " + chapterStart;
\r
401 dvdChapter = " -c " + chapterStart + "-" + chapterFinish;
\r
403 string querySource = source + dvdTitle + dvdChapter;
\r
407 #region Destination
\r
409 string destination = mainWindow.text_destination.Text;
\r
410 string videoEncoder = mainWindow.drp_videoEncoder.Text;
\r
411 string width = mainWindow.text_width.Text;
\r
412 string height = mainWindow.text_height.Text;
\r
414 if (destination != "")
\r
415 destination = " -o " + '"' + destination + '"'; //'"'+
\r
418 switch (videoEncoder)
\r
421 videoEncoder = " -e ffmpeg";
\r
424 videoEncoder = " -e xvid";
\r
427 videoEncoder = " -e x264";
\r
429 case "H.264 (iPod)":
\r
430 videoEncoder = " -e x264b30";
\r
433 videoEncoder = " -e x264";
\r
438 width = " -w " + width;
\r
441 if (height == "Auto")
\r
445 else if (height != "")
\r
447 height = " -l " + height;
\r
451 string queryDestination = destination + videoEncoder + width + height;
\r
454 // Picture Settings Tab
\r
455 #region Picture Settings Tab
\r
457 string cropSetting = mainWindow.drp_crop.Text;
\r
458 string cropTop = mainWindow.text_top.Text;
\r
459 string cropBottom = mainWindow.text_bottom.Text;
\r
460 string cropLeft = mainWindow.text_left.Text;
\r
461 string cropRight = mainWindow.text_right.Text;
\r
462 string cropOut = "";
\r
463 string deInterlace_Option = mainWindow.drp_deInterlace_option.Text;
\r
464 string deinterlace = "";
\r
465 string grayscale = "";
\r
466 string pixelRatio = "";
\r
468 string deblock = "";
\r
469 string detelecine = "";
\r
470 string lanamorphic = "";
\r
474 if (cropSetting == "Automatic")
\r
476 else if (cropSetting == "No Crop")
\r
477 cropOut = " --crop 0:0:0:0 ";
\r
480 if ((mainWindow.text_top.Text == "") && (mainWindow.text_bottom.Text == "") && (mainWindow.text_left.Text == "") && (mainWindow.text_right.Text == ""))
\r
484 if (mainWindow.text_top.Text == "")
\r
486 if (mainWindow.text_bottom.Text == "")
\r
488 if (mainWindow.text_left.Text == "")
\r
490 if (mainWindow.text_right.Text == "")
\r
493 cropOut = " --crop " + cropTop + ":" + cropBottom + ":" + cropLeft + ":" + cropRight;
\r
497 switch (deInterlace_Option)
\r
503 deinterlace = " --deinterlace=\"fast\"";
\r
506 deinterlace = " --deinterlace=\"slow\"";
\r
509 deinterlace = " --deinterlace=\"slower\"";
\r
512 deinterlace = " --deinterlace=\"slowest\"";
\r
519 if (mainWindow.check_grayscale.Checked)
\r
520 grayscale = " -g ";
\r
522 if (mainWindow.drp_anamorphic.SelectedIndex == 1)
\r
523 pixelRatio = " -p ";
\r
524 else if (mainWindow.drp_anamorphic.SelectedIndex == 2)
\r
525 pixelRatio = " -P ";
\r
530 if (mainWindow.check_deblock.Checked)
\r
531 deblock = " --deblock";
\r
533 if (mainWindow.check_detelecine.Checked)
\r
534 detelecine = " --detelecine";
\r
536 if (mainWindow.check_vfr.Checked)
\r
541 string queryPictureSettings = cropOut + deinterlace + deblock + detelecine + vfr + grayscale + pixelRatio + lanamorphic;
\r
544 // Video Settings Tab
\r
545 #region Video Settings Tab
\r
547 string videoBitrate = mainWindow.text_bitrate.Text;
\r
548 string videoFilesize = mainWindow.text_filesize.Text;
\r
549 double videoQuality = mainWindow.slider_videoQuality.Value;
\r
550 string vidQSetting = "";
\r
551 string twoPassEncoding = "";
\r
552 string videoFramerate = mainWindow.drp_videoFramerate.Text;
\r
553 string vid_frame_rate = "";
\r
554 string turboH264 = "";
\r
555 string largeFile = "";
\r
556 string denoise = "";
\r
557 string ipodAtom = "";
\r
558 string optimizeMP4 = "";
\r
560 if (videoBitrate != "")
\r
561 videoBitrate = " -b " + videoBitrate;
\r
563 if (videoFilesize != "")
\r
564 videoFilesize = " -S " + videoFilesize;
\r
566 // Video Quality Setting
\r
568 if ((videoQuality == 0))
\r
572 videoQuality = videoQuality / 100;
\r
573 if (videoQuality == 1)
\r
575 vidQSetting = "1.0";
\r
577 vidQSetting = " -q " + videoQuality.ToString(new CultureInfo("en-US"));
\r
580 if (mainWindow.check_2PassEncode.Checked)
\r
581 twoPassEncoding = " -2 ";
\r
583 if (videoFramerate == "Same as source")
\r
584 vid_frame_rate = "";
\r
587 if (!mainWindow.check_vfr.Checked)
\r
588 vid_frame_rate = " -r " + videoFramerate;
\r
591 if (mainWindow.check_turbo.Checked)
\r
592 turboH264 = " -T ";
\r
594 if (mainWindow.check_largeFile.Checked)
\r
595 largeFile = " -4 ";
\r
598 switch (mainWindow.drp_deNoise.Text)
\r
604 denoise = " --denoise=\"weak\"";
\r
607 denoise = " --denoise=\"medium\"";
\r
610 denoise = " --denoise=\"strong\"";
\r
617 if (mainWindow.check_iPodAtom.Checked)
\r
620 if (mainWindow.check_optimiseMP4.Checked)
\r
621 optimizeMP4 = " -O ";
\r
624 string queryVideoSettings = videoBitrate + videoFilesize + vidQSetting + twoPassEncoding + vid_frame_rate + turboH264 + ipodAtom + optimizeMP4 + largeFile + denoise;
\r
627 // Audio Settings Tab
\r
628 #region Audio Settings Tab
\r
631 string audioBitrate = "";
\r
632 string audioChannels = "";
\r
633 string SixChannelAudio = "";
\r
634 string subScan = "";
\r
635 string forced = "";
\r
637 string audioSampleRate = "";
\r
638 string audioEncoder = "";
\r
641 string track1 = mainWindow.drp_track1Audio.Text;
\r
642 string vencoder1 = mainWindow.drp_audenc_1.Text;
\r
643 string audioBitrate1 = mainWindow.drp_audbit_1.Text;
\r
644 string audioSampleRate1 = mainWindow.drp_audsr_1.Text;
\r
645 string Mixdown1 = mainWindow.drp_audmix_1.Text;
\r
648 string track2 = mainWindow.drp_track2Audio.Text;
\r
649 string vencoder2 = mainWindow.drp_audenc_2.Text;
\r
650 string audioBitrate2 = mainWindow.drp_audbit_2.Text;
\r
651 string audioSampleRate2 = mainWindow.drp_audsr_2.Text;
\r
652 string Mixdown2 = mainWindow.drp_audmix_2.Text;
\r
654 // Audio Track Selections
\r
655 if (track1 == "Automatic")
\r
656 audioChannels = "";
\r
657 else if (track1 == "")
\r
658 audioChannels = "";
\r
659 else if (track1 == "None")
\r
660 audioChannels = " -a none";
\r
664 tempSub = track1.Split(' ');
\r
665 audioChannels = " -a " + tempSub[0];
\r
668 if (audioChannels != "")
\r
670 if ((track2 != "") && (track2 != "None"))
\r
673 tempSub = track2.Split(' ');
\r
674 audioChannels = audioChannels + "," + tempSub[0];
\r
679 if ((track2 != "") && (track2 != "None"))
\r
682 tempSub = track2.Split(' ');
\r
683 audioChannels = " -a " + tempSub[0];
\r
687 // Audio Mixdown Selections
\r
697 Mixdown1 = "stereo";
\r
699 case "Dolby Surround":
\r
702 case "Dolby Pro Logic II":
\r
705 case "6 Channel Discrete":
\r
713 if (Mixdown1 != "")
\r
714 SixChannelAudio = " -6 " + Mixdown1;
\r
717 if (mainWindow.drp_track2Audio.Text == "None")
\r
718 SixChannelAudio = "";
\r
721 if (mainWindow.drp_audmix_2.Text == "Automatic")
\r
722 SixChannelAudio = "";
\r
724 SixChannelAudio = " -6 dpl2";
\r
737 Mixdown2 = "stereo";
\r
739 case "Dolby Surround":
\r
742 case "Dolby Pro Logic II":
\r
745 case "6 Channel Discrete":
\r
753 if (Mixdown2 != "")
\r
755 if (SixChannelAudio != "")
\r
756 SixChannelAudio = SixChannelAudio + "," + Mixdown2;
\r
758 SixChannelAudio = " -6 " + Mixdown2;
\r
761 // Audio Encoder Selections
\r
762 switch (mainWindow.drp_audenc_1.Text)
\r
765 audioEncoder = " -E faac";
\r
768 audioEncoder = " -E lame";
\r
771 audioEncoder = " -E vorbis";
\r
774 audioEncoder = " -E ac3";
\r
777 audioEncoder = " -E aac+ac3";
\r
783 switch (mainWindow.drp_audenc_2.Text)
\r
786 if (audioEncoder == "")
\r
787 audioEncoder = " -E faac";
\r
789 audioEncoder = audioEncoder + ",faac";
\r
792 if (audioEncoder == "")
\r
793 audioEncoder = " -E lame";
\r
795 audioEncoder = audioEncoder + ",lame";
\r
798 if (audioEncoder == "")
\r
799 audioEncoder = " -E vorbis";
\r
801 audioEncoder = audioEncoder + ",vorbis";
\r
804 if (audioEncoder == "")
\r
805 audioEncoder = " -E ac3";
\r
807 audioEncoder = audioEncoder + ",ac3";
\r
810 if (audioEncoder == "")
\r
811 audioEncoder = " -E aac+ac3";
\r
813 audioEncoder = audioEncoder + ",aac+ac3";
\r
819 // Audio BitRate Selections
\r
820 if (audioBitrate1 != "")
\r
821 audioBitrate = " -B " + audioBitrate1;
\r
823 if (audioBitrate2 != "")
\r
825 if (audioBitrate == "")
\r
826 audioBitrate = " -B " + audioBitrate2;
\r
828 audioBitrate = audioBitrate + "," + audioBitrate2;
\r
831 // Audio SampleRate Selections
\r
832 if (audioSampleRate1 != "")
\r
833 audioSampleRate = " -R " + audioSampleRate1;
\r
835 if (audioSampleRate2 != "")
\r
837 if (audioSampleRate == "")
\r
838 audioSampleRate = " -R " + audioSampleRate2;
\r
840 audioSampleRate = audioSampleRate + "," + audioSampleRate2;
\r
843 //Dynamic Range Compression (expects a float but a double is used for ease)
\r
844 double value = mainWindow.slider_drc.Value / 10.0;
\r
846 drc = " -D " + value;
\r
849 string subtitles = mainWindow.drp_subtitle.Text;
\r
850 if (subtitles == "None")
\r
852 else if (subtitles == "")
\r
854 else if (subtitles == "Autoselect")
\r
862 tempSub = subtitles.Split(' ');
\r
863 subtitles = " -s " + tempSub[0];
\r
866 if (mainWindow.check_forced.Checked)
\r
870 string queryAudioSettings = audioChannels + SixChannelAudio + audioEncoder + audioBitrate + audioSampleRate + drc + subScan + subtitles + forced;
\r
873 // Chapter Markers Tab
\r
874 #region Chapter Markers
\r
876 string ChapterMarkers = "";
\r
878 // Attach Source name and dvd title to the start of the chapters.csv filename.
\r
879 // This is for the queue. It allows different chapter name files for each title.
\r
880 string source_name = mainWindow.text_source.Text;
\r
881 string[] sourceName = source.Split('\\');
\r
882 source_name = sourceName[sourceName.Length - 1].Replace(".iso", "").Replace(".mpg", "").Replace(".ts", "").Replace(".ps", "");
\r
883 source_name = source_name.Replace("\"", "");
\r
885 string source_title = mainWindow.drp_dvdtitle.Text;
\r
886 string[] titlesplit = source_title.Split(' ');
\r
887 source_title = titlesplit[0];
\r
889 if (mainWindow.Check_ChapterMarkers.Checked)
\r
892 if ((source_name.Trim().Replace("-i ", "") != "Click 'Browse' to continue") && (source_name.Trim().Replace("-i ", "") != ""))
\r
894 if (source_title != "Automatic")
\r
896 string filename = source_name + "-" + source_title + "-chapters.csv";
\r
897 string path = Path.Combine(Path.GetTempPath(), filename);
\r
899 Boolean saveCSV = chapterCSVSave(mainWindow, path);
\r
900 if (saveCSV == false)
\r
901 ChapterMarkers = " -m ";
\r
904 ChapterMarkers = " --markers=" + "\"" + path + "\"";
\r
909 string filename = source_name + "-chapters.csv";
\r
910 string path = Path.Combine(Path.GetTempPath(), filename);
\r
912 Boolean saveCSV = chapterCSVSave(mainWindow, path);
\r
913 if (saveCSV == false)
\r
914 ChapterMarkers = " -m ";
\r
917 ChapterMarkers = " --markers=" + "\"" + path + "\"";
\r
923 string path = Path.Combine(Path.GetTempPath(), "chapters.csv");
\r
924 ChapterMarkers = " --markers=" + "\"" + path + "\"";
\r
928 string chapter_markers = ChapterMarkers;
\r
934 string h264Advanced = mainWindow.rtf_x264Query.Text;
\r
936 if ((h264Advanced == ""))
\r
939 h264Advanced = " -x " + h264Advanced;
\r
942 string h264Settings = h264Advanced;
\r
946 #region Processors / Other
\r
948 string processors = Properties.Settings.Default.Processors;
\r
949 // Number of Processors Handler
\r
951 if (processors == "Automatic")
\r
954 processors = " -C " + processors + " ";
\r
957 string queryAdvancedSettings = processors;
\r
959 string verbose = " -v ";
\r
962 return querySource + queryDestination + queryPictureSettings + queryVideoSettings + h264Settings + queryAudioSettings + ChapterMarkers + queryAdvancedSettings + verbose;
\r
966 * Set's up the DataGridView on the Chapters tab (frmMain)
\r
968 public void chapterNaming(frmMain mainWindow)
\r
972 mainWindow.data_chpt.Rows.Clear();
\r
977 if (mainWindow.drop_chapterFinish.Text != "Auto")
\r
978 finish = int.Parse(mainWindow.drop_chapterFinish.Text);
\r
980 if (mainWindow.drop_chapterStart.Text != "Auto")
\r
981 start = int.Parse(mainWindow.drop_chapterStart.Text);
\r
983 rowCount = finish - (start - 1);
\r
985 while (i < rowCount)
\r
987 DataGridViewRow row = new DataGridViewRow();
\r
989 mainWindow.data_chpt.Rows.Insert(i, row);
\r
990 mainWindow.data_chpt.Rows[i].Cells[0].Value = (i + 1);
\r
991 mainWindow.data_chpt.Rows[i].Cells[1].Value = "Chapter " + (i + 1);
\r
995 catch (Exception exc)
\r
997 MessageBox.Show("chapterNaming() Error has occured: \n" + exc.ToString());
\r
1002 * This function saves the data in the chapters tab, dataGridView into a CSV file called chapters.csv in this applications
\r
1003 * running directory.
\r
1005 private Boolean chapterCSVSave(frmMain mainWindow, string file_path_name)
\r
1009 StringBuilder csv = new StringBuilder();
\r
1011 foreach (DataGridViewRow row in mainWindow.data_chpt.Rows)
\r
1013 csv.Append(row.Cells[0].Value.ToString());
\r
1015 csv.Append(row.Cells[1].Value.ToString());
\r
1016 csv.Append(Environment.NewLine);
\r
1018 StreamWriter file = new StreamWriter(file_path_name);
\r
1019 file.Write(csv.ToString());
\r
1025 catch (Exception exc)
\r
1027 MessageBox.Show("Unable to save Chapter Makrers file! \nChapter marker names will NOT be saved in your encode \n\n" + exc.ToString(), "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
1032 // End of Functions
\r