diff options
author | sr55 <[email protected]> | 2011-03-20 17:39:20 +0000 |
---|---|---|
committer | sr55 <[email protected]> | 2011-03-20 17:39:20 +0000 |
commit | 22393506f087fcb28e4aedab2e7a47d2ae6256ec (patch) | |
tree | 68c4d67356970896ca638f064527f6d6c0326b4e /win/CS/HandBrake.ApplicationServices | |
parent | 24d2785ae92568533caed9528944167ca27e8905 (diff) |
WinGui:
- Bunch of work to help OO the UI code a bit better and prepare for the WPF UI.
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@3854 b64f7644-9d1e-0410-96f1-a4d463321fa5
Diffstat (limited to 'win/CS/HandBrake.ApplicationServices')
8 files changed, 772 insertions, 52 deletions
diff --git a/win/CS/HandBrake.ApplicationServices/Functions/Converters.cs b/win/CS/HandBrake.ApplicationServices/Functions/Converters.cs index 1dd817e23..eab003504 100644 --- a/win/CS/HandBrake.ApplicationServices/Functions/Converters.cs +++ b/win/CS/HandBrake.ApplicationServices/Functions/Converters.cs @@ -43,6 +43,8 @@ namespace HandBrake.ApplicationServices.Functions return converted;
}
+ #region Audio
+
/// <summary>
/// Get the GUI equiv to a CLI mixdown
/// </summary>
@@ -68,6 +70,56 @@ namespace HandBrake.ApplicationServices.Functions }
/// <summary>
+ /// Get the GUI equiv to a CLI mixdown
+ /// </summary>
+ /// <param name="mixdown">The Audio Mixdown</param>
+ /// <returns>The GUI representation of the mixdown</returns>
+ public static Mixdown GetAudioMixDown(string mixdown)
+ {
+ switch (mixdown.Trim())
+ {
+ case "Mono":
+ return Mixdown.Mono;
+ case "Stereo":
+ return Mixdown.Stereo;
+ case "Dolby Surround":
+ return Mixdown.DolbySurround;
+ case "Dolby Pro Logic II":
+ return Mixdown.DolbyProLogicII;
+ case "6 Channel Discrete":
+ return Mixdown.SixChannelDiscrete;
+ default:
+ return Mixdown.Auto;
+ }
+ }
+
+ /// <summary>
+ /// Return the CLI Mixdown name
+ /// </summary>
+ /// <param name="selectedAudio">GUI mixdown name</param>
+ /// <returns>CLI mixdown name</returns>
+ public static string GetCliMixDown(Mixdown selectedAudio)
+ {
+ switch (selectedAudio)
+ {
+ case Mixdown.Auto:
+ return "auto";
+ case Mixdown.Mono:
+ return "mono";
+ case Mixdown.Stereo:
+ return "stereo";
+ case Mixdown.DolbySurround:
+ return "dpl1";
+ case Mixdown.DolbyProLogicII:
+ return "dpl2";
+ case Mixdown.SixChannelDiscrete:
+ return "6ch";
+ default:
+ return "auto";
+ }
+ }
+
+ /// <summary>
/// Get the GUI equiv to a CLI audio encoder
/// </summary>
/// <param name="audioEnc">The Audio Encoder</param>
@@ -94,6 +146,94 @@ namespace HandBrake.ApplicationServices.Functions }
/// <summary>
+ /// Get the GUI equiv to a CLI audio encoder
+ /// </summary>
+ /// <param name="audioEnc">The Audio Encoder</param>
+ /// <returns>The GUI representation of that audio encoder</returns>
+ public static AudioEncoder GetAudioEncoderFromCliString(string audioEnc)
+ {
+ switch (audioEnc)
+ {
+ case "faac":
+ return AudioEncoder.Faac;
+ case "lame":
+ return AudioEncoder.Lame;
+ case "vorbis":
+ return AudioEncoder.Vorbis;
+ case "ac3":
+ return AudioEncoder.Ac3;
+ case "copy:ac3":
+ return AudioEncoder.Ac3Passthrough;
+ case "copy:dts":
+ return AudioEncoder.DtsPassthrough;
+ default:
+ return AudioEncoder.Faac;
+ }
+ }
+
+ /// <summary>
+ /// Get the GUI equiv to a GUI audio encoder string
+ /// </summary>
+ /// <param name="audioEnc">The Audio Encoder</param>
+ /// <returns>The GUI representation of that audio encoder</returns>
+ public static AudioEncoder GetAudioEncoder(string audioEnc)
+ {
+ switch (audioEnc)
+ {
+ case "AAC (faac)":
+ return AudioEncoder.Faac;
+ case "AAC (CoreAudio)":
+ return AudioEncoder.Faac;
+ case "MP3 (lame)":
+ return AudioEncoder.Lame;
+ case "Vorbis (vorbis)":
+ return AudioEncoder.Vorbis;
+ case "AC3 (ffmpeg)":
+ return AudioEncoder.Ac3;
+ case "AC3 Passthru":
+ return AudioEncoder.Ac3Passthrough;
+ case "DTS Passthru":
+ return AudioEncoder.DtsPassthrough;
+ default:
+ return AudioEncoder.Faac;
+ }
+ }
+
+ /// <summary>
+ /// Get the CLI Audio Encoder name
+ /// </summary>
+ /// <param name="selectedEncoder">
+ /// String The GUI Encode name
+ /// </param>
+ /// <returns>
+ /// String CLI encoder name
+ /// </returns>
+ public static string GetCliAudioEncoder(AudioEncoder selectedEncoder)
+ {
+ switch (selectedEncoder)
+ {
+ case AudioEncoder.Faac:
+ return "faac";
+ case AudioEncoder.Lame:
+ return "lame";
+ case AudioEncoder.Vorbis:
+ return "vorbis";
+ case AudioEncoder.Ac3Passthrough:
+ return "copy:ac3";
+ case AudioEncoder.DtsPassthrough:
+ return "copy:dts";
+ case AudioEncoder.Ac3:
+ return "ac3";
+ default:
+ return "faac";
+ }
+ }
+
+ #endregion
+
+ #region Video
+
+ /// <summary>
/// Get the Video Encoder for a given string
/// </summary>
/// <param name="encoder">
@@ -118,29 +258,32 @@ namespace HandBrake.ApplicationServices.Functions }
/// <summary>
- /// Get a GUI name for a given video Encoder.
+ /// Get the Video Encoder for a given string
/// </summary>
/// <param name="encoder">
- /// A VideoEncoder Enum object
+ /// The encoder name
/// </param>
/// <returns>
- /// A GUI encoder name, default is x264
+ /// VideoEncoder enum object
/// </returns>
- public static string GetGUIVideoEncoder(VideoEncoder encoder)
+ public static string GetVideoEncoder(VideoEncoder encoder)
{
switch (encoder)
{
case VideoEncoder.FFMpeg:
- return "MPEG-4 (FFmpeg)";
+ return "ffmpeg";
case VideoEncoder.X264:
- return "H.264 (x264)";
+ return "x264";
case VideoEncoder.Theora:
- return "VP3 (Theora)";
+ return "theora";
default:
- return "H.264 (x264)";
+ return "x264";
}
}
+ #endregion
+
+ #region File Format
/// <summary>
/// Get the OutputFormat Enum for a given string
@@ -185,5 +328,7 @@ namespace HandBrake.ApplicationServices.Functions return "mkv";
}
}
+
+ #endregion
}
}
diff --git a/win/CS/HandBrake.ApplicationServices/HandBrake.ApplicationServices.csproj b/win/CS/HandBrake.ApplicationServices/HandBrake.ApplicationServices.csproj index 07aef5609..14dd50094 100644 --- a/win/CS/HandBrake.ApplicationServices/HandBrake.ApplicationServices.csproj +++ b/win/CS/HandBrake.ApplicationServices/HandBrake.ApplicationServices.csproj @@ -144,6 +144,7 @@ <Compile Include="Services\UpdateService.cs" />
<Compile Include="Utilities\AppcastReader.cs" />
<Compile Include="Utilities\PlistUtility.cs" />
+ <Compile Include="Utilities\QueryGeneratorUtility.cs" />
<Compile Include="Utilities\QueryParserUtility.cs" />
<Compile Include="Utilities\UtilityService.cs" />
</ItemGroup>
diff --git a/win/CS/HandBrake.ApplicationServices/Model/EncodeTask.cs b/win/CS/HandBrake.ApplicationServices/Model/EncodeTask.cs index d600ba81c..e896960c0 100644 --- a/win/CS/HandBrake.ApplicationServices/Model/EncodeTask.cs +++ b/win/CS/HandBrake.ApplicationServices/Model/EncodeTask.cs @@ -52,6 +52,7 @@ namespace HandBrake.ApplicationServices.Model /// Gets or sets EndPoint.
/// </summary>
public int EndPoint { get; set; }
+
#endregion
#region Destination
@@ -90,22 +91,22 @@ namespace HandBrake.ApplicationServices.Model /// <summary>
/// Gets or sets Width.
/// </summary>
- public int Width { get; set; }
+ public int? Width { get; set; }
/// <summary>
/// Gets or sets Height.
/// </summary>
- public int Height { get; set; }
+ public int? Height { get; set; }
/// <summary>
/// Gets or sets MaxWidth.
/// </summary>
- public int MaxWidth { get; set; }
+ public int? MaxWidth { get; set; }
/// <summary>
/// Gets or sets MaxHeight.
/// </summary>
- public int MaxHeight { get; set; }
+ public int? MaxHeight { get; set; }
/// <summary>
/// Gets or sets a value indicating whether CustomCropping.
@@ -125,7 +126,7 @@ namespace HandBrake.ApplicationServices.Model /// <summary>
/// Gets or sets DisplayWidth.
/// </summary>
- public double DisplayWidth { get; set; }
+ public double? DisplayWidth { get; set; }
/// <summary>
/// Gets or sets a value indicating whether KeepDisplayAspect.
@@ -145,7 +146,7 @@ namespace HandBrake.ApplicationServices.Model /// <summary>
/// Gets or sets Modulus.
/// </summary>
- public int Modulus { get; set; }
+ public int? Modulus { get; set; }
#endregion
#region Filters
@@ -221,7 +222,7 @@ namespace HandBrake.ApplicationServices.Model /// <summary>
/// Gets or sets Quality.
/// </summary>
- public double? Quality { get; set; }
+ public double Quality { get; set; }
/// <summary>
/// Gets or sets VideoBitrate.
@@ -274,6 +275,11 @@ namespace HandBrake.ApplicationServices.Model /// </summary>
public string ChapterMarkersFilePath { get; set; }
+ /// <summary>
+ /// Chapter Names
+ /// </summary>
+ public Dictionary<int, string> ChapterNames { get; set; }
+
#endregion
#region Advanced
diff --git a/win/CS/HandBrake.ApplicationServices/Model/Encoding/AudioTrack.cs b/win/CS/HandBrake.ApplicationServices/Model/Encoding/AudioTrack.cs index bcfb27089..440f72226 100644 --- a/win/CS/HandBrake.ApplicationServices/Model/Encoding/AudioTrack.cs +++ b/win/CS/HandBrake.ApplicationServices/Model/Encoding/AudioTrack.cs @@ -16,41 +16,41 @@ namespace HandBrake.ApplicationServices.Model.Encoding public AudioTrack()
{
// Default Values
- this.Track = "Automatic";
- this.MixDown = "Automatic";
- this.SampleRate = "Auto";
- this.Bitrate = "Auto";
- this.DRC = "1";
+ this.Track = 1;
+ this.MixDown = Mixdown.DolbyProLogicII;
+ this.SampleRate = 48;
+ this.Bitrate = 160;
+ this.DRC = 1;
}
/// <summary>
/// Gets or sets Audio Track Name
/// </summary>
- public string Track { get; set; }
+ public int Track { get; set; }
/// <summary>
/// Gets or sets Audio Mixdown
/// </summary>
- public string MixDown { get; set; }
+ public Mixdown MixDown { get; set; }
/// <summary>
/// Gets or sets Audio Encoder
/// </summary>
- public string Encoder { get; set; }
+ public AudioEncoder Encoder { get; set; }
/// <summary>
/// Gets or sets Audio Bitrate
/// </summary>
- public string Bitrate { get; set; }
+ public int Bitrate { get; set; }
/// <summary>
/// Gets or sets Audio SampleRate
/// </summary>
- public string SampleRate { get; set; }
+ public double SampleRate { get; set; }
/// <summary>
/// Gets or sets Dynamic Range Compression
/// </summary>
- public string DRC { get; set; }
+ public double DRC { get; set; }
}
}
\ No newline at end of file diff --git a/win/CS/HandBrake.ApplicationServices/Model/Encoding/PointToPointMode.cs b/win/CS/HandBrake.ApplicationServices/Model/Encoding/PointToPointMode.cs index dcee4cac4..e4105565e 100644 --- a/win/CS/HandBrake.ApplicationServices/Model/Encoding/PointToPointMode.cs +++ b/win/CS/HandBrake.ApplicationServices/Model/Encoding/PointToPointMode.cs @@ -12,6 +12,7 @@ namespace HandBrake.ApplicationServices.Model.Encoding {
Chapters = 0,
Seconds,
- Frames
+ Frames,
+ Preview,
}
}
diff --git a/win/CS/HandBrake.ApplicationServices/Utilities/PlistUtility.cs b/win/CS/HandBrake.ApplicationServices/Utilities/PlistUtility.cs index ee1ab225a..4aed1799f 100644 --- a/win/CS/HandBrake.ApplicationServices/Utilities/PlistUtility.cs +++ b/win/CS/HandBrake.ApplicationServices/Utilities/PlistUtility.cs @@ -56,22 +56,22 @@ namespace HandBrake.ApplicationServices.Utilities switch (key)
{
case "AudioBitrate":
- track.Bitrate = value;
+ track.Bitrate = int.Parse(value);
break;
case "AudioEncoder":
- track.Encoder = value.Replace("AAC (CoreAudio)", "AAC (faac)");
+ track.Encoder = Converters.GetAudioEncoder(value.Trim());
break;
case "AudioMixdown":
- track.MixDown = value;
+ track.MixDown = Converters.GetAudioMixDown(value.Trim());
break;
case "AudioSamplerate":
- track.SampleRate = value;
+ track.SampleRate = double.Parse(value);
break;
case "AudioTrack":
- track.Track = value;
+ track.Track = int.Parse(value);
break;
case "AudioTrackDRCSlider":
- track.DRC = value;
+ track.DRC = double.Parse(value);
break;
}
}
@@ -285,15 +285,11 @@ namespace HandBrake.ApplicationServices.Utilities // Kill any Quality values we don't need.
switch (qualityMode)
{
- case "0": // FileSize
- parsed.Quality = null;
- parsed.VideoBitrate = null;
- break;
case "1": // Avg Bitrate
- parsed.Quality = null;
+ parsed.VideoEncodeRateType = VideoEncodeRateMode.AverageBitrate;
break;
case "2": // CQ
- parsed.VideoBitrate = null;
+ parsed.VideoEncodeRateType = VideoEncodeRateMode.ConstantQuality;
break;
}
#endregion
@@ -532,7 +528,7 @@ namespace HandBrake.ApplicationServices.Utilities // Video Settings
AddEncodeElement(xmlWriter, "VideoAvgBitrate", "string", parsed.VideoBitrate.ToString());
- AddEncodeElement(xmlWriter, "VideoEncoder", "string", Converters.GetGUIVideoEncoder(parsed.VideoEncoder));
+ AddEncodeElement(xmlWriter, "VideoEncoder", "string", EnumHelper.GetDescription(parsed.VideoEncoder));
AddEncodeElement(xmlWriter, "VideoFramerate", "string", parsed.Framerate.ToString());
AddEncodeElement(xmlWriter, "VideFrameratePFR", "integer", parsed.FramerateMode == FramerateMode.PFR ? "1" : "0");
AddEncodeElement(xmlWriter, "VideoGrayScale", "integer", parsed.Grayscale ? "1" : "0");
@@ -637,22 +633,22 @@ namespace HandBrake.ApplicationServices.Utilities xmlWriter.WriteStartElement("dict");
xmlWriter.WriteElementString("key", "AudioBitrate");
- xmlWriter.WriteElementString("string", audioTrack.Bitrate);
+ xmlWriter.WriteElementString("string", audioTrack.Bitrate.ToString());
xmlWriter.WriteElementString("key", "AudioEncoder");
- xmlWriter.WriteElementString("string", audioTrack.Encoder);
+ xmlWriter.WriteElementString("string", EnumHelper.GetDescription(audioTrack.Encoder));
xmlWriter.WriteElementString("key", "AudioMixdown");
- xmlWriter.WriteElementString("string", audioTrack.MixDown);
+ xmlWriter.WriteElementString("string", EnumHelper.GetDescription(audioTrack.MixDown));
xmlWriter.WriteElementString("key", "AudioSamplerate");
- xmlWriter.WriteElementString("string", audioTrack.SampleRate);
+ xmlWriter.WriteElementString("string", audioTrack.SampleRate.ToString());
xmlWriter.WriteElementString("key", "AudioTrack");
- xmlWriter.WriteElementString("integer", audioTrack.Track);
+ xmlWriter.WriteElementString("integer", audioTrack.Track.ToString());
xmlWriter.WriteElementString("key", "AudioTrackDRCSlider");
- xmlWriter.WriteElementString("real", audioTrack.DRC);
+ xmlWriter.WriteElementString("real", audioTrack.DRC.ToString());
xmlWriter.WriteElementString("key", "AudioTrackDescription");
xmlWriter.WriteElementString("string", "Unknown");
diff --git a/win/CS/HandBrake.ApplicationServices/Utilities/QueryGeneratorUtility.cs b/win/CS/HandBrake.ApplicationServices/Utilities/QueryGeneratorUtility.cs new file mode 100644 index 000000000..34b6190c6 --- /dev/null +++ b/win/CS/HandBrake.ApplicationServices/Utilities/QueryGeneratorUtility.cs @@ -0,0 +1,571 @@ +/* QueryGeneratorUtility.cs $
+ This file is part of the HandBrake source code.
+ Homepage: <http://handbrake.fr/>.
+ It may be used under the terms of the GNU General Public License. */
+
+namespace HandBrake.ApplicationServices.Utilities
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Data;
+ using System.Globalization;
+ using System.IO;
+ using System.Linq;
+ using System.Windows.Forms;
+
+ using HandBrake.ApplicationServices.Functions;
+ using HandBrake.ApplicationServices.Model;
+ using HandBrake.ApplicationServices.Model.Encoding;
+
+ /*
+ * TODO:
+ * 1. Handle Subittles
+ * 2. Wireupt he Generate Query Methods.
+ * 3. Handle Settings Better.
+ * 4. Test and bug fix.
+ */
+
+ /// <summary>
+ /// Generate a CLI Query for HandBrakeCLI
+ /// </summary>
+ public class QueryGeneratorUtility
+ {
+ public static string GenerateQuery()
+ {
+ throw new NotImplementedException("This class hasn't been finished yet.");
+ string query = string.Empty;
+ return query;
+
+ }
+
+ public static string GeneratePreviewQuery()
+ {
+ throw new NotImplementedException("This class hasn't been finished yet.");
+ string query = string.Empty;
+ return query;
+ }
+
+ #region Individual Query Sections
+
+ private static string GenerateTabbedComponentsQuery(EncodeTask task, bool filters, int width, int height, int verbose, bool noDvdNav, double x264Step)
+ {
+ string query = string.Empty;
+
+ // Output Settings
+ query += OutputSettingsQuery(task);
+
+ // Filters Panel
+ if (filters)
+ query += FiltersQuery(task);
+
+ // Picture Settings
+ query += PictureSettingsQuery(task, width, height);
+
+ // Video Settings
+ query += VideoSettingsQuery(task, x264Step);
+
+ // Audio Settings
+ query += AudioSettingsQuery(task);
+
+ // Subtitles Panel
+ query += SubtitlesQuery(task);
+
+ // Chapter Markers
+ query += ChapterMarkersQuery(task);
+
+ // X264 Panel
+ query += X264Query(task);
+
+ // Extra Settings
+ query += ExtraSettings(verbose.ToString(), noDvdNav);
+
+ return query;
+ }
+
+ private static string SourceQuery(EncodeTask task, int mode, int duration, string preview, string previewTotal)
+ {
+ string query = string.Empty;
+
+ query += string.Format(" -i \"{0}\"", task.Source);
+ query += string.Format(" -t {0}", task.Title);
+ query += string.Format(" --angle {0}", task.Angle);
+
+ // Decide what part of the video we want to encode.
+ switch (task.PointToPointMode)
+ {
+ case PointToPointMode.Chapters: // Chapters
+
+ if (task.StartPoint == task.EndPoint)
+ query += string.Format(" -c {0}", task.StartPoint);
+ else
+ query += string.Format(" -c {0}-{1}", task.StartPoint, task.EndPoint);
+ break;
+ case PointToPointMode.Seconds: // Seconds
+ int calculatedDuration = task.EndPoint - task.StartPoint;
+ query += string.Format(" --start-at duration:{0} --stop-at duration:{1}", task.StartPoint, calculatedDuration);
+ break;
+ case PointToPointMode.Frames: // Frames
+ calculatedDuration = task.EndPoint - task.StartPoint;
+ query += string.Format(" --start-at frame:{0} --stop-at frame:{1}", task.StartPoint, calculatedDuration);
+ break;
+ case PointToPointMode.Preview: // Preview
+ query += " --previews " + previewTotal + " ";
+ query += " --start-at-preview " + preview;
+ query += " --stop-at duration:" + duration + " ";
+ break;
+ default:
+ break;
+ }
+
+ return query;
+ }
+
+ private static string DestinationQuery(EncodeTask task)
+ {
+ string query = string.Empty;
+
+ if (task.PointToPointMode == PointToPointMode.Preview)
+ query += string.Format(" -o \"{0}\" ", task.Destination.Replace(".m", "_sample.m"));
+ else
+ query += string.Format(" -o \"{0}\" ", task.Destination);
+
+ return query;
+ }
+
+ private static string OutputSettingsQuery(EncodeTask task)
+ {
+ string query = string.Empty;
+
+ query += string.Format(" -f {0} ", EnumHelper.GetDescription(task.OutputFormat).ToLower());
+
+ // These are output settings features
+ if (task.LargeFile)
+ query += " -4 ";
+
+ if (task.IPod5GSupport)
+ query += " -I ";
+
+ if (task.OptimizeMP4)
+ query += " -O ";
+
+ return query;
+ }
+
+ private static string PictureSettingsQuery(EncodeTask task, int width, int height)
+ {
+ string query = string.Empty;
+
+ if (task.Anamorphic != Anamorphic.Strict)
+ {
+ if (task.MaxWidth.HasValue) query += string.Format(" -X {0}", task.MaxWidth);
+ else if (task.Width.HasValue) query += string.Format(" -w {0}", task.Width);
+
+ if (task.MaxWidth.HasValue) query += string.Format(" -Y {0}", task.MaxHeight);
+ else if (task.Height.HasValue) query += string.Format(" -h {0}", task.Height);
+ }
+
+ query += string.Format(" --crop {0}:{1}:{2}:{3}", task.Cropping.Top, task.Cropping.Bottom, task.Cropping.Left, task.Cropping.Right);
+
+ switch (task.Anamorphic)
+ {
+ case Anamorphic.Strict:
+ query += " --strict-anamorphic ";
+ break;
+ case Anamorphic.Loose:
+ query += " --loose-anamorphic ";
+ break;
+ case Anamorphic.Custom:
+ query += " --custom-anamorphic ";
+
+ if (task.DisplayWidth.HasValue)
+ query += " --display-width " + task.DisplayWidth + " ";
+
+ if (task.KeepDisplayAspect)
+ query += " --keep-display-aspect ";
+
+ if (!task.KeepDisplayAspect)
+ query += string.Format(" --pixel-aspect {0}:{1}", task.PixelAspectX, task.PixelAspectY);
+ break;
+ }
+ query += " --modulus " + task.Modulus;
+
+ return query;
+ }
+
+ private static string FiltersQuery(EncodeTask task)
+ {
+
+ string query = string.Empty;
+
+ switch (task.Detelecine) // DeTelecine
+ {
+ case Detelecine.Off:
+ query += string.Empty;
+ break;
+ case Detelecine.Default:
+ query += " --detelecine";
+ break;
+ case Detelecine.Custom:
+ query += string.Format(" --detelecine=\"{0}\"", task.CustomDetelecine);
+ break;
+ default:
+ query += string.Empty;
+ break;
+ }
+
+ switch (task.Decomb) // Decomb
+ {
+ case Decomb.Off:
+ query += string.Empty;
+ break;
+ case Decomb.Default:
+ query += " --decomb";
+ break;
+ case Decomb.Custom:
+ query += string.Format(" --decomb=\"{0}\"", task.CustomDecomb);
+ break;
+ default:
+ query += string.Empty;
+ break;
+ }
+
+ switch (task.Deinterlace) // DeInterlace
+ {
+ case Deinterlace.Fast:
+ query += " --deinterlace=\"fast\"";
+ break;
+ case Deinterlace.Slow:
+ query += " --deinterlace=\"slow\"";
+ break;
+ case Deinterlace.Slower:
+ query += " --deinterlace=\"slower\"";
+ break;
+ case Deinterlace.Custom:
+ query += string.Format(" --deinterlace=\"{0}\"", task.CustomDeinterlace);
+ break;
+ default:
+ query += string.Empty;
+ break;
+ }
+
+ switch (task.Denoise) // Denoise
+ {
+ case Denoise.Weak:
+ query += " --denoise=\"weak\"";
+ break;
+ case Denoise.Medium:
+ query += " --denoise=\"medium\"";
+ break;
+ case Denoise.Strong:
+ query += " --denoise=\"strong\"";
+ break;
+ case Denoise.Custom:
+ query += string.Format(" --denoise=\"{0}\"", task.CustomDenoise);
+ break;
+ default:
+ query += string.Empty;
+ break;
+ }
+
+ if (task.Deblock != 4)
+ query += string.Format(" --deblock={0}", task.Deblock);
+
+ if (task.Grayscale)
+ query += " -g ";
+
+ return query;
+ }
+
+ private static string VideoSettingsQuery(EncodeTask task, double x264CqStep)
+ {
+ string query = string.Empty;
+
+ switch (task.VideoEncoder)
+ {
+ case VideoEncoder.FFMpeg:
+ query += " -e ffmpeg";
+ break;
+ case VideoEncoder.X264:
+ query += " -e x264";
+ break;
+ case VideoEncoder.Theora:
+ query += " -e theora";
+ break;
+ default:
+ query += " -e x264";
+ break;
+ }
+
+ switch (task.VideoEncodeRateType)
+ {
+ case VideoEncodeRateMode.ConstantQuality:
+ if (task.VideoBitrate.HasValue)
+ query += string.Format(" -b {0}", task.VideoBitrate.Value);
+ break;
+ case VideoEncodeRateMode.AverageBitrate:
+ double value;
+ switch (task.VideoEncoder)
+ {
+ case VideoEncoder.FFMpeg:
+ value = 31 - (task.Quality - 1);
+ query += string.Format(" -q {0}", value.ToString(new CultureInfo("en-US")));
+ break;
+ case VideoEncoder.X264:
+ CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");
+ value = 51 - (task.Quality * x264CqStep);
+ value = Math.Round(value, 2);
+ query += string.Format(" -q {0}", value.ToString(culture));
+ break;
+ case VideoEncoder.Theora:
+ value = task.Quality;
+ query += string.Format(" -q {0}", value.ToString(new CultureInfo("en-US")));
+ break;
+ }
+ break;
+
+ }
+
+ if (task.TwoPass)
+ query += " -2 ";
+
+ if (task.TurboFirstPass)
+ query += " -T ";
+
+ if (task.Framerate.HasValue)
+ query += string.Format(" -r {0}", task.Framerate);
+
+ switch (task.FramerateMode)
+ {
+ case FramerateMode.CFR:
+ query += " --cfr";
+ break;
+ case FramerateMode.VFR:
+ query += " --vfr";
+ break;
+ case FramerateMode.PFR:
+ query += " --pfr";
+ break;
+ default:
+ query += " --vfr";
+ break;
+ }
+
+ return query;
+ }
+
+ private static string AudioSettingsQuery(EncodeTask task)
+ {
+ string query = string.Empty;
+
+ List<AudioTrack> audioTracks = task.AudioTracks;
+
+ List<int> tracks = new List<int>();
+ List<AudioEncoder> codecs = new List<AudioEncoder>();
+ List<Mixdown> mixdowns = new List<Mixdown>();
+ List<double> samplerates = new List<double>();
+ List<int> bitrates = new List<int>();
+ List<double> drcs = new List<double>();
+
+ // No Audio
+ if (audioTracks.Count == 0)
+ query += " -a none ";
+
+ // Gather information about each audio track and store them in the declared lists.
+ foreach (AudioTrack track in audioTracks)
+ {
+ tracks.Add(track.Track);
+
+ // Audio Codec (-E)
+ codecs.Add(track.Encoder);
+
+ // Audio Mixdown (-6)
+ mixdowns.Add(track.MixDown);
+
+ // Sample Rate (-R)
+ samplerates.Add(track.SampleRate);
+
+ // Audio Bitrate (-B)
+ bitrates.Add(track.Bitrate);
+
+ // DRC (-D)
+ drcs.Add(track.DRC);
+ }
+
+ // Audio Track (-a)
+ string audioItems = string.Empty;
+ bool firstLoop = true;
+
+ foreach (int item in tracks)
+ {
+ if (firstLoop)
+ {
+ audioItems = item.ToString();
+ firstLoop = false;
+ }
+ else
+ audioItems += "," + item;
+ }
+ if (audioItems.Trim() != String.Empty)
+ query += " -a " + audioItems;
+ firstLoop = true;
+ audioItems = string.Empty; // Reset for another pass.
+
+ // Audio Codec (-E)
+ foreach (AudioEncoder item in codecs)
+ {
+ if (firstLoop)
+ {
+ audioItems = Converters.GetCliAudioEncoder(item);
+ firstLoop = false;
+ }
+ else
+ audioItems += "," + item;
+ }
+ if (audioItems.Trim() != String.Empty)
+ query += " -E " + audioItems;
+ firstLoop = true;
+ audioItems = string.Empty; // Reset for another pass.
+
+ // Audio Mixdown (-6)
+ foreach (Mixdown item in mixdowns)
+ {
+ if (firstLoop)
+ {
+ audioItems = Converters.GetCliMixDown(item);
+ firstLoop = false;
+ }
+ else
+ audioItems += "," + item;
+ }
+ if (audioItems.Trim() != String.Empty)
+ query += " -6 " + audioItems;
+ firstLoop = true;
+ audioItems = string.Empty; // Reset for another pass.
+
+ // Sample Rate (-R)
+ foreach (double item in samplerates)
+ {
+ if (firstLoop)
+ {
+ audioItems = item.ToString();
+ firstLoop = false;
+ }
+ else
+ audioItems += "," + item;
+ }
+ if (audioItems.Trim() != String.Empty)
+ query += " -R " + audioItems;
+ firstLoop = true;
+ audioItems = string.Empty; // Reset for another pass.
+
+ // Audio Bitrate (-B)
+ foreach (int item in bitrates)
+ {
+ if (firstLoop)
+ {
+ audioItems = item.ToString();
+ firstLoop = false;
+ }
+ else
+ audioItems += "," + item;
+ }
+ if (audioItems.Trim() != String.Empty)
+ query += " -B " + audioItems;
+ firstLoop = true;
+ audioItems = string.Empty; // Reset for another pass.
+
+ // DRC (-D)
+ foreach (var itm in drcs)
+ {
+ string item = itm.ToString(new CultureInfo("en-US"));
+ if (firstLoop)
+ {
+ audioItems = item;
+ firstLoop = false;
+ }
+ else
+ audioItems += "," + item;
+ }
+ if (audioItems.Trim() != String.Empty)
+ query += " -D " + audioItems;
+
+ return query;
+ }
+
+ private static string SubtitlesQuery(EncodeTask task)
+ {
+ // TODO
+ return string.Empty;
+ }
+
+ private static string ChapterMarkersQuery(EncodeTask task)
+ {
+ string query = string.Empty;
+
+ // Attach Source name and dvd title to the start of the chapters.csv filename.
+ // This is for the queue. It allows different chapter name files for each title.
+ string destName = Path.GetFileNameWithoutExtension(task.Destination);
+ string sourceTitle = task.Title.ToString();
+
+ if (task.IncludeChapterMarkers && destName != null)
+ {
+ if (destName.Trim() != String.Empty)
+ {
+ string path = sourceTitle != "Automatic"
+ ? Path.Combine(Path.GetTempPath(), destName + "-" + sourceTitle + "-chapters.csv")
+ : Path.Combine(Path.GetTempPath(), destName + "-chapters.csv");
+
+ if (ChapterCsvSave(task.ChapterNames, path) == false)
+ query += " -m ";
+ else
+ query += " --markers=" + "\"" + path + "\"";
+ }
+ else
+ query += " -m";
+ }
+
+ return query;
+ }
+
+ private static string X264Query(EncodeTask task)
+ {
+ return string.IsNullOrEmpty(task.AdvancedEncoderOptions) ? string.Empty : string.Format(" -x {0}", task.AdvancedEncoderOptions);
+ }
+
+ private static string ExtraSettings(string verboseLevel, bool disableLibDvdNav)
+ {
+ string query = string.Empty;
+
+ // Verbosity Level
+ query += string.Format(" --verbose= {0}", string.IsNullOrEmpty(verboseLevel) ? "1" : verboseLevel);
+
+ // LibDVDNav
+ if (disableLibDvdNav)
+ query += " --no-dvdnav";
+
+ return query;
+ }
+
+ #endregion
+
+ #region Helpers
+
+ /// <summary>
+ /// Create a CSV file with the data from the Main Window Chapters tab
+ /// </summary>
+ /// <param name="chapters">The List of chapters</param>
+ /// <param name="filePathName">Path to save the csv file</param>
+ /// <returns>True if successful </returns>
+ private static bool ChapterCsvSave(Dictionary<int, string> chapters, string filePathName)
+ {
+ string csv = chapters.Aggregate(string.Empty, (current, row) => current + (row.Key + "," + row.Value.Replace(",", "\\,") + Environment.NewLine));
+
+ StreamWriter file = new StreamWriter(filePathName);
+ file.Write(csv);
+ file.Close();
+ file.Dispose();
+ return true;
+ }
+ #endregion
+ }
+}
\ No newline at end of file diff --git a/win/CS/HandBrake.ApplicationServices/Utilities/QueryParserUtility.cs b/win/CS/HandBrake.ApplicationServices/Utilities/QueryParserUtility.cs index ab90cf010..7e4e73baa 100644 --- a/win/CS/HandBrake.ApplicationServices/Utilities/QueryParserUtility.cs +++ b/win/CS/HandBrake.ApplicationServices/Utilities/QueryParserUtility.cs @@ -359,27 +359,27 @@ namespace HandBrake.ApplicationServices.Utilities AudioTrack track = new AudioTrack();
if (trackData != null)
if (trackData.Length >= (x + 1)) // Audio Track
- track.Track = trackData[x].Trim();
+ track.Track = int.Parse(trackData[x].Trim());
if (trackMixes != null)
if (trackMixes.Length >= (x + 1)) // Audio Mix
- track.MixDown = Converters.GetMixDown(trackMixes[x].Trim());
+ track.MixDown = Converters.GetAudioMixDown(Converters.GetMixDown(trackMixes[x].Trim()));
if (trackEncoders != null)
if (trackEncoders.Length >= (x + 1)) // Audio Mix
- track.Encoder = Converters.GetGUIAudioEncoder(trackEncoders[x].Trim());
+ track.Encoder = Converters.GetAudioEncoderFromCliString(trackEncoders[x].Trim());
if (trackBitrates != null)
if (trackBitrates.Length >= (x + 1)) // Audio Encoder
- track.Bitrate = trackBitrates[x].Trim() == "auto" ? "Auto" : trackBitrates[x].Trim();
+ track.Bitrate = int.Parse(trackBitrates[x].Trim() == "auto" ? "0" : trackBitrates[x].Trim());
if (trackSamplerates != null)
if (trackSamplerates.Length >= (x + 1)) // Audio SampleRate
- track.SampleRate = trackSamplerates[x].Trim() == "0" ? "Auto" : trackSamplerates[x].Trim();
+ track.SampleRate = double.Parse(trackSamplerates[x].Trim());
if (trackDRCvalues != null)
if (trackDRCvalues.Length >= (x + 1)) // Audio DRC Values
- track.DRC = trackDRCvalues[x].Trim();
+ track.DRC = double.Parse(trackDRCvalues[x].Trim());
allAudioTrackInfo.Add(track);
}
|