From 12f9a66c277e53f64f1a2cdc37d0676be554cd6e Mon Sep 17 00:00:00 2001 From: Grigory Chudov Date: Wed, 19 Jun 2013 03:40:43 -0400 Subject: [PATCH] Simplify code for encoder settings --- CUETools.Codecs.FLACCL/FLACCLWriter.cs | 68 +++---------------------- CUETools.Codecs.FLAKE/FlakeWriter.cs | 54 ++------------------ CUETools.Codecs/AudioEncoderSettings.cs | 12 +++++ CUETools.Codecs/DefaultValueForMode.cs | 27 ++++++++++ 4 files changed, 51 insertions(+), 110 deletions(-) create mode 100644 CUETools.Codecs/DefaultValueForMode.cs diff --git a/CUETools.Codecs.FLACCL/FLACCLWriter.cs b/CUETools.Codecs.FLACCL/FLACCLWriter.cs index 0a2204e..b582c2d 100644 --- a/CUETools.Codecs.FLACCL/FLACCLWriter.cs +++ b/CUETools.Codecs.FLACCL/FLACCLWriter.cs @@ -61,13 +61,7 @@ namespace CUETools.Codecs.FLACCL { if (EncoderModeIndex < 0) throw new Exception("unsupported encoder mode"); - var thisModeSettings = FLACCLWriterSettings.modeSettings[EncoderModeIndex]; - if (MaxLPCOrder < 0) - MaxLPCOrder = thisModeSettings.MaxLPCOrder; - if (MinFixedOrder < 0) - MinFixedOrder = thisModeSettings.MinFixedOrder; - if (MaxFixedOrder < 0) - MaxFixedOrder = thisModeSettings.MaxFixedOrder; + SetDefaultValuesForMode(); if (Padding < 0) throw new Exception("unsupported padding value " + Padding.ToString()); if (BlockSize != 0 && (BlockSize < 256 || BlockSize >= Flake.MAX_BLOCKSIZE)) @@ -82,57 +76,21 @@ namespace CUETools.Codecs.FLACCL throw new Exception("invalid MinPartitionOrder " + MinPartitionOrder.ToString()); if (MinPartitionOrder > MaxPartitionOrder || MaxPartitionOrder > 8) throw new Exception("invalid MaxPartitionOrder " + MaxPartitionOrder.ToString()); + if (CPUThreads < 0 || CPUThreads > 16) + throw new Exception("CPUThreads must be between 0..16"); if (!AllowNonSubset && !IsSubset()) throw new Exception("the encoding parameters specified do not conform to the FLAC Subset"); } - private static FLACCLWriterSettings[] modeSettings = - { - new FLACCLWriterSettings() { - MinFixedOrder = 3, MaxFixedOrder = 2, MaxLPCOrder = 7, - }, - new FLACCLWriterSettings() { - MinFixedOrder = 2, MaxFixedOrder = 2, MaxLPCOrder = 7, - }, - new FLACCLWriterSettings() { - MinFixedOrder = 2, MaxFixedOrder = 2, MaxLPCOrder = 8, - }, - new FLACCLWriterSettings() { - MinFixedOrder = 2, MaxFixedOrder = 2, MaxLPCOrder = 8, - }, - new FLACCLWriterSettings() { - MinFixedOrder = 2, MaxFixedOrder = 2, MaxLPCOrder = 8, - }, - new FLACCLWriterSettings() { - MinFixedOrder = 2, MaxFixedOrder = 2, MaxLPCOrder = 8, - }, - new FLACCLWriterSettings() { - MinFixedOrder = 2, MaxFixedOrder = 2, MaxLPCOrder = 12, - }, - new FLACCLWriterSettings() { - MinFixedOrder = 2, MaxFixedOrder = 2, MaxLPCOrder = 12, - }, - new FLACCLWriterSettings() { - MinFixedOrder = 0, MaxFixedOrder = 4, MaxLPCOrder = 12, - }, - new FLACCLWriterSettings() { - MinFixedOrder = 2, MaxFixedOrder = 2, MaxLPCOrder = 32, - }, - new FLACCLWriterSettings() { - MinFixedOrder = 2, MaxFixedOrder = 2, MaxLPCOrder = 32, - }, - new FLACCLWriterSettings() { - MinFixedOrder = 2, MaxFixedOrder = 2, MaxLPCOrder = 32, - }, - }; - [DefaultValue(-1)] + [DefaultValueForMode(3, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2)] [Browsable(false)] [DisplayName("MinFixedOrder")] [SRDescription(typeof(Properties.Resources), "MinFixedOrderDescription")] public int MinFixedOrder { get; set; } [DefaultValue(-1)] + [DefaultValueForMode(2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2)] [Browsable(false)] [DisplayName("MaxFixedOrder")] [SRDescription(typeof(Properties.Resources), "MaxFixedOrderDescription")] @@ -145,6 +103,7 @@ namespace CUETools.Codecs.FLACCL public int MinLPCOrder { get; set; } [DefaultValue(-1)] + [DefaultValueForMode(7, 7, 8, 8, 8, 8, 12, 12, 12, 32, 32, 32)] [Browsable(false)] [DisplayName("MaxLPCOrder")] [SRDescription(typeof(Properties.Resources), "MaxLPCOrderDescription")] @@ -207,22 +166,9 @@ namespace CUETools.Codecs.FLACCL [SRDescription(typeof(Properties.Resources), "DescriptionDeviceType")] public OpenCLDeviceType DeviceType { get; set; } - int cpu_threads = 0; [DefaultValue(0)] [SRDescription(typeof(Properties.Resources), "DescriptionCPUThreads")] - public int CPUThreads - { - get - { - return cpu_threads; - } - set - { - if (value < 0 || value > 16) - throw new Exception("CPUThreads must be between 0..16"); - cpu_threads = value; - } - } + public int CPUThreads { get; set; } [DefaultValue(false)] [DisplayName("Allow Non-subset")] diff --git a/CUETools.Codecs.FLAKE/FlakeWriter.cs b/CUETools.Codecs.FLAKE/FlakeWriter.cs index 003f25e..a1938af 100644 --- a/CUETools.Codecs.FLAKE/FlakeWriter.cs +++ b/CUETools.Codecs.FLAKE/FlakeWriter.cs @@ -64,15 +64,7 @@ namespace CUETools.Codecs.FLAKE { if (EncoderModeIndex < 0) throw new Exception("unsupported encoder mode"); - var thisModeSettings = FlakeWriterSettings.modeSettings[EncoderModeIndex]; - if (MaxLPCOrder < 0) - MaxLPCOrder = thisModeSettings.MaxLPCOrder; - if (MinFixedOrder < 0) - MinFixedOrder = thisModeSettings.MinFixedOrder; - if (MaxFixedOrder < 0) - MaxFixedOrder = thisModeSettings.MaxFixedOrder; - if (MaxPartitionOrder < 0) - MaxPartitionOrder = thisModeSettings.MaxPartitionOrder; + SetDefaultValuesForMode(); if (Padding < 0) throw new Exception("unsupported padding value " + Padding.ToString()); if (BlockSize != 0 && (BlockSize < 256 || BlockSize >= Flake.MAX_BLOCKSIZE)) @@ -91,53 +83,15 @@ namespace CUETools.Codecs.FLAKE throw new Exception("the encoding parameters specified do not conform to the FLAC Subset"); } - private static FlakeWriterSettings[] modeSettings = - { - new FlakeWriterSettings() { - MinFixedOrder = 3, MaxFixedOrder = 2, MaxLPCOrder = 6, MaxPartitionOrder = 6, - }, - new FlakeWriterSettings() { - MinFixedOrder = 2, MaxFixedOrder = 2, MaxLPCOrder = 8, MaxPartitionOrder = 6, - }, - new FlakeWriterSettings() { - MinFixedOrder = 2, MaxFixedOrder = 2, MaxLPCOrder = 12, MaxPartitionOrder = 6, - }, - new FlakeWriterSettings() { - MinFixedOrder = 2, MaxFixedOrder = 2, MaxLPCOrder = 8, MaxPartitionOrder = 8, - }, - new FlakeWriterSettings() { - MinFixedOrder = 2, MaxFixedOrder = 2, MaxLPCOrder = 12, MaxPartitionOrder = 8, - }, - new FlakeWriterSettings() { - MinFixedOrder = 2, MaxFixedOrder = 2, MaxLPCOrder = 12, MaxPartitionOrder = 8, - }, - new FlakeWriterSettings() { - MinFixedOrder = 2, MaxFixedOrder = 2, MaxLPCOrder = 12, MaxPartitionOrder = 8, - }, - new FlakeWriterSettings() { - MinFixedOrder = 2, MaxFixedOrder = 2, MaxLPCOrder = 12, MaxPartitionOrder = 8, - }, - new FlakeWriterSettings() { - MinFixedOrder = 0, MaxFixedOrder = 2, MaxLPCOrder = 12, MaxPartitionOrder = 8, - }, - new FlakeWriterSettings() { - MinFixedOrder = 2, MaxFixedOrder = 2, MaxLPCOrder = 32, MaxPartitionOrder = 8, - }, - new FlakeWriterSettings() { - MinFixedOrder = 0, MaxFixedOrder = 4, MaxLPCOrder = 32, MaxPartitionOrder = 8, - }, - new FlakeWriterSettings() { - MinFixedOrder = 0, MaxFixedOrder = 4, MaxLPCOrder = 32, MaxPartitionOrder = 8, - }, - }; - [DefaultValue(-1)] + [DefaultValueForMode(3, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 0)] [Browsable(false)] [DisplayName("MinFixedOrder")] [SRDescription(typeof(Properties.Resources), "MinFixedOrderDescription")] public int MinFixedOrder { get; set; } [DefaultValue(-1)] + [DefaultValueForMode(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4)] [Browsable(false)] [DisplayName("MaxFixedOrder")] [SRDescription(typeof(Properties.Resources), "MaxFixedOrderDescription")] @@ -150,6 +104,7 @@ namespace CUETools.Codecs.FLAKE public int MinLPCOrder { get; set; } [DefaultValue(-1)] + [DefaultValueForMode(6, 8, 12, 8, 12, 12, 12, 12, 12, 32, 32, 32)] [Browsable(false)] [DisplayName("MaxLPCOrder")] [SRDescription(typeof(Properties.Resources), "MaxLPCOrderDescription")] @@ -162,6 +117,7 @@ namespace CUETools.Codecs.FLAKE public int MinPartitionOrder { get; set; } [DefaultValue(-1)] + [DefaultValueForMode(6, 6, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8)] [DisplayName("MaxPartitionOrder")] [Browsable(false)] [SRDescription(typeof(Properties.Resources), "MaxPartitionOrderDescription")] diff --git a/CUETools.Codecs/AudioEncoderSettings.cs b/CUETools.Codecs/AudioEncoderSettings.cs index ddfcef8..81b5883 100644 --- a/CUETools.Codecs/AudioEncoderSettings.cs +++ b/CUETools.Codecs/AudioEncoderSettings.cs @@ -67,6 +67,18 @@ namespace CUETools.Codecs return hasBrowsable; } + protected void SetDefaultValuesForMode() + { + foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(this)) + if (!property.CanResetValue(this)) + foreach (var attribute in property.Attributes) + if (attribute is DefaultValueForModeAttribute) + { + var defaultValueForMode = attribute as DefaultValueForModeAttribute; + property.SetValue(this, defaultValueForMode.m_values[EncoderModeIndex]); + } + } + [Browsable(false)] [XmlIgnore] public AudioPCMConfig PCM diff --git a/CUETools.Codecs/DefaultValueForMode.cs b/CUETools.Codecs/DefaultValueForMode.cs new file mode 100644 index 0000000..c3af11e --- /dev/null +++ b/CUETools.Codecs/DefaultValueForMode.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace CUETools.Codecs +{ + /// + /// Default property value for each encoder mode attribute + /// + [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)] + public class DefaultValueForModeAttribute : Attribute + { + /// + /// Resource manager to use; + /// + public int[] m_values; + + /// + /// Construct the description attribute + /// + /// + public DefaultValueForModeAttribute(params int[] values) + { + this.m_values = values; + } + } +}