Reset encoding mode to default for codecs with dynamic modes list,

when settings become incompatible with the chosen mode.
E.g. for flac if -11 was selected and nonsubset modes are disabled,
-7 is chosen instead.
This commit is contained in:
Grigory Chudov
2013-04-08 23:11:03 -04:00
parent d1e70fc7f3
commit e3d0c595c0
12 changed files with 86 additions and 36 deletions

View File

@@ -8,7 +8,7 @@ namespace CUETools.Codecs
/// </summary>
/// <remarks>
/// When plugins with classes that provide <see cref="IAudioDest" /> are
/// registered, their <see cref="AudioEncoderClass" /> attributes are read.
/// registered, their <see cref="AudioEncoderClassAttribute" /> attributes are read.
/// </remarks>
/// <example>
/// <code lang="C#">using CUETools.Codecs;
@@ -19,7 +19,7 @@ namespace CUETools.Codecs
///}</code>
/// </example>
[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;

View File

@@ -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)

View File

@@ -90,6 +90,7 @@
<Compile Include="PlaybackState.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SilenceGenerator.cs" />
<Compile Include="UserDefinedEncoderSettings.cs" />
<Compile Include="UserDefinedReader.cs" />
<Compile Include="UserDefinedWriter.cs" />
<Compile Include="WAVReader.cs" />

View File

@@ -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;
}
}
}
}