Unverified Commit e61a804b authored by Yue Wang's avatar Yue Wang Committed by GitHub

Simplify audio format assignment code

parent a9d6ad47
...@@ -759,51 +759,32 @@ OSXOutput::Open(AudioFormat &audio_format) ...@@ -759,51 +759,32 @@ OSXOutput::Open(AudioFormat &audio_format)
memset(&asbd, 0, sizeof(asbd)); memset(&asbd, 0, sizeof(asbd));
asbd.mFormatID = kAudioFormatLinearPCM; asbd.mFormatID = kAudioFormatLinearPCM;
if (audio_format.format == SampleFormat::FLOAT) {
asbd.mFormatFlags = kLinearPCMFormatFlagIsFloat;
} else {
asbd.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger; asbd.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger;
}
switch (audio_format.format) { if (IsBigEndian())
case SampleFormat::S8: asbd.mFormatFlags |= kLinearPCMFormatFlagIsBigEndian;
asbd.mBitsPerChannel = 8;
break;
case SampleFormat::S16:
asbd.mBitsPerChannel = 16;
break;
case SampleFormat::S24_P32: if (audio_format.format == SampleFormat::S24_P32) {
asbd.mBitsPerChannel = 24; asbd.mBitsPerChannel = 24;
break; } else {
asbd.mBitsPerChannel = audio_format.GetSampleSize() * 8;
case SampleFormat::S32: }
asbd.mBitsPerChannel = 32; asbd.mBytesPerPacket = audio_format.GetFrameSize();
break;
#ifdef ENABLE_DSD #ifdef ENABLE_DSD
case SampleFormat::DSD: if (dop && audio_format.format == SampleFormat::DSD) {
if(dop) {
asbd.mBitsPerChannel = 24; asbd.mBitsPerChannel = 24;
params.dop = true; params.dop = true;
break;
} }
#endif
default:
audio_format.format = SampleFormat::S32;
asbd.mBitsPerChannel = 32;
break;
}
#ifdef ENABLE_DSD
asbd.mSampleRate = params.CalcOutputSampleRate(audio_format.sample_rate); asbd.mSampleRate = params.CalcOutputSampleRate(audio_format.sample_rate);
#endif
if (IsBigEndian())
asbd.mFormatFlags |= kLinearPCMFormatFlagIsBigEndian;
asbd.mBytesPerPacket = audio_format.GetFrameSize();
#ifdef ENABLE_DSD
if (audio_format.format == SampleFormat::DSD) if (audio_format.format == SampleFormat::DSD)
asbd.mBytesPerPacket = 4 * audio_format.channels; asbd.mBytesPerPacket = 4 * audio_format.channels;
#endif #endif
asbd.mFramesPerPacket = 1; asbd.mFramesPerPacket = 1;
asbd.mBytesPerFrame = asbd.mBytesPerPacket; asbd.mBytesPerFrame = asbd.mBytesPerPacket;
asbd.mChannelsPerFrame = audio_format.channels; asbd.mChannelsPerFrame = audio_format.channels;
...@@ -811,7 +792,7 @@ OSXOutput::Open(AudioFormat &audio_format) ...@@ -811,7 +792,7 @@ OSXOutput::Open(AudioFormat &audio_format)
Float64 sample_rate = osx_output_set_device_format(dev_id, audio_format); Float64 sample_rate = osx_output_set_device_format(dev_id, audio_format);
#ifdef ENABLE_DSD #ifdef ENABLE_DSD
if(params.dop && (sample_rate != asbd.mSampleRate)) { // fall back to PCM in case sample_rate cannot be synchronized if(params.dop && sample_rate != asbd.mSampleRate) { // fall back to PCM in case sample_rate cannot be synchronized
params.dop = false; params.dop = false;
audio_format.format = SampleFormat::S32; audio_format.format = SampleFormat::S32;
asbd.mBitsPerChannel = 32; asbd.mBitsPerChannel = 32;
......
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