Files
cuetools.net/CUETools.Codecs/AudioEncoderSettings.cs

141 lines
3.6 KiB
C#
Raw Normal View History

using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
namespace CUETools.Codecs
{
public class AudioEncoderSettings
{
public AudioEncoderSettings()
: this("", "")
{
}
public AudioEncoderSettings(AudioPCMConfig pcm)
: this("", "")
{
this.PCM = pcm;
}
public AudioEncoderSettings(string supported_modes, string default_mode)
{
// Iterate through each property and call ResetValue()
foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(this))
property.ResetValue(this);
this.m_supported_modes = supported_modes;
this.EncoderMode = default_mode;
}
private string m_supported_modes;
public virtual string GetSupportedModes()
{
return this.m_supported_modes;
}
public virtual bool IsValid()
{
return BlockSize == 0 && Padding >= 0;
}
public void Validate()
{
if (!IsValid())
throw new Exception("unsupported encoder settings");
}
public AudioEncoderSettings Clone()
{
return this.MemberwiseClone() as AudioEncoderSettings;
}
public bool HasBrowsableAttributes()
{
bool hasBrowsable = false;
foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(this))
{
bool isBrowsable = true;
foreach (var attribute in property.Attributes)
{
var browsable = attribute as BrowsableAttribute;
isBrowsable &= browsable == null || browsable.Browsable;
}
hasBrowsable |= isBrowsable;
}
return hasBrowsable;
}
[Browsable(false)]
[XmlIgnore]
public AudioPCMConfig PCM
{
get;
set;
}
[Browsable(false)]
[DefaultValue(0)]
public int BlockSize
{
get;
set;
}
[Browsable(false)]
[XmlIgnore]
[DefaultValue(4096)]
public int Padding
{
get;
set;
}
[Browsable(false)]
[DefaultValue("")]
public string EncoderMode
{
get;
set;
}
[XmlIgnore]
[Browsable(false)]
public string[] SupportedModes
{
get
{
return this.GetSupportedModes().Split(' ');
}
}
[XmlIgnore]
[Browsable(false)]
public int EncoderModeIndex
{
get
{
string[] modes = this.SupportedModes;
if (modes == null || modes.Length < 1)
return -1;
for (int i = 0; i < modes.Length; i++)
if (modes[i] == this.EncoderMode)
return i;
return -1;
}
set
{
string[] modes = this.SupportedModes;
if (modes.Length == 0 && value < 0)
return;
if (value < 0 || value >= modes.Length)
throw new IndexOutOfRangeException();
this.EncoderMode = modes[value];
}
}
}
}