From 1bd0e03ce56ed5384c3377b6da171951ec654706 Mon Sep 17 00:00:00 2001 From: "henrik.lundin" Date: Mon, 28 Sep 2015 06:12:17 -0700 Subject: [PATCH] ACM: Removing runtime APIs related to playout mode The playout mode in NetEq can still be set through the constructor configuration. BUG=webrtc:3520 Review URL: https://codereview.webrtc.org/1362943004 Cr-Commit-Position: refs/heads/master@{#10089} --- .../audio_coding/main/acm2/acm_receiver.cc | 45 ------------ .../audio_coding/main/acm2/acm_receiver.h | 15 ---- .../main/acm2/acm_receiver_unittest.cc | 15 ---- .../main/acm2/acm_receiver_unittest_oldapi.cc | 15 ---- .../main/acm2/audio_coding_module_impl.cc | 11 --- .../main/acm2/audio_coding_module_impl.h | 6 -- .../main/interface/audio_coding_module.h | 37 ---------- .../interface/audio_coding_module_typedefs.h | 29 -------- .../modules/audio_coding/main/test/APITest.cc | 73 +------------------ .../modules/audio_coding/main/test/APITest.h | 3 - .../main/test/TwoWayCommunication.cc | 22 +++--- 11 files changed, 13 insertions(+), 258 deletions(-) diff --git a/webrtc/modules/audio_coding/main/acm2/acm_receiver.cc b/webrtc/modules/audio_coding/main/acm2/acm_receiver.cc index 2040ae1c4e..bfcf76ce72 100644 --- a/webrtc/modules/audio_coding/main/acm2/acm_receiver.cc +++ b/webrtc/modules/audio_coding/main/acm2/acm_receiver.cc @@ -213,51 +213,6 @@ int AcmReceiver::current_sample_rate_hz() const { return current_sample_rate_hz_; } -// TODO(turajs): use one set of enumerators, e.g. the one defined in -// common_types.h -// TODO(henrik.lundin): This method is not used any longer. The call hierarchy -// stops in voe::Channel::SetNetEQPlayoutMode(). Remove it. -void AcmReceiver::SetPlayoutMode(AudioPlayoutMode mode) { - enum NetEqPlayoutMode playout_mode = kPlayoutOn; - switch (mode) { - case voice: - playout_mode = kPlayoutOn; - break; - case fax: // No change to background noise mode. - playout_mode = kPlayoutFax; - break; - case streaming: - playout_mode = kPlayoutStreaming; - break; - case off: - playout_mode = kPlayoutOff; - break; - } - neteq_->SetPlayoutMode(playout_mode); -} - -AudioPlayoutMode AcmReceiver::PlayoutMode() const { - AudioPlayoutMode acm_mode = voice; - NetEqPlayoutMode mode = neteq_->PlayoutMode(); - switch (mode) { - case kPlayoutOn: - acm_mode = voice; - break; - case kPlayoutOff: - acm_mode = off; - break; - case kPlayoutFax: - acm_mode = fax; - break; - case kPlayoutStreaming: - acm_mode = streaming; - break; - default: - assert(false); - } - return acm_mode; -} - int AcmReceiver::InsertPacket(const WebRtcRTPHeader& rtp_header, const uint8_t* incoming_payload, size_t length_payload) { diff --git a/webrtc/modules/audio_coding/main/acm2/acm_receiver.h b/webrtc/modules/audio_coding/main/acm2/acm_receiver.h index fe2724993e..d726264bf9 100644 --- a/webrtc/modules/audio_coding/main/acm2/acm_receiver.h +++ b/webrtc/modules/audio_coding/main/acm2/acm_receiver.h @@ -177,21 +177,6 @@ class AcmReceiver { // int current_sample_rate_hz() const; - // - // Sets the playout mode. - // - // Input: - // - mode : an enumerator specifying the playout mode. - // - void SetPlayoutMode(AudioPlayoutMode mode); - - // - // Get the current playout mode. - // - // Return value : The current playout mode. - // - AudioPlayoutMode PlayoutMode() const; - // // Get the current network statistics from NetEq. // diff --git a/webrtc/modules/audio_coding/main/acm2/acm_receiver_unittest.cc b/webrtc/modules/audio_coding/main/acm2/acm_receiver_unittest.cc index 6234d4f501..0711a133d4 100644 --- a/webrtc/modules/audio_coding/main/acm2/acm_receiver_unittest.cc +++ b/webrtc/modules/audio_coding/main/acm2/acm_receiver_unittest.cc @@ -265,21 +265,6 @@ TEST_F(AcmReceiverTest, DISABLED_ON_ANDROID(SampleRate)) { } } -// Verify that the playout mode is set correctly. -TEST_F(AcmReceiverTest, DISABLED_ON_ANDROID(PlayoutMode)) { - receiver_->SetPlayoutMode(voice); - EXPECT_EQ(voice, receiver_->PlayoutMode()); - - receiver_->SetPlayoutMode(streaming); - EXPECT_EQ(streaming, receiver_->PlayoutMode()); - - receiver_->SetPlayoutMode(fax); - EXPECT_EQ(fax, receiver_->PlayoutMode()); - - receiver_->SetPlayoutMode(off); - EXPECT_EQ(off, receiver_->PlayoutMode()); -} - TEST_F(AcmReceiverTest, DISABLED_ON_ANDROID(PostdecodingVad)) { receiver_->EnableVad(); EXPECT_TRUE(receiver_->vad_enabled()); diff --git a/webrtc/modules/audio_coding/main/acm2/acm_receiver_unittest_oldapi.cc b/webrtc/modules/audio_coding/main/acm2/acm_receiver_unittest_oldapi.cc index 5800fb7367..964e7f348f 100644 --- a/webrtc/modules/audio_coding/main/acm2/acm_receiver_unittest_oldapi.cc +++ b/webrtc/modules/audio_coding/main/acm2/acm_receiver_unittest_oldapi.cc @@ -264,21 +264,6 @@ TEST_F(AcmReceiverTestOldApi, DISABLED_ON_ANDROID(SampleRate)) { } } -// Verify that the playout mode is set correctly. -TEST_F(AcmReceiverTestOldApi, DISABLED_ON_ANDROID(PlayoutMode)) { - receiver_->SetPlayoutMode(voice); - EXPECT_EQ(voice, receiver_->PlayoutMode()); - - receiver_->SetPlayoutMode(streaming); - EXPECT_EQ(streaming, receiver_->PlayoutMode()); - - receiver_->SetPlayoutMode(fax); - EXPECT_EQ(fax, receiver_->PlayoutMode()); - - receiver_->SetPlayoutMode(off); - EXPECT_EQ(off, receiver_->PlayoutMode()); -} - TEST_F(AcmReceiverTestOldApi, DISABLED_ON_ANDROID(PostdecodingVad)) { receiver_->EnableVad(); EXPECT_TRUE(receiver_->vad_enabled()); diff --git a/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc b/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc index 7f63d880de..49d0704e07 100644 --- a/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc +++ b/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc @@ -659,17 +659,6 @@ int AudioCodingModuleImpl::SetMaximumPlayoutDelay(int time_ms) { return receiver_.SetMaximumDelay(time_ms); } -// Set playout mode for: voice, fax, streaming or off. -int AudioCodingModuleImpl::SetPlayoutMode(AudioPlayoutMode mode) { - receiver_.SetPlayoutMode(mode); - return 0; // TODO(turajs): return value is for backward compatibility. -} - -// Get playout mode voice, fax, streaming or off. -AudioPlayoutMode AudioCodingModuleImpl::PlayoutMode() const { - return receiver_.PlayoutMode(); -} - // Get 10 milliseconds of raw audio data to play out. // Automatic resample to the requested frequency. int AudioCodingModuleImpl::PlayoutData10Ms(int desired_freq_hz, diff --git a/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.h b/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.h index 3b82460b8a..fe9215bac0 100644 --- a/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.h +++ b/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.h @@ -154,12 +154,6 @@ class AudioCodingModuleImpl final : public AudioCodingModule { // audio is accumulated in NetEq buffer, then starts decoding payloads. int SetInitialPlayoutDelay(int delay_ms) override; - // Set playout mode voice, fax. - int SetPlayoutMode(AudioPlayoutMode mode) override; - - // Get playout mode voice, fax. - AudioPlayoutMode PlayoutMode() const override; - // Get playout timestamp. int PlayoutTimestamp(uint32_t* timestamp) override; diff --git a/webrtc/modules/audio_coding/main/interface/audio_coding_module.h b/webrtc/modules/audio_coding/main/interface/audio_coding_module.h index 51944156c9..d0b7b03c43 100644 --- a/webrtc/modules/audio_coding/main/interface/audio_coding_module.h +++ b/webrtc/modules/audio_coding/main/interface/audio_coding_module.h @@ -605,43 +605,6 @@ class AudioCodingModule { // TODO(tlegrand): Change function to return the timestamp. virtual int32_t PlayoutTimestamp(uint32_t* timestamp) = 0; - /////////////////////////////////////////////////////////////////////////// - // int32_t SetPlayoutMode() - // Call this API to set the playout mode. Playout mode could be optimized - // for i) voice, ii) FAX or iii) streaming. In Voice mode, NetEQ is - // optimized to deliver highest audio quality while maintaining a minimum - // delay. In FAX mode, NetEQ is optimized to have few delay changes as - // possible and maintain a constant delay, perhaps large relative to voice - // mode, to avoid PLC. In streaming mode, we tolerate a little more delay - // to achieve better jitter robustness. - // - // Input: - // -mode : playout mode. Possible inputs are: - // "voice", - // "fax" and - // "streaming". - // - // Return value: - // -1 if failed to set the mode, - // 0 if succeeding. - // - virtual int32_t SetPlayoutMode(const AudioPlayoutMode mode) = 0; - - /////////////////////////////////////////////////////////////////////////// - // AudioPlayoutMode PlayoutMode() - // Get playout mode, i.e. whether it is speech, FAX or streaming. See - // audio_coding_module_typedefs.h for definition of AudioPlayoutMode. - // - // Return value: - // voice: is for voice output, - // fax: a mode that is optimized for receiving FAX signals. - // In this mode NetEq tries to maintain a constant high - // delay to avoid PLC if possible. - // streaming: a mode that is suitable for streaming. In this mode we - // accept longer delay to improve jitter robustness. - // - virtual AudioPlayoutMode PlayoutMode() const = 0; - /////////////////////////////////////////////////////////////////////////// // int32_t PlayoutData10Ms( // Get 10 milliseconds of raw audio data for playout, at the given sampling diff --git a/webrtc/modules/audio_coding/main/interface/audio_coding_module_typedefs.h b/webrtc/modules/audio_coding/main/interface/audio_coding_module_typedefs.h index ee7a2f1340..559c3fc7a0 100644 --- a/webrtc/modules/audio_coding/main/interface/audio_coding_module_typedefs.h +++ b/webrtc/modules/audio_coding/main/interface/audio_coding_module_typedefs.h @@ -18,35 +18,6 @@ namespace webrtc { -/////////////////////////////////////////////////////////////////////////// -// enum AudioPlayoutMode -// An enumerator for different playout modes. -// -// -voice : This is the standard mode for VoIP calls. The trade-off -// between low delay and jitter robustness is optimized -// for high-quality two-way communication. -// NetEQs packet loss concealment and signal processing -// capabilities are fully employed. -// -fax : The fax mode is optimized for decodability of fax signals -// rather than for perceived audio quality. When this mode -// is selected, NetEQ will do as few delay changes as possible, -// trying to maintain a high and constant delay. Meanwhile, -// the packet loss concealment efforts are reduced. -// -// -streaming : In the case of one-way communication such as passive -// conference participant, a webinar, or a streaming application, -// this mode can be used to improve the jitter robustness at -// the cost of increased delay. -// -off : Turns off most of NetEQ's features. Stuffs zeros for lost -// packets and during buffer increases. -// -enum AudioPlayoutMode { - voice = 0, - fax = 1, - streaming = 2, - off = 3, -}; - /////////////////////////////////////////////////////////////////////////// // enum ACMSpeechType // An enumerator for possible labels of a decoded frame. diff --git a/webrtc/modules/audio_coding/main/test/APITest.cc b/webrtc/modules/audio_coding/main/test/APITest.cc index 3c485fd9c2..c84d3c076a 100644 --- a/webrtc/modules/audio_coding/main/test/APITest.cc +++ b/webrtc/modules/audio_coding/main/test/APITest.cc @@ -424,7 +424,7 @@ void APITest::RunTest(char thread) { { WriteLockScoped cs(_apiTestRWLock); if (thread == 'A') { - _testNumA = (_testNumB + 1 + (rand() % 4)) % 5; + _testNumA = (_testNumB + 1 + (rand() % 3)) % 4; testNum = _testNumA; _movingDot[_dotPositionA] = ' '; @@ -437,7 +437,7 @@ void APITest::RunTest(char thread) { _dotPositionA += _dotMoveDirectionA; _movingDot[_dotPositionA] = (_dotMoveDirectionA > 0) ? '>' : '<'; } else { - _testNumB = (_testNumA + 1 + (rand() % 4)) % 5; + _testNumB = (_testNumA + 1 + (rand() % 3)) % 4; testNum = _testNumB; _movingDot[_dotPositionB] = ' '; @@ -459,18 +459,15 @@ void APITest::RunTest(char thread) { ChangeCodec('A'); break; case 1: - TestPlayout('B'); - break; - case 2: if (!_randomTest) { fprintf(stdout, "\nTesting Delay ...\n"); } TestDelay('A'); break; - case 3: + case 2: TestSendVAD('A'); break; - case 4: + case 3: TestRegisteration('A'); break; default: @@ -493,7 +490,6 @@ bool APITest::APIRunA() { } else { CurrentCodec('A'); ChangeCodec('A'); - TestPlayout('B'); if (_codecCntrA == 0) { fprintf(stdout, "\nTesting Delay ...\n"); TestDelay('A'); @@ -922,67 +918,6 @@ void APITest::TestRegisteration(char sendSide) { } } -// Playout Mode, background noise mode. -// Receiver Frequency, playout frequency. -void APITest::TestPlayout(char receiveSide) { - AudioCodingModule* receiveACM; - AudioPlayoutMode* playoutMode = NULL; - switch (receiveSide) { - case 'A': { - receiveACM = _acmA.get(); - playoutMode = &_playoutModeA; - break; - } - case 'B': { - receiveACM = _acmB.get(); - playoutMode = &_playoutModeB; - break; - } - default: - receiveACM = _acmA.get(); - } - - int32_t receiveFreqHz = receiveACM->ReceiveFrequency(); - int32_t playoutFreqHz = receiveACM->PlayoutFrequency(); - - CHECK_ERROR_MT(receiveFreqHz); - CHECK_ERROR_MT(playoutFreqHz); - - - char playoutString[25]; - switch (*playoutMode) { - case voice: { - *playoutMode = fax; - strncpy(playoutString, "FAX", 25); - break; - } - case fax: { - *playoutMode = streaming; - strncpy(playoutString, "Streaming", 25); - break; - } - case streaming: { - *playoutMode = voice; - strncpy(playoutString, "Voice", 25); - break; - } - default: - *playoutMode = voice; - strncpy(playoutString, "Voice", 25); - } - CHECK_ERROR_MT(receiveACM->SetPlayoutMode(*playoutMode)); - playoutString[24] = '\0'; - - if (!_randomTest) { - fprintf(stdout, "\n"); - fprintf(stdout, "In Side %c\n", receiveSide); - fprintf(stdout, "---------------------------------\n"); - fprintf(stdout, "Receive Frequency....... %d Hz\n", receiveFreqHz); - fprintf(stdout, "Playout Frequency....... %d Hz\n", playoutFreqHz); - fprintf(stdout, "Audio Playout Mode...... %s\n", playoutString); - } -} - void APITest::TestSendVAD(char side) { if (_randomTest) { return; diff --git a/webrtc/modules/audio_coding/main/test/APITest.h b/webrtc/modules/audio_coding/main/test/APITest.h index 97d8774c4a..67261dcbcd 100644 --- a/webrtc/modules/audio_coding/main/test/APITest.h +++ b/webrtc/modules/audio_coding/main/test/APITest.h @@ -141,9 +141,6 @@ class APITest : public ACMTest { int32_t _minDelayB; bool _payloadUsed[32]; - AudioPlayoutMode _playoutModeA; - AudioPlayoutMode _playoutModeB; - bool _verbose; int _dotPositionA; diff --git a/webrtc/modules/audio_coding/main/test/TwoWayCommunication.cc b/webrtc/modules/audio_coding/main/test/TwoWayCommunication.cc index 8b75c7b6d5..00853aead7 100644 --- a/webrtc/modules/audio_coding/main/test/TwoWayCommunication.cc +++ b/webrtc/modules/audio_coding/main/test/TwoWayCommunication.cc @@ -32,10 +32,16 @@ namespace webrtc { TwoWayCommunication::TwoWayCommunication(int testMode) : _acmA(AudioCodingModule::Create(1)), - _acmB(AudioCodingModule::Create(2)), _acmRefA(AudioCodingModule::Create(3)), - _acmRefB(AudioCodingModule::Create(4)), - _testMode(testMode) {} + _testMode(testMode) { + AudioCodingModule::Config config; + // The clicks will be more obvious in FAX mode. TODO(henrik.lundin) Really? + config.neteq_config.playout_mode = kPlayoutFax; + config.id = 2; + _acmB.reset(AudioCodingModule::Create(config)); + config.id = 4; + _acmRefB.reset(AudioCodingModule::Create(config)); +} TwoWayCommunication::~TwoWayCommunication() { delete _channel_A2B; @@ -159,11 +165,6 @@ void TwoWayCommunication::SetUp() { _channelRef_B2A = new Channel; _acmRefB->RegisterTransportCallback(_channelRef_B2A); _channelRef_B2A->RegisterReceiverACM(_acmRefA.get()); - - // The clicks will be more obvious when we - // are in FAX mode. - EXPECT_EQ(_acmB->SetPlayoutMode(fax), 0); - EXPECT_EQ(_acmRefB->SetPlayoutMode(fax), 0); } void TwoWayCommunication::SetUpAutotest() { @@ -233,11 +234,6 @@ void TwoWayCommunication::SetUpAutotest() { _channelRef_B2A = new Channel; _acmRefB->RegisterTransportCallback(_channelRef_B2A); _channelRef_B2A->RegisterReceiverACM(_acmRefA.get()); - - // The clicks will be more obvious when we - // are in FAX mode. - EXPECT_EQ(0, _acmB->SetPlayoutMode(fax)); - EXPECT_EQ(0, _acmRefB->SetPlayoutMode(fax)); } void TwoWayCommunication::Perform() {