+ #endregion\r
+\r
+ // -------------------------------------------------------------- \r
+ // Main Window Preset System\r
+ // --------------------------------------------------------------\r
+\r
+ #region Preset System\r
+\r
+ // Import Current Presets\r
+ private void updatePresets()\r
+ {\r
+ string[] presets = new string[17];\r
+ presets[0] = "Animation";\r
+ presets[1] = "AppleTV";\r
+ presets[2] = "Bedlam";\r
+ presets[3] = "Blind";\r
+ presets[4] = "Broke";\r
+ presets[5] = "Classic";\r
+ presets[6] = "Constant Quality Rate";\r
+ presets[7] = "Deux Six Quatre";\r
+ presets[8] = "Film";\r
+ presets[9] = "iPhone / iPod Touch";\r
+ presets[10] = "iPod High-Rez";\r
+ presets[11] = "iPod Low-Rez";\r
+ presets[12] = "Normal";\r
+ presets[13] = "PS3";\r
+ presets[14] = "PSP";\r
+ presets[15] = "QuickTime";\r
+ presets[16] = "Television";\r
+\r
+ ListViewItem preset_listview = new ListViewItem();\r
+ string[] presetList = new string[1];\r
+\r
+ foreach (string preset in presets)\r
+ {\r
+ presetList[0] = preset;\r
+ preset_listview = new ListViewItem(presetList);\r
+\r
+ // Now Fill Out List View with Items\r
+ listview_presets.Items.Add(preset_listview);\r
+ }\r
+\r
+ string appPath = Application.StartupPath.ToString() + "\\";\r
+ string strCmdLine = "cmd /c " + '"' + '"' + appPath + "HandBrakeCLI.exe" + '"' + " --preset-list >" + '"' + appPath + "presets.dat" + '"' + " 2>&1" + '"';\r
+ Process hbproc = Process.Start("CMD.exe", strCmdLine);\r
+ hbproc.WaitForExit();\r
+ hbproc.Dispose();\r
+ hbproc.Close();\r
+\r
+ }\r
+\r
+ // Varibles\r
+ private Boolean presetStatus = false;\r
+\r
+ // Buttons\r
+ private void btn_presets_Click(object sender, EventArgs e)\r
+ {\r
+ if (presetStatus == false)\r
+ {\r
+ this.Width = 881;\r
+ presetStatus = true;\r
+ btn_presets.Text = "Hide Presets";\r
+ }\r
+ else\r
+ {\r
+ this.Width = 590;\r
+ presetStatus = false;\r
+ btn_presets.Text = "Show Presets";\r
+ }\r
+\r
+ }\r
+\r
+ private void btn_setDefault_Click(object sender, EventArgs e)\r
+ {\r
+ //Source\r
+ Properties.Settings.Default.DVDSource = text_source.Text;\r
+ Properties.Settings.Default.DVDTitle = drp_dvdtitle.Text;\r
+ Properties.Settings.Default.ChapterStart = drop_chapterStart.Text;\r
+ Properties.Settings.Default.ChapterFinish = drop_chapterFinish.Text;\r
+ //Destination\r
+ Properties.Settings.Default.VideoDest = text_destination.Text;\r
+ Properties.Settings.Default.VideoEncoder = drp_videoEncoder.Text;\r
+ Properties.Settings.Default.AudioEncoder = drp_audioCodec.Text;\r
+ Properties.Settings.Default.Width = text_width.Text;\r
+ Properties.Settings.Default.Height = text_height.Text;\r
+ //Picture Settings Tab\r
+ Properties.Settings.Default.CroppingOption = drp_crop.Text;\r
+ Properties.Settings.Default.CropTop = text_top.Text;\r
+ Properties.Settings.Default.CropBottom = text_bottom.Text;\r
+ Properties.Settings.Default.CropLeft = text_left.Text;\r
+ Properties.Settings.Default.CropRight = text_right.Text;\r
+ Properties.Settings.Default.Subtitles = drp_subtitle.Text;\r
+ //Video Settings Tab\r
+ Properties.Settings.Default.VideoBitrate = text_bitrate.Text;\r
+ Properties.Settings.Default.VideoFilesize = text_filesize.Text;\r
+ Properties.Settings.Default.VideoQuality = slider_videoQuality.Value;\r
+ Properties.Settings.Default.TwoPass = check_2PassEncode.CheckState.ToString();\r
+ Properties.Settings.Default.DeInterlace = drp_deInterlace_option.Text;\r
+ Properties.Settings.Default.Grayscale = check_grayscale.CheckState.ToString();\r
+ Properties.Settings.Default.Framerate = drp_videoFramerate.Text;\r
+ Properties.Settings.Default.PixelRatio = CheckPixelRatio.CheckState.ToString();\r
+ Properties.Settings.Default.turboFirstPass = check_turbo.CheckState.ToString();\r
+ Properties.Settings.Default.largeFile = check_largeFile.CheckState.ToString();\r
+ Properties.Settings.Default.detelecine = check_detelecine.CheckState.ToString();\r
+ Properties.Settings.Default.denoise = drp_deNoise.Text;\r
+ Properties.Settings.Default.deblock = check_deblock.CheckState.ToString();\r
+ Properties.Settings.Default.chapterMarker = Check_ChapterMarkers.CheckState.ToString();\r
+ //Audio Settings Tab\r
+ Properties.Settings.Default.AudioBitrate = drp_audioBitrate.Text;\r
+ Properties.Settings.Default.AudioSampleRate = drp_audioSampleRate.Text;\r
+ Properties.Settings.Default.AudioChannels = drp_audioChannels.Text;\r
+ //H264 Tab\r
+ Properties.Settings.Default.CRF = CheckCRF.CheckState.ToString();\r
+ Properties.Settings.Default.H264 = rtf_h264advanced.Text;\r
+ //Preset\r
+ Properties.Settings.Default.selectedPreset = groupBox_output.Text.Replace("Output Settings (Preset: ", "").Replace("\"", "").Replace(")", "");\r
+ // Save the new default Settings\r
+ Properties.Settings.Default.Save();\r
+ MessageBox.Show("New default settings saved.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);\r
+ }\r
+\r
+ // Preset Selection\r
+ private void listview_presets_SelectedIndexChanged(object sender, EventArgs e)\r
+ {\r
+\r
+ string selectedPreset = null;\r
+ ListView.SelectedListViewItemCollection name = null;\r
+ name = listview_presets.SelectedItems;\r
+\r
+ if (listview_presets.SelectedItems.Count != 0)\r
+ selectedPreset = name[0].SubItems[0].Text;\r
+\r
+ try\r
+ {\r
+ string appPath = Application.StartupPath.ToString() + "\\";\r
+ StreamReader presetInput = new StreamReader(appPath + "presets.dat");\r
+\r
+ while (!presetInput.EndOfStream)\r
+ {\r
+ if ((char)presetInput.Peek() == '+')\r
+ {\r
+ string preset = presetInput.ReadLine().Replace("+ ", "");\r
+ Regex r = new Regex("(: )"); // Split on hyphens. \r
+ string[] presetName = r.Split(preset);\r
+\r
+ if (selectedPreset == "iPhone / iPod Touch")\r
+ {\r
+ selectedPreset = "iPhone";\r
+ }\r
+\r
+ if (selectedPreset == presetName[0])\r
+ {\r
+ // Need to disable anamorphic now, otherwise it may overide the width / height values later.\r
+ CheckPixelRatio.CheckState = CheckState.Unchecked;\r
+\r
+ // Send the query from the file to the Query Parser class\r
+ Functions.QueryParser presetQuery = Functions.QueryParser.Parse(preset);\r
+\r
+ // Now load the preset\r
+ presetLoader(presetQuery, selectedPreset);\r
+ }\r
+ \r
+ }\r
+ else\r
+ {\r
+ presetInput.ReadLine();\r
+ }\r
+ }\r
+ }\r
+ catch (Exception exc)\r
+ {\r
+ MessageBox.Show(exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
+ }\r
+\r
+ \r
+ }\r
+ #endregion\r
+\r
+ //---------------------------------------------------\r
+ // Encode / Cancel Buttons\r
+ // Encode Progress Text Handler\r
+ //---------------------------------------------------\r
+\r
+ #region Encode/CLI\r
+\r
+ Functions.CLI process = new Functions.CLI();\r
+\r
+ private void btn_encode_Click(object sender, EventArgs e)\r
+ {\r
+ if (text_source.Text == "" || text_source.Text == "Click 'Browse' to continue" || text_destination.Text == "")\r
+ MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
+ else\r
+ {\r
+ btn_eCancel.Enabled = true;\r
+ String query = "";\r
+ if (QueryEditorText.Text == "")\r
+ {\r
+ query = GenerateTheQuery();\r
+ }\r
+ else\r
+ {\r
+ query = QueryEditorText.Text;\r
+ }\r
+\r
+ ThreadPool.QueueUserWorkItem(procMonitor, query);\r
+ lbl_encode.Visible = true;\r
+ lbl_encode.Text = "Encoding in Progress";\r
+ }\r
+ }\r
+\r
+ private void btn_eCancel_Click(object sender, EventArgs e)\r
+ {\r
+ process.killCLI();\r
+ process.setNull();\r
+ lbl_encode.Text = "Encoding Canceled";\r
+ }\r
+\r
+ [DllImport("user32.dll")]\r
+ public static extern void LockWorkStation();\r
+ [DllImport("user32.dll")]\r
+ public static extern int ExitWindowsEx(int uFlags, int dwReason);\r
+\r
+ private void procMonitor(object state)\r
+ {\r
+ // Make sure we are not already encoding and if we are then display an error.\r
+ if (hbProc != null)\r
+ {\r
+ MessageBox.Show("Handbrake is already encoding a video!", "Status", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
+ }\r
+ else\r
+ {\r
+ hbProc = process.runCli(this, (string)state, false, false, false, false);\r
+ hbProc.WaitForExit();\r
+\r
+ try\r
+ {\r
+ /*\r
+ //*****************************************************************************************\r
+ // BUG!\r
+ // When the below code is used and standard error is set to true, hbcli is outputing a\r
+ // video stream which has mild corruption issues every few seconds.\r
+ // Maybe an issue with the Parser cauing the CLI to hickup/pause?\r
+ //*****************************************************************************************\r
+\r
+ \r
+ Parsing.Parser encode = new Parsing.Parser(hbProc.StandardOutput.BaseStream);\r
+ encode.OnEncodeProgress += encode_OnEncodeProgress;\r
+ while (!encode.EndOfStream)\r
+ {\r
+ encode.ReadLine();\r
+ }\r
+\r
+ hbProc.WaitForExit();\r
+ process.closeCLI();\r
+ */\r
+\r
+ }\r
+ catch (Exception exc)\r
+ {\r
+ // Do nothing\r
+ MessageBox.Show(exc.ToString());\r
+ }\r
+\r
+\r
+ setEncodeLabel();\r
+ hbProc = null;\r
+\r
+ // Do something whent he encode ends.\r
+ switch (Properties.Settings.Default.CompletionOption)\r
+ {\r
+ case "Shutdown":\r
+ System.Diagnostics.Process.Start("Shutdown", "-s -t 60");\r
+ break;\r
+ case "Log Off":\r
+ ExitWindowsEx(0, 0);\r
+ break;\r
+ case "Suspend":\r
+ Application.SetSuspendState(PowerState.Suspend, true, true);\r
+ break;\r
+ case "Hibernate":\r
+ Application.SetSuspendState(PowerState.Hibernate, true, true);\r
+ break;\r
+ case "Lock System":\r
+ LockWorkStation();\r
+ break;\r
+ case "Quit HandBrake":\r
+ Application.Exit();\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+ private delegate void UpdateUIHandler();\r