using System;\r
using System.Text.RegularExpressions;\r
\r
+ using HandBrake.ApplicationServices.Model.Encoding;\r
+\r
/// <summary>\r
/// A class to convert various things to native C# objects\r
/// </summary>\r
public class Converters\r
{\r
+ /**\r
+ * TODO:\r
+ * - Many of these converters can be ditched at a later point. Should be able to model all this within the enums themsevles.\r
+ * \r
+ **/ \r
+\r
/// <summary>\r
/// Convert HandBrakes time remaining into a TimeSpan\r
/// </summary>\r
/// </summary>\r
/// <param name="audioEnc">The Audio Encoder</param>\r
/// <returns>The GUI representation of that audio encoder</returns>\r
- public static string GetAudioEncoder(string audioEnc)\r
+ public static string GetGUIAudioEncoder(string audioEnc)\r
{\r
switch (audioEnc)\r
{\r
return "AAC (faac)";\r
}\r
}\r
+\r
+ /// <summary>\r
+ /// Get the Video Encoder for a given string\r
+ /// </summary>\r
+ /// <param name="encoder">\r
+ /// The encoder name\r
+ /// </param>\r
+ /// <returns>\r
+ /// VideoEncoder enum object\r
+ /// </returns>\r
+ public static VideoEncoder GetVideoEncoder(string encoder)\r
+ {\r
+ switch (encoder)\r
+ {\r
+ case "ffmpeg":\r
+ return VideoEncoder.FFMpeg;\r
+ case "x264":\r
+ return VideoEncoder.X264;\r
+ case "theora":\r
+ return VideoEncoder.Theora;\r
+ default:\r
+ return VideoEncoder.X264;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Get a GUI name for a given video Encoder.\r
+ /// </summary>\r
+ /// <param name="encoder">\r
+ /// A VideoEncoder Enum object\r
+ /// </param>\r
+ /// <returns>\r
+ /// A GUI encoder name, default is x264\r
+ /// </returns>\r
+ public static string GetGUIVideoEncoder(VideoEncoder encoder)\r
+ {\r
+ switch (encoder)\r
+ {\r
+ case VideoEncoder.FFMpeg:\r
+ return "MPEG-4 (FFmpeg)";\r
+ case VideoEncoder.X264:\r
+ return "H.264 (x264)";\r
+ case VideoEncoder.Theora:\r
+ return "VP3 (Theora)";\r
+ default:\r
+ return "H.264 (x264)";\r
+ }\r
+ }\r
+\r
+\r
+ /// <summary>\r
+ /// Get the OutputFormat Enum for a given string\r
+ /// </summary>\r
+ /// <param name="format">\r
+ /// OutputFormat as a string\r
+ /// </param>\r
+ /// <returns>\r
+ /// An OutputFormat Enum\r
+ /// </returns>\r
+ public static OutputFormat GetFileFormat(string format)\r
+ {\r
+ switch (format.ToLower())\r
+ {\r
+ default:\r
+ return OutputFormat.Mp4;\r
+ case "m4v":\r
+ return OutputFormat.M4V;\r
+ case "mkv":\r
+ return OutputFormat.Mkv;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Get the OutputFormat Enum for a given string\r
+ /// </summary>\r
+ /// <param name="format">\r
+ /// OutputFormat as a string\r
+ /// </param>\r
+ /// <returns>\r
+ /// An OutputFormat Enum\r
+ /// </returns>\r
+ public static string GetFileFormat(OutputFormat format)\r
+ {\r
+ switch (format)\r
+ {\r
+ default:\r
+ return "mp4";\r
+ case OutputFormat.M4V:\r
+ return "m4v";\r
+ case OutputFormat.Mkv:\r
+ return "mkv";\r
+ }\r
+ }\r
}\r
}\r
<Compile Include="Model\Encoding\AudioTrack.cs" />\r
<Compile Include="Model\Encoding\Anamorphic.cs" />\r
<Compile Include="Model\Encoding\AudioEncoder.cs" />\r
+ <Compile Include="Model\Encoding\FramerateMode.cs" />\r
<Compile Include="Model\Encoding\Mixdown.cs" />\r
<Compile Include="Model\Encoding\PointToPointMode.cs" />\r
<Compile Include="Model\Encoding\Cropping.cs" />\r
<Compile Include="Model\Encoding\OutputFormat.cs" />\r
<Compile Include="Model\Encoding\SubtitleTrack.cs" />\r
<Compile Include="Model\Encoding\VideoEncoder.cs" />\r
- <Compile Include="Model\Encoding\VideoEncodeMode.cs" />\r
+ <Compile Include="Model\Encoding\VideoEncodeRateMode.cs" />\r
<Compile Include="Model\Preset.cs" />\r
<Compile Include="Model\QueueTask.cs" />\r
<Compile Include="Model\Encoding\SubtitleType.cs" />\r
/// </summary>\r
public EncodeTask()\r
{\r
+ this.Cropping = new Cropping();\r
}\r
\r
#region Source\r
/// <summary>\r
/// Gets or sets DisplayWidth.\r
/// </summary>\r
- public int DisplayWidth { get; set; }\r
+ public double DisplayWidth { get; set; }\r
\r
/// <summary>\r
/// Gets or sets a value indicating whether KeepDisplayAspect.\r
/// <summary>\r
/// Gets or sets VideoEncodeRateType.\r
/// </summary>\r
- public VideoEncodeMode VideoEncodeRateType { get; set; }\r
+ public VideoEncodeRateMode VideoEncodeRateType { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the VideoEncoder\r
+ /// </summary>\r
+ public VideoEncoder VideoEncoder { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the Video Encode Mode\r
+ /// </summary>\r
+ public FramerateMode FramerateMode { get; set; }\r
\r
/// <summary>\r
/// Gets or sets Quality.\r
/// </summary>\r
- public double Quality { get; set; }\r
+ public double? Quality { get; set; }\r
\r
/// <summary>\r
/// Gets or sets TargetSize.\r
/// </summary>\r
- public int TargetSize { get; set; }\r
+ public int? TargetSize { get; set; }\r
\r
/// <summary>\r
/// Gets or sets VideoBitrate.\r
/// </summary>\r
- public int VideoBitrate { get; set; }\r
+ public int? VideoBitrate { get; set; }\r
\r
/// <summary>\r
/// Gets or sets a value indicating whether TwoPass.\r
/// </summary>\r
public double? Framerate { get; set; }\r
\r
- /// <summary>\r
- /// Gets or sets a value indicating whether PeakFramerate.\r
- /// </summary>\r
- public bool PeakFramerate { get; set; }\r
-\r
#endregion\r
\r
#region Audio\r
/// Gets or sets X264Options.\r
/// </summary>\r
public string X264Options { get; set; }\r
+\r
+ #endregion\r
+\r
+ #region Preset Information (TODO This should probably be dropped)\r
+\r
+ /// <summary>\r
+ /// Gets or sets PresetBuildNumber.\r
+ /// </summary>\r
+ public int PresetBuildNumber { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or sets PresetDescription.\r
+ /// </summary>\r
+ public string PresetDescription { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or sets PresetName.\r
+ /// </summary>\r
+ public string PresetName { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or sets Type.\r
+ /// </summary>\r
+ public string Type { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or sets a value indicating whether UsesMaxPictureSettings.\r
+ /// </summary>\r
+ public bool UsesMaxPictureSettings { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or sets a value indicating whether UsesPictureFilters.\r
+ /// </summary>\r
+ public bool UsesPictureFilters { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or sets a value indicating whether UsesPictureSettings.\r
+ /// </summary>\r
+ public bool UsesPictureSettings { get; set; }\r
#endregion\r
}\r
}\r
public class Cropping\r
{\r
/// <summary>\r
+ /// Initializes a new instance of the <see cref="Cropping"/> class. \r
+ /// </summary>\r
+ public Cropping()\r
+ {\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="Cropping"/> class. \r
+ /// </summary>\r
+ /// <param name="top">\r
+ /// The Top Value\r
+ /// </param>\r
+ /// <param name="bottom">\r
+ /// The Bottom Value\r
+ /// </param>\r
+ /// <param name="left">\r
+ /// The Left Value\r
+ /// </param>\r
+ /// <param name="right">\r
+ /// The Right Value\r
+ /// </param>\r
+ public Cropping(int top, int bottom, int left, int right)\r
+ {\r
+ this.Top = top;\r
+ this.Bottom = bottom;\r
+ this.Left = left;\r
+ this.Right = right;\r
+ }\r
+\r
+ /// <summary>\r
/// Gets or sets Top.\r
/// </summary>\r
public int Top { get; set; }\r
/// Gets or sets Right.\r
/// </summary>\r
public int Right { get; set; }\r
-\r
- /// <summary>\r
- /// Create a cropping object\r
- /// </summary>\r
- /// <param name="top">\r
- /// The top.\r
- /// </param>\r
- /// <param name="bottom">\r
- /// The bottom.\r
- /// </param>\r
- /// <param name="left">\r
- /// The left.\r
- /// </param>\r
- /// <param name="right">\r
- /// The right.\r
- /// </param>\r
- /// <returns>\r
- /// A Cropping object\r
- /// </returns>\r
- public static Cropping CreateCroppingObject(int top, int bottom, int left, int right)\r
- {\r
- return new Cropping { Top = top, Bottom = bottom, Left = left, Right = right };\r
- }\r
}\r
}\r
Fast,\r
Slow,\r
Slower,\r
+ Slowest,\r
Custom\r
}\r
}\r
--- /dev/null
+/* VideoEncoderMode.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.ApplicationServices.Model.Encoding\r
+{\r
+ /// <summary>\r
+ /// The Mode of Video Encoding. CFR, VFR, PFR\r
+ /// </summary>\r
+ public enum FramerateMode\r
+ {\r
+ CFR = 0,\r
+ PFR,\r
+ VFR\r
+ }\r
+}\r
-/* VideoEncoderMode.cs $\r
+/* VideoEncoderRateMode.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
/// <summary>\r
/// The Mode of Video Encoding. Bitrate, Filesize or Quality\r
/// </summary>\r
- public enum VideoEncodeMode\r
+ public enum VideoEncodeRateMode\r
{\r
TargetSize = 0,\r
AverageBitrate,\r
{\r
Title converted = new Title\r
{\r
- TitleNumber = title.TitleNumber,\r
- Duration = title.Duration,\r
- Resolution = new Size(title.Resolution.Width, title.Resolution.Height),\r
- AspectRatio = title.AspectRatio,\r
- AngleCount = title.AngleCount,\r
- ParVal = new Size(title.ParVal.Width, title.ParVal.Height),\r
+ TitleNumber = title.TitleNumber, \r
+ Duration = title.Duration, \r
+ Resolution = new Size(title.Resolution.Width, title.Resolution.Height), \r
+ AspectRatio = title.AspectRatio, \r
+ AngleCount = title.AngleCount, \r
+ ParVal = new Size(title.ParVal.Width, title.ParVal.Height), \r
AutoCropDimensions =\r
- Cropping.CreateCroppingObject(\r
- title.AutoCropDimensions.Top,\r
- title.AutoCropDimensions.Bottom,\r
- title.AutoCropDimensions.Left,\r
- title.AutoCropDimensions.Right),\r
+ new Cropping(\r
+ title.AutoCropDimensions.Top, \r
+ title.AutoCropDimensions.Bottom, \r
+ title.AutoCropDimensions.Left, \r
+ title.AutoCropDimensions.Right), \r
Fps = title.Framerate\r
};\r
\r
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
{\r
using System;\r
using System.Collections;\r
+ using System.Collections.Generic;\r
using System.Globalization;\r
using System.Text.RegularExpressions;\r
\r
using HandBrake.ApplicationServices.Functions;\r
+ using HandBrake.ApplicationServices.Model;\r
using HandBrake.ApplicationServices.Model.Encoding;\r
\r
/// <summary>\r
/// </summary>\r
public class QueryParserUtility\r
{\r
- /// <summary>\r
- /// The Culture\r
- /// </summary>\r
- private static readonly CultureInfo Culture = new CultureInfo("en-US", false);\r
-\r
- #region Varibles\r
-\r
- #region Source Title / Chapters\r
- /// <summary>\r
- /// Gets or sets Title.\r
- /// </summary>\r
- public int Title { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets ChapterStart.\r
- /// </summary>\r
- public int ChapterStart { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets ChapterFinish.\r
- /// </summary>\r
- public int ChapterFinish { get; set; }\r
- #endregion\r
-\r
- #region Output Settings\r
- /// <summary>\r
- /// Gets or sets the file Format. e.g mkv or mp4\r
- /// </summary>\r
- public string Format { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets a value indicating whether LargeMP4 support is enabled.\r
- /// This is the 64bit MP4 file that allows >4GB files\r
- /// </summary>\r
- public bool LargeMP4 { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets a value indicating whether IpodAtom is inserted\r
- /// </summary>\r
- public bool IpodAtom { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets a value indicating whether OptimizeMP4 is enabed for web streaming\r
- /// </summary>\r
- public bool OptimizeMP4 { get; set; }\r
- #endregion\r
-\r
- #region Picture Settings\r
-\r
- /// <summary>\r
- /// Gets or sets Width.\r
- /// </summary>\r
- public int Width { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets Height.\r
- /// </summary>\r
- public int Height { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets MaxWidth.\r
- /// </summary>\r
- public int MaxWidth { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets MaxHeight.\r
- /// </summary>\r
- public int MaxHeight { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets CropValues.\r
- /// </summary>\r
- public string CropValues { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets CropTop.\r
- /// </summary>\r
- public string CropTop { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets CropBottom.\r
- /// </summary>\r
- public string CropBottom { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets CropLeft.\r
- /// </summary>\r
- public string CropLeft { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets CropRight.\r
- /// </summary>\r
- public string CropRight { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets AnamorphicMode.\r
- /// </summary>\r
- public int AnamorphicMode { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets a value indicating whether KeepDisplayAsect.\r
- /// </summary>\r
- public bool KeepDisplayAsect { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets DisplayWidthValue.\r
- /// </summary>\r
- public double DisplayWidthValue { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets PixelAspectWidth.\r
- /// </summary>\r
- public int PixelAspectWidth { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets PixelAspectHeight.\r
- /// </summary>\r
- public int PixelAspectHeight { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets AnamorphicModulus.\r
- /// </summary>\r
- public int AnamorphicModulus { get; set; }\r
- #endregion\r
-\r
- #region Video Filters\r
-\r
- /// <summary>\r
- /// Gets or sets DeTelecine.\r
- /// </summary>\r
- public string DeTelecine { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets DeBlock.\r
- /// </summary>\r
- public int DeBlock { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets DeInterlace.\r
- /// </summary>\r
- public string DeInterlace { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets DeNoise.\r
- /// </summary>\r
- public string DeNoise { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets Decomb.\r
- /// </summary>\r
- public string Decomb { get; set; }\r
- #endregion\r
-\r
- #region Video Settings\r
- /// <summary>\r
- /// Gets or sets VideoEncoder.\r
- /// </summary>\r
- public string VideoEncoder { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets a value indicating whether Grayscale.\r
- /// </summary>\r
- public bool Grayscale { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets a value indicating whether TwoPass.\r
- /// </summary>\r
- public bool TwoPass { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets a value indicating whether TurboFirstPass.\r
- /// </summary>\r
- public bool TurboFirstPass { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets VideoFramerate.\r
- /// </summary>\r
- public string VideoFramerate { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets a value indicating whether Pfr.\r
- /// </summary>\r
- public bool Pfr { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets AverageVideoBitrate.\r
- /// </summary>\r
- public string AverageVideoBitrate { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets VideoTargetSize.\r
- /// </summary>\r
- public string VideoTargetSize { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets VideoQuality.\r
- /// </summary>\r
- public float VideoQuality { get; set; }\r
- #endregion\r
-\r
- #region Audio Settings\r
-\r
- /// <summary>\r
- /// Gets or sets AudioInformation.\r
- /// </summary>\r
- public ArrayList AudioInformation { get; set; }\r
\r
- /// <summary>\r
- /// Gets or sets Subtitles.\r
- /// </summary>\r
- public string Subtitles { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets a value indicating whether ForcedSubtitles.\r
- /// </summary>\r
- public bool ForcedSubtitles { get; set; }\r
- #endregion\r
-\r
- #region Other\r
- /// <summary>\r
- /// Gets or sets a value indicating whether ChapterMarkers.\r
- /// </summary>\r
- public bool ChapterMarkers { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets H264Query.\r
- /// </summary>\r
- public string H264Query { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets a value indicating whether Verbose.\r
- /// </summary>\r
- public bool Verbose { get; set; }\r
- #endregion\r
-\r
- #region Preset Information\r
-\r
- /// <summary>\r
- /// Gets or sets PresetBuildNumber.\r
- /// </summary>\r
- public int PresetBuildNumber { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets PresetDescription.\r
- /// </summary>\r
- public string PresetDescription { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets PresetName.\r
- /// </summary>\r
- public string PresetName { get; set; }\r
+ /**\r
+ * TODO\r
+ * - Add support for PointToPointMode = Seconds or Frames\r
+ **/\r
\r
/// <summary>\r
- /// Gets or sets Type.\r
- /// </summary>\r
- public string Type { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets a value indicating whether UsesMaxPictureSettings.\r
- /// </summary>\r
- public bool UsesMaxPictureSettings { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets a value indicating whether UsesPictureFilters.\r
- /// </summary>\r
- public bool UsesPictureFilters { get; set; }\r
-\r
- /// <summary>\r
- /// Gets or sets a value indicating whether UsesPictureSettings.\r
+ /// The Culture\r
/// </summary>\r
- public bool UsesPictureSettings { get; set; }\r
- #endregion\r
-\r
- #endregion\r
+ private static readonly CultureInfo Culture = new CultureInfo("en-US", false);\r
\r
/// <summary>\r
/// Takes in a query which can be in any order and parses it. \r
/// </summary>\r
/// <param name="input">A ClI Query</param>\r
/// <returns>A Parsed Query</returns>\r
- public static QueryParserUtility Parse(string input)\r
+ public static EncodeTask Parse(string input)\r
{\r
- var thisQuery = new QueryParserUtility();\r
+ var parsed = new EncodeTask();\r
\r
#region Regular Expressions\r
\r
Match chapters = Regex.Match(input, @"-c ([0-9-]*)");\r
\r
// Output Settings\r
- Match format = Regex.Match(input, @"-f ([a-z0-9a-z0-9a-z0-9]*)");\r
+ Match format = Regex.Match(input, @"-f ([a-zA-Z0-9]*)");\r
Match grayscale = Regex.Match(input, @" -g");\r
Match largerMp4 = Regex.Match(input, @" -4");\r
Match ipodAtom = Regex.Match(input, @" -I");\r
Match turboFirstPass = Regex.Match(input, @" -T");\r
Match optimizeMP4 = Regex.Match(input, @" -O");\r
Match pfr = Regex.Match(input, @" --pfr");\r
+ Match vfr = Regex.Match(input, @" --vfr");\r
+ Match cfr = Regex.Match(input, @" --cfr");\r
\r
// Audio Settings Tab\r
Match noAudio = Regex.Match(input, @"-a none");\r
Match audioSampleRates = Regex.Match(input, @"-R ([0-9a-zA-Z.,]*)"); // Auto = a-z\r
Match drcValues = Regex.Match(input, @"-D ([0-9.,]*)");\r
\r
- Match subtitles = Regex.Match(input, @"-s ([0-9a-zA-Z]*)");\r
- Match subScan = Regex.Match(input, @" -U");\r
- Match forcedSubtitles = Regex.Match(input, @" -F");\r
-\r
// Chapters Tab\r
Match chapterMarkers = Regex.Match(input, @" -m");\r
Match chapterMarkersFileMode = Regex.Match(input, @"--markers");\r
// H264 Tab\r
Match x264 = Regex.Match(input, @"-x ([.,/a-zA-Z0-9=:-]*)");\r
\r
- // Program Options\r
- Match verbose = Regex.Match(input, @" -v");\r
-\r
#endregion\r
\r
#region Set Varibles\r
#region Source Tab\r
\r
if (title.Success)\r
- thisQuery.Title = int.Parse(title.ToString().Replace("-t ", string.Empty));\r
+ {\r
+ parsed.Title = int.Parse(title.ToString().Replace("-t ", string.Empty));\r
+ }\r
\r
if (chapters.Success)\r
{\r
+ parsed.PointToPointMode = PointToPointMode.Chapters;\r
string[] actTitles = chapters.ToString().Replace("-c ", string.Empty).Split('-');\r
- thisQuery.ChapterStart = int.Parse(actTitles[0]);\r
+ parsed.StartPoint = int.Parse(actTitles[0]);\r
if (actTitles.Length > 1)\r
{\r
- thisQuery.ChapterFinish = int.Parse(actTitles[1]);\r
+ parsed.EndPoint = int.Parse(actTitles[1]);\r
}\r
\r
- if ((thisQuery.ChapterStart == 1) && (thisQuery.ChapterFinish == 0))\r
- thisQuery.ChapterFinish = thisQuery.ChapterStart;\r
+ if ((parsed.StartPoint == 1) && (parsed.EndPoint == 0))\r
+ {\r
+ parsed.EndPoint = parsed.StartPoint;\r
+ }\r
}\r
-\r
+ \r
#endregion\r
\r
#region Output Settings\r
\r
if (format.Success)\r
- thisQuery.Format = format.ToString().Replace("-f ", string.Empty);\r
- thisQuery.LargeMP4 = largerMp4.Success;\r
- thisQuery.IpodAtom = ipodAtom.Success;\r
- thisQuery.OptimizeMP4 = optimizeMP4.Success;\r
+ {\r
+ parsed.OutputFormat = Converters.GetFileFormat(format.Groups[1].ToString());\r
+ }\r
+ parsed.LargeFile = largerMp4.Success;\r
+ parsed.IPod5GSupport = ipodAtom.Success;\r
+ parsed.OptimizeMP4 = optimizeMP4.Success;\r
\r
#endregion\r
\r
#region Picture Tab\r
\r
if (width.Success)\r
- thisQuery.Width = int.Parse(width.Groups[0].Value.Replace("-w ", string.Empty));\r
+ parsed.Width = int.Parse(width.Groups[0].Value.Replace("-w ", string.Empty));\r
\r
if (height.Success)\r
- thisQuery.Height = int.Parse(height.Groups[0].Value.Replace("-l ", string.Empty));\r
+ parsed.Height = int.Parse(height.Groups[0].Value.Replace("-l ", string.Empty));\r
\r
if (maxWidth.Success)\r
- thisQuery.MaxWidth = int.Parse(maxWidth.Groups[0].Value.Replace("-X ", string.Empty));\r
+ parsed.MaxWidth = int.Parse(maxWidth.Groups[0].Value.Replace("-X ", string.Empty));\r
\r
if (maxHeight.Success)\r
- thisQuery.MaxHeight = int.Parse(maxHeight.Groups[0].Value.Replace("-Y ", string.Empty));\r
+ parsed.MaxHeight = int.Parse(maxHeight.Groups[0].Value.Replace("-Y ", string.Empty));\r
\r
if (crop.Success)\r
{\r
- thisQuery.CropValues = crop.ToString().Replace("--crop ", string.Empty);\r
- string[] actCropValues = thisQuery.CropValues.Split(':');\r
- thisQuery.CropTop = actCropValues[0];\r
- thisQuery.CropBottom = actCropValues[1];\r
- thisQuery.CropLeft = actCropValues[2];\r
- thisQuery.CropRight = actCropValues[3];\r
+ try\r
+ {\r
+ string values = crop.ToString().Replace("--crop ", string.Empty);\r
+ string[] actCropValues = values.Split(':');\r
+ parsed.Cropping = new Cropping(\r
+ int.Parse(actCropValues[0]),\r
+ int.Parse(actCropValues[1]),\r
+ int.Parse(actCropValues[2]),\r
+ int.Parse(actCropValues[3]));\r
+ }\r
+ catch (Exception)\r
+ {\r
+ // No need to do anything.\r
+ }\r
}\r
\r
if (strictAnamorphic.Success)\r
- thisQuery.AnamorphicMode = 1;\r
+ parsed.Anamorphic = Anamorphic.Strict;\r
else if (looseAnamorphic.Success)\r
- thisQuery.AnamorphicMode = 2;\r
+ parsed.Anamorphic = Anamorphic.Loose;\r
else if (customAnamorphic.Success)\r
- thisQuery.AnamorphicMode = 3;\r
+ parsed.Anamorphic = Anamorphic.Custom;\r
else\r
- thisQuery.AnamorphicMode = 0;\r
+ parsed.Anamorphic = Anamorphic.None;\r
\r
- thisQuery.KeepDisplayAsect = keepDisplayAsect.Success;\r
+ parsed.KeepDisplayAspect = keepDisplayAsect.Success;\r
\r
if (displayWidth.Success)\r
- thisQuery.DisplayWidthValue =\r
+ parsed.DisplayWidth =\r
double.Parse(displayWidth.Groups[0].Value.Replace("--display-width ", string.Empty));\r
\r
if (pixelAspect.Success)\r
- thisQuery.PixelAspectWidth = int.Parse(pixelAspect.Groups[1].Value.Replace("--pixel-aspect ", string.Empty));\r
+ parsed.PixelAspectX = int.Parse(pixelAspect.Groups[1].Value.Replace("--pixel-aspect ", string.Empty));\r
\r
if (pixelAspect.Success && pixelAspect.Groups.Count >= 3)\r
- thisQuery.PixelAspectHeight = int.Parse(pixelAspect.Groups[2].Value.Replace("--pixel-aspect ", string.Empty));\r
+ parsed.PixelAspectY = int.Parse(pixelAspect.Groups[2].Value.Replace("--pixel-aspect ", string.Empty));\r
\r
if (modulus.Success)\r
- thisQuery.AnamorphicModulus = int.Parse(modulus.Groups[0].Value.Replace("--modulus ", string.Empty));\r
+ parsed.Modulus = int.Parse(modulus.Groups[0].Value.Replace("--modulus ", string.Empty));\r
\r
#endregion\r
\r
#region Filters\r
\r
- thisQuery.Decomb = "Off";\r
+ parsed.Decomb = Decomb.Off;\r
if (decomb.Success)\r
{\r
- thisQuery.Decomb = "Default";\r
+ parsed.Decomb = Decomb.Default;\r
if (decombValue.Success)\r
- thisQuery.Decomb = decombValue.ToString().Replace("--decomb=", string.Empty).Replace("\"", string.Empty);\r
+ {\r
+ parsed.CustomDecomb = decombValue.ToString().Replace("--decomb=", string.Empty).Replace("\"", string.Empty);\r
+ }\r
}\r
\r
- thisQuery.DeInterlace = "Off";\r
+ parsed.Deinterlace = Deinterlace.Off;\r
if (deinterlace.Success)\r
{\r
- thisQuery.DeInterlace = deinterlace.ToString().Replace("--deinterlace=", string.Empty).Replace("\"", string.Empty);\r
- thisQuery.DeInterlace =\r
- thisQuery.DeInterlace.Replace("fast", "Fast").Replace("slow", "Slow").Replace("slower", "Slower");\r
- thisQuery.DeInterlace = thisQuery.DeInterlace.Replace("slowest", "Slowest");\r
+ switch (deinterlace.ToString().Replace("--deinterlace=", string.Empty).Replace("\"", string.Empty).ToLower())\r
+ {\r
+ case "fast":\r
+ parsed.Deinterlace = Deinterlace.Fast;\r
+ break;\r
+ case "slow":\r
+ parsed.Deinterlace = Deinterlace.Slow;\r
+ break;\r
+ case "slower":\r
+ parsed.Deinterlace = Deinterlace.Slower;\r
+ break;\r
+ case "slowest":\r
+ parsed.Deinterlace = Deinterlace.Slowest;\r
+ break;\r
+ default:\r
+ parsed.Deinterlace = Deinterlace.Custom;\r
+ parsed.CustomDeinterlace = deinterlace.ToString().Replace("--deinterlace=", string.Empty).Replace("\"", string.Empty).ToLower();\r
+ break;\r
+ }\r
}\r
\r
- thisQuery.DeNoise = "Off";\r
+ parsed.Denoise = Denoise.Off;\r
if (denoise.Success)\r
{\r
- thisQuery.DeNoise = denoise.ToString().Replace("--denoise=", string.Empty).Replace("\"", string.Empty);\r
- thisQuery.DeNoise =\r
- thisQuery.DeNoise.Replace("weak", "Weak").Replace("medium", "Medium").Replace("strong", "Strong");\r
+ switch (denoise.ToString().Replace("--denoise=", string.Empty).Replace("\"", string.Empty))\r
+ {\r
+ case "weak":\r
+ parsed.Denoise = Denoise.Weak;\r
+ break;\r
+ case "medium":\r
+ parsed.Denoise = Denoise.Medium;\r
+ break;\r
+ case "strong":\r
+ parsed.Denoise = Denoise.Strong;\r
+ break;\r
+ default:\r
+ parsed.Denoise = Denoise.Custom;\r
+ parsed.CustomDenoise = denoise.ToString().Replace("--denoise=", string.Empty).Replace("\"", string.Empty);\r
+ break;\r
+ }\r
}\r
\r
- string deblockValue = string.Empty;\r
- thisQuery.DeBlock = 0;\r
+ parsed.Deblock = 0;\r
if (deblock.Success)\r
- deblockValue = deblock.ToString().Replace("--deblock=", string.Empty);\r
-\r
- int dval = 0;\r
- if (deblockValue != string.Empty)\r
- int.TryParse(deblockValue, out dval);\r
- thisQuery.DeBlock = dval;\r
+ {\r
+ int dval;\r
+ int.TryParse(deblock.ToString().Replace("--deblock=", string.Empty), out dval);\r
+ parsed.Deblock = dval;\r
+ }\r
\r
- thisQuery.DeTelecine = "Off";\r
+ parsed.Detelecine = Detelecine.Off;\r
if (detelecine.Success)\r
{\r
- thisQuery.DeTelecine = "Default";\r
+ parsed.Detelecine = Detelecine.Default;\r
if (detelecineValue.Success)\r
- thisQuery.DeTelecine = detelecineValue.ToString().Replace("--detelecine=", string.Empty).Replace("\"", string.Empty);\r
+ {\r
+ parsed.CustomDetelecine = detelecineValue.ToString().Replace("--detelecine=", string.Empty).Replace("\"", string.Empty);\r
+ parsed.Detelecine = Detelecine.Custom;\r
+ }\r
}\r
\r
#endregion\r
\r
#region Video Settings Tab\r
\r
- string videoEncoderConvertion = videoEncoder.ToString().Replace("-e ", string.Empty);\r
- switch (videoEncoderConvertion)\r
+ parsed.VideoEncoder = Converters.GetVideoEncoder(videoEncoder.ToString().Replace("-e ", string.Empty));\r
+\r
+ if (videoFramerate.Success)\r
{\r
- case "ffmpeg":\r
- videoEncoderConvertion = "MPEG-4 (FFmpeg)";\r
- break;\r
- case "x264":\r
- videoEncoderConvertion = "H.264 (x264)";\r
- break;\r
- case "theora":\r
- videoEncoderConvertion = "VP3 (Theora)";\r
- break;\r
- default:\r
- videoEncoderConvertion = "MPEG-4 (FFmpeg)";\r
- break;\r
+ double fps;\r
+ double.TryParse(videoFramerate.Groups[1].ToString(), out fps);\r
+ parsed.Framerate = fps;\r
}\r
- thisQuery.VideoEncoder = videoEncoderConvertion;\r
- thisQuery.VideoFramerate = videoFramerate.Success\r
- ? videoFramerate.ToString().Replace("-r ", string.Empty)\r
- : "Same as source";\r
\r
- thisQuery.Pfr = pfr.Success;\r
- thisQuery.Grayscale = grayscale.Success;\r
- thisQuery.TwoPass = twoPass.Success;\r
- thisQuery.TurboFirstPass = turboFirstPass.Success;\r
+ if (pfr.Success)\r
+ parsed.FramerateMode = FramerateMode.PFR;\r
+ else if (vfr.Success)\r
+ parsed.FramerateMode = FramerateMode.VFR;\r
+ else if (cfr.Success)\r
+ parsed.FramerateMode = FramerateMode.CFR;\r
+\r
+ parsed.Grayscale = grayscale.Success;\r
+ parsed.TwoPass = twoPass.Success;\r
+ parsed.TurboFirstPass = turboFirstPass.Success;\r
\r
if (videoBitrate.Success)\r
- thisQuery.AverageVideoBitrate = videoBitrate.ToString().Replace("-b ", string.Empty);\r
+ {\r
+ parsed.VideoEncodeRateType = VideoEncodeRateMode.AverageBitrate;\r
+ parsed.VideoBitrate = int.Parse(videoBitrate.ToString().Replace("-b ", string.Empty));\r
+ }\r
+\r
if (videoFilesize.Success)\r
- thisQuery.VideoTargetSize = videoFilesize.ToString().Replace("-S ", string.Empty);\r
+ {\r
+ parsed.VideoEncodeRateType = VideoEncodeRateMode.TargetSize;\r
+ parsed.TargetSize = int.Parse(videoBitrate.ToString().Replace("-S ", string.Empty));\r
+ }\r
\r
if (videoQuality.Success)\r
{\r
- float qConvert = float.Parse(videoQuality.ToString().Replace("-q ", string.Empty), Culture);\r
- thisQuery.VideoQuality = qConvert;\r
+ float quality = float.Parse(videoQuality.ToString().Replace("-q ", string.Empty), Culture);\r
+ parsed.Quality = quality;\r
}\r
- else\r
- thisQuery.VideoQuality = -1;\r
\r
#endregion\r
\r
trackDRCvalues = drcValues.ToString().Replace("-D ", string.Empty).Split(',');\r
\r
// Create new Audio Track Classes and store them in the ArrayList\r
- ArrayList allAudioTrackInfo = new ArrayList();\r
+ List<AudioTrack> allAudioTrackInfo = new List<AudioTrack>();\r
for (int x = 0; x < encoderCount; x++)\r
{\r
AudioTrack track = new AudioTrack();\r
\r
if (trackEncoders != null)\r
if (trackEncoders.Length >= (x + 1)) // Audio Mix\r
- track.Encoder = Converters.GetAudioEncoder(trackEncoders[x].Trim());\r
+ track.Encoder = Converters.GetGUIAudioEncoder(trackEncoders[x].Trim());\r
\r
if (trackBitrates != null)\r
if (trackBitrates.Length >= (x + 1)) // Audio Encoder\r
\r
allAudioTrackInfo.Add(track);\r
}\r
- thisQuery.AudioInformation = allAudioTrackInfo;\r
\r
- // Subtitle Stuff\r
- if (subtitles.Success)\r
- thisQuery.Subtitles = subtitles.ToString().Replace("-s ", string.Empty);\r
- else\r
- thisQuery.Subtitles = subScan.Success ? "Autoselect" : "None";\r
-\r
- thisQuery.ForcedSubtitles = forcedSubtitles.Success;\r
+ parsed.AudioTracks = allAudioTrackInfo;\r
\r
#endregion\r
\r
#region Chapters Tab\r
\r
if (chapterMarkersFileMode.Success || chapterMarkers.Success)\r
- thisQuery.ChapterMarkers = true;\r
+ parsed.IncludeChapterMarkers = true;\r
\r
#endregion\r
\r
#region H.264 and other\r
\r
if (x264.Success)\r
- thisQuery.H264Query = x264.ToString().Replace("-x ", string.Empty);\r
-\r
- thisQuery.Verbose = verbose.Success;\r
+ parsed.X264Options = x264.ToString().Replace("-x ", string.Empty);\r
\r
#endregion\r
}\r
\r
#endregion\r
\r
- return thisQuery;\r
+ return parsed;\r
}\r
}\r
}
\ No newline at end of file