mirror of
https://github.com/claunia/cuetools.net.git
synced 2025-12-16 18:14:25 +00:00
Fix libFLAC plugin
This commit is contained in:
@@ -39,8 +39,10 @@ namespace CUETools.Codecs.libFLAC
|
|||||||
|
|
||||||
public unsafe class Reader : IAudioSource
|
public unsafe class Reader : IAudioSource
|
||||||
{
|
{
|
||||||
public Reader(string path, Stream IO)
|
public Reader(DecoderSettings settings, string path, Stream IO)
|
||||||
{
|
{
|
||||||
|
m_settings = settings;
|
||||||
|
|
||||||
m_writeCallback = WriteCallback;
|
m_writeCallback = WriteCallback;
|
||||||
m_metadataCallback = MetadataCallback;
|
m_metadataCallback = MetadataCallback;
|
||||||
m_errorCallback = ErrorCallback;
|
m_errorCallback = ErrorCallback;
|
||||||
@@ -298,7 +300,7 @@ namespace CUETools.Codecs.libFLAC
|
|||||||
return m_stream.Position == m_stream.Length ? 1 : 0;
|
return m_stream.Position == m_stream.Length ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IAudioDecoderSettings Settings => null;
|
public IAudioDecoderSettings Settings => m_settings;
|
||||||
|
|
||||||
public AudioPCMConfig PCM => m_pcm;
|
public AudioPCMConfig PCM => m_pcm;
|
||||||
|
|
||||||
@@ -371,6 +373,7 @@ namespace CUETools.Codecs.libFLAC
|
|||||||
return buff.Length;
|
return buff.Length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DecoderSettings m_settings;
|
||||||
AudioBuffer m_sampleBuffer;
|
AudioBuffer m_sampleBuffer;
|
||||||
byte[] m_readBuffer;
|
byte[] m_readBuffer;
|
||||||
long m_sampleCount, m_sampleOffset;
|
long m_sampleCount, m_sampleOffset;
|
||||||
|
|||||||
@@ -79,14 +79,14 @@ namespace CUETools.Codecs.libFLAC
|
|||||||
|
|
||||||
public unsafe class Encoder : IAudioDest
|
public unsafe class Encoder : IAudioDest
|
||||||
{
|
{
|
||||||
public Encoder(string path, Stream output, EncoderSettings settings)
|
public Encoder(EncoderSettings settings, string path, Stream output = null)
|
||||||
{
|
{
|
||||||
m_path = path;
|
m_path = path;
|
||||||
m_stream = output;
|
m_stream = output;
|
||||||
m_settings = settings;
|
m_settings = settings;
|
||||||
m_streamGiven = output != null;
|
m_streamGiven = output != null;
|
||||||
m_initialized = false;
|
m_initialized = false;
|
||||||
m_finalSampleCount = 0;
|
m_finalSampleCount = -1;
|
||||||
m_samplesWritten = 0;
|
m_samplesWritten = 0;
|
||||||
m_write_callback = StreamEncoderWriteCallback;
|
m_write_callback = StreamEncoderWriteCallback;
|
||||||
m_seek_callback = StreamEncoderSeekCallback;
|
m_seek_callback = StreamEncoderSeekCallback;
|
||||||
@@ -102,11 +102,6 @@ namespace CUETools.Codecs.libFLAC
|
|||||||
FLACDLL.FLAC__stream_encoder_set_sample_rate(m_encoder, (uint)m_settings.PCM.SampleRate);
|
FLACDLL.FLAC__stream_encoder_set_sample_rate(m_encoder, (uint)m_settings.PCM.SampleRate);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Encoder(string path, EncoderSettings settings)
|
|
||||||
: this(path, null, settings)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public IAudioEncoderSettings Settings => m_settings;
|
public IAudioEncoderSettings Settings => m_settings;
|
||||||
|
|
||||||
public string Path { get => m_path; }
|
public string Path { get => m_path; }
|
||||||
@@ -116,8 +111,6 @@ namespace CUETools.Codecs.libFLAC
|
|||||||
get => m_finalSampleCount;
|
get => m_finalSampleCount;
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (value < 0)
|
|
||||||
throw new Exception("invalid final sample count");
|
|
||||||
if (m_initialized)
|
if (m_initialized)
|
||||||
throw new Exception("final sample count cannot be changed after encoding begins");
|
throw new Exception("final sample count cannot be changed after encoding begins");
|
||||||
m_finalSampleCount = value;
|
m_finalSampleCount = value;
|
||||||
@@ -138,7 +131,7 @@ namespace CUETools.Codecs.libFLAC
|
|||||||
m_stream.Close();
|
m_stream.Close();
|
||||||
m_stream = null;
|
m_stream = null;
|
||||||
}
|
}
|
||||||
if ((m_finalSampleCount != 0) && (m_samplesWritten != m_finalSampleCount))
|
if ((m_finalSampleCount > 0) && (m_samplesWritten != m_finalSampleCount))
|
||||||
throw new Exception("samples written differs from the expected sample count");
|
throw new Exception("samples written differs from the expected sample count");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -250,7 +243,7 @@ namespace CUETools.Codecs.libFLAC
|
|||||||
int metadataCount = 0;
|
int metadataCount = 0;
|
||||||
FLAC__StreamMetadata* padding, seektable, vorbiscomment;
|
FLAC__StreamMetadata* padding, seektable, vorbiscomment;
|
||||||
|
|
||||||
if (m_finalSampleCount != 0)
|
if (m_finalSampleCount > 0)
|
||||||
{
|
{
|
||||||
seektable = FLACDLL.FLAC__metadata_object_new(FLAC__MetadataType.FLAC__METADATA_TYPE_SEEKTABLE);
|
seektable = FLACDLL.FLAC__metadata_object_new(FLAC__MetadataType.FLAC__METADATA_TYPE_SEEKTABLE);
|
||||||
FLACDLL.FLAC__metadata_object_seektable_template_append_spaced_points_by_samples(
|
FLACDLL.FLAC__metadata_object_seektable_template_append_spaced_points_by_samples(
|
||||||
@@ -273,7 +266,7 @@ namespace CUETools.Codecs.libFLAC
|
|||||||
FLACDLL.FLAC__stream_encoder_set_verify(m_encoder, m_settings.Verify ? 1 : 0);
|
FLACDLL.FLAC__stream_encoder_set_verify(m_encoder, m_settings.Verify ? 1 : 0);
|
||||||
FLACDLL.FLAC__stream_encoder_set_do_md5(m_encoder, m_settings.MD5Sum ? 1 : 0);
|
FLACDLL.FLAC__stream_encoder_set_do_md5(m_encoder, m_settings.MD5Sum ? 1 : 0);
|
||||||
FLACDLL.FLAC__stream_encoder_set_compression_level(m_encoder, m_settings.GetEncoderModeIndex());
|
FLACDLL.FLAC__stream_encoder_set_compression_level(m_encoder, m_settings.GetEncoderModeIndex());
|
||||||
if (m_finalSampleCount != 0)
|
if (m_finalSampleCount > 0)
|
||||||
FLACDLL.FLAC__stream_encoder_set_total_samples_estimate(m_encoder, m_finalSampleCount);
|
FLACDLL.FLAC__stream_encoder_set_total_samples_estimate(m_encoder, m_finalSampleCount);
|
||||||
if (m_settings.BlockSize > 0)
|
if (m_settings.BlockSize > 0)
|
||||||
FLACDLL.FLAC__stream_encoder_set_blocksize(m_encoder, m_settings.BlockSize);
|
FLACDLL.FLAC__stream_encoder_set_blocksize(m_encoder, m_settings.BlockSize);
|
||||||
|
|||||||
Reference in New Issue
Block a user