Audio Coding Module: Use separate instances for 16 kHz and 32 kHz iSAC decoder

This will allow us to fix the sample rate of each AudioDecoder at
instantiation time.

This change results in different checksums for the following tests:

AcmReceiverBitExactnessOldApi.8kHzOutput
AcmReceiverBitExactnessOldApi.16kHzOutput
AcmReceiverBitExactnessOldApi.32kHzOutput
AcmReceiverBitExactnessOldApi.48kHzOutputExternalDecoder
AcmReceiverBitExactnessOldApi.48kHzOutput

Because they make an ACM and then ask it to decode both 16 kHz and 32
kHz iSAC. (The arm32 and arm64 checksums didn't change, because the
tests skip 32 kHz iSAC on arm.)

BUG=webrtc:5801

Review URL: https://codereview.webrtc.org/1908923002

Cr-Commit-Position: refs/heads/master@{#12463}
This commit is contained in:
kwiberg
2016-04-22 00:32:02 -07:00
committed by Commit bot
parent bcc6dbb6b2
commit bfde543f73
3 changed files with 17 additions and 14 deletions

View File

@ -719,10 +719,12 @@ int AudioCodingModuleImpl::RegisterReceiveCodecUnlocked(
AudioDecoder* isac_decoder = nullptr;
if (STR_CASE_CMP(codec.plname, "isac") == 0) {
if (!isac_decoder_) {
isac_decoder_ = isac_factory();
std::unique_ptr<AudioDecoder>& saved_isac_decoder =
codec.plfreq == 16000 ? isac_decoder_16k_ : isac_decoder_32k_;
if (!saved_isac_decoder) {
saved_isac_decoder = isac_factory();
}
isac_decoder = isac_decoder_.get();
isac_decoder = saved_isac_decoder.get();
}
return receiver_.AddCodec(*codec_index, codec.pltype, codec.channels,
codec.plfreq, isac_decoder, codec.plname);

View File

@ -268,7 +268,8 @@ class AudioCodingModuleImpl final : public AudioCodingModule {
// RegisterEncoder.
std::unique_ptr<AudioEncoder> encoder_stack_ GUARDED_BY(acm_crit_sect_);
std::unique_ptr<AudioDecoder> isac_decoder_ GUARDED_BY(acm_crit_sect_);
std::unique_ptr<AudioDecoder> isac_decoder_16k_ GUARDED_BY(acm_crit_sect_);
std::unique_ptr<AudioDecoder> isac_decoder_32k_ GUARDED_BY(acm_crit_sect_);
// This is to keep track of CN instances where we can send DTMFs.
uint8_t previous_pltype_ GUARDED_BY(acm_crit_sect_);

View File

@ -939,32 +939,32 @@ class AcmReceiverBitExactnessOldApi : public ::testing::Test {
#if (defined(WEBRTC_CODEC_ISAC) || defined(WEBRTC_CODEC_ISACFX)) && \
defined(WEBRTC_CODEC_ILBC) && defined(WEBRTC_CODEC_G722)
TEST_F(AcmReceiverBitExactnessOldApi, 8kHzOutput) {
Run(8000, PlatformChecksum("d9334a99c7f185860028e6f08e5b7390",
"946803da293ef3fa39242d3059eac491",
Run(8000, PlatformChecksum("f34e5c0e4dd4cd6c82b23f6ed006dad0",
"67a1471049dc87e7498bc19bf130dd35",
"efb5a07480bad8afb184c4150f4b3f3a",
"51717ab374871cbfa2c6977ea2aa40f3"),
std::vector<ExternalDecoder>());
}
TEST_F(AcmReceiverBitExactnessOldApi, 16kHzOutput) {
Run(16000, PlatformChecksum("9ad7d5a5f3c9fac4e880a6fbfd9d3ac8",
"4fc1b82404ae33511c1cdb385774b2a4",
Run(16000, PlatformChecksum("5066b412805f3050f65154d676006964",
"887905a40d37f213b76f64296871473e",
"f580bfd4e5e29f0399b61b7512d4e3b4",
"5b2ae32c590b41d0c601179e14eaae96"),
std::vector<ExternalDecoder>());
}
TEST_F(AcmReceiverBitExactnessOldApi, 32kHzOutput) {
Run(32000, PlatformChecksum("08e6085ccb96494b242f0ecc4c8a2dc8",
"d1f853b1e046c67c9ee186786eaf2124",
Run(32000, PlatformChecksum("2cb4784af507c45b9121e2315def36f2",
"d2392b3247095d894a49b74a1106f281",
"fdf5166b98c43235978685e40e28fea6",
"7f620312f2fa74a10048bbb7739d4bf3"),
std::vector<ExternalDecoder>());
}
TEST_F(AcmReceiverBitExactnessOldApi, 48kHzOutput) {
Run(48000, PlatformChecksum("31343887b7ef70772df733d072b0dd00",
"f6893278d75dad42ac44bff77f674b33",
Run(48000, PlatformChecksum("ce63f874a198621fa35398e412640fcf",
"2cf0b8fe9784e8c96db307e125beb723",
"71f89e87ee1bad594f529d6c036289ad",
"b64c891e99eccc9ff45541ef67c9e9bf"),
std::vector<ExternalDecoder>());
@ -1021,8 +1021,8 @@ TEST_F(AcmReceiverBitExactnessOldApi, 48kHzOutputExternalDecoder) {
std::vector<ExternalDecoder> external_decoders;
external_decoders.push_back(ed);
Run(48000, PlatformChecksum("31343887b7ef70772df733d072b0dd00",
"f6893278d75dad42ac44bff77f674b33",
Run(48000, PlatformChecksum("ce63f874a198621fa35398e412640fcf",
"2cf0b8fe9784e8c96db307e125beb723",
"71f89e87ee1bad594f529d6c036289ad",
"b64c891e99eccc9ff45541ef67c9e9bf"),
external_decoders);