Enabling unit tests for NetEq4 in the bots
The unit tests for NetEq4 are made a part of audio_coding_unittests. The bit-exactness tests are disabled due to problems in iLBC. See https://code.google.com/p/webrtc/issues/detail?id=281. A few smaller fixes for valgrind errors and bot failures are included. Some of the fixes are adpted from http://webrtc-codereview.appspot.com/1072008/. Review URL: https://webrtc-codereview.appspot.com/1063012 git-svn-id: http://webrtc.googlecode.com/svn/trunk@3432 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
parent
e1d468c019
commit
63464a9354
@ -155,7 +155,12 @@
|
||||
'CNG',
|
||||
'iSACFix',
|
||||
'NetEq',
|
||||
'NetEq4',
|
||||
'NetEq4TestTools',
|
||||
'neteq_unittest_tools',
|
||||
'PCM16B', # Needed by NetEq tests.
|
||||
'<(webrtc_root)/common_audio/common_audio.gyp:vad',
|
||||
'<(DEPTH)/testing/gmock.gyp:gmock',
|
||||
'<(DEPTH)/testing/gtest.gyp:gtest',
|
||||
'<(webrtc_root)/test/test.gyp:test_support_main',
|
||||
'<(webrtc_root)/system_wrappers/source/system_wrappers.gyp:system_wrappers',
|
||||
@ -167,6 +172,44 @@
|
||||
'../../codecs/isac/fix/source/filterbanks_unittest.cc',
|
||||
'../../codecs/isac/fix/source/lpc_masking_model_unittest.cc',
|
||||
'../../codecs/isac/fix/source/transform_unittest.cc',
|
||||
# Test for NetEq 4.
|
||||
'../../neteq4/audio_multi_vector_unittest.cc',
|
||||
'../../neteq4/audio_vector_unittest.cc',
|
||||
'../../neteq4/background_noise_unittest.cc',
|
||||
'../../neteq4/buffer_level_filter_unittest.cc',
|
||||
'../../neteq4/comfort_noise_unittest.cc',
|
||||
'../../neteq4/decision_logic_unittest.cc',
|
||||
'../../neteq4/decoder_database_unittest.cc',
|
||||
'../../neteq4/delay_manager_unittest.cc',
|
||||
'../../neteq4/delay_peak_detector_unittest.cc',
|
||||
'../../neteq4/dsp_helper_unittest.cc',
|
||||
'../../neteq4/dtmf_buffer_unittest.cc',
|
||||
'../../neteq4/dtmf_tone_generator_unittest.cc',
|
||||
'../../neteq4/expand_unittest.cc',
|
||||
'../../neteq4/merge_unittest.cc',
|
||||
'../../neteq4/neteq_external_decoder_unittest.cc',
|
||||
'../../neteq4/neteq_impl_unittest.cc',
|
||||
'../../neteq4/neteq_stereo_unittest.cc',
|
||||
'../../neteq4/neteq_unittest.cc',
|
||||
'../../neteq4/normal_unittest.cc',
|
||||
'../../neteq4/packet_buffer_unittest.cc',
|
||||
'../../neteq4/payload_splitter_unittest.cc',
|
||||
'../../neteq4/post_decode_vad_unittest.cc',
|
||||
'../../neteq4/random_vector_unittest.cc',
|
||||
'../../neteq4/sync_buffer_unittest.cc',
|
||||
'../../neteq4/timestamp_scaler_unittest.cc',
|
||||
'../../neteq4/time_stretch_unittest.cc',
|
||||
'../../neteq4/mock/mock_audio_decoder.h',
|
||||
'../../neteq4/mock/mock_audio_vector.h',
|
||||
'../../neteq4/mock/mock_buffer_level_filter.h',
|
||||
'../../neteq4/mock/mock_decoder_database.h',
|
||||
'../../neteq4/mock/mock_delay_manager.h',
|
||||
'../../neteq4/mock/mock_delay_peak_detector.h',
|
||||
'../../neteq4/mock/mock_dtmf_buffer.h',
|
||||
'../../neteq4/mock/mock_dtmf_tone_generator.h',
|
||||
'../../neteq4/mock/mock_external_decoder_pcm16b.h',
|
||||
'../../neteq4/mock/mock_packet_buffer.h',
|
||||
'../../neteq4/mock/mock_payload_splitter.h',
|
||||
],
|
||||
}, # audio_coding_unittests
|
||||
],
|
||||
|
@ -38,7 +38,7 @@ namespace webrtc {
|
||||
// PCMu
|
||||
int AudioDecoderPcmU::Decode(const uint8_t* encoded, size_t encoded_len,
|
||||
int16_t* decoded, SpeechType* speech_type) {
|
||||
int16_t temp_type;
|
||||
int16_t temp_type = 1; // Default is speech.
|
||||
int16_t ret = WebRtcG711_DecodeU(
|
||||
state_, reinterpret_cast<int16_t*>(const_cast<uint8_t*>(encoded)),
|
||||
static_cast<int16_t>(encoded_len), decoded, &temp_type);
|
||||
@ -54,7 +54,7 @@ int AudioDecoderPcmU::PacketDuration(const uint8_t* encoded,
|
||||
// PCMa
|
||||
int AudioDecoderPcmA::Decode(const uint8_t* encoded, size_t encoded_len,
|
||||
int16_t* decoded, SpeechType* speech_type) {
|
||||
int16_t temp_type;
|
||||
int16_t temp_type = 1; // Default is speech.
|
||||
int16_t ret = WebRtcG711_DecodeA(
|
||||
state_, reinterpret_cast<int16_t*>(const_cast<uint8_t*>(encoded)),
|
||||
static_cast<int16_t>(encoded_len), decoded, &temp_type);
|
||||
@ -79,7 +79,7 @@ AudioDecoderPcm16B::AudioDecoderPcm16B(enum NetEqDecoder type)
|
||||
|
||||
int AudioDecoderPcm16B::Decode(const uint8_t* encoded, size_t encoded_len,
|
||||
int16_t* decoded, SpeechType* speech_type) {
|
||||
int16_t temp_type;
|
||||
int16_t temp_type = 1; // Default is speech.
|
||||
int16_t ret = WebRtcPcm16b_DecodeW16(
|
||||
state_, reinterpret_cast<int16_t*>(const_cast<uint8_t*>(encoded)),
|
||||
static_cast<int16_t>(encoded_len), decoded, &temp_type);
|
||||
@ -125,7 +125,7 @@ AudioDecoderIlbc::~AudioDecoderIlbc() {
|
||||
|
||||
int AudioDecoderIlbc::Decode(const uint8_t* encoded, size_t encoded_len,
|
||||
int16_t* decoded, SpeechType* speech_type) {
|
||||
int16_t temp_type;
|
||||
int16_t temp_type = 1; // Default is speech.
|
||||
int16_t ret = WebRtcIlbcfix_Decode(static_cast<iLBC_decinst_t*>(state_),
|
||||
reinterpret_cast<const int16_t*>(encoded),
|
||||
static_cast<int16_t>(encoded_len), decoded,
|
||||
@ -157,7 +157,7 @@ AudioDecoderIsac::~AudioDecoderIsac() {
|
||||
|
||||
int AudioDecoderIsac::Decode(const uint8_t* encoded, size_t encoded_len,
|
||||
int16_t* decoded, SpeechType* speech_type) {
|
||||
int16_t temp_type;
|
||||
int16_t temp_type = 1; // Default is speech.
|
||||
int16_t ret = WebRtcIsac_Decode(static_cast<ISACStruct*>(state_),
|
||||
reinterpret_cast<const uint16_t*>(encoded),
|
||||
static_cast<int16_t>(encoded_len), decoded,
|
||||
@ -169,7 +169,7 @@ int AudioDecoderIsac::Decode(const uint8_t* encoded, size_t encoded_len,
|
||||
int AudioDecoderIsac::DecodeRedundant(const uint8_t* encoded,
|
||||
size_t encoded_len, int16_t* decoded,
|
||||
SpeechType* speech_type) {
|
||||
int16_t temp_type;
|
||||
int16_t temp_type = 1; // Default is speech.
|
||||
int16_t ret = WebRtcIsac_DecodeRcu(static_cast<ISACStruct*>(state_),
|
||||
reinterpret_cast<const uint16_t*>(encoded),
|
||||
static_cast<int16_t>(encoded_len), decoded,
|
||||
@ -223,7 +223,7 @@ AudioDecoderIsacFix::~AudioDecoderIsacFix() {
|
||||
|
||||
int AudioDecoderIsacFix::Decode(const uint8_t* encoded, size_t encoded_len,
|
||||
int16_t* decoded, SpeechType* speech_type) {
|
||||
int16_t temp_type;
|
||||
int16_t temp_type = 1; // Default is speech.
|
||||
int16_t ret = WebRtcIsacfix_Decode(static_cast<ISACFIX_MainStruct*>(state_),
|
||||
reinterpret_cast<const uint16_t*>(encoded),
|
||||
static_cast<int16_t>(encoded_len), decoded,
|
||||
@ -264,7 +264,7 @@ AudioDecoderG722::~AudioDecoderG722() {
|
||||
|
||||
int AudioDecoderG722::Decode(const uint8_t* encoded, size_t encoded_len,
|
||||
int16_t* decoded, SpeechType* speech_type) {
|
||||
int16_t temp_type;
|
||||
int16_t temp_type = 1; // Default is speech.
|
||||
int16_t ret = WebRtcG722_Decode(
|
||||
static_cast<G722DecInst*>(state_),
|
||||
const_cast<int16_t*>(reinterpret_cast<const int16_t*>(encoded)),
|
||||
@ -302,7 +302,7 @@ AudioDecoderOpus::~AudioDecoderOpus() {
|
||||
|
||||
int AudioDecoderOpus::Decode(const uint8_t* encoded, size_t encoded_len,
|
||||
int16_t* decoded, SpeechType* speech_type) {
|
||||
int16_t temp_type;
|
||||
int16_t temp_type = 1; // Default is speech.
|
||||
assert(channels_ == 1);
|
||||
// TODO(hlundin): Allow 2 channels when WebRtcOpus_Decode provides both
|
||||
// channels interleaved.
|
||||
|
@ -153,7 +153,9 @@ void AudioVector<T>::CrossFade(const AudioVector<T>& append_this,
|
||||
}
|
||||
assert(alpha >= 0); // Verify that the slope was correct.
|
||||
// Append what is left of |append_this|.
|
||||
PushBack(&append_this[fade_length], append_this.Size() - fade_length);
|
||||
size_t samples_to_push_back = append_this.Size() - fade_length;
|
||||
if (samples_to_push_back > 0)
|
||||
PushBack(&append_this[fade_length], samples_to_push_back);
|
||||
}
|
||||
|
||||
// Template specialization for double. The only difference is in the calculation
|
||||
@ -181,7 +183,9 @@ void AudioVector<double>::CrossFade(const AudioVector<double>& append_this,
|
||||
}
|
||||
assert(alpha >= 0); // Verify that the slope was correct.
|
||||
// Append what is left of |append_this|.
|
||||
PushBack(&append_this[fade_length], append_this.Size() - fade_length);
|
||||
size_t samples_to_push_back = append_this.Size() - fade_length;
|
||||
if (samples_to_push_back > 0)
|
||||
PushBack(&append_this[fade_length], samples_to_push_back);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
|
@ -61,7 +61,7 @@ TEST(DelayPeakDetector, TriggerPeakMode) {
|
||||
int time = 0;
|
||||
int next = 1; // Start with the second packet to get a proper IAT.
|
||||
while (next < kNumPackets) {
|
||||
while (arrival_times_ms[next] <= time) {
|
||||
while (next < kNumPackets && arrival_times_ms[next] <= time) {
|
||||
int iat_packets = (arrival_times_ms[next] - arrival_times_ms[next - 1]) /
|
||||
kPacketSizeMs;
|
||||
const int kTargetBufferLevel = 1; // Define peaks to be iat > 2.
|
||||
@ -107,7 +107,7 @@ TEST(DelayPeakDetector, DoNotTriggerPeakMode) {
|
||||
int time = 0;
|
||||
int next = 1; // Start with the second packet to get a proper IAT.
|
||||
while (next < kNumPackets) {
|
||||
while (arrival_times_ms[next] <= time) {
|
||||
while (next < kNumPackets && arrival_times_ms[next] <= time) {
|
||||
int iat_packets = (arrival_times_ms[next] - arrival_times_ms[next - 1]) /
|
||||
kPacketSizeMs;
|
||||
const int kTargetBufferLevel = 2; // Define peaks to be iat > 4.
|
||||
|
@ -119,59 +119,6 @@
|
||||
['include_tests==1', {
|
||||
'includes': ['neteq_tests.gypi',],
|
||||
'targets': [
|
||||
{
|
||||
'target_name': 'neteq4_unittests',
|
||||
'type': 'executable',
|
||||
'dependencies': [
|
||||
'NetEq4',
|
||||
'NetEq4TestTools',
|
||||
'neteq_unittest_tools',
|
||||
'PCM16B',
|
||||
'<(DEPTH)/testing/gmock.gyp:gmock',
|
||||
'<(DEPTH)/testing/gtest.gyp:gtest',
|
||||
'<(webrtc_root)/test/test.gyp:test_support_main',
|
||||
],
|
||||
'sources': [
|
||||
'audio_multi_vector_unittest.cc',
|
||||
'audio_vector_unittest.cc',
|
||||
'background_noise_unittest.cc',
|
||||
'buffer_level_filter_unittest.cc',
|
||||
'comfort_noise_unittest.cc',
|
||||
'decision_logic_unittest.cc',
|
||||
'decoder_database_unittest.cc',
|
||||
'delay_manager_unittest.cc',
|
||||
'delay_peak_detector_unittest.cc',
|
||||
'dsp_helper_unittest.cc',
|
||||
'dtmf_buffer_unittest.cc',
|
||||
'dtmf_tone_generator_unittest.cc',
|
||||
'expand_unittest.cc',
|
||||
'merge_unittest.cc',
|
||||
'neteq_external_decoder_unittest.cc',
|
||||
'neteq_impl_unittest.cc',
|
||||
'neteq_stereo_unittest.cc',
|
||||
'neteq_unittest.cc',
|
||||
'normal_unittest.cc',
|
||||
'packet_buffer_unittest.cc',
|
||||
'payload_splitter_unittest.cc',
|
||||
'post_decode_vad_unittest.cc',
|
||||
'random_vector_unittest.cc',
|
||||
'sync_buffer_unittest.cc',
|
||||
'timestamp_scaler_unittest.cc',
|
||||
'time_stretch_unittest.cc',
|
||||
'mock/mock_audio_decoder.h',
|
||||
'mock/mock_audio_vector.h',
|
||||
'mock/mock_buffer_level_filter.h',
|
||||
'mock/mock_decoder_database.h',
|
||||
'mock/mock_delay_manager.h',
|
||||
'mock/mock_delay_peak_detector.h',
|
||||
'mock/mock_dtmf_buffer.h',
|
||||
'mock/mock_dtmf_tone_generator.h',
|
||||
'mock/mock_external_decoder_pcm16b.h',
|
||||
'mock/mock_packet_buffer.h',
|
||||
'mock/mock_payload_splitter.h',
|
||||
],
|
||||
}, # neteq_unittests
|
||||
|
||||
{
|
||||
'target_name': 'audio_decoder_unittests',
|
||||
'type': 'executable',
|
||||
|
@ -1101,6 +1101,7 @@ int NetEqImpl::DecodeLoop(PacketList* packet_list, Operations* operation,
|
||||
assert(*operation == kNormal || *operation == kAccelerate ||
|
||||
*operation == kMerge || *operation == kPreemptiveExpand);
|
||||
packet_list->pop_front();
|
||||
int payload_length = packet->payload_length;
|
||||
int16_t decode_length;
|
||||
if (!packet->primary) {
|
||||
// This is a redundant payload; call the special decoder method.
|
||||
@ -1136,7 +1137,7 @@ int NetEqImpl::DecodeLoop(PacketList* packet_list, Operations* operation,
|
||||
" samples per channel)";
|
||||
} else if (decode_length < 0) {
|
||||
// Error.
|
||||
LOG_FERR2(LS_WARNING, Decode, decode_length, packet->payload_length);
|
||||
LOG_FERR2(LS_WARNING, Decode, decode_length, payload_length);
|
||||
*decoded_length = -1;
|
||||
PacketBuffer::DeleteAllPackets(packet_list);
|
||||
break;
|
||||
|
@ -370,7 +370,7 @@ void NetEqDecodingTest::PopulateCng(int frame_index,
|
||||
*payload_len = 1; // Only noise level, no spectral parameters.
|
||||
}
|
||||
|
||||
TEST_F(NetEqDecodingTest, TestBitExactness) {
|
||||
TEST_F(NetEqDecodingTest, DISABLED_TestBitExactness) {
|
||||
const std::string kInputRtpFile = webrtc::test::ProjectRootPath() +
|
||||
"resources/neteq_universal.rtp";
|
||||
const std::string kInputRefFile =
|
||||
@ -378,7 +378,7 @@ TEST_F(NetEqDecodingTest, TestBitExactness) {
|
||||
DecodeAndCompare(kInputRtpFile, kInputRefFile);
|
||||
}
|
||||
|
||||
TEST_F(NetEqDecodingTest, TestNetworkStatistics) {
|
||||
TEST_F(NetEqDecodingTest, DISABLED_TestNetworkStatistics) {
|
||||
const std::string kInputRtpFile = webrtc::test::ProjectRootPath() +
|
||||
"resources/neteq_universal.rtp";
|
||||
const std::string kNetworkStatRefFile =
|
||||
|
Loading…
x
Reference in New Issue
Block a user