Re-organizing ACM tests
The ACM tests needed re-writing, because all tests were not individual gtests, and the result was difficult to interpret.
While doing the re-write, I discovered a bug related to 48 kHz CNG. We can't have the 48 kHz CNG active at the moment. The bug is fixed in this CL.
I also needed to rewrite parts of the VAD/DTX implementation, so that the status of VAD and DTX (enabled or not) is propagated back from the function SetVAD().
BUG=issue2173
R=minyue@webrtc.org, turaj@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/1961004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@4625 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/modules/audio_coding/main/test/EncodeDecodeTest.cc b/webrtc/modules/audio_coding/main/test/EncodeDecodeTest.cc
index 949507d..6ba6186 100644
--- a/webrtc/modules/audio_coding/main/test/EncodeDecodeTest.cc
+++ b/webrtc/modules/audio_coding/main/test/EncodeDecodeTest.cc
@@ -72,23 +72,22 @@
// Choose codec on command line.
printf("List of supported codec.\n");
for (int n = 0; n < noOfCodecs; n++) {
- acm->Codec(n, &sendCodec);
+ EXPECT_EQ(0, acm->Codec(n, &sendCodec));
printf("%d %s\n", n, sendCodec.plname);
}
printf("Choose your codec:");
ASSERT_GT(scanf("%d", &codecNo), 0);
}
- acm->Codec(codecNo, &sendCodec);
+ EXPECT_EQ(0, acm->Codec(codecNo, &sendCodec));
+ // Default number of channels is 2 for CELT, so we change to 1 in this test.
if (!strcmp(sendCodec.plname, "CELT")) {
sendCodec.channels = 1;
}
- acm->RegisterSendCodec(sendCodec);
+
+ EXPECT_EQ(0, acm->RegisterSendCodec(sendCodec));
_packetization = new TestPacketization(rtpStream, sendCodec.plfreq);
- if (acm->RegisterTransportCallback(_packetization) < 0) {
- printf("Registering Transport Callback failed, for run: codecId: %d: --\n",
- codeId);
- }
+ EXPECT_EQ(0, acm->RegisterTransportCallback(_packetization));
_acm = acm;
}
@@ -100,34 +99,23 @@
bool Sender::Add10MsData() {
if (!_pcmFile.EndOfFile()) {
- _pcmFile.Read10MsData(_audioFrame);
+ EXPECT_GT(_pcmFile.Read10MsData(_audioFrame), 0);
int32_t ok = _acm->Add10MsData(_audioFrame);
+ EXPECT_EQ(0, ok);
if (ok != 0) {
- printf("Error calling Add10MsData: for run: codecId: %d\n", codeId);
- exit(1);
+ return false;
}
return true;
}
return false;
}
-bool Sender::Process() {
- int32_t ok = _acm->Process();
- if (ok < 0) {
- printf("Error calling Add10MsData: for run: codecId: %d\n", codeId);
- exit(1);
- }
- return true;
-}
-
void Sender::Run() {
while (true) {
if (!Add10MsData()) {
break;
}
- if (!Process()) { // This could be done in a processing thread
- break;
- }
+ EXPECT_GT(_acm->Process(), -1);
}
}
@@ -139,15 +127,12 @@
void Receiver::Setup(AudioCodingModule *acm, RTPStream *rtpStream) {
struct CodecInst recvCodec;
int noOfCodecs;
- acm->InitializeReceiver();
+ EXPECT_EQ(0, acm->InitializeReceiver());
noOfCodecs = acm->NumberOfCodecs();
for (int i = 0; i < noOfCodecs; i++) {
- acm->Codec((uint8_t) i, &recvCodec);
- if (acm->RegisterReceiveCodec(recvCodec) != 0) {
- printf("Unable to register codec: for run: codecId: %d\n", codeId);
- exit(1);
- }
+ EXPECT_EQ(0, acm->Codec(static_cast<uint8_t>(i), &recvCodec));
+ EXPECT_EQ(0, acm->RegisterReceiveCodec(recvCodec));
}
int playSampFreq;
@@ -184,8 +169,9 @@
void Receiver::Teardown() {
delete[] _playoutBuffer;
_pcmFile.Close();
- if (testMode > 1)
+ if (testMode > 1) {
Trace::ReturnTrace();
+ }
}
bool Receiver::IncomingPacket() {
@@ -199,18 +185,13 @@
_firstTime = true;
return true;
} else {
- printf("Error in reading incoming payload.\n");
return false;
}
}
}
- int32_t ok = _acm->IncomingPacket(_incomingPayload, _realPayloadSizeBytes,
- _rtpInfo);
- if (ok != 0) {
- printf("Error when inserting packet to ACM, for run: codecId: %d\n",
- codeId);
- }
+ EXPECT_EQ(0, _acm->IncomingPacket(_incomingPayload, _realPayloadSizeBytes,
+ _rtpInfo));
_realPayloadSizeBytes = _rtpStream->Read(&_rtpInfo, _incomingPayload,
_payloadSizeBytes, &_nextTime);
if (_realPayloadSizeBytes == 0 && _rtpStream->EndOfFile()) {
@@ -223,10 +204,10 @@
bool Receiver::PlayoutData() {
AudioFrame audioFrame;
- if (_acm->PlayoutData10Ms(_frequency, &audioFrame) != 0) {
- printf("Error when calling PlayoutData10Ms, for run: codecId: %d\n",
- codeId);
- exit(1);
+ int32_t ok =_acm->PlayoutData10Ms(_frequency, &audioFrame);
+ EXPECT_EQ(0, ok);
+ if (ok < 0){
+ return false;
}
if (_playoutLengthSmpls == 0) {
return false;
@@ -241,7 +222,7 @@
while (counter500Ms > 0) {
if (clock == 0 || clock >= _nextTime) {
- IncomingPacket();
+ EXPECT_TRUE(IncomingPacket());
if (clock == 0) {
clock = _nextTime;
}
@@ -279,12 +260,6 @@
}
void EncodeDecodeTest::Perform() {
- if (_testMode == 0) {
- printf("Running Encode/Decode Test");
- WEBRTC_TRACE(webrtc::kTraceStateInfo, webrtc::kTraceAudioCoding, -1,
- "---------- EncodeDecodeTest ----------");
- }
-
int numCodecs = 1;
int codePars[3]; // Frequency, packet size, rate.
int numPars[52]; // Number of codec parameters sets (freq, pacsize, rate)
@@ -298,12 +273,9 @@
struct CodecInst sendCodecTmp;
numCodecs = acm->NumberOfCodecs();
- if (_testMode == 1) {
- printf("List of supported codec.\n");
- }
if (_testMode != 2) {
for (int n = 0; n < numCodecs; n++) {
- acm->Codec(n, &sendCodecTmp);
+ EXPECT_EQ(0, acm->Codec(n, &sendCodecTmp));
if (STR_CASE_CMP(sendCodecTmp.plname, "telephone-event") == 0) {
numPars[n] = 0;
} else if (STR_CASE_CMP(sendCodecTmp.plname, "cn") == 0) {
@@ -314,9 +286,6 @@
numPars[n] = 0;
} else {
numPars[n] = 1;
- if (_testMode == 1) {
- printf("%d %s\n", n, sendCodecTmp.plname);
- }
}
}
} else {
@@ -330,14 +299,7 @@
for (int codeId = 0; codeId < numCodecs; codeId++) {
// Only encode using real mono encoders, not telephone-event and cng.
for (int loopPars = 1; loopPars <= numPars[codeId]; loopPars++) {
- if (_testMode == 1) {
- printf("\n");
- printf("***FOR RUN: codeId: %d\n", codeId);
- printf("\n");
- } else if (_testMode == 0) {
- printf(".");
- }
-
+ // Encode all data to file.
EncodeToFile(1, codeId, codePars, _testMode);
RTPFile rtpFile;
@@ -351,18 +313,15 @@
_receiver.Run();
_receiver.Teardown();
rtpFile.Close();
-
- if (_testMode == 1) {
- printf("***COMPLETED RUN FOR: codecID: %d ***\n", codeId);
- }
}
}
+
AudioCodingModule::Destroy(acm);
- if (_testMode == 0) {
- printf("Done!\n");
- }
- if (_testMode == 1)
+
+ // End tracing.
+ if (_testMode == 1) {
Trace::ReturnTrace();
+ }
}
void EncodeDecodeTest::EncodeToFile(int fileType, int codeId, int* codePars,
@@ -373,7 +332,7 @@
rtpFile.Open(fileName.c_str(), "wb+");
rtpFile.WriteHeader();
- //for auto_test and logging
+ // Store for auto_test and logging.
_sender.testMode = testMode;
_sender.codeId = codeId;