Commit 2b43ceb6 authored by Max Kellermann's avatar Max Kellermann

pcm/Export: DSD_U32 quarters the sample rate

DSD_U32 packs four bytes instead of one large "sample", thus the sample rate is one quarter of the input sample rate. This fixes a rather critical DSD_U32 playback problem.
parent c143adba
ver 0.20.2 (not yet released)
* decoder
- flac: add options "probesize" and "analyzeduration"
* output
- alsa: fix the DSD_U32 sample rate
ver 0.20.1 (2017/01/09)
* input
......
......@@ -101,12 +101,24 @@ PcmExport::GetFrameSize(const AudioFormat &audio_format) const
unsigned
PcmExport::Params::CalcOutputSampleRate(unsigned sample_rate) const
{
#ifdef ENABLE_DSD
if (dsd_u32)
/* DSD_U32 combines four 8-bit "samples" in one 32-bit
"sample" */
sample_rate /= 4;
#endif
return sample_rate;
}
unsigned
PcmExport::Params::CalcInputSampleRate(unsigned sample_rate) const
{
#ifdef ENABLE_DSD
if (dsd_u32)
sample_rate *= 4;
#endif
return sample_rate;
}
......
......@@ -146,6 +146,9 @@ PcmExportTest::TestDsdU32()
PcmExport::Params params;
params.dsd_u32 = true;
CPPUNIT_ASSERT_EQUAL(params.CalcOutputSampleRate(705600u), 176400u);
CPPUNIT_ASSERT_EQUAL(params.CalcInputSampleRate(176400u), 705600u);
PcmExport e;
e.Open(SampleFormat::DSD, 2, params);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment