diff --git a/ALACEncoderX.h b/ALACEncoderX.h index 0a4d9d68..a4929861 100644 --- a/ALACEncoderX.h +++ b/ALACEncoderX.h @@ -40,6 +40,22 @@ class ALACEncoderX: public IEncoder, public IEncoderStat { uint64_t framesWritten() const { return m_stat.framesWritten(); } double currentBitrate() const { return m_stat.currentBitrate(); } double overallBitrate() const { return m_stat.overallBitrate(); } + + static bool isAvailableOutputChannelLayout(uint32_t channel_layout_tag) + { + switch (channel_layout_tag) { + case kAudioChannelLayoutTag_Mono: + case kAudioChannelLayoutTag_Stereo: + case kAudioChannelLayoutTag_AAC_3_0: + case kAudioChannelLayoutTag_AAC_4_0: + case kAudioChannelLayoutTag_AAC_5_0: + case kAudioChannelLayoutTag_AAC_5_1: + case kAudioChannelLayoutTag_AAC_6_1: + case kAudioChannelLayoutTag_AAC_7_1: + return true; + } + return false; + } }; #endif diff --git a/main.cpp b/main.cpp index 43c01401..065730f5 100644 --- a/main.cpp +++ b/main.cpp @@ -529,19 +529,8 @@ void build_filter_chain_sub(std::shared_ptr src, } #endif #ifdef REFALAC - switch (*channel_layout) { - case kAudioChannelLayoutTag_Mono: - case kAudioChannelLayoutTag_Stereo: - case kAudioChannelLayoutTag_AAC_3_0: - case kAudioChannelLayoutTag_AAC_4_0: - case kAudioChannelLayoutTag_AAC_5_0: - case kAudioChannelLayoutTag_AAC_5_1: - case kAudioChannelLayoutTag_AAC_6_1: - case kAudioChannelLayoutTag_AAC_7_1: - break; - default: + if (!ALACEncoderX::isAvailableOutputChannelLayout(*channel_layout)) throw std::runtime_error("Not supported channel layout for ALAC"); - } #endif } if (opts.lowpass > 0) {