Expose NetEq playout mode off through VoiceEngine.

BUG=

Review URL: https://webrtc-codereview.appspot.com/971016

git-svn-id: http://webrtc.googlecode.com/svn/trunk@3272 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
roosa@google.com
2012-12-12 21:59:14 +00:00
parent 0870f02cdb
commit b718619f0a
6 changed files with 49 additions and 10 deletions

View File

@@ -430,6 +430,9 @@ enum NetEqModes // NetEQ playout configurations
// Optimzed for decodability of fax signals rather than for perceived audio // Optimzed for decodability of fax signals rather than for perceived audio
// quality. // quality.
kNetEqFax = 2, kNetEqFax = 2,
// Minimal buffer management. Inserts zeros for lost packets and during
// buffer increases.
kNetEqOff = 3,
}; };
enum NetEqBgnModes // NetEQ Background Noise (BGN) configurations enum NetEqBgnModes // NetEQ Background Noise (BGN) configurations

View File

@@ -34,11 +34,14 @@ namespace webrtc {
// conference participant, a webinar, or a streaming application, // conference participant, a webinar, or a streaming application,
// this mode can be used to improve the jitter robustness at // this mode can be used to improve the jitter robustness at
// the cost of increased delay. // the cost of increased delay.
// -off : Turns off most of NetEQ's features. Stuffs zeros for lost
// packets and during buffer increases.
// //
enum AudioPlayoutMode { enum AudioPlayoutMode {
voice = 0, voice = 0,
fax = 1, fax = 1,
streaming = 2 streaming = 2,
off = 3,
}; };
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////

View File

@@ -324,6 +324,9 @@ WebRtc_Word32 ACMNetEQ::SetPlayoutMode(const AudioPlayoutMode mode) {
case streaming: case streaming:
playoutMode = kPlayoutStreaming; playoutMode = kPlayoutStreaming;
break; break;
case off:
playoutMode = kPlayoutOff;
break;
} }
if (WebRtcNetEQ_SetPlayoutMode(_inst[idx], playoutMode) < 0) { if (WebRtcNetEQ_SetPlayoutMode(_inst[idx], playoutMode) < 0) {
LogError("SetPlayoutMode", idx); LogError("SetPlayoutMode", idx);
@@ -984,6 +987,9 @@ WebRtc_Word16 ACMNetEQ::AddSlave(const WebRtcNetEQDecoder* usedCodecs,
case streaming: case streaming:
playoutMode = kPlayoutStreaming; playoutMode = kPlayoutStreaming;
break; break;
case off:
playoutMode = kPlayoutOff;
break;
} }
if (WebRtcNetEQ_SetPlayoutMode(_inst[slaveIdx], playoutMode) < 0) { if (WebRtcNetEQ_SetPlayoutMode(_inst[slaveIdx], playoutMode) < 0) {
LogError("SetPlayoutMode", 1); LogError("SetPlayoutMode", 1);

View File

@@ -2226,7 +2226,8 @@ WebRtc_Word32 AudioCodingModuleImpl::DecoderEstimatedBandwidth() const {
// Set playout mode for: voice, fax, or streaming. // Set playout mode for: voice, fax, or streaming.
WebRtc_Word32 AudioCodingModuleImpl::SetPlayoutMode( WebRtc_Word32 AudioCodingModuleImpl::SetPlayoutMode(
const AudioPlayoutMode mode) { const AudioPlayoutMode mode) {
if ((mode != voice) && (mode != fax) && (mode != streaming)) { if ((mode != voice) && (mode != fax) && (mode != streaming) &&
(mode != off)) {
WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceAudioCoding, _id, WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceAudioCoding, _id,
"Invalid playout mode."); "Invalid playout mode.");
return -1; return -1;

View File

@@ -2096,6 +2096,9 @@ Channel::SetNetEQPlayoutMode(NetEqModes mode)
case kNetEqFax: case kNetEqFax:
playoutMode = fax; playoutMode = fax;
break; break;
case kNetEqOff:
playoutMode = off;
break;
} }
if (_audioCodingModule.SetPlayoutMode(playoutMode) != 0) if (_audioCodingModule.SetPlayoutMode(playoutMode) != 0)
{ {
@@ -2122,6 +2125,8 @@ Channel::GetNetEQPlayoutMode(NetEqModes& mode)
case fax: case fax:
mode = kNetEqFax; mode = kNetEqFax;
break; break;
case off:
mode = kNetEqOff;
} }
WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, WEBRTC_TRACE(kTraceStateInfo, kTraceVoice,
VoEId(_instanceId,_channelId), VoEId(_instanceId,_channelId),

View File

@@ -13,14 +13,16 @@
class NetEQTest : public AfterStreamingFixture { class NetEQTest : public AfterStreamingFixture {
protected: protected:
void SetUp() { void SetUp() {
additional_channel_ = voe_base_->CreateChannel(); additional_channel_[0] = voe_base_->CreateChannel();
additional_channel_[1] = voe_base_->CreateChannel();
} }
void TearDown() { void TearDown() {
voe_base_->DeleteChannel(additional_channel_); voe_base_->DeleteChannel(additional_channel_[0]);
voe_base_->DeleteChannel(additional_channel_[1]);
} }
int additional_channel_; int additional_channel_[2];
}; };
TEST_F(NetEQTest, GetNetEQPlayoutModeReturnsDefaultModeByDefault) { TEST_F(NetEQTest, GetNetEQPlayoutModeReturnsDefaultModeByDefault) {
@@ -31,22 +33,37 @@ TEST_F(NetEQTest, GetNetEQPlayoutModeReturnsDefaultModeByDefault) {
TEST_F(NetEQTest, SetNetEQPlayoutModeActuallySetsTheModeForTheChannel) { TEST_F(NetEQTest, SetNetEQPlayoutModeActuallySetsTheModeForTheChannel) {
webrtc::NetEqModes mode; webrtc::NetEqModes mode;
// Set for the first channel but leave the second. // Set for the first channel but leave the others.
EXPECT_EQ(0, voe_base_->SetNetEQPlayoutMode(channel_, webrtc::kNetEqFax)); EXPECT_EQ(0, voe_base_->SetNetEQPlayoutMode(channel_, webrtc::kNetEqFax));
EXPECT_EQ(0, voe_base_->GetNetEQPlayoutMode(channel_, mode)); EXPECT_EQ(0, voe_base_->GetNetEQPlayoutMode(channel_, mode));
EXPECT_EQ(webrtc::kNetEqFax, mode); EXPECT_EQ(webrtc::kNetEqFax, mode);
EXPECT_EQ(0, voe_base_->GetNetEQPlayoutMode(additional_channel_, mode)); EXPECT_EQ(0, voe_base_->GetNetEQPlayoutMode(additional_channel_[0], mode));
EXPECT_EQ(webrtc::kNetEqDefault, mode);
EXPECT_EQ(0, voe_base_->GetNetEQPlayoutMode(additional_channel_[1], mode));
EXPECT_EQ(webrtc::kNetEqDefault, mode); EXPECT_EQ(webrtc::kNetEqDefault, mode);
// Set the second channel, leave the first. // Set the second channel, leave the others.
EXPECT_EQ(0, voe_base_->SetNetEQPlayoutMode( EXPECT_EQ(0, voe_base_->SetNetEQPlayoutMode(
additional_channel_, webrtc::kNetEqStreaming)); additional_channel_[0], webrtc::kNetEqStreaming));
EXPECT_EQ(0, voe_base_->GetNetEQPlayoutMode(additional_channel_, mode)); EXPECT_EQ(0, voe_base_->GetNetEQPlayoutMode(additional_channel_[0], mode));
EXPECT_EQ(webrtc::kNetEqStreaming, mode); EXPECT_EQ(webrtc::kNetEqStreaming, mode);
EXPECT_EQ(0, voe_base_->GetNetEQPlayoutMode(channel_, mode)); EXPECT_EQ(0, voe_base_->GetNetEQPlayoutMode(channel_, mode));
EXPECT_EQ(webrtc::kNetEqFax, mode); EXPECT_EQ(webrtc::kNetEqFax, mode);
EXPECT_EQ(0, voe_base_->GetNetEQPlayoutMode(additional_channel_[1], mode));
EXPECT_EQ(webrtc::kNetEqDefault, mode);
// Set the third channel, leave the others.
EXPECT_EQ(0, voe_base_->SetNetEQPlayoutMode(
additional_channel_[1], webrtc::kNetEqOff));
EXPECT_EQ(0, voe_base_->GetNetEQPlayoutMode(additional_channel_[1], mode));
EXPECT_EQ(webrtc::kNetEqOff, mode);
EXPECT_EQ(0, voe_base_->GetNetEQPlayoutMode(channel_, mode));
EXPECT_EQ(webrtc::kNetEqFax, mode);
EXPECT_EQ(0, voe_base_->GetNetEQPlayoutMode(additional_channel_[0], mode));
EXPECT_EQ(webrtc::kNetEqStreaming, mode);
} }
TEST_F(NetEQTest, GetNetEQBgnModeReturnsBgnOnByDefault) { TEST_F(NetEQTest, GetNetEQBgnModeReturnsBgnOnByDefault) {
@@ -79,4 +96,8 @@ TEST_F(NetEQTest, ManualSetEQPlayoutModeStillProducesOkAudio) {
EXPECT_EQ(0, voe_base_->SetNetEQPlayoutMode(channel_, webrtc::kNetEqFax)); EXPECT_EQ(0, voe_base_->SetNetEQPlayoutMode(channel_, webrtc::kNetEqFax));
TEST_LOG("NetEQ fax playout mode enabled => should hear OK audio.\n"); TEST_LOG("NetEQ fax playout mode enabled => should hear OK audio.\n");
Sleep(2000); Sleep(2000);
EXPECT_EQ(0, voe_base_->SetNetEQPlayoutMode(channel_, webrtc::kNetEqOff));
TEST_LOG("NetEQ off playout mode enabled => should hear OK audio.\n");
Sleep(2000);
} }