namespace HandBrake.ApplicationServices.Utilities\r
{\r
using System;\r
- using System.Collections;\r
+ using System.Collections.Generic;\r
using System.IO;\r
using System.Text;\r
using System.Windows.Forms;\r
using System.Xml;\r
\r
+ using HandBrake.ApplicationServices.Functions;\r
using HandBrake.ApplicationServices.Model;\r
using HandBrake.ApplicationServices.Model.Encoding;\r
\r
* TODO:\r
* - Update with the new vfr,pfr,cfr keys\r
* - Clean up this code, it's pretty nasty right now.\r
- **/ \r
+ **/\r
\r
#region Import\r
\r
- public static QueryParserUtility Import(string filename)\r
+ public static EncodeTask Import(string filename)\r
{\r
XmlNode root = loadFile(filename);\r
if (root == null) return null;\r
\r
// We'll query a query parser object and use it's public var structures to store all the data.\r
// This will allow the preset loader logic to be used instead of writing custom logic just for this file.\r
- QueryParserUtility queryParsed = new QueryParserUtility();\r
+ EncodeTask parsed = new EncodeTask();\r
string qualityMode = string.Empty;\r
\r
#region Get a List of Audio Track Objects\r
XmlNode audioListDict = root.ChildNodes[2].ChildNodes[0].FirstChild.ChildNodes[1];\r
- ArrayList audioTracks = new ArrayList();\r
+ List<AudioTrack> audioTracks = new List<AudioTrack>();\r
\r
for (int i = 0; i < audioListDict.ChildNodes.Count; i++)\r
{\r
}\r
}\r
audioTracks.Add(track);\r
- queryParsed.AudioInformation = audioTracks;\r
+ parsed.AudioTracks = audioTracks;\r
}\r
#endregion\r
\r
{\r
// Output Settings\r
case "FileFormat":\r
- queryParsed.Format = value;\r
+ parsed.OutputFormat = Converters.GetFileFormat(value);\r
break;\r
case "Mp4HttpOptimize":\r
- queryParsed.OptimizeMP4 = value == "1";\r
+ parsed.OptimizeMP4 = value == "1";\r
break;\r
case "Mp4LargeFile":\r
- queryParsed.LargeMP4 = value == "1";\r
+ parsed.IPod5GSupport = value == "1";\r
break;\r
case "Mp4iPodCompatible":\r
- queryParsed.IpodAtom = value == "1";\r
+ parsed.IPod5GSupport = value == "1";\r
break;\r
\r
// Picture Settings\r
// Not used\r
break;\r
case "PictureTopCrop":\r
- queryParsed.CropTop = value;\r
+ parsed.Cropping.Top = int.Parse(value);\r
break;\r
case "PictureBottomCrop":\r
- queryParsed.CropBottom = value;\r
+ parsed.Cropping.Bottom = int.Parse(value);\r
break;\r
case "PictureLeftCrop":\r
- queryParsed.CropLeft = value;\r
+ parsed.Cropping.Left = int.Parse(value);\r
break;\r
case "PictureRightCrop":\r
- queryParsed.CropRight = value;\r
+ parsed.Cropping.Right = int.Parse(value);\r
break;\r
case "PictureHeight":\r
- queryParsed.Height = int.Parse(value);\r
+ parsed.Height = int.Parse(value);\r
break;\r
case "PictureWidth":\r
- queryParsed.Width = int.Parse(value);\r
+ parsed.Width = int.Parse(value);\r
break;\r
case "PictureKeepRatio":\r
- queryParsed.KeepDisplayAsect = value == "1";\r
+ parsed.KeepDisplayAspect = value == "1";\r
break;\r
case "PicturePAR":\r
- queryParsed.AnamorphicMode = int.Parse(value);\r
+ switch (value)\r
+ {\r
+ \r
+ case "0":\r
+ parsed.Anamorphic = Anamorphic.None;\r
+ break;\r
+ default:\r
+ parsed.Anamorphic = Anamorphic.Strict;\r
+ break;\r
+ case "2":\r
+ parsed.Anamorphic = Anamorphic.Loose;\r
+ break;\r
+ case "3":\r
+ parsed.Anamorphic = Anamorphic.Custom;\r
+ break;\r
+\r
+ }\r
break;\r
\r
// Filters\r
case "PictureDeblock":\r
- queryParsed.DeBlock = int.Parse(value);\r
+ parsed.Deblock = int.Parse(value);\r
break;\r
case "PictureDecomb":\r
- queryParsed.Decomb = "Off";\r
+ parsed.Decomb = Decomb.Off;\r
// Don't place custom here as it's handled in the filter panel\r
- if (value == "2") queryParsed.Decomb = "Default";\r
+ if (value == "2") parsed.Decomb = Decomb.Default;\r
break;\r
case "PictureDecombCustom":\r
if (value != string.Empty)\r
- queryParsed.Decomb = value;\r
+ parsed.CustomDecomb = value;\r
break;\r
case "PictureDecombDeinterlace":\r
// Not Used\r
switch (value)\r
{\r
case "0":\r
- queryParsed.DeInterlace = "Off";\r
+ parsed.Deinterlace = Deinterlace.Off;\r
break;\r
// Don't place custom here as it's handled in the filter panel\r
case "2":\r
- queryParsed.DeInterlace = "Fast";\r
+ parsed.Deinterlace = Deinterlace.Fast;\r
break;\r
case "3":\r
- queryParsed.DeInterlace = "Slow";\r
+ parsed.Deinterlace = Deinterlace.Slow;\r
break;\r
case "4":\r
- queryParsed.DeInterlace = "Slowest";\r
+ parsed.Deinterlace = Deinterlace.Slower;\r
break;\r
}\r
break;\r
case "PictureDeinterlaceCustom":\r
if (value != string.Empty)\r
- queryParsed.DeInterlace = value;\r
+ parsed.CustomDeinterlace = value;\r
break;\r
case "PictureDenoise":\r
switch (value)\r
{\r
case "0":\r
- queryParsed.DeNoise = "Off";\r
+ parsed.Denoise = Denoise.Off;\r
break;\r
// Don't place custom here as it's handled in the filter panel\r
case "2":\r
- queryParsed.DeNoise = "Weak";\r
+ parsed.Denoise = Denoise.Weak;\r
break;\r
case "3":\r
- queryParsed.DeNoise = "Medium";\r
+ parsed.Denoise = Denoise.Medium;\r
break;\r
case "4":\r
- queryParsed.DeNoise = "Strong";\r
+ parsed.Denoise = Denoise.Strong;\r
break;\r
}\r
\r
break;\r
case "PictureDenoiseCustom":\r
if (value != string.Empty)\r
- queryParsed.DeNoise = value;\r
+ parsed.CustomDenoise = value;\r
break;\r
case "PictureDetelecine":\r
- queryParsed.DeTelecine = "Off";\r
- if (value == "1") queryParsed.DeTelecine = "Default";\r
+ parsed.Detelecine = Detelecine.Off;\r
+ if (value == "1") parsed.Detelecine = Detelecine.Default;\r
break;\r
case "PictureDetelecineCustom":\r
if (value != string.Empty)\r
- queryParsed.DeTelecine = value;\r
+ parsed.CustomDetelecine = value;\r
break;\r
\r
// Video Tab\r
case "VideoAvgBitrate":\r
- queryParsed.AverageVideoBitrate = value;\r
+ parsed.VideoBitrate = int.Parse(value);\r
break;\r
case "VideoEncoder":\r
- queryParsed.VideoEncoder = value;\r
+ parsed.VideoEncoder = Converters.GetVideoEncoder(value);\r
break;\r
case "VideoFramerate":\r
- queryParsed.VideoFramerate = value;\r
+ parsed.Framerate = int.Parse(value);\r
break;\r
case "VideoGrayScale":\r
- queryParsed.Grayscale = value == "1";\r
+ parsed.Grayscale = value == "1";\r
break;\r
case "VideoQualitySlider":\r
- queryParsed.VideoQuality = float.Parse(value);\r
+ parsed.Quality = double.Parse(value);\r
break;\r
case "VideoQualityType": // The Type of Quality Mode used\r
qualityMode = value;\r
break;\r
case "VideoTargetSize":\r
- queryParsed.VideoTargetSize = value;\r
+ parsed.TargetSize = int.Parse(value);\r
break;\r
case "VideoTurboTwoPass":\r
- queryParsed.TurboFirstPass = value == "1";\r
+ parsed.TurboFirstPass = value == "1";\r
break;\r
case "VideoTwoPass":\r
- queryParsed.TwoPass = value == "1";\r
+ parsed.TwoPass = value == "1";\r
break;\r
\r
// Chapter Markers Tab\r
case "ChapterMarkers":\r
- queryParsed.ChapterMarkers = value == "1";\r
+ parsed.IncludeChapterMarkers = value == "1";\r
break;\r
\r
// Advanced x264 tab\r
case "x264Option":\r
- queryParsed.H264Query = value;\r
+ parsed.X264Options = value;\r
break;\r
\r
// Preset Information\r
case "PresetBuildNumber":\r
- queryParsed.PresetBuildNumber = int.Parse(value);\r
+ parsed.PresetBuildNumber = int.Parse(value);\r
break;\r
case "PresetDescription":\r
- queryParsed.PresetDescription = value;\r
+ parsed.PresetDescription = value;\r
break;\r
case "PresetName":\r
- queryParsed.PresetName = value;\r
+ parsed.PresetName = value;\r
break;\r
case "Type":\r
- queryParsed.Type = value;\r
+ parsed.Type = value;\r
break;\r
case "UsesMaxPictureSettings":\r
- queryParsed.UsesMaxPictureSettings = value == "1";\r
+ parsed.UsesMaxPictureSettings = value == "1";\r
break;\r
case "UsesPictureFilters":\r
- queryParsed.UsesPictureFilters = value == "1";\r
+ parsed.UsesPictureFilters = value == "1";\r
break;\r
case "UsesPictureSettings":\r
- queryParsed.UsesPictureSettings = value == "1";\r
+ parsed.UsesPictureSettings = value == "1";\r
break;\r
}\r
}\r
switch (qualityMode)\r
{\r
case "0": // FileSize\r
- queryParsed.VideoQuality = -1;\r
- queryParsed.AverageVideoBitrate = null;\r
+ parsed.Quality = null;\r
+ parsed.VideoBitrate = null;\r
break;\r
case "1": // Avg Bitrate\r
- queryParsed.VideoQuality = -1;\r
- queryParsed.VideoTargetSize = null;\r
+ parsed.Quality = null;\r
+ parsed.TargetSize = null;\r
break;\r
case "2": // CQ\r
- queryParsed.AverageVideoBitrate = null;\r
- queryParsed.VideoTargetSize = null;\r
+ parsed.VideoBitrate = null;\r
+ parsed.TargetSize = null;\r
break;\r
}\r
#endregion\r
\r
- return queryParsed;\r
+ return parsed;\r
}\r
\r
private static XmlNode loadFile(string filename)\r
/// </param>\r
public static void Export(string path, Preset preset)\r
{\r
- QueryParserUtility parsed = QueryParserUtility.Parse(preset.Query);\r
+ EncodeTask parsed = QueryParserUtility.Parse(preset.Query);\r
XmlTextWriter xmlWriter = new XmlTextWriter(path, Encoding.UTF8) { Formatting = Formatting.Indented };\r
\r
// Header\r
/// <param name="preset">\r
/// The preset.\r
/// </param>\r
- private static void WritePreset(XmlTextWriter xmlWriter, QueryParserUtility parsed, Preset preset)\r
+ private static void WritePreset(XmlTextWriter xmlWriter, EncodeTask parsed, Preset preset)\r
{\r
xmlWriter.WriteStartElement("dict");\r
AudioListArrayDict(xmlWriter, parsed);\r
/// <param name="preset">\r
/// The preset.\r
/// </param>\r
- private static void AddEncodeSettings(XmlTextWriter xmlWriter, QueryParserUtility parsed, Preset preset)\r
+ private static void AddEncodeSettings(XmlTextWriter xmlWriter, EncodeTask parsed, Preset preset)\r
{\r
- AddEncodeElement(xmlWriter, "ChapterMarkers", "integer", parsed.ChapterMarkers ? "1" : "0");\r
+ AddEncodeElement(xmlWriter, "ChapterMarkers", "integer", parsed.IncludeChapterMarkers ? "1" : "0");\r
AddEncodeElement(xmlWriter, "Default", "integer", "0");\r
- AddEncodeElement(xmlWriter, "FileFormat", "string", parsed.Format.ToUpper() + " file");\r
+ AddEncodeElement(xmlWriter, "FileFormat", "string", Converters.GetFileFormat(parsed.OutputFormat) + " file");\r
AddBooleanElement(xmlWriter, "Folder", false);\r
AddEncodeElement(xmlWriter, "Mp4HttpOptimize", "integer", parsed.OptimizeMP4 ? "1" : "0");\r
- AddEncodeElement(xmlWriter, "Mp4LargeFile", "integer", parsed.LargeMP4 ? "1" : "0");\r
- AddEncodeElement(xmlWriter, "Mp4iPodCompatible", "integer", parsed.IpodAtom ? "1" : "0");\r
+ AddEncodeElement(xmlWriter, "Mp4LargeFile", "integer", parsed.LargeFile ? "1" : "0");\r
+ AddEncodeElement(xmlWriter, "Mp4iPodCompatible", "integer", parsed.IPod5GSupport ? "1" : "0");\r
AddEncodeElement(xmlWriter, "PictureAutoCrop", "integer", "1");\r
- AddEncodeElement(xmlWriter, "PictureBottomCrop", "integer", parsed.CropBottom);\r
+ AddEncodeElement(xmlWriter, "PictureBottomCrop", "integer", parsed.Cropping.Bottom.ToString());\r
\r
// Filters\r
- AddEncodeElement(xmlWriter, "PictureDeblock", "integer", parsed.DeBlock.ToString());\r
+ AddEncodeElement(xmlWriter, "PictureDeblock", "integer", parsed.Deblock.ToString());\r
\r
switch (parsed.Decomb)\r
{\r
- case "Off":\r
+ case Decomb.Off:\r
AddEncodeElement(xmlWriter, "PictureDecomb", "integer", "0");\r
AddEncodeElement(xmlWriter, "PictureDecombCustom", "string", string.Empty);\r
break;\r
- case "Default":\r
+ case Decomb.Default:\r
AddEncodeElement(xmlWriter, "PictureDecomb", "integer", "1");\r
AddEncodeElement(xmlWriter, "PictureDecombCustom", "string", string.Empty);\r
break;\r
default:\r
AddEncodeElement(xmlWriter, "PictureDecomb", "integer", "2");\r
- AddEncodeElement(xmlWriter, "PictureDecombCustom", "string", parsed.Decomb);\r
+ AddEncodeElement(xmlWriter, "PictureDecombCustom", "string", parsed.CustomDecomb);\r
break;\r
}\r
- AddEncodeElement(xmlWriter, "PictureDecombDeinterlace", "integer", parsed.Decomb != "Off" ? "0" : "1"); \r
+ AddEncodeElement(xmlWriter, "PictureDecombDeinterlace", "integer", parsed.Decomb != Decomb.Off ? "0" : "1");\r
\r
- switch (parsed.DeInterlace)\r
+ switch (parsed.Deinterlace)\r
{\r
- case "Off":\r
+ case Deinterlace.Off:\r
AddEncodeElement(xmlWriter, "PictureDeinterlace", "integer", "0");\r
AddEncodeElement(xmlWriter, "PictureDeinterlaceCustom", "string", string.Empty);\r
break;\r
- case "Fast":\r
+ case Deinterlace.Fast:\r
AddEncodeElement(xmlWriter, "PictureDeinterlace", "integer", "1");\r
AddEncodeElement(xmlWriter, "PictureDeinterlaceCustom", "string", string.Empty);\r
break;\r
- case "Slow":\r
+ case Deinterlace.Slow:\r
AddEncodeElement(xmlWriter, "PictureDeinterlace", "integer", "2");\r
AddEncodeElement(xmlWriter, "PictureDeinterlaceCustom", "string", string.Empty);\r
break;\r
- case "Slower":\r
+ case Deinterlace.Slower:\r
AddEncodeElement(xmlWriter, "PictureDeinterlace", "integer", "3");\r
AddEncodeElement(xmlWriter, "PictureDeinterlaceCustom", "string", string.Empty);\r
break;\r
default:\r
AddEncodeElement(xmlWriter, "PictureDeinterlace", "integer", "4");\r
- AddEncodeElement(xmlWriter, "PictureDeinterlaceCustom", "string", parsed.DeInterlace);\r
+ AddEncodeElement(xmlWriter, "PictureDeinterlaceCustom", "string", parsed.CustomDeinterlace);\r
break;\r
}\r
\r
- switch (parsed.DeNoise)\r
+ switch (parsed.Denoise)\r
{\r
- case "Off":\r
+ case Denoise.Off:\r
AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "0");\r
AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", string.Empty);\r
break;\r
- case "Weak":\r
+ case Denoise.Weak:\r
AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "1");\r
AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", string.Empty);\r
break;\r
- case "Medium":\r
+ case Denoise.Medium:\r
AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "2");\r
AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", string.Empty);\r
break;\r
- case "Strong":\r
+ case Denoise.Strong:\r
AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "3");\r
AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", string.Empty);\r
break;\r
default:\r
AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "4");\r
- AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", parsed.DeNoise);\r
+ AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", parsed.CustomDenoise);\r
break;\r
}\r
\r
int detelecine;\r
- switch (parsed.DeTelecine)\r
+ switch (parsed.Detelecine)\r
{\r
- case "Off":\r
+ case Detelecine.Off:\r
detelecine = 0;\r
break;\r
- case "Default":\r
+ case Detelecine.Default:\r
detelecine = 2;\r
break;\r
default:\r
}\r
\r
AddEncodeElement(xmlWriter, "PictureDetelecine", "integer", detelecine.ToString());\r
- AddEncodeElement(xmlWriter, "PictureDetelecineCustom", "string", detelecine == 1 ? parsed.DeTelecine : string.Empty);\r
+ AddEncodeElement(xmlWriter, "PictureDetelecineCustom", "string", detelecine == 1 ? parsed.CustomDecomb : string.Empty);\r
\r
// Picture Settings\r
AddEncodeElement(xmlWriter, "PictureHeight", "integer", parsed.Height.ToString());\r
- AddEncodeElement(xmlWriter, "PictureKeepRatio", "integer", parsed.KeepDisplayAsect ? "1" : "0");\r
- AddEncodeElement(xmlWriter, "PictureLeftCrop", "integer", parsed.CropLeft);\r
- AddEncodeElement(xmlWriter, "PictureModulus", "integer", parsed.AnamorphicModulus.ToString());\r
- AddEncodeElement(xmlWriter, "PicturePAR", "integer", parsed.AnamorphicMode.ToString());\r
- AddEncodeElement(xmlWriter, "PictureRightCrop", "integer", parsed.CropRight);\r
- AddEncodeElement(xmlWriter, "PictureTopCrop", "integer", parsed.CropTop);\r
+ AddEncodeElement(xmlWriter, "PictureKeepRatio", "integer", parsed.KeepDisplayAspect ? "1" : "0");\r
+ AddEncodeElement(xmlWriter, "PictureLeftCrop", "integer", parsed.Cropping.Left.ToString());\r
+ AddEncodeElement(xmlWriter, "PictureModulus", "integer", parsed.Modulus.ToString());\r
+ AddEncodeElement(xmlWriter, "PicturePAR", "integer", ((int)parsed.Anamorphic).ToString());\r
+ AddEncodeElement(xmlWriter, "PictureRightCrop", "integer", parsed.Cropping.Right.ToString());\r
+ AddEncodeElement(xmlWriter, "PictureTopCrop", "integer", parsed.Cropping.Top.ToString());\r
AddEncodeElement(xmlWriter, "PictureWidth", "integer", parsed.Width.ToString());\r
\r
// Preset Information\r
AddEncodeElement(xmlWriter, "UsesPictureSettings", "integer", "2");\r
\r
// Video Settings\r
- AddEncodeElement(xmlWriter, "VideoAvgBitrate", "string", parsed.AverageVideoBitrate);\r
- AddEncodeElement(xmlWriter, "VideoEncoder", "string", parsed.VideoEncoder);\r
- AddEncodeElement(xmlWriter, "VideoFramerate", "string", parsed.VideoFramerate);\r
- AddEncodeElement(xmlWriter, "VideFrameratePFR", "integer", parsed.Pfr ? "1" : "0");\r
+ AddEncodeElement(xmlWriter, "VideoAvgBitrate", "string", parsed.VideoBitrate.ToString());\r
+ AddEncodeElement(xmlWriter, "VideoEncoder", "string", Converters.GetGUIVideoEncoder(parsed.VideoEncoder));\r
+ AddEncodeElement(xmlWriter, "VideoFramerate", "string", parsed.Framerate.ToString());\r
+ AddEncodeElement(xmlWriter, "VideFrameratePFR", "integer", parsed.FramerateMode == FramerateMode.PFR ? "1" : "0");\r
AddEncodeElement(xmlWriter, "VideoGrayScale", "integer", parsed.Grayscale ? "1" : "0");\r
- AddEncodeElement(xmlWriter, "VideoQualitySlider", "real", parsed.VideoQuality.ToString());\r
+ AddEncodeElement(xmlWriter, "VideoQualitySlider", "real", parsed.Quality.ToString());\r
\r
int videoQualityType = 0;\r
- if (!string.IsNullOrEmpty(parsed.VideoTargetSize)) videoQualityType = 0;\r
- else if (!string.IsNullOrEmpty(parsed.AverageVideoBitrate)) videoQualityType = 1;\r
- else if (parsed.VideoQuality != 0) videoQualityType = 2;\r
+ if (parsed.TargetSize != null) videoQualityType = 0;\r
+ else if (parsed.VideoBitrate != null) videoQualityType = 1;\r
+ else if (parsed.Quality != null) videoQualityType = 2;\r
\r
AddEncodeElement(xmlWriter, "VideoQualityType", "integer", videoQualityType.ToString());\r
- AddEncodeElement(xmlWriter, "VideoTargetSize", "string", parsed.VideoTargetSize);\r
+ AddEncodeElement(xmlWriter, "VideoTargetSize", "string", parsed.TargetSize.ToString());\r
AddEncodeElement(xmlWriter, "VideoTurboTwoPass", "integer", parsed.TurboFirstPass ? "1" : "0");\r
AddEncodeElement(xmlWriter, "VideoTwoPass", "integer", parsed.TwoPass ? "1" : "0");\r
\r
// x264 string\r
- AddEncodeElement(xmlWriter, "x264Option", "string", parsed.H264Query);\r
+ AddEncodeElement(xmlWriter, "x264Option", "string", parsed.X264Options);\r
}\r
\r
/// <summary>\r
/// <param name="parsed">\r
/// The parsed.\r
/// </param>\r
- private static void AudioListArrayDict(XmlTextWriter xmlWriter, QueryParserUtility parsed)\r
+ private static void AudioListArrayDict(XmlTextWriter xmlWriter, EncodeTask parsed)\r
{\r
xmlWriter.WriteStartElement("key");\r
xmlWriter.WriteString("AudioList");\r
xmlWriter.WriteEndElement();\r
\r
xmlWriter.WriteStartElement("array");\r
- foreach (AudioTrack track in parsed.AudioInformation)\r
+ foreach (AudioTrack track in parsed.AudioTracks)\r
{\r
AddAudioItem(xmlWriter, track);\r
}\r
xmlWriter.WriteElementString("string", audioTrack.MixDown);\r
\r
xmlWriter.WriteElementString("key", "AudioSamplerate");\r
- xmlWriter.WriteElementString("string", audioTrack.SampleRate);\r
+ xmlWriter.WriteElementString("string", audioTrack.SampleRate);\r
\r
xmlWriter.WriteElementString("key", "AudioTrack");\r
xmlWriter.WriteElementString("integer", audioTrack.Track);\r