// -------------------------------------------------------------------------------------------------------------------- // // This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License. // // // The advanced choices. // // -------------------------------------------------------------------------------------------------------------------- namespace HandBrakeWPF.Helpers { using System.Collections.Generic; using System.Globalization; using HandBrakeWPF.Model; /// /// The advanced choices. /// public static class AdvancedChoicesHelper { #region Constants and Fields /// /// The adaptive b frames. /// private static List adaptiveBFrames; /// /// The analysis. /// private static List analysis; /// /// The b frames. /// private static List bFrames; /// /// The deblocking strength. /// private static List deblockingStrength; /// /// The deblocking threshold. /// private static List deblockingThreshold; /// /// The direct prediction. /// private static List directPrediction; /// /// The motion estimation method. /// private static List motionEstimationMethod; /// /// The motion estimation range. /// private static List motionEstimationRange; /// /// The pyramidal b frames. /// private static List pyramidalBFrames; /// /// The reference frames. /// private static List referenceFrames; /// /// The subpixel motion estimation. /// private static List subpixelMotionEstimation; /// /// The trellis. /// private static List trellis; #endregion #region Constructors and Destructors /// /// Initializes static members of the class. /// static AdvancedChoicesHelper() { referenceFrames = CreateNumberList(1, 16, defaultNumber: 3); bFrames = CreateNumberList(0, 16, defaultNumber: 3); pyramidalBFrames = new List { new AdvancedChoice { Label = "Off", Value = "none" }, new AdvancedChoice { Label = "Normal (Default)", IsDefault = true }, new AdvancedChoice { Label = "Strict", Value = "strict" } }; adaptiveBFrames = new List { new AdvancedChoice { Label = "Off", Value = "0" }, new AdvancedChoice { Label = "Fast (Default)", Value = "1", IsDefault = true }, new AdvancedChoice { Label = "Optimal", Value = "2" } }; directPrediction = new List { new AdvancedChoice { Label = "None", Value = "none" }, new AdvancedChoice { Label = "Spatial (Default)", Value = "spatial", IsDefault = true }, new AdvancedChoice { Label = "Temporal", Value = "temporal" }, new AdvancedChoice { Label = "Automatic", Value = "auto" } }; motionEstimationMethod = new List { new AdvancedChoice { Label = "Diamond", Value = "dia" }, new AdvancedChoice { Label = "Hexagon (Default)", Value = "hex", IsDefault = true }, new AdvancedChoice { Label = "Uneven Multi-Hexagon", Value = "umh" }, new AdvancedChoice { Label = "Exhaustive", Value = "esa" }, new AdvancedChoice { Label = "Transformed Exhaustive", Value = "tesa" }, }; subpixelMotionEstimation = new List { new AdvancedChoice { Label = "0: SAD, no subpel (super fast!)", Value = "0" }, new AdvancedChoice { Label = "1: SAD, qpel", Value = "1" }, new AdvancedChoice { Label = "2: SATD, qpel", Value = "2" }, new AdvancedChoice { Label = "3: SATD, multi-qpel", Value = "3" }, new AdvancedChoice { Label = "4: SATD, qpel on all", Value = "4" }, new AdvancedChoice { Label = "5: SATD, multi-qpel on all", Value = "5" }, new AdvancedChoice { Label = "6: RD in I/P-frames", Value = "6" }, new AdvancedChoice { Label = "7: RD in all frames (Default)", Value = "7", IsDefault = true }, new AdvancedChoice { Label = "8: RD refine in I/P-frames", Value = "8" }, new AdvancedChoice { Label = "9: RD refine in all frames", Value = "9" }, new AdvancedChoice { Label = "10: QPRD in all frames", Value = "10" }, new AdvancedChoice { Label = "11: No early terminations in analysis", Value = "11" }, }; // subpixelMotionEstimation = CreateNumberList(0, 9, defaultNumber: 7); motionEstimationRange = CreateNumberList(4, 64, defaultNumber: 16); analysis = new List { new AdvancedChoice { Label = "Most (Default)", IsDefault = true }, new AdvancedChoice { Label = "None", Value = "none" }, new AdvancedChoice { Label = "Some", Value = "i4x4,i8x8", }, new AdvancedChoice { Label = "All", Value = "all" } }; trellis = new List { new AdvancedChoice { Label = "Off", Value = "0" }, new AdvancedChoice { Label = "Encode Only (Default)", Value = "1", IsDefault = true }, new AdvancedChoice { Label = "Always", Value = "2" } }; deblockingStrength = CreateNumberList(-6, 6, defaultNumber: 0); deblockingThreshold = CreateNumberList(-6, 6, defaultNumber: 0); } #endregion #region Properties /// /// Gets AdaptiveBFrames. /// public static List AdaptiveBFrames { get { return adaptiveBFrames; } } /// /// Gets Analysis. /// public static List Analysis { get { return analysis; } } /// /// Gets BFrames. /// public static List BFrames { get { return bFrames; } } /// /// Gets DeblockingStrength. /// public static List DeblockingStrength { get { return deblockingStrength; } } /// /// Gets DeblockingThreshold. /// public static List DeblockingThreshold { get { return deblockingThreshold; } } /// /// Gets DirectPrediction. /// public static List DirectPrediction { get { return directPrediction; } } /// /// Gets MotionEstimationMethod. /// public static List MotionEstimationMethod { get { return motionEstimationMethod; } } /// /// Gets MotionEstimationRange. /// public static List MotionEstimationRange { get { return motionEstimationRange; } } /// /// Gets PyramidalBFrames. /// public static List PyramidalBFrames { get { return pyramidalBFrames; } } /// /// Gets ReferenceFrames. /// public static List ReferenceFrames { get { return referenceFrames; } } /// /// Gets SubpixelMotionEstimation. /// public static List SubpixelMotionEstimation { get { return subpixelMotionEstimation; } } /// /// Gets Trellis. /// public static List Trellis { get { return trellis; } } #endregion #region Methods /// /// The add range. /// /// /// The list. /// /// /// The lower. /// /// /// The upper. /// /// /// The default number. /// private static void AddRange(List list, int lower, int upper, int defaultNumber) { for (int i = lower; i <= upper; i++) { if (i == defaultNumber) { list.Add( new AdvancedChoice { IsDefault = true, Label = i.ToString() + " (Default)", Value = i.ToString(CultureInfo.InvariantCulture) }); } else { list.Add( new AdvancedChoice { Label = i.ToString(), Value = i.ToString(CultureInfo.InvariantCulture) }); } } } /// /// The create number list. /// /// /// The lower. /// /// /// The upper. /// /// /// The default number. /// /// /// List of Advanced Choices Options. /// private static List CreateNumberList(int lower, int upper, int defaultNumber) { var list = new List(); AddRange(list, lower, upper, defaultNumber); return list; } #endregion } }