OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / frmMain.cs
index 7f6ece4..256d806 100644 (file)
@@ -20,13 +20,29 @@ namespace Handbrake
         // --------------------------------------------------------------\r
         // Some windows that require only 1 instance.\r
         // --------------------------------------------------------------\r
+        private frmQueue queueWindow = new frmQueue();  \r
+        \r
+        // -------------------------------------------------------------- \r
+        // Stuff that needs doing on startup.\r
+        // - Load users default settings. (if required)\r
+        // - Do an update check (if required)\r
+        // --------------------------------------------------------------\r
         private frmDvdInfo dvdInfoWindow = new frmDvdInfo();\r
-        private frmQueue queueWindow = new frmQueue();\r
-\r
+        \r
         public frmMain()\r
         {\r
+            \r
+            ThreadPool.QueueUserWorkItem(showSplash);\r
+            Thread.Sleep(3000);\r
+\r
             InitializeComponent();\r
 \r
+            // This is a quick Hack fix for the cross-thread problem with frmDvdIndo ************************\r
+            dvdInfoWindow.Show();\r
+            dvdInfoWindow.Hide();\r
+            // **********************************************************************************************\r
+\r
+\r
             // Set the Version number lable to the corect version.\r
             Version.Text = "Version " + Properties.Settings.Default.GuiVersion;\r
 \r
@@ -35,6 +51,17 @@ namespace Handbrake
 \r
             // Now load the users default if required.\r
             loadUserDefaults();\r
+\r
+            // Display the quick start window if required.\r
+            quickStart();\r
+        }\r
+\r
+        public void showSplash(object sender)\r
+        {\r
+            Form splash = new frmSplashScreen();\r
+            splash.Show();\r
+            Thread.Sleep(3000);\r
+            splash.Close();\r
         }\r
 \r
         public void loadUserDefaults()\r
@@ -73,10 +100,21 @@ namespace Handbrake
                     {\r
                         check_2PassEncode.CheckState = CheckState.Checked;\r
                     }\r
-                    if (Properties.Settings.Default.DeInterlace == "Checked")\r
+  \r
+                    drp_deInterlace_option.Text = Properties.Settings.Default.DeInterlace;\r
+                    drp_deNoise.Text = Properties.Settings.Default.denoise;\r
+\r
+                    if (Properties.Settings.Default.detelecine == "Checked")\r
                     {\r
-                        check_DeInterlace.CheckState = CheckState.Checked;\r
+                        check_detelecine.CheckState = CheckState.Checked;\r
                     }\r
+\r
+                    if (Properties.Settings.Default.detelecine == "Checked")\r
+                    {\r
+                        check_deblock.CheckState = CheckState.Checked;\r
+                    }\r
+\r
+\r
                     if (Properties.Settings.Default.Grayscale == "Checked")\r
                     {\r
                         check_grayscale.CheckState = CheckState.Checked;\r
@@ -119,7 +157,6 @@ namespace Handbrake
         {\r
             if (Properties.Settings.Default.updateStatus == "Checked")\r
             {\r
-\r
                 try\r
                 {\r
                     String updateFile = Properties.Settings.Default.updateFile;\r
@@ -132,7 +169,6 @@ namespace Handbrake
                         lbl_update.Visible = true;\r
                     }\r
                 }\r
-                // else fail displaying an error message.\r
                 catch (Exception)\r
                 {\r
                     // Silently ignore the error\r
@@ -140,7 +176,20 @@ namespace Handbrake
             }\r
         }\r
 \r
-        #region The Menu Bar\r
+        public void quickStart()\r
+        {\r
+            if ((Properties.Settings.Default.QuickStartWindow == "Checked") || (Properties.Settings.Default.QuickStartWindow == ""))\r
+            {\r
+                frmQuickStart quickstart = new frmQuickStart();\r
+                quickstart.ShowDialog();\r
+            }\r
+        }\r
+\r
+\r
+        // -------------------------------------------------------------- \r
+        // The main Menu bar.\r
+        // -------------------------------------------------------------- \r
+\r
         #region File Menu\r
 \r
         private void mnu_open_Click(object sender, EventArgs e)\r
@@ -181,11 +230,7 @@ namespace Handbrake
                         check_2PassEncode.CheckState = CheckState.Checked;\r
                     }\r
 \r
-                    temporyLine = line.ReadLine();\r
-                    if (temporyLine == "Checked")\r
-                    {\r
-                        check_DeInterlace.CheckState = CheckState.Checked;\r
-                    }\r
+                    drp_deInterlace_option.Text = line.ReadLine();\r
 \r
                     temporyLine = line.ReadLine();\r
                     if (temporyLine == "Checked")\r
@@ -280,7 +325,7 @@ namespace Handbrake
                     line.WriteLine(text_filesize.Text);\r
                     line.WriteLine(slider_videoQuality.Value.ToString());\r
                     line.WriteLine(check_2PassEncode.CheckState.ToString());\r
-                    line.WriteLine(check_DeInterlace.CheckState.ToString());\r
+                    line.WriteLine(drp_deInterlace_option.Text);\r
                     line.WriteLine(check_grayscale.CheckState.ToString());\r
                     line.WriteLine(drp_videoFramerate.Text);\r
                     line.WriteLine(Check_ChapterMarkers.CheckState.ToString());\r
@@ -327,9 +372,27 @@ namespace Handbrake
             showQueue();\r
         }\r
 \r
+       \r
         private void mnu_viewDVDdata_Click(object sender, EventArgs e)\r
         {\r
-            dvdInfoWindow.Show();\r
+            try\r
+            {\r
+                dvdInfoWindow.Show();\r
+                \r
+            }\r
+            catch (Exception)\r
+            {\r
+            }\r
+\r
+            // BUG *******************************************************\r
+            // Cross-thread operation not valid: Control 'rtf_dvdInfo' accessed from a thread other than the thread it was created on.\r
+            // This happens when the DVD is scanned and this item is then selected.\r
+            // If this item is selected so a blank copy of the window appears, then a DVD is scanned, there is no cross-thread issue.\r
+            // NOTE: Try/catch added to prevent final build crashing.\r
+            // NOTE2: Included a quick fix in frmMain(). Simply show and hide the window when starting the app.\r
+            // Note3: Suspect the problem lies with line 30.\r
+            // ***********************************************************\r
+\r
         }\r
 \r
         private void mnu_options_Click(object sender, EventArgs e)\r
@@ -346,7 +409,7 @@ namespace Handbrake
         {\r
             CheckPixelRatio.CheckState = CheckState.Unchecked;\r
             text_width.Text = "640";\r
-            text_height.Text = "480";\r
+            text_height.Text = "Auto";\r
             drp_videoEncoder.Text = "H.264 (iPod)";\r
             text_bitrate.Text = "1000";\r
             text_filesize.Text = "";\r
@@ -357,38 +420,63 @@ namespace Handbrake
             drp_crop.Text = "No Crop";\r
         }\r
 \r
-        private void mnu_preset_ipod178_Click(object sender, EventArgs e)\r
+\r
+\r
+        private void mnu_appleTv_Click(object sender, EventArgs e)\r
+        {\r
+            text_width.Text = "";\r
+            text_height.Text = "";\r
+            drp_videoEncoder.Text = "H.264";\r
+            text_bitrate.Text = "3000";\r
+            text_filesize.Text = "";\r
+            slider_videoQuality.Value = 0;\r
+            SliderValue.Text = "0%";\r
+            drp_audioBitrate.Text = "160";\r
+            CheckPixelRatio.CheckState = CheckState.Checked;\r
+            drp_audioSampleRate.Text = "48";\r
+            rtf_h264advanced.Text = "bframes=3:ref=1:subme=5:me=umh:no-fast-pskip=1:no-dct-decimate=1:trellis=2";\r
+            drp_crop.Text = "No Crop";\r
+            \r
+        }\r
+\r
+        private void mnu_presetPS3_Click(object sender, EventArgs e)\r
         {\r
             CheckPixelRatio.CheckState = CheckState.Unchecked;\r
-            text_width.Text = "640";\r
-            text_height.Text = "352";\r
-            drp_videoEncoder.Text = "H.264 (iPod)";\r
-            text_bitrate.Text = "1000";\r
+            text_width.Text = "";\r
+            text_height.Text = "";\r
+            drp_videoEncoder.Text = "H.264";\r
+            text_bitrate.Text = "3000";\r
             text_filesize.Text = "";\r
             slider_videoQuality.Value = 0;\r
             SliderValue.Text = "0%";\r
             drp_audioBitrate.Text = "160";\r
-            rtf_h264advanced.Text = "";\r
+            CheckPixelRatio.CheckState = CheckState.Checked;\r
+            drp_audioSampleRate.Text = "48";\r
+            rtf_h264advanced.Text = "level=41";\r
             drp_crop.Text = "No Crop";\r
         }\r
 \r
-        private void mnu_preset_ipod235_Click(object sender, EventArgs e)\r
+        //------------------------------NEW PRESETS START HERE---------------------------\r
+        private void mnu_normal_Click(object sender, EventArgs e)\r
         {\r
             CheckPixelRatio.CheckState = CheckState.Unchecked;\r
-            text_width.Text = "640";\r
-            text_height.Text = "272";\r
-            drp_videoEncoder.Text = "H.264 (iPod)";\r
-            text_bitrate.Text = "1000";\r
+            text_width.Text = "";\r
+            text_height.Text = "";\r
+            drp_videoEncoder.Text = "H.264";\r
+            text_bitrate.Text = "3000";\r
             text_filesize.Text = "";\r
             slider_videoQuality.Value = 0;\r
             SliderValue.Text = "0%";\r
             drp_audioBitrate.Text = "160";\r
-            rtf_h264advanced.Text = "";\r
+            CheckPixelRatio.CheckState = CheckState.Checked;\r
+            drp_audioSampleRate.Text = "48";\r
+            rtf_h264advanced.Text = "level=41";\r
             drp_crop.Text = "No Crop";\r
         }\r
 \r
-        private void mnu_appleTv_Click(object sender, EventArgs e)\r
+        private void mnu_Classic_Click(object sender, EventArgs e)\r
         {\r
+            CheckPixelRatio.CheckState = CheckState.Unchecked;\r
             text_width.Text = "";\r
             text_height.Text = "";\r
             drp_videoEncoder.Text = "H.264";\r
@@ -399,12 +487,11 @@ namespace Handbrake
             drp_audioBitrate.Text = "160";\r
             CheckPixelRatio.CheckState = CheckState.Checked;\r
             drp_audioSampleRate.Text = "48";\r
-            rtf_h264advanced.Text = "bframes=3:ref=1:subme=5:me=umh:no-fast-pskip=1:no-dct-decimate=1:trellis=2";\r
+            rtf_h264advanced.Text = "level=41";\r
             drp_crop.Text = "No Crop";\r
-            \r
         }\r
 \r
-        private void mnu_presetPS3_Click(object sender, EventArgs e)\r
+        private void mnu_film_Click(object sender, EventArgs e)\r
         {\r
             CheckPixelRatio.CheckState = CheckState.Unchecked;\r
             text_width.Text = "";\r
@@ -421,6 +508,58 @@ namespace Handbrake
             drp_crop.Text = "No Crop";\r
         }\r
 \r
+        private void mnu_television_Click(object sender, EventArgs e)\r
+        {\r
+            CheckPixelRatio.CheckState = CheckState.Unchecked;\r
+            text_width.Text = "";\r
+            text_height.Text = "";\r
+            drp_videoEncoder.Text = "H.264";\r
+            text_bitrate.Text = "3000";\r
+            text_filesize.Text = "";\r
+            slider_videoQuality.Value = 0;\r
+            SliderValue.Text = "0%";\r
+            drp_audioBitrate.Text = "160";\r
+            CheckPixelRatio.CheckState = CheckState.Checked;\r
+            drp_audioSampleRate.Text = "48";\r
+            rtf_h264advanced.Text = "level=41";\r
+            drp_crop.Text = "No Crop";\r
+        }\r
+\r
+        private void mnu_qt_Click(object sender, EventArgs e)\r
+        {\r
+            CheckPixelRatio.CheckState = CheckState.Unchecked;\r
+            text_width.Text = "";\r
+            text_height.Text = "";\r
+            drp_videoEncoder.Text = "H.264";\r
+            text_bitrate.Text = "3000";\r
+            text_filesize.Text = "";\r
+            slider_videoQuality.Value = 0;\r
+            SliderValue.Text = "0%";\r
+            drp_audioBitrate.Text = "160";\r
+            CheckPixelRatio.CheckState = CheckState.Checked;\r
+            drp_audioSampleRate.Text = "48";\r
+            rtf_h264advanced.Text = "level=41";\r
+            drp_crop.Text = "No Crop";\r
+        }\r
+\r
+        private void mnu_psp_Click(object sender, EventArgs e)\r
+        {\r
+            CheckPixelRatio.CheckState = CheckState.Unchecked;\r
+            text_width.Text = "";\r
+            text_height.Text = "";\r
+            drp_videoEncoder.Text = "H.264";\r
+            text_bitrate.Text = "3000";\r
+            text_filesize.Text = "";\r
+            slider_videoQuality.Value = 0;\r
+            SliderValue.Text = "0%";\r
+            drp_audioBitrate.Text = "160";\r
+            CheckPixelRatio.CheckState = CheckState.Checked;\r
+            drp_audioSampleRate.Text = "48";\r
+            rtf_h264advanced.Text = "level=41";\r
+            drp_crop.Text = "No Crop";\r
+        }\r
+\r
+\r
         private void mnu_ProgramDefaultOptions_Click(object sender, EventArgs e)\r
         {\r
             //Source\r
@@ -446,12 +585,15 @@ namespace Handbrake
             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 = check_DeInterlace.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
             //Audio Settings Tab\r
             Properties.Settings.Default.AudioBitrate = drp_audioBitrate.Text;\r
             Properties.Settings.Default.AudioSampleRate = drp_audioSampleRate.Text;\r
@@ -498,53 +640,50 @@ namespace Handbrake
         }\r
 \r
         #endregion\r
-        #endregion\r
 \r
         // -------------------------------------------------------------- \r
         // Buttons on the main Window\r
         // --------------------------------------------------------------\r
+\r
+        #region Buttons\r
         private void btn_Browse_Click(object sender, EventArgs e)\r
         {\r
-            \r
-            String filename ="";\r
-            text_source.Text = "";\r
-\r
-            if (RadioDVD.Checked)\r
-            {\r
-                DVD_Open.ShowDialog();\r
-                filename = DVD_Open.SelectedPath;\r
-                if (filename != "")\r
-                {\r
-                    text_source.Text = filename;\r
-                    Form frmReadDVD = new frmReadDVD(filename, this, dvdInfoWindow);\r
-                    frmReadDVD.ShowDialog();\r
-                }\r
-            }\r
-            else\r
-            {\r
-                ISO_Open.ShowDialog();\r
-                filename = ISO_Open.FileName;\r
-                if (filename != "")\r
-                {\r
-                    text_source.Text = filename;\r
-                    Form frmReadDVD = new frmReadDVD(filename, this, dvdInfoWindow);\r
-                    frmReadDVD.ShowDialog();\r
-                }\r
-            }  \r
-\r
-            // Quick check to make sure some titles were found.\r
-            if (filename != "")\r
-            {\r
-                if (drp_dvdtitle.Items.Count == 0)\r
-                {\r
-                    MessageBox.Show("No Title(s) found. Please make sure you have selected a valid, non-copy protected source.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);\r
-                }\r
-            }\r
-            else\r
-            {\r
-                text_source.Text = "Click 'Browse' to continue";\r
-            }\r
-\r
+            String filename =""; \r
+                   text_source.Text = ""; \r
+                                \r
+                   if (RadioDVD.Checked) \r
+                   { \r
+                       DVD_Open.ShowDialog(); \r
+                       filename = DVD_Open.SelectedPath; \r
+                       if (filename != "") \r
+                       { \r
+                           Form frmRD = new frmReadDVD(filename, this, dvdInfoWindow); \r
+                           text_source.Text = filename; \r
+                           frmRD.ShowDialog(); \r
+                       } \r
+                    } \r
+                    else \r
+                    { \r
+                       ISO_Open.ShowDialog(); \r
+                       filename = ISO_Open.FileName; \r
+                       if (filename != "") \r
+                       { \r
+                           Form frmRD = new frmReadDVD(filename, this, dvdInfoWindow); \r
+                           text_source.Text = filename; \r
+                           frmRD.ShowDialog(); \r
+                       } \r
+                    }   \r
+                \r
+                    // Check if there was titles in the dvd title dropdown \r
+                    if (filename == "") \r
+                    { \r
+                       text_source.Text = "Click 'Browse' to continue"; \r
+                    } \r
+                \r
+                    if (drp_dvdtitle.Items.Count == 0) \r
+                    { \r
+                       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); \r
+                    }                  \r
         }\r
 \r
         private void btn_destBrowse_Click(object sender, EventArgs e)\r
@@ -580,9 +719,24 @@ namespace Handbrake
 \r
         private void btn_queue_Click(object sender, EventArgs e)\r
         {\r
-            String query = GenerateTheQuery();\r
-            queueWindow.list_queue.Items.Add(query);\r
-            queueWindow.Show();\r
+            if (text_destination.Text != "" && text_source.Text != "")\r
+            {\r
+                string query;\r
+                if (QueryEditorText.Text == "")\r
+                {\r
+                    query = GenerateTheQuery();\r
+                }\r
+                else\r
+                {\r
+                    query = QueryEditorText.Text;\r
+                }\r
+                queueWindow.list_queue.Items.Add(query);\r
+                queueWindow.Show();\r
+            } \r
+            else \r
+            {\r
+                MessageBox.Show("No Source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
+            }\r
         }\r
 \r
         private void showQueue()\r
@@ -590,9 +744,22 @@ namespace Handbrake
             queueWindow.Show();\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
+            btn_eCancel.Enabled = true;\r
             String query = "";\r
+            lbl_encode.Visible = false;\r
  \r
             if (QueryEditorText.Text == "")\r
             {\r
@@ -603,26 +770,81 @@ namespace Handbrake
                 query = QueryEditorText.Text;\r
             }\r
 \r
-            Functions.CLI process = new Functions.CLI();\r
-            hbProc = process.runCli(this, query, false, false, false, false);\r
-          \r
-            ThreadPool.QueueUserWorkItem(procMonitor);\r
+            ThreadPool.QueueUserWorkItem(procMonitor, query);\r
+            lbl_encode.Text = "Encoding Started";\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
         private void procMonitor(object state)\r
         {\r
-            MessageBox.Show("The encode process has now started.", "Status", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);\r
-            hbProc.WaitForExit();\r
-            hbProc.Close();\r
-            hbProc.Dispose();\r
-            MessageBox.Show("The encode process has now ended.", "Status", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);\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
+                MessageBox.Show("The encode process has now started.", "Status", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);\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.StandardError.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
+                catch (Exception)\r
+                {\r
+                    // Do nothing\r
+                }\r
+\r
+                MessageBox.Show("The encode process has now ended.", "Status", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);\r
+                hbProc = null;\r
+            }\r
         }\r
 \r
+        private void encode_OnEncodeProgress(object Sender, int CurrentTask, int TaskCount, float PercentComplete, float CurrentFps, float AverageFps, TimeSpan TimeRemaining)\r
+        {\r
+            if (this.InvokeRequired)\r
+            {\r
+                this.BeginInvoke(new Parsing.EncodeProgressEventHandler(encode_OnEncodeProgress),\r
+                    new object[] { Sender, CurrentTask, TaskCount, PercentComplete, CurrentFps, AverageFps, TimeRemaining });\r
+                return;\r
+            }\r
+            lbl_encode.Text = string.Format("Encode Progress: {0}%,       FPS: {1},       Avg FPS: {2},       Time Remaining: {3} ", PercentComplete, CurrentFps, AverageFps, TimeRemaining);\r
+        }\r
+\r
+        #endregion\r
 \r
         //---------------------------------------------------\r
         //  Items that require actions on frmMain\r
         //---------------------------------------------------\r
 \r
+        #region frmMain Actions\r
+\r
         private void drop_chapterStart_SelectedIndexChanged(object sender, EventArgs e)\r
         {\r
             lbl_chptWarn.Visible = false;\r
@@ -681,6 +903,7 @@ namespace Handbrake
             slider_videoQuality.Value = 0;\r
             SliderValue.Text = "0%";\r
             CheckCRF.CheckState = CheckState.Unchecked;\r
+            CheckCRF.Enabled = false;\r
         }\r
 \r
         private void text_filesize_TextChanged(object sender, EventArgs e)\r
@@ -689,6 +912,7 @@ namespace Handbrake
             slider_videoQuality.Value = 0;\r
             SliderValue.Text = "0%";\r
             CheckCRF.CheckState = CheckState.Unchecked;\r
+            CheckCRF.Enabled = false;\r
         }\r
 \r
         private void slider_videoQuality_Scroll(object sender, EventArgs e)\r
@@ -696,6 +920,7 @@ namespace Handbrake
             SliderValue.Text = slider_videoQuality.Value.ToString() + "%";\r
             text_bitrate.Text = "";\r
             text_filesize.Text = "";\r
+            CheckCRF.Enabled = true;\r
         }\r
 \r
         private void label_h264_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)\r
@@ -711,6 +936,7 @@ namespace Handbrake
                 if (CheckPixelRatio.Checked)\r
                 {\r
                     text_width.Text = "";\r
+                    text_width.BackColor = Color.White;\r
                 }\r
                 else\r
                 {\r
@@ -753,19 +979,23 @@ namespace Handbrake
         {\r
             try\r
             {\r
-                if (CheckPixelRatio.Checked)\r
-                {\r
-                    text_height.Text = "";\r
-                }\r
-                else\r
+                if (text_height.Text != "Auto")\r
                 {\r
-                    if ((int.Parse(text_height.Text) % 16) != 0)\r
+                    if (CheckPixelRatio.Checked)\r
                     {\r
-                        text_height.BackColor = Color.LightCoral;\r
+                        text_height.Text = "";\r
+                        text_width.BackColor = Color.White;\r
                     }\r
                     else\r
                     {\r
-                        text_height.BackColor = Color.LightGreen;\r
+                        if ((int.Parse(text_height.Text) % 16) != 0)\r
+                        {\r
+                            text_height.BackColor = Color.LightCoral;\r
+                        }\r
+                        else\r
+                        {\r
+                            text_height.BackColor = Color.LightGreen;\r
+                        }\r
                     }\r
                 }\r
             } catch(Exception){\r
@@ -936,15 +1166,6 @@ namespace Handbrake
             }\r
         }\r
 \r
-        private void check_turbo_CheckedChanged(object sender, EventArgs e)\r
-        {\r
-            if (!drp_videoEncoder.Text.Contains("H.264"))\r
-            {\r
-                MessageBox.Show("This option is only compatible with the H.264 encoder's", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
-                check_turbo.CheckState = CheckState.Unchecked;\r
-            }\r
-        }\r
-\r
         private void drp_videoEncoder_SelectedIndexChanged(object sender, EventArgs e)\r
         {\r
             //Turn off some options which are H.264 only when the user selects a non h.264 encoder\r
@@ -952,16 +1173,17 @@ namespace Handbrake
             {\r
                 check_turbo.CheckState = CheckState.Unchecked;\r
                 CheckCRF.CheckState = CheckState.Unchecked;\r
+                CheckCRF.Enabled = false;\r
+                check_turbo.Enabled = false;\r
+                h264Tab.Enabled = false;\r
             }\r
-        }\r
-\r
-        private void CheckCRF_CheckedChanged(object sender, EventArgs e)\r
-        {\r
-            if (slider_videoQuality.Value == 0)\r
+            else\r
             {\r
-                MessageBox.Show("This option is can only be used with the 'Video Quality' slider.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
-                CheckCRF.CheckState = CheckState.Unchecked;\r
+                CheckCRF.Enabled = true;\r
+                check_turbo.Enabled = true;\r
+                h264Tab.Enabled = true;\r
             }\r
+\r
         }\r
 \r
         public void setStreamReader(Parsing.DVD dvd)\r
@@ -983,9 +1205,14 @@ namespace Handbrake
             if (drp_dvdtitle.Text != "Automatic")\r
             {\r
                 Parsing.Title selectedTitle = drp_dvdtitle.SelectedItem as Parsing.Title;\r
+\r
+                // Set the Aspect Ratio\r
                 lbl_Aspect.Text = selectedTitle.AspectRatio.ToString();\r
-                lbl_RecomendedCrop.Text = string.Format("{0}/{1}/{2}/{3}", selectedTitle.AutoCropDimensions[0], selectedTitle.AutoCropDimensions[1], selectedTitle.AutoCropDimensions[2], selectedTitle.AutoCropDimensions[3]);\r
 \r
+                // Set the Recommended Cropping values\r
+                lbl_RecomendedCrop.Text = string.Format("{0}/{1}/{2}/{3}", selectedTitle.AutoCropDimensions[0], selectedTitle.AutoCropDimensions[1], selectedTitle.AutoCropDimensions[2], selectedTitle.AutoCropDimensions[3]);\r
+                \r
+                // Populate the Start chapter Dropdown\r
                 drop_chapterStart.Items.Clear();\r
                 drop_chapterStart.Items.AddRange(selectedTitle.Chapters.ToArray());\r
                 if (drop_chapterStart.Items.Count > 0)\r
@@ -993,6 +1220,7 @@ namespace Handbrake
                     drop_chapterStart.Text = drop_chapterStart.Items[0].ToString();\r
                 }\r
 \r
+                // Populate the Final Chapter Dropdown\r
                 drop_chapterFinish.Items.Clear();\r
                 drop_chapterFinish.Items.AddRange(selectedTitle.Chapters.ToArray());\r
                 if (drop_chapterFinish.Items.Count > 0)\r
@@ -1000,6 +1228,7 @@ namespace Handbrake
                     drop_chapterFinish.Text = drop_chapterFinish.Items[drop_chapterFinish.Items.Count - 1].ToString();\r
                 }\r
 \r
+                // Populate the Audio Channels Dropdown\r
                 drp_audioChannels.Items.Clear();\r
                 drp_audioChannels.Items.Add("Automatic");\r
                 drp_audioChannels.Items.AddRange(selectedTitle.AudioTracks.ToArray());\r
@@ -1008,6 +1237,7 @@ namespace Handbrake
                     drp_audioChannels.Text = drp_audioChannels.Items[0].ToString();\r
                 }\r
 \r
+                // Populate the Subtitles dropdown\r
                 drp_subtitle.Items.Clear();\r
                 drp_subtitle.Items.Add("None");\r
                 drp_subtitle.Items.AddRange(selectedTitle.Subtitles.ToArray());\r
@@ -1016,9 +1246,20 @@ namespace Handbrake
                     drp_subtitle.Text = drp_subtitle.Items[0].ToString();\r
                 }\r
             }\r
-        } \r
+        }\r
+\r
+        #endregion\r
+\r
+        /* \r
+         * ---------------------------------------------------\r
+         * \r
+         * The query Generation function.\r
+         * \r
+         * ---------------------------------------------------\r
+         */\r
+\r
+        #region Program Functions\r
 \r
-        // The Query Generation Function\r
         public string GenerateTheQuery()\r
         {\r
             string source = text_source.Text;\r
@@ -1110,10 +1351,16 @@ namespace Handbrake
 \r
             if (width !=  "")\r
                 width = " -w "+ width;\r
-            \r
 \r
-            if (height !=  "")\r
-                height = " -l "+ height;\r
+\r
+            if (height == "Auto")\r
+            {\r
+                height = "";\r
+            }\r
+            else if (height != "")\r
+            {\r
+                height = " -l " + height;\r
+            }\r
             \r
 \r
             string queryDestination = destination+ videoEncoder+ audioEncoder+ width+ height;\r
@@ -1128,6 +1375,11 @@ namespace Handbrake
             string cropRight = text_right.Text;\r
             string subtitles = drp_subtitle.Text;\r
             string cropOut = "";\r
+            string deInterlace_Option = drp_deInterlace_option.Text;\r
+            string deinterlace = "";\r
+            string grayscale = "";\r
+            string pixelRatio = "";\r
+            string ChapterMarkers = "";\r
             // Returns Crop Query\r
 \r
             if (cropSetting == "Auto Crop")\r
@@ -1148,7 +1400,38 @@ namespace Handbrake
                 subtitles = " -s "+ tempSub[0];\r
             }\r
 \r
-            string queryPictureSettings = cropOut+ subtitles;\r
+            switch (deInterlace_Option)\r
+            {\r
+                case "None":\r
+                    deinterlace = "";\r
+                    break;\r
+                case "Origional (Fast)":\r
+                    deinterlace = " --deinterlace";\r
+                    break;\r
+                case "yadif (Slow)":\r
+                    deinterlace = " --deinterlace=" + '"' + "1" + '"';\r
+                    break;\r
+                case "yadif + mcdeint (Slower)":\r
+                    deinterlace = " --deinterlace=" + '"' + "1:-1:1" + '"';\r
+                    break;\r
+                case "yadif + mcdeint (Slowest)":\r
+                    deinterlace = " --deinterlace=" + '"' + "3:-1:2" + '"';\r
+                    break;\r
+                default:\r
+                    deinterlace = " --deinterlace=";\r
+                    break;\r
+            }\r
+\r
+            if (check_grayscale.Checked)\r
+                grayscale = " -g ";\r
+\r
+            if (CheckPixelRatio.Checked)\r
+                pixelRatio = " -p ";\r
+\r
+            if (Check_ChapterMarkers.Checked)\r
+                ChapterMarkers = " -m ";\r
+\r
+            string queryPictureSettings = cropOut + subtitles + deinterlace + grayscale + pixelRatio + ChapterMarkers;\r
             // ----------------------------------------------------------------------\r
 \r
             // Video Settings Tab\r
@@ -1158,13 +1441,12 @@ namespace Handbrake
             int videoQuality = slider_videoQuality.Value;\r
             string vidQSetting = "";\r
             string twoPassEncoding = "";\r
-            string deinterlace = "";\r
-            string grayscale = "";\r
             string videoFramerate = drp_videoFramerate.Text;\r
-            string pixelRatio = "";\r
-            string ChapterMarkers = "";\r
             string turboH264 = "";\r
             string largeFile = "";\r
+            string deblock = "";\r
+            string detelecine = "";\r
+            string denoise = "";\r
 \r
             if (videoBitrate !=  "")\r
                 videoBitrate = " -b "+ videoBitrate;\r
@@ -1190,30 +1472,40 @@ namespace Handbrake
             if (check_2PassEncode.Checked)\r
                 twoPassEncoding = " -2 ";\r
 \r
-            if (check_DeInterlace.Checked)\r
-                deinterlace = " -d ";\r
-\r
-            if (check_grayscale.Checked)\r
-                grayscale = " -g ";\r
-\r
             if (videoFramerate ==  "Automatic")\r
                 videoFramerate = "";\r
             else\r
                 videoFramerate = " -r "+ videoFramerate;\r
 \r
-            if (CheckPixelRatio.Checked)\r
-                pixelRatio = " -p ";\r
-\r
-            if (Check_ChapterMarkers.Checked)\r
-                ChapterMarkers = " -m ";\r
-\r
             if (check_turbo.Checked)\r
                 turboH264 = " -T ";\r
 \r
             if (check_largeFile.Checked)\r
                 largeFile = " -4 ";\r
 \r
-            string queryVideoSettings = videoBitrate + videoFilesize + vidQSetting + twoPassEncoding + deinterlace + grayscale + videoFramerate + pixelRatio + ChapterMarkers + turboH264 + largeFile;\r
+            if (check_deblock.Checked)\r
+                deblock = " --deblock";\r
+\r
+            if (check_detelecine.Checked)\r
+                detelecine = " --detelecine";\r
+\r
+            switch (drp_deNoise.Text)\r
+            {\r
+                case "None":\r
+                    denoise = "";\r
+                    break;\r
+                case "Weak":\r
+                    denoise = " --denoise=3:2:3:3";\r
+                    break;\r
+                case "Strong":\r
+                    denoise = " --denoise=7:7:5:5";\r
+                    break;\r
+                default:\r
+                    denoise = "";\r
+                    break;\r
+            }\r
+\r
+            string queryVideoSettings = videoBitrate + videoFilesize + vidQSetting + twoPassEncoding + videoFramerate + turboH264 + largeFile + deblock + detelecine + denoise;\r
             // ----------------------------------------------------------------------\r
 \r
             // Audio Settings Tab\r
@@ -1317,6 +1609,9 @@ namespace Handbrake
             return querySource+ queryDestination+ queryPictureSettings+ queryVideoSettings+ h264Settings+ queryAudioSettings+ queryAdvancedSettings+ verbose;\r
         }\r
 \r
+        #endregion\r
+\r
+        \r
 \r
 \r
         // This is the END of the road ------------------------------------------------------------------------------\r