1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11cf9ab12db22e50271900386e12d52974f8f455fetina.legrand@webrtc.org#include "webrtc/modules/audio_coding/main/test/iSACTest.h" 12cf9ab12db22e50271900386e12d52974f8f455fetina.legrand@webrtc.org 133f45c2e0ac4cb280f941efa3a3476895795e3dd6pbos@webrtc.org#include <ctype.h> 14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <stdio.h> 15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <string.h> 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if _WIN32 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <windows.h> 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#elif WEBRTC_LINUX 203f45c2e0ac4cb280f941efa3a3476895795e3dd6pbos@webrtc.org#include <time.h> 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <sys/time.h> 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <time.h> 245e3379e47b802f3aaef17b9b34308e057bf39675andrew@webrtc.org#endif 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 264d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org#include "webrtc/modules/audio_coding/main/acm2/acm_common_defs.h" 27cf9ab12db22e50271900386e12d52974f8f455fetina.legrand@webrtc.org#include "webrtc/modules/audio_coding/main/test/utility.h" 28cf9ab12db22e50271900386e12d52974f8f455fetina.legrand@webrtc.org#include "webrtc/system_wrappers/interface/event_wrapper.h" 29cf9ab12db22e50271900386e12d52974f8f455fetina.legrand@webrtc.org#include "webrtc/system_wrappers/interface/tick_util.h" 30cf9ab12db22e50271900386e12d52974f8f455fetina.legrand@webrtc.org#include "webrtc/system_wrappers/interface/trace.h" 31cf9ab12db22e50271900386e12d52974f8f455fetina.legrand@webrtc.org#include "webrtc/test/testsupport/fileutils.h" 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc { 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 35b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.orgvoid SetISACConfigDefault(ACMTestISACConfig& isacConfig) { 36b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org isacConfig.currentRateBitPerSec = 0; 37b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org isacConfig.currentFrameSizeMsec = 0; 38b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org isacConfig.maxRateBitPerSec = 0; 39b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org isacConfig.maxPayloadSizeByte = 0; 40b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org isacConfig.encodingMode = -1; 41b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org isacConfig.initRateBitPerSec = 0; 42b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org isacConfig.initFrameSizeInMsec = 0; 43b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org isacConfig.enforceFrameSize = false; 44b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org return; 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 47b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.orgint16_t SetISAConfig(ACMTestISACConfig& isacConfig, AudioCodingModule* acm, 48b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org int testMode) { 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 50b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org if ((isacConfig.currentRateBitPerSec != 0) 51b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org || (isacConfig.currentFrameSizeMsec != 0)) { 52b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org CodecInst sendCodec; 53584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, acm->SendCodec(&sendCodec)); 54b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org if (isacConfig.currentRateBitPerSec < 0) { 55584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org // Register iSAC in adaptive (channel-dependent) mode. 56b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org sendCodec.rate = -1; 57584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, acm->RegisterSendCodec(sendCodec)); 58b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org } else { 59b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org if (isacConfig.currentRateBitPerSec != 0) { 60b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org sendCodec.rate = isacConfig.currentRateBitPerSec; 61b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org } 62b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org if (isacConfig.currentFrameSizeMsec != 0) { 63b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org sendCodec.pacsize = isacConfig.currentFrameSizeMsec 64b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org * (sendCodec.plfreq / 1000); 65b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org } 66584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, acm->RegisterSendCodec(sendCodec)); 67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 68b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org } 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 70b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org if (isacConfig.maxRateBitPerSec > 0) { 71584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org // Set max rate. 72584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, acm->SetISACMaxRate(isacConfig.maxRateBitPerSec)); 73b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org } 74b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org if (isacConfig.maxPayloadSizeByte > 0) { 75584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org // Set max payload size. 76584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, acm->SetISACMaxPayloadSize(isacConfig.maxPayloadSizeByte)); 77b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org } 78b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org if ((isacConfig.initFrameSizeInMsec != 0) 79b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org || (isacConfig.initRateBitPerSec != 0)) { 80584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, acm->ConfigISACBandwidthEstimator( 81584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org static_cast<uint8_t>(isacConfig.initFrameSizeInMsec), 82584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org static_cast<uint16_t>(isacConfig.initRateBitPerSec), 83584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org isacConfig.enforceFrameSize)); 84b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org } 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 86b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org return 0; 87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 89c68f88e9287a1e4e07f7739f39574a203b1c7750henrik.lundin@webrtc.orgISACTest::ISACTest(int testMode) 90c68f88e9287a1e4e07f7739f39574a203b1c7750henrik.lundin@webrtc.org : _acmA(AudioCodingModule::Create(1)), 91c68f88e9287a1e4e07f7739f39574a203b1c7750henrik.lundin@webrtc.org _acmB(AudioCodingModule::Create(2)), 92c68f88e9287a1e4e07f7739f39574a203b1c7750henrik.lundin@webrtc.org _testMode(testMode) {} 93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 94367af84454999aced8fe21019adfaa8052c5f45fturaj@webrtc.orgISACTest::~ISACTest() {} 95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 96584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.orgvoid ISACTest::Setup() { 97b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org int codecCntr; 98b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org CodecInst codecParam; 99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 100b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org for (codecCntr = 0; codecCntr < AudioCodingModule::NumberOfCodecs(); 101b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org codecCntr++) { 102584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, AudioCodingModule::Codec(codecCntr, &codecParam)); 103b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org if (!STR_CASE_CMP(codecParam.plname, "ISAC") 104b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org && codecParam.plfreq == 16000) { 105b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org memcpy(&_paramISAC16kHz, &codecParam, sizeof(CodecInst)); 106b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _idISAC16kHz = codecCntr; 107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 108b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org if (!STR_CASE_CMP(codecParam.plname, "ISAC") 109b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org && codecParam.plfreq == 32000) { 110b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org memcpy(&_paramISAC32kHz, &codecParam, sizeof(CodecInst)); 111b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _idISAC32kHz = codecCntr; 112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 113b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org } 114b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org 115584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org // Register both iSAC-wb & iSAC-swb in both sides as receiver codecs. 116584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, _acmA->RegisterReceiveCodec(_paramISAC16kHz)); 117584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, _acmA->RegisterReceiveCodec(_paramISAC32kHz)); 118584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, _acmB->RegisterReceiveCodec(_paramISAC16kHz)); 119584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, _acmB->RegisterReceiveCodec(_paramISAC32kHz)); 120b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org 121b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org //--- Set A-to-B channel 122367af84454999aced8fe21019adfaa8052c5f45fturaj@webrtc.org _channel_A2B.reset(new Channel); 123367af84454999aced8fe21019adfaa8052c5f45fturaj@webrtc.org EXPECT_EQ(0, _acmA->RegisterTransportCallback(_channel_A2B.get())); 124367af84454999aced8fe21019adfaa8052c5f45fturaj@webrtc.org _channel_A2B->RegisterReceiverACM(_acmB.get()); 125b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org 126b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org //--- Set B-to-A channel 127367af84454999aced8fe21019adfaa8052c5f45fturaj@webrtc.org _channel_B2A.reset(new Channel); 128367af84454999aced8fe21019adfaa8052c5f45fturaj@webrtc.org EXPECT_EQ(0, _acmB->RegisterTransportCallback(_channel_B2A.get())); 129367af84454999aced8fe21019adfaa8052c5f45fturaj@webrtc.org _channel_B2A->RegisterReceiverACM(_acmA.get()); 130b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org 131b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org file_name_swb_ = webrtc::test::ResourcePath("audio_coding/testfile32kHz", 132b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org "pcm"); 133b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org 134584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, _acmB->RegisterSendCodec(_paramISAC16kHz)); 135584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, _acmA->RegisterSendCodec(_paramISAC32kHz)); 136b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org 137b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _inFileA.Open(file_name_swb_, 32000, "rb"); 138b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org std::string fileNameA = webrtc::test::OutputPath() + "testisac_a.pcm"; 139b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org std::string fileNameB = webrtc::test::OutputPath() + "testisac_b.pcm"; 140b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _outFileA.Open(fileNameA, 32000, "wb"); 141b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _outFileB.Open(fileNameB, 32000, "wb"); 142b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org 143b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org while (!_inFileA.EndOfFile()) { 144b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org Run10ms(); 145b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org } 146b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org CodecInst receiveCodec; 147584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, _acmA->ReceiveCodec(&receiveCodec)); 148584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, _acmB->ReceiveCodec(&receiveCodec)); 149b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org 150b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _inFileA.Close(); 151b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _outFileA.Close(); 152b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _outFileB.Close(); 153b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 154b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 155b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.orgvoid ISACTest::Perform() { 156b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org Setup(); 157b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org 158b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org int16_t testNr = 0; 159b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org ACMTestISACConfig wbISACConfig; 160b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org ACMTestISACConfig swbISACConfig; 161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 162b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org SetISACConfigDefault(wbISACConfig); 163b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org SetISACConfigDefault(swbISACConfig); 164b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 165b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org wbISACConfig.currentRateBitPerSec = -1; 166b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org swbISACConfig.currentRateBitPerSec = -1; 167b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org testNr++; 168b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org EncodeDecode(testNr, wbISACConfig, swbISACConfig); 169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 170b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org if (_testMode != 0) { 171b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org SetISACConfigDefault(wbISACConfig); 172b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org SetISACConfigDefault(swbISACConfig); 173b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org wbISACConfig.currentRateBitPerSec = -1; 175b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org swbISACConfig.currentRateBitPerSec = -1; 176b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org wbISACConfig.initRateBitPerSec = 13000; 177b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org wbISACConfig.initFrameSizeInMsec = 60; 178b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org swbISACConfig.initRateBitPerSec = 20000; 179b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org swbISACConfig.initFrameSizeInMsec = 30; 180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org testNr++; 181b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EncodeDecode(testNr, wbISACConfig, swbISACConfig); 182b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 183b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org SetISACConfigDefault(wbISACConfig); 184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org SetISACConfigDefault(swbISACConfig); 185fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org 186b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org wbISACConfig.currentRateBitPerSec = 20000; 187b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org swbISACConfig.currentRateBitPerSec = 48000; 188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org testNr++; 189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EncodeDecode(testNr, wbISACConfig, swbISACConfig); 190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 191b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org wbISACConfig.currentRateBitPerSec = 16000; 192b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org swbISACConfig.currentRateBitPerSec = 30000; 193b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org wbISACConfig.currentFrameSizeMsec = 60; 194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org testNr++; 195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EncodeDecode(testNr, wbISACConfig, swbISACConfig); 196b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org } 197b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org 198b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org SetISACConfigDefault(wbISACConfig); 199b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org SetISACConfigDefault(swbISACConfig); 200b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org testNr++; 201b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org EncodeDecode(testNr, wbISACConfig, swbISACConfig); 202b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org 203b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org int user_input; 204b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org if ((_testMode == 0) || (_testMode == 1)) { 205584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org swbISACConfig.maxPayloadSizeByte = static_cast<uint16_t>(200); 206584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org wbISACConfig.maxPayloadSizeByte = static_cast<uint16_t>(200); 207b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org } else { 208b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org printf("Enter the max payload-size for side A: "); 209b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org CHECK_ERROR(scanf("%d", &user_input)); 210b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org swbISACConfig.maxPayloadSizeByte = (uint16_t) user_input; 211b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org printf("Enter the max payload-size for side B: "); 212b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org CHECK_ERROR(scanf("%d", &user_input)); 213b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org wbISACConfig.maxPayloadSizeByte = (uint16_t) user_input; 214b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org } 215b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org testNr++; 216b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org EncodeDecode(testNr, wbISACConfig, swbISACConfig); 217b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org 218b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _acmA->ResetEncoder(); 219b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _acmB->ResetEncoder(); 220b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org SetISACConfigDefault(wbISACConfig); 221b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org SetISACConfigDefault(swbISACConfig); 222b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org 223b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org if ((_testMode == 0) || (_testMode == 1)) { 224584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org swbISACConfig.maxRateBitPerSec = static_cast<uint32_t>(48000); 225584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org wbISACConfig.maxRateBitPerSec = static_cast<uint32_t>(48000); 226b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org } else { 227b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org printf("Enter the max rate for side A: "); 228b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org CHECK_ERROR(scanf("%d", &user_input)); 229b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org swbISACConfig.maxRateBitPerSec = (uint32_t) user_input; 230b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org printf("Enter the max rate for side B: "); 231b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org CHECK_ERROR(scanf("%d", &user_input)); 232b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org wbISACConfig.maxRateBitPerSec = (uint32_t) user_input; 233b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org } 234b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org 235b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org testNr++; 236b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org EncodeDecode(testNr, wbISACConfig, swbISACConfig); 237b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org 238b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org testNr++; 239b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org if (_testMode == 0) { 240b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org SwitchingSamplingRate(testNr, 4); 241b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org } else { 242b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org SwitchingSamplingRate(testNr, 80); 243b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org } 244b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 245b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 246ad584b66a1dd9a7983f6dce047beb5a539a8ca17andresp@webrtc.orgvoid ISACTest::Run10ms() { 247ad584b66a1dd9a7983f6dce047beb5a539a8ca17andresp@webrtc.org AudioFrame audioFrame; 248ad584b66a1dd9a7983f6dce047beb5a539a8ca17andresp@webrtc.org EXPECT_GT(_inFileA.Read10MsData(audioFrame), 0); 249ad584b66a1dd9a7983f6dce047beb5a539a8ca17andresp@webrtc.org EXPECT_EQ(0, _acmA->Add10MsData(audioFrame)); 250ad584b66a1dd9a7983f6dce047beb5a539a8ca17andresp@webrtc.org EXPECT_EQ(0, _acmB->Add10MsData(audioFrame)); 251ad584b66a1dd9a7983f6dce047beb5a539a8ca17andresp@webrtc.org EXPECT_GT(_acmA->Process(), -1); 252ad584b66a1dd9a7983f6dce047beb5a539a8ca17andresp@webrtc.org EXPECT_GT(_acmB->Process(), -1); 253ad584b66a1dd9a7983f6dce047beb5a539a8ca17andresp@webrtc.org EXPECT_EQ(0, _acmA->PlayoutData10Ms(32000, &audioFrame)); 254ad584b66a1dd9a7983f6dce047beb5a539a8ca17andresp@webrtc.org _outFileA.Write10MsData(audioFrame); 255ad584b66a1dd9a7983f6dce047beb5a539a8ca17andresp@webrtc.org EXPECT_EQ(0, _acmB->PlayoutData10Ms(32000, &audioFrame)); 256ad584b66a1dd9a7983f6dce047beb5a539a8ca17andresp@webrtc.org _outFileB.Write10MsData(audioFrame); 257ad584b66a1dd9a7983f6dce047beb5a539a8ca17andresp@webrtc.org} 258ad584b66a1dd9a7983f6dce047beb5a539a8ca17andresp@webrtc.org 259b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.orgvoid ISACTest::EncodeDecode(int testNr, ACMTestISACConfig& wbISACConfig, 260b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org ACMTestISACConfig& swbISACConfig) { 261b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org // Files in Side A and B 262b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _inFileA.Open(file_name_swb_, 32000, "rb", true); 263b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _inFileB.Open(file_name_swb_, 32000, "rb", true); 264b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org 265b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org std::string file_name_out; 266b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org std::stringstream file_stream_a; 267b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org std::stringstream file_stream_b; 268b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org file_stream_a << webrtc::test::OutputPath(); 269b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org file_stream_b << webrtc::test::OutputPath(); 270584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org file_stream_a << "out_iSACTest_A_" << testNr << ".pcm"; 271584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org file_stream_b << "out_iSACTest_B_" << testNr << ".pcm"; 272b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org file_name_out = file_stream_a.str(); 273b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _outFileA.Open(file_name_out, 32000, "wb"); 274b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org file_name_out = file_stream_b.str(); 275b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _outFileB.Open(file_name_out, 32000, "wb"); 276b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org 277584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, _acmA->RegisterSendCodec(_paramISAC16kHz)); 278584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, _acmA->RegisterSendCodec(_paramISAC32kHz)); 279584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, _acmB->RegisterSendCodec(_paramISAC32kHz)); 280584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, _acmB->RegisterSendCodec(_paramISAC16kHz)); 281b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org 282584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org // Side A is sending super-wideband, and side B is sending wideband. 283367af84454999aced8fe21019adfaa8052c5f45fturaj@webrtc.org SetISAConfig(swbISACConfig, _acmA.get(), _testMode); 284367af84454999aced8fe21019adfaa8052c5f45fturaj@webrtc.org SetISAConfig(wbISACConfig, _acmB.get(), _testMode); 285b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org 286b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org bool adaptiveMode = false; 287b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org if ((swbISACConfig.currentRateBitPerSec == -1) 288b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org || (wbISACConfig.currentRateBitPerSec == -1)) { 289b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org adaptiveMode = true; 290b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org } 291b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _myTimer.Reset(); 292b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _channel_A2B->ResetStats(); 293b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _channel_B2A->ResetStats(); 294b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org 295b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org char currentTime[500]; 296b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org CodecInst sendCodec; 297b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org EventWrapper* myEvent = EventWrapper::Create(); 298584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_TRUE(myEvent->StartTimer(true, 10)); 299b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org while (!(_inFileA.EndOfFile() || _inFileA.Rewinded())) { 300b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org Run10ms(); 301b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _myTimer.Tick10ms(); 302b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _myTimer.CurrentTimeHMS(currentTime); 303b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org 304b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org if ((adaptiveMode) && (_testMode != 0)) { 305b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org myEvent->Wait(5000); 306584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, _acmA->SendCodec(&sendCodec)); 307584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, _acmB->SendCodec(&sendCodec)); 308b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 309b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org } 310b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 311b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org if (_testMode != 0) { 312b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org printf("\n\nSide A statistics\n\n"); 313b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _channel_A2B->PrintStats(_paramISAC32kHz); 314b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 315b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org printf("\n\nSide B statistics\n\n"); 316b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _channel_B2A->PrintStats(_paramISAC16kHz); 317b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org } 318b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 319ad584b66a1dd9a7983f6dce047beb5a539a8ca17andresp@webrtc.org _channel_A2B->ResetStats(); 320ad584b66a1dd9a7983f6dce047beb5a539a8ca17andresp@webrtc.org _channel_B2A->ResetStats(); 321ad584b66a1dd9a7983f6dce047beb5a539a8ca17andresp@webrtc.org 322b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _outFileA.Close(); 323b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _outFileB.Close(); 324b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _inFileA.Close(); 325b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _inFileB.Close(); 326b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 327b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 328b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.orgvoid ISACTest::SwitchingSamplingRate(int testNr, int maxSampRateChange) { 329b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org // Files in Side A 330b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _inFileA.Open(file_name_swb_, 32000, "rb"); 331b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _inFileB.Open(file_name_swb_, 32000, "rb"); 332b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org 333b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org std::string file_name_out; 334b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org std::stringstream file_stream_a; 335b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org std::stringstream file_stream_b; 336b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org file_stream_a << webrtc::test::OutputPath(); 337b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org file_stream_b << webrtc::test::OutputPath(); 338584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org file_stream_a << "out_iSACTest_A_" << testNr << ".pcm"; 339584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org file_stream_b << "out_iSACTest_B_" << testNr << ".pcm"; 340b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org file_name_out = file_stream_a.str(); 341b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _outFileA.Open(file_name_out, 32000, "wb"); 342b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org file_name_out = file_stream_b.str(); 343b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _outFileB.Open(file_name_out, 32000, "wb"); 344b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org 345584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org // Start with side A sending super-wideband and side B seding wideband. 346584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org // Toggle sending wideband/super-wideband in this test. 347584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, _acmA->RegisterSendCodec(_paramISAC32kHz)); 348584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, _acmB->RegisterSendCodec(_paramISAC16kHz)); 349b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org 350b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org int numSendCodecChanged = 0; 351b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _myTimer.Reset(); 352b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org char currentTime[50]; 353b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org while (numSendCodecChanged < (maxSampRateChange << 1)) { 354b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org Run10ms(); 355b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _myTimer.Tick10ms(); 356b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _myTimer.CurrentTimeHMS(currentTime); 357b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org if (_testMode == 2) 358b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org printf("\r%s", currentTime); 359b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org if (_inFileA.EndOfFile()) { 360b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org if (_inFileA.SamplingFrequency() == 16000) { 361584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org // Switch side A to send super-wideband. 362b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _inFileA.Close(); 363b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _inFileA.Open(file_name_swb_, 32000, "rb"); 364584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, _acmA->RegisterSendCodec(_paramISAC32kHz)); 365b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org } else { 366584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org // Switch side A to send wideband. 367b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _inFileA.Close(); 368b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _inFileA.Open(file_name_swb_, 32000, "rb"); 369584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, _acmA->RegisterSendCodec(_paramISAC16kHz)); 370b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org } 371b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org numSendCodecChanged++; 372b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 373b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 374b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org if (_inFileB.EndOfFile()) { 375b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org if (_inFileB.SamplingFrequency() == 16000) { 376584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org // Switch side B to send super-wideband. 377b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _inFileB.Close(); 378b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _inFileB.Open(file_name_swb_, 32000, "rb"); 379584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, _acmB->RegisterSendCodec(_paramISAC32kHz)); 380b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org } else { 381584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org // Switch side B to send wideband. 382b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _inFileB.Close(); 383b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _inFileB.Open(file_name_swb_, 32000, "rb"); 384584b6885bd8cf5a64d18f9d50b4cdc4415651d78tina.legrand@webrtc.org EXPECT_EQ(0, _acmB->RegisterSendCodec(_paramISAC16kHz)); 385b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org } 386b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org numSendCodecChanged++; 387b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 388b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org } 389b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _outFileA.Close(); 390b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _outFileB.Close(); 391b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _inFileA.Close(); 392b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org _inFileB.Close(); 393b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 394b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 395b31332e75f97ef3d41d5393772be11f24b0f174ftina.legrand@webrtc.org} // namespace webrtc 396