Simplify code for encoder settings

This commit is contained in:
Grigory Chudov
2013-06-19 03:40:43 -04:00
parent bcb42dd531
commit 12f9a66c27
4 changed files with 51 additions and 110 deletions

View File

@@ -61,13 +61,7 @@ namespace CUETools.Codecs.FLACCL
{ {
if (EncoderModeIndex < 0) if (EncoderModeIndex < 0)
throw new Exception("unsupported encoder mode"); throw new Exception("unsupported encoder mode");
var thisModeSettings = FLACCLWriterSettings.modeSettings[EncoderModeIndex]; SetDefaultValuesForMode();
if (MaxLPCOrder < 0)
MaxLPCOrder = thisModeSettings.MaxLPCOrder;
if (MinFixedOrder < 0)
MinFixedOrder = thisModeSettings.MinFixedOrder;
if (MaxFixedOrder < 0)
MaxFixedOrder = thisModeSettings.MaxFixedOrder;
if (Padding < 0) if (Padding < 0)
throw new Exception("unsupported padding value " + Padding.ToString()); throw new Exception("unsupported padding value " + Padding.ToString());
if (BlockSize != 0 && (BlockSize < 256 || BlockSize >= Flake.MAX_BLOCKSIZE)) if (BlockSize != 0 && (BlockSize < 256 || BlockSize >= Flake.MAX_BLOCKSIZE))
@@ -82,57 +76,21 @@ namespace CUETools.Codecs.FLACCL
throw new Exception("invalid MinPartitionOrder " + MinPartitionOrder.ToString()); throw new Exception("invalid MinPartitionOrder " + MinPartitionOrder.ToString());
if (MinPartitionOrder > MaxPartitionOrder || MaxPartitionOrder > 8) if (MinPartitionOrder > MaxPartitionOrder || MaxPartitionOrder > 8)
throw new Exception("invalid MaxPartitionOrder " + MaxPartitionOrder.ToString()); throw new Exception("invalid MaxPartitionOrder " + MaxPartitionOrder.ToString());
if (CPUThreads < 0 || CPUThreads > 16)
throw new Exception("CPUThreads must be between 0..16");
if (!AllowNonSubset && !IsSubset()) if (!AllowNonSubset && !IsSubset())
throw new Exception("the encoding parameters specified do not conform to the FLAC Subset"); 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)] [DefaultValue(-1)]
[DefaultValueForMode(3, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2)]
[Browsable(false)] [Browsable(false)]
[DisplayName("MinFixedOrder")] [DisplayName("MinFixedOrder")]
[SRDescription(typeof(Properties.Resources), "MinFixedOrderDescription")] [SRDescription(typeof(Properties.Resources), "MinFixedOrderDescription")]
public int MinFixedOrder { get; set; } public int MinFixedOrder { get; set; }
[DefaultValue(-1)] [DefaultValue(-1)]
[DefaultValueForMode(2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2)]
[Browsable(false)] [Browsable(false)]
[DisplayName("MaxFixedOrder")] [DisplayName("MaxFixedOrder")]
[SRDescription(typeof(Properties.Resources), "MaxFixedOrderDescription")] [SRDescription(typeof(Properties.Resources), "MaxFixedOrderDescription")]
@@ -145,6 +103,7 @@ namespace CUETools.Codecs.FLACCL
public int MinLPCOrder { get; set; } public int MinLPCOrder { get; set; }
[DefaultValue(-1)] [DefaultValue(-1)]
[DefaultValueForMode(7, 7, 8, 8, 8, 8, 12, 12, 12, 32, 32, 32)]
[Browsable(false)] [Browsable(false)]
[DisplayName("MaxLPCOrder")] [DisplayName("MaxLPCOrder")]
[SRDescription(typeof(Properties.Resources), "MaxLPCOrderDescription")] [SRDescription(typeof(Properties.Resources), "MaxLPCOrderDescription")]
@@ -207,22 +166,9 @@ namespace CUETools.Codecs.FLACCL
[SRDescription(typeof(Properties.Resources), "DescriptionDeviceType")] [SRDescription(typeof(Properties.Resources), "DescriptionDeviceType")]
public OpenCLDeviceType DeviceType { get; set; } public OpenCLDeviceType DeviceType { get; set; }
int cpu_threads = 0;
[DefaultValue(0)] [DefaultValue(0)]
[SRDescription(typeof(Properties.Resources), "DescriptionCPUThreads")] [SRDescription(typeof(Properties.Resources), "DescriptionCPUThreads")]
public int CPUThreads public int CPUThreads { get; set; }
{
get
{
return cpu_threads;
}
set
{
if (value < 0 || value > 16)
throw new Exception("CPUThreads must be between 0..16");
cpu_threads = value;
}
}
[DefaultValue(false)] [DefaultValue(false)]
[DisplayName("Allow Non-subset")] [DisplayName("Allow Non-subset")]

View File

@@ -64,15 +64,7 @@ namespace CUETools.Codecs.FLAKE
{ {
if (EncoderModeIndex < 0) if (EncoderModeIndex < 0)
throw new Exception("unsupported encoder mode"); throw new Exception("unsupported encoder mode");
var thisModeSettings = FlakeWriterSettings.modeSettings[EncoderModeIndex]; SetDefaultValuesForMode();
if (MaxLPCOrder < 0)
MaxLPCOrder = thisModeSettings.MaxLPCOrder;
if (MinFixedOrder < 0)
MinFixedOrder = thisModeSettings.MinFixedOrder;
if (MaxFixedOrder < 0)
MaxFixedOrder = thisModeSettings.MaxFixedOrder;
if (MaxPartitionOrder < 0)
MaxPartitionOrder = thisModeSettings.MaxPartitionOrder;
if (Padding < 0) if (Padding < 0)
throw new Exception("unsupported padding value " + Padding.ToString()); throw new Exception("unsupported padding value " + Padding.ToString());
if (BlockSize != 0 && (BlockSize < 256 || BlockSize >= Flake.MAX_BLOCKSIZE)) 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"); 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)] [DefaultValue(-1)]
[DefaultValueForMode(3, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 0)]
[Browsable(false)] [Browsable(false)]
[DisplayName("MinFixedOrder")] [DisplayName("MinFixedOrder")]
[SRDescription(typeof(Properties.Resources), "MinFixedOrderDescription")] [SRDescription(typeof(Properties.Resources), "MinFixedOrderDescription")]
public int MinFixedOrder { get; set; } public int MinFixedOrder { get; set; }
[DefaultValue(-1)] [DefaultValue(-1)]
[DefaultValueForMode(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4)]
[Browsable(false)] [Browsable(false)]
[DisplayName("MaxFixedOrder")] [DisplayName("MaxFixedOrder")]
[SRDescription(typeof(Properties.Resources), "MaxFixedOrderDescription")] [SRDescription(typeof(Properties.Resources), "MaxFixedOrderDescription")]
@@ -150,6 +104,7 @@ namespace CUETools.Codecs.FLAKE
public int MinLPCOrder { get; set; } public int MinLPCOrder { get; set; }
[DefaultValue(-1)] [DefaultValue(-1)]
[DefaultValueForMode(6, 8, 12, 8, 12, 12, 12, 12, 12, 32, 32, 32)]
[Browsable(false)] [Browsable(false)]
[DisplayName("MaxLPCOrder")] [DisplayName("MaxLPCOrder")]
[SRDescription(typeof(Properties.Resources), "MaxLPCOrderDescription")] [SRDescription(typeof(Properties.Resources), "MaxLPCOrderDescription")]
@@ -162,6 +117,7 @@ namespace CUETools.Codecs.FLAKE
public int MinPartitionOrder { get; set; } public int MinPartitionOrder { get; set; }
[DefaultValue(-1)] [DefaultValue(-1)]
[DefaultValueForMode(6, 6, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8)]
[DisplayName("MaxPartitionOrder")] [DisplayName("MaxPartitionOrder")]
[Browsable(false)] [Browsable(false)]
[SRDescription(typeof(Properties.Resources), "MaxPartitionOrderDescription")] [SRDescription(typeof(Properties.Resources), "MaxPartitionOrderDescription")]

View File

@@ -67,6 +67,18 @@ namespace CUETools.Codecs
return hasBrowsable; 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)] [Browsable(false)]
[XmlIgnore] [XmlIgnore]
public AudioPCMConfig PCM public AudioPCMConfig PCM

View File

@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace CUETools.Codecs
{
/// <summary>
/// Default property value for each encoder mode attribute
/// </summary>
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public class DefaultValueForModeAttribute : Attribute
{
/// <summary>
/// Resource manager to use;
/// </summary>
public int[] m_values;
/// <summary>
/// Construct the description attribute
/// </summary>
/// <param name="text"></param>
public DefaultValueForModeAttribute(params int[] values)
{
this.m_values = values;
}
}
}