--- /dev/null
+/* x264Panel.Designer.cs $\r
+ \r
+ This file is part of the HandBrake source code.\r
+ Homepage: <http://handbrake.fr>.\r
+ It may be used under the terms of the GNU General Public License. */\r
+\r
+namespace Handbrake.Controls\r
+{\r
+ partial class AdvancedEncoderOpts\r
+ {\r
+ /// <summary> \r
+ /// Required designer variable.\r
+ /// </summary>\r
+ private System.ComponentModel.IContainer components = null;\r
+\r
+ /// <summary> \r
+ /// Clean up any resources being used.\r
+ /// </summary>\r
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>\r
+ protected override void Dispose(bool disposing)\r
+ {\r
+ if (disposing && (components != null))\r
+ {\r
+ components.Dispose();\r
+ }\r
+ base.Dispose(disposing);\r
+ }\r
+\r
+ #region Component Designer generated code\r
+\r
+ /// <summary> \r
+ /// Required method for Designer support - do not modify \r
+ /// the contents of this method with the code editor.\r
+ /// </summary>\r
+ private void InitializeComponent()\r
+ {\r
+ this.components = new System.ComponentModel.Container();\r
+ this.label43 = new System.Windows.Forms.Label();\r
+ this.advancedQuery = new System.Windows.Forms.RichTextBox();\r
+ this.ToolTip = new System.Windows.Forms.ToolTip(this.components);\r
+ this.label64 = new System.Windows.Forms.Label();\r
+ this.SuspendLayout();\r
+ // \r
+ // label43\r
+ // \r
+ this.label43.AutoSize = true;\r
+ this.label43.BackColor = System.Drawing.Color.Transparent;\r
+ this.label43.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r
+ this.label43.Location = new System.Drawing.Point(13, 13);\r
+ this.label43.Name = "label43";\r
+ this.label43.Size = new System.Drawing.Size(63, 13);\r
+ this.label43.TabIndex = 49;\r
+ this.label43.Text = "Advanced";\r
+ // \r
+ // advancedQuery\r
+ // \r
+ this.advancedQuery.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r
+ this.advancedQuery.Location = new System.Drawing.Point(16, 53);\r
+ this.advancedQuery.Name = "advancedQuery";\r
+ this.advancedQuery.Size = new System.Drawing.Size(688, 128);\r
+ this.advancedQuery.TabIndex = 80;\r
+ this.advancedQuery.Text = "";\r
+ // \r
+ // ToolTip\r
+ // \r
+ this.ToolTip.Active = false;\r
+ this.ToolTip.AutomaticDelay = 1000;\r
+ this.ToolTip.ToolTipIcon = System.Windows.Forms.ToolTipIcon.Info;\r
+ // \r
+ // label64\r
+ // \r
+ this.label64.AutoSize = true;\r
+ this.label64.Location = new System.Drawing.Point(13, 35);\r
+ this.label64.Name = "label64";\r
+ this.label64.Size = new System.Drawing.Size(163, 13);\r
+ this.label64.TabIndex = 81;\r
+ this.label64.Text = "Encoder advanced option string:";\r
+ // \r
+ // x264Panel\r
+ // \r
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;\r
+ this.BackColor = System.Drawing.Color.Transparent;\r
+ this.Controls.Add(this.label64);\r
+ this.Controls.Add(this.advancedQuery);\r
+ this.Controls.Add(this.label43);\r
+ this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r
+ this.Size = new System.Drawing.Size(720, 305);\r
+ this.ResumeLayout(false);\r
+ this.PerformLayout();\r
+\r
+ }\r
+\r
+ #endregion\r
+\r
+ internal System.Windows.Forms.Label label43;\r
+ internal System.Windows.Forms.RichTextBox advancedQuery;\r
+ private System.Windows.Forms.ToolTip ToolTip;\r
+ internal System.Windows.Forms.Label label64;\r
+ }\r
+}\r
--- /dev/null
+/* AdvancedEncoderOpts.cs $\r
+ This file is part of the HandBrake source code.\r
+ Homepage: <http://handbrake.fr>.\r
+ It may be used under the terms of the GNU General Public License. */\r
+\r
+namespace Handbrake.Controls\r
+{\r
+ using System.Windows.Forms;\r
+\r
+ /// <summary>\r
+ /// The x264 Panel\r
+ /// </summary>\r
+ public partial class AdvancedEncoderOpts : UserControl\r
+ {\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="AdvancedEncoderOpts"/> class. \r
+ /// </summary>\r
+ public AdvancedEncoderOpts()\r
+ {\r
+ InitializeComponent();\r
+\r
+ if (Properties.Settings.Default.tooltipEnable)\r
+ ToolTip.Active = true;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the X264 query string\r
+ /// </summary>\r
+ public string AdavancedQuery\r
+ {\r
+ get\r
+ {\r
+ return advancedQuery.Text;\r
+ }\r
+\r
+ set\r
+ {\r
+ advancedQuery.Text = value;\r
+ }\r
+ }\r
+\r
+ public bool IsDisabled\r
+ {\r
+ set\r
+ {\r
+ if (value)\r
+ {\r
+ this.advancedQuery.Enabled = false;\r
+ this.advancedQuery.Text = "Advanced encoder option passthrough is not currently supported for the encoder you have chosen.";\r
+ }\r
+ else\r
+ {\r
+ this.advancedQuery.Enabled = true;\r
+ this.advancedQuery.Text = string.Empty;\r
+ }\r
+ }\r
+ }\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<root>\r
+ <!-- \r
+ Microsoft ResX Schema \r
+ \r
+ Version 2.0\r
+ \r
+ The primary goals of this format is to allow a simple XML format \r
+ that is mostly human readable. The generation and parsing of the \r
+ various data types are done through the TypeConverter classes \r
+ associated with the data types.\r
+ \r
+ Example:\r
+ \r
+ ... ado.net/XML headers & schema ...\r
+ <resheader name="resmimetype">text/microsoft-resx</resheader>\r
+ <resheader name="version">2.0</resheader>\r
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>\r
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>\r
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">\r
+ <value>[base64 mime encoded serialized .NET Framework object]</value>\r
+ </data>\r
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r
+ <comment>This is a comment</comment>\r
+ </data>\r
+ \r
+ There are any number of "resheader" rows that contain simple \r
+ name/value pairs.\r
+ \r
+ Each data row contains a name, and value. The row also contains a \r
+ type or mimetype. Type corresponds to a .NET class that support \r
+ text/value conversion through the TypeConverter architecture. \r
+ Classes that don't support this are serialized and stored with the \r
+ mimetype set.\r
+ \r
+ The mimetype is used for serialized objects, and tells the \r
+ ResXResourceReader how to depersist the object. This is currently not \r
+ extensible. For a given mimetype the value must be set accordingly:\r
+ \r
+ Note - application/x-microsoft.net.object.binary.base64 is the format \r
+ that the ResXResourceWriter will generate, however the reader can \r
+ read any of the formats listed below.\r
+ \r
+ mimetype: application/x-microsoft.net.object.binary.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r
+ : and then encoded with base64 encoding.\r
+ \r
+ mimetype: application/x-microsoft.net.object.soap.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+ : and then encoded with base64 encoding.\r
+\r
+ mimetype: application/x-microsoft.net.object.bytearray.base64\r
+ value : The object must be serialized into a byte array \r
+ : using a System.ComponentModel.TypeConverter\r
+ : and then encoded with base64 encoding.\r
+ -->\r
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">\r
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />\r
+ <xsd:element name="root" msdata:IsDataSet="true">\r
+ <xsd:complexType>\r
+ <xsd:choice maxOccurs="unbounded">\r
+ <xsd:element name="metadata">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" use="required" type="xsd:string" />\r
+ <xsd:attribute name="type" type="xsd:string" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="assembly">\r
+ <xsd:complexType>\r
+ <xsd:attribute name="alias" type="xsd:string" />\r
+ <xsd:attribute name="name" type="xsd:string" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="data">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />\r
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="resheader">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:choice>\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:schema>\r
+ <resheader name="resmimetype">\r
+ <value>text/microsoft-resx</value>\r
+ </resheader>\r
+ <resheader name="version">\r
+ <value>2.0</value>\r
+ </resheader>\r
+ <resheader name="reader">\r
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <resheader name="writer">\r
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <metadata name="ToolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <value>17, 17</value>\r
+ </metadata>\r
+</root>
\ No newline at end of file
\r
#region Other\r
\r
- mainWindow.x264Panel.X264Query = presetQuery.X264Options;\r
+ mainWindow.x264Panel.X264Query = presetQuery.AdvancedEncoderOptions;\r
\r
// Set the preset name\r
mainWindow.labelPreset.Text = "Output Settings (Preset: " + name + ")";\r
\r
private static string X264Query(frmMain mainWindow)\r
{\r
- if (string.IsNullOrEmpty(mainWindow.x264Panel.X264Query)) return string.Empty;\r
+ string advancedOptions = string.Empty;\r
+ switch (mainWindow.drp_videoEncoder.SelectedIndex)\r
+ {\r
+ case 0: // ffmpeg\r
+ advancedOptions = string.IsNullOrEmpty(mainWindow.x264Panel.X264Query)\r
+ ? string.Empty\r
+ : mainWindow.x264Panel.X264Query;\r
+ break;\r
+ case 1: // x264\r
+ advancedOptions = string.IsNullOrEmpty(mainWindow.x264Panel.X264Query)\r
+ ? string.Empty\r
+ : mainWindow.x264Panel.X264Query;\r
+ break;\r
+ case 2: // VP3\r
+ advancedOptions = string.Empty;\r
+ break;\r
+ }\r
+\r
\r
- return " -x " + mainWindow.x264Panel.X264Query;\r
+ return " -x " + advancedOptions;\r
}\r
\r
private static string ExtraSettings()\r
#region Advanced\r
\r
/// <summary>\r
- /// Gets or sets X264Options.\r
+ /// Gets or sets AdvancedEncoderOptions.\r
/// </summary>\r
- public string X264Options { get; set; }\r
+ public string AdvancedEncoderOptions { get; set; }\r
\r
#endregion\r
\r
/// </param>\r
void Remove(Preset preset);\r
\r
+ /// <summary>\r
+ /// Remove a group of presets by category\r
+ /// </summary>\r
+ /// <param name="category">\r
+ /// The Category to remove\r
+ /// </param>\r
+ void RemoveGroup(string category);\r
+\r
/// <summary>\r
/// Get a Preset\r
/// </summary>\r
public void Remove(Preset preset)\r
{\r
this.presets.Remove(preset);\r
+ this.UpdatePresetFiles();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Remove a group of presets by category\r
+ /// </summary>\r
+ /// <param name="category">\r
+ /// The Category to remove\r
+ /// </param>\r
+ public void RemoveGroup(string category)\r
+ {\r
+ List<Preset> removeList = this.presets.Where(p => p.Category == category).ToList();\r
+ foreach (Preset preset in removeList)\r
+ {\r
+ this.presets.Remove(preset);\r
+ }\r
\r
- // Update the presets file\r
this.UpdatePresetFiles();\r
}\r
\r
\r
// Advanced x264 tab\r
case "x264Option":\r
- parsed.X264Options = value;\r
+ parsed.AdvancedEncoderOptions = value;\r
break;\r
\r
// Preset Information\r
AddEncodeElement(xmlWriter, "VideoTwoPass", "integer", parsed.TwoPass ? "1" : "0");\r
\r
// x264 string\r
- AddEncodeElement(xmlWriter, "x264Option", "string", parsed.X264Options);\r
+ AddEncodeElement(xmlWriter, "x264Option", "string", parsed.AdvancedEncoderOptions);\r
}\r
\r
/// <summary>\r
Match chapterMarkers = Regex.Match(input, @" -m");\r
Match chapterMarkersFileMode = Regex.Match(input, @"--markers");\r
\r
- // H264 Tab\r
- Match x264 = Regex.Match(input, @"-x ([.,/a-zA-Z0-9=:-]*)");\r
+ // Advanced Tab\r
+ Match advanced = Regex.Match(input, @"-x ([.,/a-zA-Z0-9=:-]*)");\r
\r
#endregion\r
\r
\r
#endregion\r
\r
- #region H.264 and other\r
+ #region Advanced and other\r
\r
- if (x264.Success)\r
- parsed.X264Options = x264.ToString().Replace("-x ", string.Empty);\r
+ if (advanced.Success)\r
+ parsed.AdvancedEncoderOptions = advanced.ToString().Replace("-x ", string.Empty);\r
\r
#endregion\r
}\r
Release|x86 = Release|x86\r
EndGlobalSection\r
GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
- {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
- {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+ {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Debug|Any CPU.ActiveCfg = Debug|x86\r
+ {A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Debug|Any CPU.Build.0 = Debug|x86\r
{A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Debug|Mixed Platforms.ActiveCfg = Debug|x86\r
{A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Debug|Mixed Platforms.Build.0 = Debug|x86\r
{A2923D42-C38B-4B12-8CBA-B8D93D6B13A3}.Debug|x64.ActiveCfg = Debug|x86\r
<Compile Include="Controls\AudioPanel.Designer.cs">\r
<DependentUpon>AudioPanel.cs</DependentUpon>\r
</Compile>\r
+ <Compile Include="Controls\AdvancedEncoderOpts.cs">\r
+ <SubType>UserControl</SubType>\r
+ </Compile>\r
+ <Compile Include="Controls\AdvancedEncoderOpts.Designer.cs">\r
+ <DependentUpon>AdvancedEncoderOpts.cs</DependentUpon>\r
+ </Compile>\r
<Compile Include="Controls\Filters.cs">\r
<SubType>UserControl</SubType>\r
</Compile>\r
<DependentUpon>AudioPanel.cs</DependentUpon>\r
<SubType>Designer</SubType>\r
</EmbeddedResource>\r
+ <EmbeddedResource Include="Controls\AdvancedEncoderOpts.resx">\r
+ <DependentUpon>AdvancedEncoderOpts.cs</DependentUpon>\r
+ <SubType>Designer</SubType>\r
+ </EmbeddedResource>\r
<EmbeddedResource Include="Controls\Filters.resx">\r
<DependentUpon>Filters.cs</DependentUpon>\r
<SubType>Designer</SubType>\r
\r
using HandBrake.ApplicationServices;\r
using HandBrake.ApplicationServices.Services;\r
+ using HandBrake.Framework.Views;\r
\r
using Handbrake.Properties;\r
\r
/// <param name="e">Unhandled Exception EventArgs </param>\r
private static void CurrentDomainUnhandledException(object sender, UnhandledExceptionEventArgs e)\r
{\r
- MessageBox.Show(\r
- "An Unknown Error has occured. \n\n Exception:" + e.ExceptionObject,\r
- "Unhandled Exception",\r
- MessageBoxButtons.OK,\r
- MessageBoxIcon.Error);\r
+ try\r
+ {\r
+ ExceptionWindow window = new ExceptionWindow();\r
+ window.Setup("An Unknown Error has occured.", e.ExceptionObject.ToString());\r
+ window.ShowDialog(); \r
+ }\r
+ catch (Exception)\r
+ {\r
+ MessageBox.Show(\r
+ "An Unknown Error has occured. \n\n Exception:" + e.ExceptionObject,\r
+ "Unhandled Exception",\r
+ MessageBoxButtons.OK,\r
+ MessageBoxIcon.Error);\r
+ }\r
+\r
}\r
\r
public static int InstanceId;\r
this.tab_chapters = new System.Windows.Forms.TabPage();\r
this.label31 = new System.Windows.Forms.Label();\r
this.tab_advanced = new System.Windows.Forms.TabPage();\r
+ this.advancedEncoderOpts = new Handbrake.Controls.AdvancedEncoderOpts();\r
this.x264Panel = new Handbrake.Controls.x264Panel();\r
this.tab_query = new System.Windows.Forms.TabPage();\r
this.btn_clear = new System.Windows.Forms.Button();\r
this.check_turbo.Enabled = false;\r
this.check_turbo.Location = new System.Drawing.Point(495, 134);\r
this.check_turbo.Name = "check_turbo";\r
- this.check_turbo.Size = new System.Drawing.Size(101, 17);\r
+ this.check_turbo.Size = new System.Drawing.Size(99, 17);\r
this.check_turbo.TabIndex = 9;\r
this.check_turbo.Text = "Turbo first Pass";\r
this.ToolTip.SetToolTip(this.check_turbo, "Makes the first pass of a 2 pass encode faster.");\r
this.radio_cq.BackColor = System.Drawing.Color.Transparent;\r
this.radio_cq.Location = new System.Drawing.Point(366, 37);\r
this.radio_cq.Name = "radio_cq";\r
- this.radio_cq.Size = new System.Drawing.Size(110, 17);\r
+ this.radio_cq.Size = new System.Drawing.Size(105, 17);\r
this.radio_cq.TabIndex = 3;\r
this.radio_cq.Text = "Constant Quality:";\r
this.ToolTip.SetToolTip(this.radio_cq, resources.GetString("radio_cq.ToolTip"));\r
this.radio_avgBitrate.Checked = true;\r
this.radio_avgBitrate.Location = new System.Drawing.Point(367, 108);\r
this.radio_avgBitrate.Name = "radio_avgBitrate";\r
- this.radio_avgBitrate.Size = new System.Drawing.Size(116, 17);\r
+ this.radio_avgBitrate.Size = new System.Drawing.Size(112, 17);\r
this.radio_avgBitrate.TabIndex = 4;\r
this.radio_avgBitrate.TabStop = true;\r
this.radio_avgBitrate.Text = "Avg Bitrate (kbps):";\r
this.check_2PassEncode.BackColor = System.Drawing.Color.Transparent;\r
this.check_2PassEncode.Location = new System.Drawing.Point(385, 134);\r
this.check_2PassEncode.Name = "check_2PassEncode";\r
- this.check_2PassEncode.Size = new System.Drawing.Size(104, 17);\r
+ this.check_2PassEncode.Size = new System.Drawing.Size(106, 17);\r
this.check_2PassEncode.TabIndex = 10;\r
this.check_2PassEncode.Text = "2-Pass Encoding";\r
this.ToolTip.SetToolTip(this.check_2PassEncode, resources.GetString("check_2PassEncode.ToolTip"));\r
this.radio_constantFramerate.Checked = true;\r
this.radio_constantFramerate.Location = new System.Drawing.Point(0, 0);\r
this.radio_constantFramerate.Name = "radio_constantFramerate";\r
- this.radio_constantFramerate.Size = new System.Drawing.Size(122, 17);\r
+ this.radio_constantFramerate.Size = new System.Drawing.Size(117, 17);\r
this.radio_constantFramerate.TabIndex = 17;\r
this.radio_constantFramerate.TabStop = true;\r
this.radio_constantFramerate.Text = "Constant Framerate";\r
this.radio_peakAndVariable.BackColor = System.Drawing.Color.Transparent;\r
this.radio_peakAndVariable.Location = new System.Drawing.Point(0, 23);\r
this.radio_peakAndVariable.Name = "radio_peakAndVariable";\r
- this.radio_peakAndVariable.Size = new System.Drawing.Size(116, 17);\r
+ this.radio_peakAndVariable.Size = new System.Drawing.Size(113, 17);\r
this.radio_peakAndVariable.TabIndex = 19;\r
this.radio_peakAndVariable.Text = "Variable Framerate";\r
this.radio_peakAndVariable.UseVisualStyleBackColor = false;\r
// tab_advanced\r
// \r
this.tab_advanced.BackColor = System.Drawing.Color.Transparent;\r
+ this.tab_advanced.Controls.Add(this.advancedEncoderOpts);\r
this.tab_advanced.Controls.Add(this.x264Panel);\r
this.tab_advanced.Location = new System.Drawing.Point(4, 22);\r
this.tab_advanced.Name = "tab_advanced";\r
this.tab_advanced.Text = "Advanced";\r
this.tab_advanced.UseVisualStyleBackColor = true;\r
// \r
+ // advancedEncoderOpts\r
+ // \r
+ this.advancedEncoderOpts.AdavancedQuery = "";\r
+ this.advancedEncoderOpts.BackColor = System.Drawing.Color.Transparent;\r
+ this.advancedEncoderOpts.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r
+ this.advancedEncoderOpts.Location = new System.Drawing.Point(0, 0);\r
+ this.advancedEncoderOpts.Name = "advancedEncoderOpts";\r
+ this.advancedEncoderOpts.Size = new System.Drawing.Size(720, 209);\r
+ this.advancedEncoderOpts.TabIndex = 1;\r
+ // \r
// x264Panel\r
// \r
this.x264Panel.BackColor = System.Drawing.Color.Transparent;\r
internal RadioButton radio_peakAndVariable;\r
internal RadioButton radio_constantFramerate;\r
private Panel panel1;\r
+ internal Controls.AdvancedEncoderOpts advancedEncoderOpts;\r
}\r
}
\ No newline at end of file
\r
private void BtnRemovePreset_Click(object sender, EventArgs e)\r
{\r
+ throw new Exception();\r
+ if (treeView_presets.SelectedNode == null)\r
+ {\r
+ return;\r
+ }\r
+\r
DialogResult result = MessageBox.Show("Are you sure you wish to delete the selected preset?", "Preset",\r
MessageBoxButtons.YesNo, MessageBoxIcon.Question);\r
if (result == DialogResult.Yes)\r
{\r
- if (treeView_presets.SelectedNode != null)\r
+ if (treeView_presets.SelectedNode.Nodes.Count > 0)\r
{\r
+ // Delete the selected group category\r
+ this.presetHandler.RemoveGroup(treeView_presets.SelectedNode.Text.Trim());\r
+ }\r
+ else\r
+ {\r
+ // Delete the selected item.\r
presetHandler.Remove((Preset)treeView_presets.SelectedNode.Tag);\r
- treeView_presets.Nodes.Remove(treeView_presets.SelectedNode);\r
}\r
+ treeView_presets.Nodes.Remove(treeView_presets.SelectedNode);\r
}\r
+\r
treeView_presets.Select();\r
}\r
\r
{\r
if (treeView_presets.SelectedNode != null)\r
{\r
- DialogResult result = MessageBox.Show("Are you sure you wish to set this preset as the default?",\r
- "Preset", MessageBoxButtons.YesNo, MessageBoxIcon.Question);\r
- if (result == DialogResult.Yes)\r
- {\r
- Properties.Settings.Default.defaultPreset = treeView_presets.SelectedNode.Text;\r
- Properties.Settings.Default.Save();\r
- MessageBox.Show("New default preset set.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Information);\r
- }\r
+ Settings.Default.defaultPreset = treeView_presets.SelectedNode.Text;\r
+ Settings.Default.Save();\r
+ MessageBox.Show("New default preset set.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Information);\r
}\r
else\r
MessageBox.Show("Please select a preset first.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
{\r
presetHandler.UpdateBuiltInPresets(string.Empty);\r
LoadPresetPanel();\r
- if (treeView_presets.Nodes.Count == 0)\r
- MessageBox.Show(\r
- "Unable to load the presets.xml file. Please select \"Update Built-in Presets\" from the Presets Menu. \nMake sure you are running the program in Admin mode if running on Vista. See Windows FAQ for details!",\r
- "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
- else\r
- MessageBox.Show("Presets have been updated!", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Information);\r
-\r
treeView_presets.ExpandAll();\r
}\r
\r
{\r
if (e.KeyCode == Keys.Delete)\r
{\r
- DialogResult result = MessageBox.Show("Are you sure you wish to delete the selected preset?", "Preset",\r
- MessageBoxButtons.YesNo, MessageBoxIcon.Question);\r
- if (result == DialogResult.Yes)\r
- {\r
- if (treeView_presets.SelectedNode != null)\r
- presetHandler.Remove((Preset)treeView_presets.SelectedNode.Tag);\r
-\r
- // Remember each nodes expanded status so we can reload it\r
- List<bool> nodeStatus = new List<bool>();\r
- foreach (TreeNode node in treeView_presets.Nodes)\r
- nodeStatus.Add(node.IsExpanded);\r
-\r
- // Now reload the preset panel\r
- LoadPresetPanel();\r
-\r
- // And finally, re-expand any of the nodes if required\r
- int i = 0;\r
- foreach (TreeNode node in treeView_presets.Nodes)\r
- {\r
- if (nodeStatus[i])\r
- node.Expand();\r
-\r
- i++;\r
- }\r
- }\r
+ this.BtnRemovePreset_Click(sender, e);\r
}\r
}\r
\r
public void SetExtension(string newExtension)\r
{\r
if (newExtension == ".mp4" || newExtension == ".m4v")\r
- if (Check_ChapterMarkers.Checked || AudioSettings.RequiresM4V() || Subtitles.RequiresM4V() || Properties.Settings.Default.useM4v == 2) \r
+ if (Check_ChapterMarkers.Checked || AudioSettings.RequiresM4V() || Subtitles.RequiresM4V() || Properties.Settings.Default.useM4v == 2)\r
newExtension = Properties.Settings.Default.useM4v == 1 ? ".mp4" : ".m4v";\r
else\r
newExtension = ".mp4";\r
if (check_2PassEncode.CheckState == CheckState.Checked)\r
check_turbo.Enabled = true;\r
\r
- tab_advanced.Enabled = true;\r
if ((drop_format.Text.Contains("MP4")) || (drop_format.Text.Contains("M4V")))\r
check_iPodAtom.Enabled = true;\r
else\r
{\r
check_turbo.CheckState = CheckState.Unchecked;\r
check_turbo.Enabled = false;\r
- tab_advanced.Enabled = false;\r
x264Panel.X264Query = string.Empty;\r
check_iPodAtom.Enabled = false;\r
check_iPodAtom.Checked = false;\r
}\r
\r
- // Setup the CQ Slider\r
+ // Setup the CQ Slider and Advanced Panel\r
switch (drp_videoEncoder.Text)\r
{\r
case "MPEG-4 (FFmpeg)":\r
slider_videoQuality.Value = 20; // Just reset to 70% QP 10 on encode change.\r
slider_videoQuality.Minimum = 1;\r
slider_videoQuality.Maximum = 31;\r
+ this.x264Panel.Visible = false;\r
+ this.advancedEncoderOpts.Visible = true;\r
+ this.advancedEncoderOpts.IsDisabled = false;\r
break;\r
case "H.264 (x264)":\r
slider_videoQuality.Minimum = 0;\r
slider_videoQuality.TickFrequency = 1;\r
-\r
- CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");\r
double cqStep = Properties.Settings.Default.x264cqstep;\r
double multiplier = 1.0 / cqStep;\r
double value = slider_videoQuality.Value * multiplier;\r
if (value < slider_videoQuality.Maximum)\r
slider_videoQuality.Value = slider_videoQuality.Maximum - (int)value;\r
\r
+ this.x264Panel.Visible = true;\r
+ this.x264Panel.BringToFront();\r
+ this.advancedEncoderOpts.Visible = false;\r
break;\r
case "VP3 (Theora)":\r
if (slider_videoQuality.Value > 63)\r
slider_videoQuality.Value = 45; // Just reset to 70% QP 45 on encode change.\r
slider_videoQuality.Minimum = 0;\r
slider_videoQuality.Maximum = 63;\r
+\r
+ this.x264Panel.Visible = false;\r
+ this.advancedEncoderOpts.Visible = true;\r
+ this.advancedEncoderOpts.IsDisabled = true;\r
break;\r
}\r
}\r
{\r
lbl_SliderValue.Text += " (Warning: lossless)";\r
}\r
- \r
+\r
break;\r
case "VP3 (Theora)":\r
lbl_SliderValue.Text = "QP:" + slider_videoQuality.Value;\r
\r
private void radio_avgBitrate_CheckedChanged(object sender, EventArgs e)\r
{\r
- text_bitrate.Enabled = true;\r
- slider_videoQuality.Enabled = false;\r
+ if (radio_avgBitrate.Checked)\r
+ {\r
+ text_bitrate.Enabled = true;\r
+ if (string.IsNullOrEmpty(text_bitrate.Text))\r
+ {\r
+ text_bitrate.Text = "1500";\r
+ }\r
+ slider_videoQuality.Enabled = false;\r
\r
- check_2PassEncode.Enabled = true;\r
+ check_2PassEncode.Enabled = true;\r
+ }\r
}\r
\r
private void radio_cq_CheckedChanged(object sender, EventArgs e)\r
}\r
\r
if (preset.Category == category && rootNode != null)\r
- rootNode.Nodes.Add(new TreeNode(preset.Name) { ToolTipText = preset.Description, ForeColor = Color.DarkBlue });\r
+ rootNode.Nodes.Add(new TreeNode(preset.Name) { ToolTipText = preset.Description, ForeColor = Color.DarkBlue, Tag = preset });\r
}\r
\r
rootNode = null;\r
category = null;\r
foreach (Preset preset in this.presetHandler.Presets.Where(p => !p.IsBuildIn)) // User Presets\r
{\r
+ // If the category of this preset doesn't match the current category we are processing\r
+ // Then we need to create a new root node.\r
if (preset.Category != category && preset.Category != string.Empty)\r
{\r
rootNode = new TreeNode(preset.Category) { ForeColor = Color.Black };\r
}\r
\r
if (preset.Category == category && rootNode != null)\r
- rootNode.Nodes.Add(new TreeNode(preset.Name) { ForeColor = Color.Black, ToolTipText = preset.Description });\r
+ rootNode.Nodes.Add(new TreeNode(preset.Name) { ForeColor = Color.Black, ToolTipText = preset.Description, Tag = preset });\r
else\r
- treeView_presets.Nodes.Add(new TreeNode(preset.Name) { ForeColor = Color.Black, ToolTipText = preset.Description });\r
+ treeView_presets.Nodes.Add(new TreeNode(preset.Name) { ForeColor = Color.Black, ToolTipText = preset.Description, Tag = preset });\r
}\r
\r
treeView_presets.Update();\r
lbl_source.Text = queue.QueueManager.LastProcessedJob.Source + "(Title: " + title + " Chapters: " + chapterlbl + ")";\r
lbl_dest.Text = queue.QueueManager.LastProcessedJob.Destination;\r
lbl_encodeOptions.Text = "Video: " + parsed.VideoEncoder + " Audio: " + audio + Environment.NewLine +\r
- "x264 Options: " + parsed.X264Options;\r
+ "x264 Options: " + parsed.AdvancedEncoderOptions;\r
}\r
catch (Exception)\r
{\r