diff --git a/CUERipper/frmCUERipper.cs b/CUERipper/frmCUERipper.cs index 7862e7f..baa4c88 100644 --- a/CUERipper/frmCUERipper.cs +++ b/CUERipper/frmCUERipper.cs @@ -996,11 +996,8 @@ namespace CUERipper private void resetEncoderModes(CUEToolsUDC encoder) { - if (encoder.settings != null) - { - encoder.settings.PCM = AudioPCMConfig.RedBook; - buttonEncoderSettings.Enabled = encoder.settings.HasBrowsableAttributes(); - } + if (encoder.settings != null) encoder.settings.PCM = AudioPCMConfig.RedBook; + buttonEncoderSettings.Enabled = encoder.settings != null && encoder.settings.HasBrowsableAttributes(); string[] modes = encoder.SupportedModes; if (modes == null || modes.Length < 2) { @@ -1011,8 +1008,14 @@ namespace CUERipper } else { + if (encoder.EncoderModeIndex == -1 && encoder.settings != null) + { + string defaultMode; + encoder.settings.GetSupportedModes(out defaultMode); + encoder.EncoderMode = defaultMode; + } trackBarEncoderMode.Maximum = modes.Length - 1; - trackBarEncoderMode.Value = encoder.DefaultModeIndex == -1 ? modes.Length - 1 : encoder.DefaultModeIndex; + trackBarEncoderMode.Value = encoder.EncoderModeIndex == -1 ? modes.Length - 1 : encoder.EncoderModeIndex; labelEncoderMode.Text = encoder.EncoderMode; labelEncoderMinMode.Text = modes[0]; labelEncoderMaxMode.Text = modes[modes.Length - 1]; diff --git a/CUETools.Codecs.FLACCL/FLACCLWriter.cs b/CUETools.Codecs.FLACCL/FLACCLWriter.cs index 71fee04..3f6c51a 100644 --- a/CUETools.Codecs.FLACCL/FLACCLWriter.cs +++ b/CUETools.Codecs.FLACCL/FLACCLWriter.cs @@ -34,12 +34,13 @@ namespace CUETools.Codecs.FLACCL public class FLACCLWriterSettings : AudioEncoderSettings { public FLACCLWriterSettings() - : base("", "8") + : base() { } - public override string GetSupportedModes() + public override string GetSupportedModes(out string defaultMode) { + defaultMode = "8"; return this.AllowNonSubset ? "0 1 2 3 4 5 6 7 8 9 10 11" : "0 1 2 3 4 5 6 7 8"; } diff --git a/CUETools.Codecs.FLAKE/FlakeWriter.cs b/CUETools.Codecs.FLAKE/FlakeWriter.cs index 0b7feec..e868872 100644 --- a/CUETools.Codecs.FLAKE/FlakeWriter.cs +++ b/CUETools.Codecs.FLAKE/FlakeWriter.cs @@ -37,12 +37,13 @@ namespace CUETools.Codecs.FLAKE public class FlakeWriterSettings : AudioEncoderSettings { public FlakeWriterSettings() - : base("", "7") + : base() { } - public override string GetSupportedModes() + public override string GetSupportedModes(out string defaultMode) { + defaultMode = "7"; return this.AllowNonSubset ? "0 1 2 3 4 5 6 7 8 9 10 11" : "0 1 2 3 4 5 6 7 8"; } diff --git a/CUETools.Codecs.WMA/WMAWriter.cs b/CUETools.Codecs.WMA/WMAWriter.cs index dfa1b84..08746c1 100644 --- a/CUETools.Codecs.WMA/WMAWriter.cs +++ b/CUETools.Codecs.WMA/WMAWriter.cs @@ -188,9 +188,11 @@ namespace CUETools.Codecs.WMA return formats; } - public override string GetSupportedModes() + public override string GetSupportedModes(out string defaultMode) { - return string.Join(" ", GetFormats(null).ConvertAll(s => s.modeName).ToArray()); + var fmts = GetFormats(null); + defaultMode = fmts.Count > 0 ? fmts[fmts.Count - 1].modeName : ""; + return string.Join(" ", fmts.ConvertAll(s => s.modeName).ToArray()); } } diff --git a/CUETools.Codecs/AudioEncoderClass.cs b/CUETools.Codecs/AudioEncoderClass.cs index 32881f5..0814c3c 100644 --- a/CUETools.Codecs/AudioEncoderClass.cs +++ b/CUETools.Codecs/AudioEncoderClass.cs @@ -8,7 +8,7 @@ namespace CUETools.Codecs /// /// /// When plugins with classes that provide are - /// registered, their attributes are read. + /// registered, their attributes are read. /// /// /// using CUETools.Codecs; @@ -19,7 +19,7 @@ namespace CUETools.Codecs ///} /// [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] - public sealed class AudioEncoderClass : Attribute + public sealed class AudioEncoderClassAttribute : Attribute { private string _encoderName, _extension; private bool _lossless; @@ -51,7 +51,7 @@ namespace CUETools.Codecs get { return _settings; } } - public AudioEncoderClass(string encoderName, string extension, bool lossless, int priority, Type settings) + public AudioEncoderClassAttribute(string encoderName, string extension, bool lossless, int priority, Type settings) { _encoderName = encoderName; _extension = extension; diff --git a/CUETools.Codecs/AudioEncoderSettings.cs b/CUETools.Codecs/AudioEncoderSettings.cs index 2dddf5a..0e49a9a 100644 --- a/CUETools.Codecs/AudioEncoderSettings.cs +++ b/CUETools.Codecs/AudioEncoderSettings.cs @@ -25,13 +25,17 @@ namespace CUETools.Codecs foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(this)) property.ResetValue(this); this.m_supported_modes = supported_modes; - this.EncoderMode = default_mode; + this.m_default_mode = default_mode; + //GetSupportedModes(out m_default_mode); + this.EncoderMode = m_default_mode; } - private string m_supported_modes; + protected string m_supported_modes; + protected string m_default_mode; - public virtual string GetSupportedModes() + public virtual string GetSupportedModes(out string defaultMode) { + defaultMode = m_default_mode; return this.m_supported_modes; } @@ -101,23 +105,14 @@ namespace CUETools.Codecs set; } - [XmlIgnore] - [Browsable(false)] - public string[] SupportedModes - { - get - { - return this.GetSupportedModes().Split(' '); - } - } - [XmlIgnore] [Browsable(false)] public int EncoderModeIndex { get { - string[] modes = this.SupportedModes; + string defaultMode; + string[] modes = this.GetSupportedModes(out defaultMode).Split(' '); if (modes == null || modes.Length < 1) return -1; for (int i = 0; i < modes.Length; i++) @@ -128,7 +123,8 @@ namespace CUETools.Codecs set { - string[] modes = this.SupportedModes; + string defaultMode; + string[] modes = this.GetSupportedModes(out defaultMode).Split(' '); if (modes.Length == 0 && value < 0) return; if (value < 0 || value >= modes.Length) diff --git a/CUETools.Codecs/CUETools.Codecs.csproj b/CUETools.Codecs/CUETools.Codecs.csproj index 943e822..2d63d74 100644 --- a/CUETools.Codecs/CUETools.Codecs.csproj +++ b/CUETools.Codecs/CUETools.Codecs.csproj @@ -90,6 +90,7 @@ + diff --git a/CUETools.Codecs/UserDefinedEncoderSettings.cs b/CUETools.Codecs/UserDefinedEncoderSettings.cs new file mode 100644 index 0000000..a65b050 --- /dev/null +++ b/CUETools.Codecs/UserDefinedEncoderSettings.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.ComponentModel; + +namespace CUETools.Codecs +{ + public class UserDefinedEncoderSettings : AudioEncoderSettings + { + public UserDefinedEncoderSettings() + : base() + { + } + + public string SupportedModes + { + get + { + return m_supported_modes; + } + set + { + m_supported_modes = value; + } + } + + public string DefaultMode + { + get + { + return m_default_mode; + } + set + { + m_default_mode = value; + } + } + } +} diff --git a/CUETools.Processor/CUEConfig.cs b/CUETools.Processor/CUEConfig.cs index 755068e..13bc626 100644 --- a/CUETools.Processor/CUEConfig.cs +++ b/CUETools.Processor/CUEConfig.cs @@ -153,7 +153,7 @@ namespace CUETools.Processor encoders = new CUEToolsUDCList(); foreach (Type type in CUEProcessorPlugins.encs) - foreach (AudioEncoderClass enc in Attribute.GetCustomAttributes(type, typeof(AudioEncoderClass))) + foreach (AudioEncoderClassAttribute enc in Attribute.GetCustomAttributes(type, typeof(AudioEncoderClassAttribute))) { try { diff --git a/CUETools.Processor/CUEProcessorPlugins.cs b/CUETools.Processor/CUEProcessorPlugins.cs index ef13cea..db457d9 100644 --- a/CUETools.Processor/CUEProcessorPlugins.cs +++ b/CUETools.Processor/CUEProcessorPlugins.cs @@ -70,7 +70,7 @@ namespace CUETools.Processor decs.Add(type); } //if (type.IsClass && !type.IsAbstract && typeof(IAudioDest).IsAssignableFrom(type)) - if (Attribute.GetCustomAttributes(type, typeof(AudioEncoderClass)).Length > 0) + if (Attribute.GetCustomAttributes(type, typeof(AudioEncoderClassAttribute)).Length > 0) { encs.Add(type); } diff --git a/CUETools.Processor/CUEToolsUDC.cs b/CUETools.Processor/CUEToolsUDC.cs index babef7d..95798da 100644 --- a/CUETools.Processor/CUEToolsUDC.cs +++ b/CUETools.Processor/CUEToolsUDC.cs @@ -43,7 +43,7 @@ namespace CUETools.Processor type = null; } - public CUEToolsUDC(AudioEncoderClass enc, Type enctype) + public CUEToolsUDC(AudioEncoderClassAttribute enc, Type enctype) { name = enc.EncoderName; extension = enc.Extension; @@ -118,7 +118,8 @@ namespace CUETools.Processor { get { - return this.settings == null ? this.supported_modes : this.settings.GetSupportedModes(); + string defaultMode; + return this.settings == null ? this.supported_modes : this.settings.GetSupportedModes(out defaultMode); } set { @@ -149,7 +150,7 @@ namespace CUETools.Processor } } - public int DefaultModeIndex + public int EncoderModeIndex { get { diff --git a/CUETools/frmCUETools.cs b/CUETools/frmCUETools.cs index 319f160..a43f451 100644 --- a/CUETools/frmCUETools.cs +++ b/CUETools/frmCUETools.cs @@ -2465,8 +2465,14 @@ namespace JDP } else { + if (encoder.EncoderModeIndex == -1 && encoder.settings != null) + { + string defaultMode; + encoder.settings.GetSupportedModes(out defaultMode); + encoder.EncoderMode = defaultMode; + } trackBarEncoderMode.Maximum = modes.Length - 1; - trackBarEncoderMode.Value = encoder.DefaultModeIndex == -1 ? modes.Length - 1 : encoder.DefaultModeIndex; + trackBarEncoderMode.Value = encoder.EncoderModeIndex == -1 ? modes.Length - 1 : encoder.EncoderModeIndex; labelEncoderMode.Text = encoder.EncoderMode; labelEncoderMinMode.Text = modes[0]; labelEncoderMaxMode.Text = modes[modes.Length - 1];