using System; using System.Collections.Generic; using System.Collections.Specialized; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Net; using System.IO; using System.Diagnostics; using System.Threading; using System.Runtime.InteropServices; namespace Handbrake { public partial class frmMain : Form { // -------------------------------------------------------------- // Applicaiton Startup Stuff // -------------------------------------------------------------- #region Application Startup private Process hbProc; private Parsing.DVD thisDVD; private frmQueue queueWindow = new frmQueue(); //private frmDvdInfo dvdInfoWindow = new frmDvdInfo(); public frmMain() { ThreadPool.QueueUserWorkItem(showSplash); Thread.Sleep(1000); InitializeComponent(); // This is a quick Hack fix for the cross-thread problem with frmDvdIndo ************************ //dvdInfoWindow.Show(); //dvdInfoWindow.Hide(); // ********************************************************************************************** // System Requirements Check systemCheck(); // Set the Version number lable to the corect version. Version.Text = "Version " + Properties.Settings.Default.GuiVersion; // Run the update checker. updateCheck(); // Now load the users default if required. (Will overide the above setting) loadUserDefaults(); // Display the quick start window if required. quickStart(); // Enable or disable tooltips tooltip(); // Hide the presets part of the window this.Width = 590; // Create and initializes a new StringCollection. StringCollection myCol = new StringCollection(); // Add a range of elements from an array to the end of the StringCollection. String[] myArr = new String[] { "RED", "orange", "yellow", "RED", "green", "blue", "RED", "indigo", "violet", "RED" }; myCol.AddRange(myArr); Properties.Settings.Default.BuiltInPresets = myCol; } // Functions to preform tasks required on startup. #region Initializeation Functions private void showSplash(object sender) { Form splash = new frmSplashScreen(); splash.Show(); Thread.Sleep(1500); // Display splash screen for 1.5 Seconds splash.Close(); // Then close. } private void loadUserDefaults() { try { if (Properties.Settings.Default.defaultSettings == "Checked") { // Source text_source.Text = Properties.Settings.Default.DVDSource; drp_dvdtitle.Text = Properties.Settings.Default.DVDTitle; drop_chapterStart.Text = Properties.Settings.Default.ChapterStart; drop_chapterFinish.Text = Properties.Settings.Default.ChapterFinish; // Destination text_destination.Text = Properties.Settings.Default.VideoDest; drp_videoEncoder.Text = Properties.Settings.Default.VideoEncoder; drp_audioCodec.Text = Properties.Settings.Default.AudioEncoder; text_width.Text = Properties.Settings.Default.Width; text_height.Text = Properties.Settings.Default.Height; // Picture Settings Tab drp_crop.Text = Properties.Settings.Default.CroppingOption; text_top.Text = Properties.Settings.Default.CropTop; text_bottom.Text = Properties.Settings.Default.CropBottom; text_left.Text = Properties.Settings.Default.CropLeft; text_right.Text = Properties.Settings.Default.CropRight; drp_subtitle.Text = Properties.Settings.Default.Subtitles; // Video Settings Tab text_bitrate.Text = Properties.Settings.Default.VideoBitrate; text_filesize.Text = Properties.Settings.Default.VideoFilesize; slider_videoQuality.Value = Properties.Settings.Default.VideoQuality; if (Properties.Settings.Default.TwoPass == "Checked") { check_2PassEncode.CheckState = CheckState.Checked; } drp_deInterlace_option.Text = Properties.Settings.Default.DeInterlace; drp_deNoise.Text = Properties.Settings.Default.denoise; if (Properties.Settings.Default.detelecine == "Checked") { check_detelecine.CheckState = CheckState.Checked; } if (Properties.Settings.Default.detelecine == "Checked") { check_deblock.CheckState = CheckState.Checked; } if (Properties.Settings.Default.Grayscale == "Checked") { check_grayscale.CheckState = CheckState.Checked; } drp_videoFramerate.Text = Properties.Settings.Default.Framerate; if (Properties.Settings.Default.PixelRatio == "Checked") { CheckPixelRatio.CheckState = CheckState.Checked; } if (Properties.Settings.Default.turboFirstPass == "Checked") { check_turbo.CheckState = CheckState.Checked; } if (Properties.Settings.Default.largeFile == "Checked") { check_largeFile.CheckState = CheckState.Checked; } // Audio Settings Tab drp_audioBitrate.Text = Properties.Settings.Default.AudioBitrate; drp_audioSampleRate.Text = Properties.Settings.Default.AudioSampleRate; drp_audioChannels.Text = Properties.Settings.Default.AudioChannels; // H264 Tab if (Properties.Settings.Default.CRF == "Checked") { CheckCRF.CheckState = CheckState.Checked; } rtf_h264advanced.Text = Properties.Settings.Default.H264; groupBox_output.Text = "Output Settings (Preset: " + Properties.Settings.Default.SelectedPreset + ")"; } else { // Load the default preset on lauch ListBox_Presets.SelectedItem = "Normal"; } } catch (Exception) { // No real need to alert the user. Try/Catch only in just incase there is a problem reading the settings xml file. } } private int updateCheck() { try { if (Properties.Settings.Default.updateStatus == "Checked") { String updateFile = Properties.Settings.Default.updateFile; WebClient client = new WebClient(); String data = client.DownloadString(updateFile); String[] versionData = data.Split('\n'); if ((versionData[0] != Properties.Settings.Default.GuiVersion) || (versionData[1] != Properties.Settings.Default.CliVersion)) { lbl_update.Visible = true; return 1; } else { return 0; } } else { return 0; } } catch (Exception) { // Silently ignore the error return 0; } } private void quickStart() { if ((Properties.Settings.Default.QuickStartWindow == "Checked") || (Properties.Settings.Default.QuickStartWindow == "")) { frmQuickStart quickstart = new frmQuickStart(); quickstart.ShowDialog(); } } private void tooltip() { if (Properties.Settings.Default.tooltipEnable == "Checked") { ToolTip.Active = true; } } #region Memory Check public struct MEMORYSTATUS { public UInt32 dwLength; public UInt32 dwMemoryLoad; public UInt32 dwTotalPhys; // Used public UInt32 dwAvailPhys; public UInt32 dwTotalPageFile; public UInt32 dwAvailPageFile; public UInt32 dwTotalVirtual; public UInt32 dwAvailVirtual; // Aditional Varibles left in for future usage (JIC) } [DllImport("kernel32.dll")] public static extern void GlobalMemoryStatus ( ref MEMORYSTATUS lpBuffer ); public uint CheckMemeory() { // Call the native GlobalMemoryStatus method // with the defined structure. MEMORYSTATUS memStatus = new MEMORYSTATUS(); GlobalMemoryStatus(ref memStatus); // Use a StringBuilder for the message box string. uint MemoryInfo = memStatus.dwTotalPhys; // Return the Ram Information return MemoryInfo; } #endregion Boolean preventLaunch = false; private void systemCheck() { try { // Make sure the screen resolution is not below 1024x768 System.Windows.Forms.Screen scr = System.Windows.Forms.Screen.PrimaryScreen; if ((scr.Bounds.Width < 1024) || (scr.Bounds.Height < 768)) { MessageBox.Show("Your system does not meet the minimum requirements for HandBrake. \n Screen resolution is too Low. Must be 1024x768 or greater", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); preventLaunch = true; } // Make sure the system has enough RAM. 384MB or greater uint memory = CheckMemeory(); if (memory < 319) // Set to 319 to allow for 64MB dedicated to video Memory and Windows returnig the memory figure slightly out. { MessageBox.Show("Your system does not meet the minimum requirements for HandBrake. \n Insufficient Memory. 384MB or greater required.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); preventLaunch = true; } } catch (Exception exc) { if (Properties.Settings.Default.GuiDebug == "Checked") { MessageBox.Show("frmMain.cs - systemCheck() " + exc.ToString()); } } } #endregion // Close the Application on main window load if required by the system Check #region Form Load private void frmMain_Load(object sender, EventArgs e) { if (preventLaunch == true) { Application.Exit(); } } #endregion #endregion // -------------------------------------------------------------- // The main Menu bar. // -------------------------------------------------------------- #region File Menu private void mnu_open_Click(object sender, EventArgs e) { string filename; File_Open.ShowDialog(); filename = File_Open.FileName; if (filename != "") { try { // Create StreamReader & open file StreamReader line = new StreamReader(filename); string temporyLine; // Used for reading the line into a varible before processing on the checkState items below. // Read in the data and set the correct GUI component with the setting. text_source.Text = line.ReadLine(); drp_dvdtitle.Text = line.ReadLine(); drop_chapterStart.Text = line.ReadLine(); drop_chapterFinish.Text = line.ReadLine(); text_destination.Text = line.ReadLine(); drp_videoEncoder.Text = line.ReadLine(); drp_audioCodec.Text = line.ReadLine(); text_width.Text = line.ReadLine(); text_height.Text = line.ReadLine(); text_top.Text = line.ReadLine(); text_bottom.Text = line.ReadLine(); text_left.Text = line.ReadLine(); text_right.Text = line.ReadLine(); drp_subtitle.Text = line.ReadLine(); text_bitrate.Text = line.ReadLine(); text_filesize.Text = line.ReadLine(); slider_videoQuality.Value = int.Parse(line.ReadLine()); temporyLine = line.ReadLine(); if (temporyLine == "Checked") { check_2PassEncode.CheckState = CheckState.Checked; } drp_deInterlace_option.Text = line.ReadLine(); temporyLine = line.ReadLine(); if (temporyLine == "Checked") { check_grayscale.CheckState = CheckState.Checked; } drp_videoFramerate.Text = line.ReadLine(); temporyLine = line.ReadLine(); if (temporyLine == "Checked") { Check_ChapterMarkers.CheckState = CheckState.Checked; } temporyLine = line.ReadLine(); if (temporyLine == "Checked") { CheckPixelRatio.CheckState = CheckState.Checked; } temporyLine = line.ReadLine(); if (temporyLine == "Checked") { check_turbo.CheckState = CheckState.Checked; } temporyLine = line.ReadLine(); if (temporyLine == "Checked") { check_largeFile.CheckState = CheckState.Checked; } drp_audioBitrate.Text = line.ReadLine(); drp_audioSampleRate.Text = line.ReadLine(); drp_audioChannels.Text = line.ReadLine(); drp_audioMixDown.Text = line.ReadLine(); // Advanced H264 Options temporyLine = line.ReadLine(); if (temporyLine == "Checked") { CheckCRF.CheckState = CheckState.Checked; } rtf_h264advanced.Text = line.ReadLine(); // Close the stream line.Close(); // Fix for SliderValue not appearing when Opening saved file SliderValue.Text = slider_videoQuality.Value + "%"; } catch (Exception){ MessageBox.Show("Unable to load profile.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand); } } } private void mnu_save_Click(object sender, EventArgs e) { string filename; File_Save.ShowDialog(); filename = File_Save.FileName; if (filename != "") { try { // Create a StreamWriter and open the file StreamWriter line = new StreamWriter(filename); //Source line.WriteLine(text_source.Text); line.WriteLine(drp_dvdtitle.Text); line.WriteLine(drop_chapterStart.Text); line.WriteLine(drop_chapterFinish.Text); //Destination line.WriteLine(text_destination.Text); line.WriteLine(drp_videoEncoder.Text); line.WriteLine(drp_audioCodec.Text); line.WriteLine(text_width.Text); line.WriteLine(text_height.Text); //Picture Settings Tab line.WriteLine(text_top.Text); line.WriteLine(text_bottom.Text); line.WriteLine(text_left.Text); line.WriteLine(text_right.Text); line.WriteLine(drp_subtitle.Text); //Video Settings Tab line.WriteLine(text_bitrate.Text); line.WriteLine(text_filesize.Text); line.WriteLine(slider_videoQuality.Value.ToString()); line.WriteLine(check_2PassEncode.CheckState.ToString()); line.WriteLine(drp_deInterlace_option.Text); line.WriteLine(check_grayscale.CheckState.ToString()); line.WriteLine(drp_videoFramerate.Text); line.WriteLine(Check_ChapterMarkers.CheckState.ToString()); line.WriteLine(CheckPixelRatio.CheckState.ToString()); line.WriteLine(check_turbo.CheckState.ToString()); line.WriteLine(check_largeFile.CheckState.ToString()); //Audio Settings Tab line.WriteLine(drp_audioBitrate.Text); line.WriteLine(drp_audioSampleRate.Text); line.WriteLine(drp_audioChannels.Text); line.WriteLine(drp_audioMixDown.Text); //H264 Tab line.WriteLine(CheckCRF.CheckState.ToString()); line.WriteLine(rtf_h264advanced.Text); // close the stream line.Close(); MessageBox.Show("Your profile has been sucessfully saved.", "Status", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } catch(Exception) { MessageBox.Show("Unable to write to the file. Please make sure the location has the correct permissions for file writing.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand); } } } private void mnu_update_Click(object sender, EventArgs e) { int update = updateCheck(); if (update == 1) { MessageBox.Show("There is a new update available. Please visit http://handbrake.m0k.org for details!", "Update Check", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MessageBox.Show("There are no new updates at this time.", "Update Check", MessageBoxButtons.OK, MessageBoxIcon.Information); } } private void mnu_exit_Click(object sender, EventArgs e) { Application.Exit(); } #endregion #region Tools Menu private void mnu_encode_Click(object sender, EventArgs e) { showQueue(); } private void mnu_viewDVDdata_Click(object sender, EventArgs e) { frmDvdInfo dvdInfoWindow = new frmDvdInfo(); dvdInfoWindow.Show(); } private void mnu_options_Click(object sender, EventArgs e) { Form Options = new frmOptions(); Options.ShowDialog(); } #endregion #region Presets Menu private void mnu_presetReset_Click(object sender, EventArgs e) { ListBox_Presets.Items.Clear(); ListBox_Presets.Items.Add("Animation"); ListBox_Presets.Items.Add("AppleTV"); ListBox_Presets.Items.Add("Bedlam"); ListBox_Presets.Items.Add("Blind"); ListBox_Presets.Items.Add("Broke"); ListBox_Presets.Items.Add("Classic"); ListBox_Presets.Items.Add("Constant Quality Rate"); ListBox_Presets.Items.Add("Deux Six Quatre"); ListBox_Presets.Items.Add("Film"); ListBox_Presets.Items.Add("iPhone"); ListBox_Presets.Items.Add("iPod High-Rez"); ListBox_Presets.Items.Add("iPod Low-Rez"); ListBox_Presets.Items.Add("Normal"); ListBox_Presets.Items.Add("PS3"); ListBox_Presets.Items.Add("PSP"); ListBox_Presets.Items.Add("QuickTime"); ListBox_Presets.Items.Add("Television"); if (presetStatus == false) { this.Width = 881; presetStatus = true; btn_presets.Text = "Hide Presets"; } } private void mnu_SelectDefault_Click(object sender, EventArgs e) { ListBox_Presets.SelectedItem = "Normal"; if (presetStatus == false) { this.Width = 881; presetStatus = true; btn_presets.Text = "Hide Presets"; } } #endregion #region Help Menu private void mnu_wiki_Click(object sender, EventArgs e) { Process.Start("http://handbrake.m0k.org/trac"); } private void mnu_faq_Click(object sender, EventArgs e) { Process.Start("http://handbrake.m0k.org/trac/wiki/WindowsGuiFaq"); } private void mnu_onlineDocs_Click(object sender, EventArgs e) { Process.Start("http://handbrake.m0k.org/?page_id=11"); } private void mnu_homepage_Click(object sender, EventArgs e) { Process.Start("http://handbrake.m0k.org"); } private void mnu_forum_Click(object sender, EventArgs e) { Process.Start("http://handbrake.m0k.org/forum"); } private void mnu_about_Click(object sender, EventArgs e) { Form About = new frmAbout(); About.ShowDialog(); } #endregion // -------------------------------------------------------------- // Buttons on the main Window // -------------------------------------------------------------- #region Buttons private void btn_Browse_Click(object sender, EventArgs e) { String filename =""; text_source.Text = ""; frmDvdInfo dvdInfoWindow = new frmDvdInfo(); if (RadioDVD.Checked) { DVD_Open.ShowDialog(); filename = DVD_Open.SelectedPath; if (filename != "") { Form frmRD = new frmReadDVD(filename, this, dvdInfoWindow); text_source.Text = filename; frmRD.ShowDialog(); } } else { ISO_Open.ShowDialog(); filename = ISO_Open.FileName; if (filename != "") { Form frmRD = new frmReadDVD(filename, this, dvdInfoWindow); text_source.Text = filename; frmRD.ShowDialog(); } } // Check if there was titles in the dvd title dropdown if (filename == "") { text_source.Text = "Click 'Browse' to continue"; } if (drp_dvdtitle.Items.Count == 0) { MessageBox.Show("No Title(s) found. Please make sure you have selected a valid, non-copy protected source. Please refer to the FAQ (see Help Menu).", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand); } } private void btn_destBrowse_Click(object sender, EventArgs e) { // TODO: Need to write some code to check if there is a reasonable amount of disk space left. DVD_Save.ShowDialog(); text_destination.Text = DVD_Save.FileName; if (Check_ChapterMarkers.Checked) { string destination = text_destination.Text; destination = destination.Replace(".mp4", ".m4v"); text_destination.Text = destination; } } private void btn_h264Clear_Click(object sender, EventArgs e) { rtf_h264advanced.Text = ""; } private void GenerateQuery_Click(object sender, EventArgs e) { String query = GenerateTheQuery(); QueryEditorText.Text = query; } private void btn_ClearQuery_Click(object sender, EventArgs e) { QueryEditorText.Text = ""; } private void btn_queue_Click(object sender, EventArgs e) { if (text_destination.Text != "" && text_source.Text != "") { string query; if (QueryEditorText.Text == "") { query = GenerateTheQuery(); } else { query = QueryEditorText.Text; } queueWindow.list_queue.Items.Add(query); queueWindow.Show(); } else { MessageBox.Show("No Source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } private void showQueue() { queueWindow.Show(); } #endregion // -------------------------------------------------------------- // Main Window Preset System // -------------------------------------------------------------- #region Preset System // Varibles private Boolean presetStatus = false; // Buttons private void btn_presets_Click(object sender, EventArgs e) { if (presetStatus == false) { this.Width = 881; presetStatus = true; btn_presets.Text = "Hide Presets"; } else { this.Width = 590; presetStatus = false; btn_presets.Text = "Show Presets"; } } private void btn_addPreset_Click(object sender, EventArgs e) { } private void btn_removePreset_Click(object sender, EventArgs e) { ListBox_Presets.Items.Remove(ListBox_Presets.SelectedItem); } private void btn_setDefault_Click(object sender, EventArgs e) { //Source Properties.Settings.Default.DVDSource = text_source.Text; Properties.Settings.Default.DVDTitle = drp_dvdtitle.Text; Properties.Settings.Default.ChapterStart = drop_chapterStart.Text; Properties.Settings.Default.ChapterFinish = drop_chapterFinish.Text; //Destination Properties.Settings.Default.VideoDest = text_destination.Text; Properties.Settings.Default.VideoEncoder = drp_videoEncoder.Text; Properties.Settings.Default.AudioEncoder = drp_audioCodec.Text; Properties.Settings.Default.Width = text_width.Text; Properties.Settings.Default.Height = text_height.Text; //Picture Settings Tab Properties.Settings.Default.CroppingOption = drp_crop.Text; Properties.Settings.Default.CropTop = text_top.Text; Properties.Settings.Default.CropBottom = text_bottom.Text; Properties.Settings.Default.CropLeft = text_left.Text; Properties.Settings.Default.CropRight = text_right.Text; Properties.Settings.Default.Subtitles = drp_subtitle.Text; //Video Settings Tab Properties.Settings.Default.VideoBitrate = text_bitrate.Text; Properties.Settings.Default.VideoFilesize = text_filesize.Text; Properties.Settings.Default.VideoQuality = slider_videoQuality.Value; Properties.Settings.Default.TwoPass = check_2PassEncode.CheckState.ToString(); Properties.Settings.Default.DeInterlace = drp_deInterlace_option.Text; Properties.Settings.Default.Grayscale = check_grayscale.CheckState.ToString(); Properties.Settings.Default.Framerate = drp_videoFramerate.Text; Properties.Settings.Default.PixelRatio = CheckPixelRatio.CheckState.ToString(); Properties.Settings.Default.turboFirstPass = check_turbo.CheckState.ToString(); Properties.Settings.Default.largeFile = check_largeFile.CheckState.ToString(); Properties.Settings.Default.detelecine = check_detelecine.CheckState.ToString(); Properties.Settings.Default.denoise = drp_deNoise.Text; Properties.Settings.Default.deblock = check_deblock.CheckState.ToString(); //Audio Settings Tab Properties.Settings.Default.AudioBitrate = drp_audioBitrate.Text; Properties.Settings.Default.AudioSampleRate = drp_audioSampleRate.Text; Properties.Settings.Default.AudioChannels = drp_audioChannels.Text; //H264 Tab Properties.Settings.Default.CRF = CheckCRF.CheckState.ToString(); Properties.Settings.Default.H264 = rtf_h264advanced.Text; Properties.Settings.Default.SelectedPreset = ListBox_Presets.SelectedItem.ToString(); Properties.Settings.Default.Save(); } // Preset Seleciton private void ListBox_Presets_SelectedIndexChanged(object sender, EventArgs e) { string selectedPreset = null; if (ListBox_Presets.SelectedItem != null) { selectedPreset = ListBox_Presets.SelectedItem.ToString(); } else { selectedPreset = ""; } switch (selectedPreset) { case "Animation": setGuiSetttings(CheckState.Checked, "", "", "H.264", "1000", "", 0, "0%", "160", CheckState.Checked, "48", "ref=5:mixed-refs:bframes=6:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=5:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip:filter=2,2", "Origional (Fast)", CheckState.Checked, "No Crop", CheckState.Checked, "AAC", "Output Settings (Preset: Apple Animation)"); setMkv(); break; case "AppleTV": setGuiSetttings(CheckState.Checked, "", "", "H.264", "2500", "", 0, "0%", "160", CheckState.Checked, "48", "bframes=3:ref=1:subme=5:me=umh:no-fast-pskip=1:trellis=2", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: Apple TV)"); break; case "Bedlam": setGuiSetttings(CheckState.Checked, "", "", "H.264", "1800", "", 0, "0%", "160", CheckState.Checked, "48", "ref=16:mixed-refs:bframes=6:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=7:me-range=64:analyse=all:8x8dct:trellis=2:no-fast-pskip:no-dct-decimate:filter=-2,-1", "None", CheckState.Checked, "No Crop", CheckState.Checked, "AAC", "Output Settings (Preset: Bedlam)"); setMkv(); break; case "Blind": setGuiSetttings(CheckState.Unchecked, "512", "", "H.264", "512", "", 0, "0%", "128", CheckState.Checked, "48", "", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: Blind)"); break; case "Broke": setGuiSetttings(CheckState.Unchecked, "640", "", "H.264", "", "695", 0, "0%", "128", CheckState.Checked, "48", "ref=3:mixed-refs:bframes=6:bime:weightb:b-rdo:b-pyramid::direct=auto:me=umh:subme=6:trellis=1:analyse=all:8x8dct:no-fast-pskip", "None", CheckState.Checked, "No Crop", CheckState.Checked, "AAC", "Output Settings (Preset: Broke)"); break; case "Classic": setGuiSetttings(CheckState.Unchecked, "", "", "H.264", "1000", "", 0, "0%", "160", CheckState.Unchecked, "48", "", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: Classic)"); break; case "Constant Quality Rate": setGuiSetttings(CheckState.Checked, "", "", "H.264", "", "", 64, "64%", "160", CheckState.Checked, "48", "ref=3:mixed-refs:bframes=3:b-pyramid:b-rdo:bime:weightb:filter=-2,-1:subme=6:trellis=1:analyse=all:8x8dct:me=umh", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AC3", "Output Settings (Preset: CQR)"); setMkv(); break; case "Deux Six Quatre": setGuiSetttings(CheckState.Checked, "", "", "H.264", "1600", "", 0, "0%", "160", CheckState.Checked, "48", "ref=5:mixed-refs:bframes=3:bime:weightb:b-rdo:b-pyramid:me=umh:subme=7:trellis=1:analyse=all:8x8dct:no-fast-pskip", "None", CheckState.Checked, "No Crop", CheckState.Checked, "AC3", "Output Settings (Preset: DSQ)"); setMkv(); break; case "Film": setGuiSetttings(CheckState.Checked, "", "", "H.264", "2000", "", 0, "0%", "160", CheckState.Checked, "48", "ref=3:mixed-refs:bframes=3:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=6:analyse=all:8x8dct:trellis=1:no-fast-pskip", "None", CheckState.Checked, "No Crop", CheckState.Checked, "AC3", "Output Settings (Preset: Film)"); setMkv(); break; case "iPhone": setGuiSetttings(CheckState.Unchecked, "480", "", "H.264", "960", "", 0, "0%", "128", CheckState.Checked, "48", "cabac=0:ref=1:analyse=all:me=umh:subme=6:no-fast-pskip=1:trellis=1", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: iPhone)"); break; case "iPod High-Rez": setGuiSetttings(CheckState.Unchecked, "640", "", "H.264", "1500", "", 0, "0%", "160", CheckState.Checked, "48", "keyint=300:keyint-min=30:bframes=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsize=2000:analyse=all:me=umh:subme=6:no-fast-pskip=1", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: iPod High Rez)"); break; case "iPod Low-Rez": setGuiSetttings(CheckState.Unchecked, "320", "", "H.264", "700", "", 0, "0%", "160", CheckState.Checked, "48", "keyint=300:keyint-min=30:bframes=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:subme=6:no-fast-pskip=1", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: iPod Low Rez)"); break; case "Normal": setGuiSetttings(CheckState.Checked, "", "", "H.264", "1500", "", 0, "0%", "160", CheckState.Checked, "48", "ref=2:bframes=2:subme=5:me=umh", "None", CheckState.Checked, "No Crop", CheckState.Checked, "AAC", "Output Settings (Preset: Normal)"); break; case "PS3": setGuiSetttings(CheckState.Checked, "", "", "H.264", "2500", "", 0, "0%", "160", CheckState.Checked, "48", "level=41:subme=5:me=umh", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: PS3)"); break; case "PSP": setGuiSetttings(CheckState.Unchecked, "368", "208", "Mpeg 4", "1024", "", 0, "0%", "160", CheckState.Unchecked, "48", "", "None", CheckState.Unchecked, "No Crop", CheckState.Unchecked, "AAC", "Output Settings (Preset: PSP)"); break; case "QuickTime": setGuiSetttings(CheckState.Checked, "", "", "H.264", "2000", "", 0, "0%", "160", CheckState.Checked, "48", "ref=3:mixed-refs:bframes=3:bime:weightb:b-rdo:direct-auto:me=umh:subme=5:analyse=all:8x8dct:trellis=1:no-fast-pskip", "None", CheckState.Checked, "No Crop", CheckState.Checked, "AAC", "Output Settings (Preset: Quicktime)"); break; case "Television": setGuiSetttings(CheckState.Unchecked, "", "", "H.264", "1300", "", 0, "0%", "160", CheckState.Checked, "48", "ref=3:mixed-refs:bframes=6:bime:weightb:direct=auto:b-pyramid:me=umh:subme=6:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip", "Origional (Fast)", CheckState.Checked, "No Crop", CheckState.Checked, "AAC", "Output Settings (Preset: Television)"); setMkv(); break; default: break; } } // Functions - It's a bit dirty but i'll sort this out later. Simply done to reduce the amount of code above. private void setGuiSetttings(CheckState anamorphic, string width, string height, string vencoder, string bitrate, string filesize, int quality, string qpercent, string audioBit, CheckState chpt, string audioSample, string h264, string deinterlace, CheckState twopass, string crop, CheckState turbo, string audioCodec, string preset) { CheckPixelRatio.CheckState = anamorphic; text_width.Text = width; text_height.Text = height; drp_videoEncoder.Text = vencoder; text_bitrate.Text = bitrate; text_filesize.Text = filesize; slider_videoQuality.Value = quality; SliderValue.Text = qpercent; drp_audioBitrate.Text = audioBit; Check_ChapterMarkers.CheckState = chpt; drp_audioSampleRate.Text = audioSample; rtf_h264advanced.Text = h264; drp_deInterlace_option.Text = deinterlace; check_2PassEncode.CheckState = twopass; drp_crop.Text = crop; check_turbo.CheckState = turbo; drp_audioCodec.Text = audioCodec; groupBox_output.Text = preset; } private void setMkv() { // Set file extension to MKV string destination = text_destination.Text; destination = destination.Replace(".mp4", ".mkv"); destination = destination.Replace(".avi", ".mkv"); destination = destination.Replace(".m4v", ".mkv"); destination = destination.Replace(".ogm", ".mkv"); text_destination.Text = destination; } #endregion //--------------------------------------------------- // Encode / Cancel Buttons // Encode Progress Text Handler //--------------------------------------------------- #region Encode/CLI Functions.CLI process = new Functions.CLI(); private void btn_encode_Click(object sender, EventArgs e) { //btn_eCancel.Enabled = true; String query = ""; if (QueryEditorText.Text == "") { query = GenerateTheQuery(); } else { query = QueryEditorText.Text; } ThreadPool.QueueUserWorkItem(procMonitor, query); lbl_encode.Visible = true; lbl_encode.Text = "Encoding in Progress"; } private void btn_eCancel_Click(object sender, EventArgs e) { process.killCLI(); process.setNull(); lbl_encode.Text = "Encoding Canceled"; } [DllImport("user32.dll")] public static extern void LockWorkStation(); [DllImport("user32.dll")] public static extern int ExitWindowsEx(int uFlags, int dwReason); private void procMonitor(object state) { // Make sure we are not already encoding and if we are then display an error. if (hbProc != null) { MessageBox.Show("Handbrake is already encoding a video!", "Status", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else { hbProc = process.runCli(this, (string)state, false, false, false, false); hbProc.WaitForExit(); try { //***************************************************************************************** // BUG! // When the below code is used and standard error is set to true, hbcli is outputing a // video stream which has mild corruption issues every few seconds. // Maybe an issue with the Parser cauing the CLI to hickup/pause? //***************************************************************************************** /*Parsing.Parser encode = new Parsing.Parser(hbProc.StandardError.BaseStream); encode.OnEncodeProgress += encode_OnEncodeProgress; while (!encode.EndOfStream) { encode.ReadLine(); } hbProc.WaitForExit(); process.closeCLI(); */ } catch (Exception) { // Do nothing } setEncodeLabel(); hbProc = null; // Do something whent he encode ends. switch (Properties.Settings.Default.CompletionOption) { case "Shutdown": System.Diagnostics.Process.Start("Shutdown", "-s -t 60"); break; case "Log Off": ExitWindowsEx(0, 0); break; case "Suspend": Application.SetSuspendState(PowerState.Suspend, true, true); break; case "Hibernate": Application.SetSuspendState(PowerState.Hibernate, true, true); break; case "Lock System": LockWorkStation(); break; case "Quit HandBrake": Application.Exit(); break; default: break; } } } private delegate void UpdateUIHandler(); private void setEncodeLabel() { if (this.InvokeRequired) { this.BeginInvoke(new UpdateUIHandler(setEncodeLabel)); return; } lbl_encode.Text = "Encoding Finished"; } /*private void encode_OnEncodeProgress(object Sender, int CurrentTask, int TaskCount, float PercentComplete, float CurrentFps, float AverageFps, TimeSpan TimeRemaining) { if (this.InvokeRequired) { this.BeginInvoke(new Parsing.EncodeProgressEventHandler(encode_OnEncodeProgress), new object[] { Sender, CurrentTask, TaskCount, PercentComplete, CurrentFps, AverageFps, TimeRemaining }); return; } lbl_encode.Text = string.Format("Encode Progress: {0}%, FPS: {1}, Avg FPS: {2}, Time Remaining: {3} ", PercentComplete, CurrentFps, AverageFps, TimeRemaining); }*/ #endregion //--------------------------------------------------- // Items that require actions on frmMain //--------------------------------------------------- #region frmMain Actions private void drop_chapterStart_SelectedIndexChanged(object sender, EventArgs e) { drop_chapterStart.BackColor = Color.White; QueryEditorText.Text = ""; if ((drop_chapterFinish.Text != "Auto") && (drop_chapterStart.Text != "Auto")) { try { int chapterFinish = int.Parse(drop_chapterFinish.Text); int chapterStart = int.Parse(drop_chapterStart.Text); if (chapterFinish < chapterStart) { drop_chapterStart.BackColor = Color.LightCoral; } } catch (Exception) { drop_chapterStart.BackColor = Color.LightCoral; } } } private void drop_chapterFinish_SelectedIndexChanged(object sender, EventArgs e) { drop_chapterFinish.BackColor = Color.White; QueryEditorText.Text = ""; if ((drop_chapterFinish.Text != "Auto") && (drop_chapterStart.Text != "Auto")) { try { int chapterFinish = int.Parse(drop_chapterFinish.Text); int chapterStart = int.Parse(drop_chapterStart.Text); if (chapterFinish < chapterStart) { drop_chapterFinish.BackColor = Color.LightCoral; } } catch (Exception) { drop_chapterFinish.BackColor = Color.LightCoral; } } } private void text_bitrate_TextChanged(object sender, EventArgs e) { text_filesize.Text = ""; slider_videoQuality.Value = 0; SliderValue.Text = "0%"; CheckCRF.CheckState = CheckState.Unchecked; CheckCRF.Enabled = false; } private void text_filesize_TextChanged(object sender, EventArgs e) { text_bitrate.Text = ""; slider_videoQuality.Value = 0; SliderValue.Text = "0%"; CheckCRF.CheckState = CheckState.Unchecked; CheckCRF.Enabled = false; } private void slider_videoQuality_Scroll(object sender, EventArgs e) { SliderValue.Text = slider_videoQuality.Value.ToString() + "%"; text_bitrate.Text = ""; text_filesize.Text = ""; CheckCRF.Enabled = true; } private void label_h264_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { Process.Start("http://handbrake.m0k.org/trac/wiki/x264Options"); } private void text_width_TextChanged(object sender, EventArgs e) { try { if (CheckPixelRatio.Checked) { text_width.Text = ""; text_width.BackColor = Color.White; } else { if ((int.Parse(text_width.Text) % 16) != 0) { text_width.BackColor = Color.LightCoral; } else { text_width.BackColor = Color.LightGreen; } } if (lbl_Aspect.Text != "Select a Title") { double height = int.Parse(text_width.Text) / double.Parse(lbl_Aspect.Text); double mod16 = height % 16; height = height - mod16; if (text_width.Text == "") { text_height.Text = ""; text_width.BackColor = Color.White; } else { text_height.Text = height.ToString(); } } } catch (Exception) { // No need to throw an error here. // Note on non english systems, this will throw an error because of double.Parse(lbl_Aspect.Text); not working. } } private void text_height_TextChanged(object sender, EventArgs e) { try { if (text_height.Text != "Auto") { if (CheckPixelRatio.Checked) { text_height.Text = ""; text_width.BackColor = Color.White; } else { if ((int.Parse(text_height.Text) % 16) != 0) { text_height.BackColor = Color.LightCoral; } else { text_height.BackColor = Color.LightGreen; } } } } catch(Exception){ // No need to alert the user. } } private void drp_crop_SelectedIndexChanged(object sender, EventArgs e) { if ((string)drp_crop.SelectedItem == "Manual") { text_left.Enabled = true; text_right.Enabled = true; text_top.Enabled = true; text_bottom.Enabled = true; } if ((string)drp_crop.SelectedItem == "Auto Crop") { text_left.Enabled = false; text_right.Enabled = false; text_top.Enabled = false; text_bottom.Enabled = false; text_left.Text = ""; text_right.Text = ""; text_top.Text = ""; text_bottom.Text = ""; if (lbl_RecomendedCrop.Text != "Select a Title") { string[] temp = new string[4]; temp = lbl_RecomendedCrop.Text.Split('/'); text_left.Text = temp[2]; text_right.Text = temp[3]; text_top.Text = temp[0]; text_bottom.Text = temp[1]; } } if ((string)drp_crop.SelectedItem == "No Crop") { text_left.Enabled = false; text_right.Enabled = false; text_top.Enabled = false; text_bottom.Enabled = false; text_left.Text = "0"; text_right.Text = "0"; text_top.Text = "0"; text_bottom.Text = "0"; } } private void CheckPixelRatio_CheckedChanged(object sender, EventArgs e) { text_width.Text = ""; text_height.Text = ""; text_width.BackColor = Color.White; text_height.BackColor = Color.White; } private void drp_dvdtitle_Click(object sender, EventArgs e) { if (drp_dvdtitle.Items.Count == 0) { MessageBox.Show("There are no titles to select. Please scan the DVD by clicking the 'browse' button above before trying to select a title.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } } private void drp_audioCodec_SelectedIndexChanged(object sender, EventArgs e) { //CLI Audio mixdown Names: mono stereo dpl1 dpl2 6ch drp_audioMixDown.Items.Clear(); if (drp_audioCodec.Text == "AAC") { drp_audioMixDown.Items.Clear(); drp_audioMixDown.Items.Add("Mono"); drp_audioMixDown.Items.Add("Stereo"); drp_audioMixDown.Items.Add("Dolby Surround"); drp_audioMixDown.Items.Add("Dolby Pro Logic II"); drp_audioMixDown.Items.Add("6 Channel Discrete"); drp_audioBitrate.Items.Clear(); drp_audioBitrate.Items.Add("32"); drp_audioBitrate.Items.Add("40"); drp_audioBitrate.Items.Add("48"); drp_audioBitrate.Items.Add("56"); drp_audioBitrate.Items.Add("64"); drp_audioBitrate.Items.Add("80"); drp_audioBitrate.Items.Add("86"); drp_audioBitrate.Items.Add("112"); drp_audioBitrate.Items.Add("128"); drp_audioBitrate.Items.Add("160"); } else { drp_audioMixDown.Items.Clear(); drp_audioMixDown.Items.Add("Stereo"); drp_audioMixDown.Items.Add("Dolby Surround"); drp_audioMixDown.Items.Add("Dolby Pro Logic II"); drp_audioBitrate.Items.Clear(); drp_audioBitrate.Items.Add("32"); drp_audioBitrate.Items.Add("40"); drp_audioBitrate.Items.Add("48"); drp_audioBitrate.Items.Add("56"); drp_audioBitrate.Items.Add("64"); drp_audioBitrate.Items.Add("80"); drp_audioBitrate.Items.Add("86"); drp_audioBitrate.Items.Add("112"); drp_audioBitrate.Items.Add("128"); drp_audioBitrate.Items.Add("160"); drp_audioBitrate.Items.Add("192"); drp_audioBitrate.Items.Add("224"); drp_audioBitrate.Items.Add("256"); drp_audioBitrate.Items.Add("320"); } } private void drp_audioMixDown_SelectedIndexChanged(object sender, EventArgs e) { if (drp_audioCodec.Text == "AAC") { if (drp_audioMixDown.Text == "6 Channel Discrete") { drp_audioBitrate.Items.Clear(); drp_audioBitrate.Items.Add("32"); drp_audioBitrate.Items.Add("40"); drp_audioBitrate.Items.Add("48"); drp_audioBitrate.Items.Add("56"); drp_audioBitrate.Items.Add("64"); drp_audioBitrate.Items.Add("80"); drp_audioBitrate.Items.Add("86"); drp_audioBitrate.Items.Add("112"); drp_audioBitrate.Items.Add("128"); drp_audioBitrate.Items.Add("160"); drp_audioBitrate.Items.Add("192"); drp_audioBitrate.Items.Add("224"); drp_audioBitrate.Items.Add("256"); drp_audioBitrate.Items.Add("320"); drp_audioBitrate.Items.Add("384"); } } } private void Check_ChapterMarkers_CheckedChanged(object sender, EventArgs e) { if (Check_ChapterMarkers.Checked) { string destination = text_destination.Text; destination = destination.Replace(".mp4", ".m4v"); text_destination.Text = destination; } else { string destination = text_destination.Text; destination = destination.Replace(".m4v", ".mp4"); text_destination.Text = destination; } } private void check_largeFile_CheckedChanged(object sender, EventArgs e) { if (!text_destination.Text.Contains(".mp4")) { MessageBox.Show("This option is only compatible with the mp4 file container.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); check_largeFile.CheckState = CheckState.Unchecked; } } private void drp_videoEncoder_SelectedIndexChanged(object sender, EventArgs e) { //Turn off some options which are H.264 only when the user selects a non h.264 encoder if (!drp_videoEncoder.Text.Contains("H.264")) { check_turbo.CheckState = CheckState.Unchecked; CheckCRF.CheckState = CheckState.Unchecked; CheckCRF.Enabled = false; check_turbo.Enabled = false; h264Tab.Enabled = false; } else { CheckCRF.Enabled = true; check_turbo.Enabled = true; h264Tab.Enabled = true; } } public void setStreamReader(Parsing.DVD dvd) { this.thisDVD = dvd; } private void drp_dvdtitle_SelectedIndexChanged(object sender, EventArgs e) { // Reset some values on the form lbl_Aspect.Text = "Select a Title"; lbl_RecomendedCrop.Text = "Select a Title"; drop_chapterStart.Items.Clear(); drop_chapterFinish.Items.Clear(); QueryEditorText.Text = ""; // If the dropdown is set to automatic nothing else needs to be done. // Otheriwse if its not, title data has to be loased from parsing. if (drp_dvdtitle.Text != "Automatic") { Parsing.Title selectedTitle = drp_dvdtitle.SelectedItem as Parsing.Title; // Set the Aspect Ratio lbl_Aspect.Text = selectedTitle.AspectRatio.ToString(); // Set the Recommended Cropping values lbl_RecomendedCrop.Text = string.Format("{0}/{1}/{2}/{3}", selectedTitle.AutoCropDimensions[0], selectedTitle.AutoCropDimensions[1], selectedTitle.AutoCropDimensions[2], selectedTitle.AutoCropDimensions[3]); // Populate the Start chapter Dropdown drop_chapterStart.Items.Clear(); drop_chapterStart.Items.AddRange(selectedTitle.Chapters.ToArray()); if (drop_chapterStart.Items.Count > 0) { drop_chapterStart.Text = drop_chapterStart.Items[0].ToString(); } // Populate the Final Chapter Dropdown drop_chapterFinish.Items.Clear(); drop_chapterFinish.Items.AddRange(selectedTitle.Chapters.ToArray()); if (drop_chapterFinish.Items.Count > 0) { drop_chapterFinish.Text = drop_chapterFinish.Items[drop_chapterFinish.Items.Count - 1].ToString(); } // Populate the Audio Channels Dropdown drp_audioChannels.Items.Clear(); drp_audioChannels.Items.Add("Automatic"); drp_audioChannels.Items.AddRange(selectedTitle.AudioTracks.ToArray()); if (drp_audioChannels.Items.Count > 0) { drp_audioChannels.Text = drp_audioChannels.Items[0].ToString(); } // Populate the Subtitles dropdown drp_subtitle.Items.Clear(); drp_subtitle.Items.Add("None"); drp_subtitle.Items.AddRange(selectedTitle.Subtitles.ToArray()); if (drp_subtitle.Items.Count > 0) { drp_subtitle.Text = drp_subtitle.Items[0].ToString(); } } } #endregion //--------------------------------------------------- // Some Functions // - Query Generation //--------------------------------------------------- #region Program Functions public string GenerateTheQuery() { string source = text_source.Text; string dvdTitle = drp_dvdtitle.Text; string chapterStart = drop_chapterStart.Text; string chapterFinish = drop_chapterFinish.Text; int totalChapters = drop_chapterFinish.Items.Count - 1; string dvdChapter = ""; if (source == "") MessageBox.Show("No Source has been selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); else { source = " -i " + '"' + source+ '"'; //'"'+ } if (dvdTitle == "Automatic") dvdTitle = ""; else { string[] titleInfo = dvdTitle.Split(' '); dvdTitle = " -t "+ titleInfo[0]; } if (chapterFinish.Equals("Auto") && chapterStart.Equals("Auto")) dvdChapter = ""; else if (chapterFinish == chapterStart) dvdChapter = " -c " + chapterStart; else dvdChapter = " -c " + chapterStart + "-" + chapterFinish; string querySource = source+ dvdTitle+ dvdChapter; // ---------------------------------------------------------------------- // Destination string destination = text_destination.Text; string videoEncoder = drp_videoEncoder.Text; string audioEncoder = drp_audioCodec.Text; string width = text_width.Text; string height = text_height.Text; if (destination == "") MessageBox.Show("No destination has been selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); else destination = " -o " + '"' + destination + '"'; //'"'+ switch (videoEncoder) { case "Mpeg 4": videoEncoder = " -e ffmpeg"; break; case "Xvid": videoEncoder = " -e xvid"; break; case "H.264": videoEncoder = " -e x264"; break; case "H.264 Baseline 1.3": videoEncoder = " -e x264b13"; break; case "H.264 (iPod)": videoEncoder = " -e x264b30"; break; default: videoEncoder = " -e x264"; break; } switch (audioEncoder) { case "AAC": audioEncoder = " -E faac"; break; case "MP3": audioEncoder = " -E lame"; break; case "Vorbis": audioEncoder = " -E vorbis"; break; case "AC3": audioEncoder = " -E ac3"; break; default: audioEncoder = " -E faac"; break; } if (width != "") width = " -w "+ width; if (height == "Auto") { height = ""; } else if (height != "") { height = " -l " + height; } string queryDestination = destination+ videoEncoder+ audioEncoder+ width+ height; // ---------------------------------------------------------------------- // Picture Settings Tab string cropSetting = drp_crop.Text; string cropTop = text_top.Text; string cropBottom = text_bottom.Text; string cropLeft = text_left.Text; string cropRight = text_right.Text; string subtitles = drp_subtitle.Text; string cropOut = ""; string deInterlace_Option = drp_deInterlace_option.Text; string deinterlace = ""; string grayscale = ""; string pixelRatio = ""; string ChapterMarkers = ""; // Returns Crop Query if (cropSetting == "Auto Crop") cropOut = ""; else if (cropSetting == "No Crop") cropOut = " --crop 0:0:0:0 "; else { if (text_top.Text == "") cropTop = "0"; if (text_bottom.Text == "") cropBottom = "0"; if (text_left.Text == "") cropLeft = "0"; if (text_right.Text == "") cropRight = "0"; cropOut = " --crop " + cropTop + ":" + cropBottom + ":" + cropLeft + ":" + cropRight; } if (subtitles == "None") subtitles = ""; else if (subtitles == "") subtitles = ""; else { string[] tempSub; tempSub = subtitles.Split(' '); subtitles = " -s "+ tempSub[0]; } switch (deInterlace_Option) { case "None": deinterlace = ""; break; case "Origional (Fast)": deinterlace = " --deinterlace=1"; break; case "yadif (Slow)": deinterlace = " --deinterlace=" + '"' + "0" + '"'; break; case "yadif + mcdeint (Slower)": deinterlace = " --deinterlace=" + '"' + "2:-1:1" + '"'; break; case "yadif + mcdeint (Slowest)": deinterlace = " --deinterlace=" + '"' + "1:-1:1" + '"'; break; default: deinterlace = ""; break; } if (check_grayscale.Checked) grayscale = " -g "; if (CheckPixelRatio.Checked) pixelRatio = " -p "; if (Check_ChapterMarkers.Checked) ChapterMarkers = " -m "; string queryPictureSettings = cropOut + subtitles + deinterlace + grayscale + pixelRatio + ChapterMarkers; // ---------------------------------------------------------------------- // Video Settings Tab string videoBitrate = text_bitrate.Text; string videoFilesize = text_filesize.Text; double videoQuality = slider_videoQuality.Value; string vidQSetting = ""; string twoPassEncoding = ""; string videoFramerate = drp_videoFramerate.Text; string turboH264 = ""; string largeFile = ""; string deblock = ""; string detelecine = ""; string denoise = ""; string CRF = CheckCRF.CheckState.ToString(); if ((CRF == "Checked")) CRF = " -Q "; else CRF = ""; if (videoBitrate != "") videoBitrate = " -b "+ videoBitrate; if (videoFilesize != "") videoFilesize = " -S "+ videoFilesize; // Video Quality Setting if ((videoQuality == 0)) vidQSetting = ""; else { videoQuality = videoQuality / 100; if (videoQuality == 1) { vidQSetting = "1.0"; } vidQSetting = " -q " + videoQuality.ToString(); } if (check_2PassEncode.Checked) twoPassEncoding = " -2 "; if (videoFramerate == "Automatic") videoFramerate = ""; else videoFramerate = " -r "+ videoFramerate; if (check_turbo.Checked) turboH264 = " -T "; if (check_largeFile.Checked) largeFile = " -4 "; if (check_deblock.Checked) deblock = " --deblock"; if (check_detelecine.Checked) detelecine = " --detelecine"; switch (drp_deNoise.Text) { case "None": denoise = ""; break; case "Weak": denoise = " --denoise=2:1:2:3"; break; case "Medium": denoise = " --denoise=3:2:2:3"; break; case "Strong": denoise = " --denoise=7:7:5:5"; break; default: denoise = ""; break; } string queryVideoSettings = videoBitrate + videoFilesize + vidQSetting + twoPassEncoding + videoFramerate + turboH264 + largeFile + deblock + detelecine + denoise; // ---------------------------------------------------------------------- // Audio Settings Tab string audioBitrate = drp_audioBitrate.Text; string audioSampleRate = drp_audioSampleRate.Text; string audioChannels = drp_audioChannels.Text; string Mixdown = drp_audioMixDown.Text; string SixChannelAudio = ""; if (audioBitrate != "") audioBitrate = " -B "+ audioBitrate; if (audioSampleRate != "") audioSampleRate = " -R "+ audioSampleRate; if (audioChannels == "Automatic") audioChannels = ""; else if (audioChannels == "") audioChannels = ""; else { string[] tempSub; tempSub = audioChannels.Split(' '); audioChannels = " -a "+ tempSub[0]; } switch (Mixdown) { case "Automatic": Mixdown = ""; break; case "Mono": Mixdown = "mono"; break; case "Stereo": Mixdown = "stereo"; break; case "Dolby Surround": Mixdown = "dpl1"; break; case "Dolby Pro Logic II": Mixdown = "dpl2"; break; case "6 Channel Discrete": Mixdown = "6ch"; break; default: Mixdown = "stero"; break; } if (Mixdown != "") SixChannelAudio = " -6 "+ Mixdown; else SixChannelAudio = ""; string queryAudioSettings = audioBitrate+ audioSampleRate+ audioChannels+ SixChannelAudio; // ---------------------------------------------------------------------- // H.264 Tab string h264Advanced = rtf_h264advanced.Text; if ((h264Advanced == "")) h264Advanced = ""; else h264Advanced = " -x "+ h264Advanced; string h264Settings = h264Advanced; // ---------------------------------------------------------------------- // Processors (Program Settings) string processors = Properties.Settings.Default.Processors; // Number of Processors Handler if (processors == "Automatic") processors = ""; else processors = " -C "+ processors+ " "; string queryAdvancedSettings = processors; // ---------------------------------------------------------------------- // Verbose option (Program Settings) string verbose = ""; if (Properties.Settings.Default.verbose == "Checked") verbose = " -v "; // ---------------------------------------------------------------------- return querySource+ queryDestination+ queryPictureSettings+ queryVideoSettings+ h264Settings+ queryAudioSettings+ queryAdvancedSettings+ verbose; } #endregion // This is the END of the road ------------------------------------------------------------------------------ } }