Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(159)

Side by Side Diff: webrtc/modules/audio_coding/neteq/neteq_impl_unittest.cc

Issue 2337473002: Multi frequency DTMF support - receiver side (Closed)
Patch Set: added neteq tests Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 EXPECT_CALL(*mock_dtmf_buffer_, Die()).Times(1); 166 EXPECT_CALL(*mock_dtmf_buffer_, Die()).Times(1);
167 } 167 }
168 if (use_mock_dtmf_tone_generator_) { 168 if (use_mock_dtmf_tone_generator_) {
169 EXPECT_CALL(*mock_dtmf_tone_generator_, Die()).Times(1); 169 EXPECT_CALL(*mock_dtmf_tone_generator_, Die()).Times(1);
170 } 170 }
171 if (use_mock_packet_buffer_) { 171 if (use_mock_packet_buffer_) {
172 EXPECT_CALL(*mock_packet_buffer_, Die()).Times(1); 172 EXPECT_CALL(*mock_packet_buffer_, Die()).Times(1);
173 } 173 }
174 } 174 }
175 175
176 void TestDtmfPacket(NetEqDecoder decoder_type) {
177 UseNoMocks();
178 CreateInstance();
179 const size_t kPayloadLength = 4;
180 const uint8_t kPayloadType = 110;
181 const uint32_t kReceiveTime = 17;
182 const int kSampleRateHz = 8000;
ossu 2016/10/11 17:56:17 So DTMF sample rate doesn't depend on clock rate,
the sun 2016/10/11 19:17:17 The sample rate is set when NetEq is constructed a
183 // Event: 2, E bit, Volume: 0x3F, Length: 0x10F0.
184 uint8_t payload[kPayloadLength] = { 0x02, 0x80 + 0x3F, 0x10, 0xF0 };
185 WebRtcRTPHeader rtp_header;
186 rtp_header.header.payloadType = kPayloadType;
187 rtp_header.header.sequenceNumber = 0x1234;
188 rtp_header.header.timestamp = 0x12345678;
189 rtp_header.header.ssrc = 0x87654321;
190
191 EXPECT_EQ(NetEq::kOK, neteq_->RegisterPayloadType(
192 decoder_type, "telephone-event", kPayloadType));
193
194 // Insert first packet.
195 EXPECT_EQ(NetEq::kOK,
196 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
197
198 // Pull audio once.
199 const size_t kMaxOutputSize =
200 static_cast<size_t>(10 * kSampleRateHz / 1000);
201 AudioFrame output;
202 bool muted;
203 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
204 ASSERT_FALSE(muted);
205 ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_);
206 EXPECT_EQ(1u, output.num_channels_);
207 EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_);
ossu 2016/10/11 17:56:18 Do you want to check that there is actually audio
the sun 2016/10/11 19:17:17 Done.
208 }
209
176 std::unique_ptr<NetEqImpl> neteq_; 210 std::unique_ptr<NetEqImpl> neteq_;
177 NetEq::Config config_; 211 NetEq::Config config_;
178 TickTimer* tick_timer_ = nullptr; 212 TickTimer* tick_timer_ = nullptr;
179 MockBufferLevelFilter* mock_buffer_level_filter_ = nullptr; 213 MockBufferLevelFilter* mock_buffer_level_filter_ = nullptr;
180 BufferLevelFilter* buffer_level_filter_ = nullptr; 214 BufferLevelFilter* buffer_level_filter_ = nullptr;
181 bool use_mock_buffer_level_filter_ = true; 215 bool use_mock_buffer_level_filter_ = true;
182 MockDecoderDatabase* mock_decoder_database_ = nullptr; 216 MockDecoderDatabase* mock_decoder_database_ = nullptr;
183 DecoderDatabase* decoder_database_ = nullptr; 217 DecoderDatabase* decoder_database_ = nullptr;
184 bool use_mock_decoder_database_ = true; 218 bool use_mock_decoder_database_ = true;
185 MockDelayPeakDetector* mock_delay_peak_detector_ = nullptr; 219 MockDelayPeakDetector* mock_delay_peak_detector_ = nullptr;
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 // Insert one more packet and make sure the buffer got flushed. That is, it 408 // Insert one more packet and make sure the buffer got flushed. That is, it
375 // should only hold one single packet. 409 // should only hold one single packet.
376 EXPECT_EQ(NetEq::kOK, 410 EXPECT_EQ(NetEq::kOK,
377 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); 411 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
378 EXPECT_EQ(1u, packet_buffer_->NumPacketsInBuffer()); 412 EXPECT_EQ(1u, packet_buffer_->NumPacketsInBuffer());
379 const RTPHeader* test_header = packet_buffer_->NextRtpHeader(); 413 const RTPHeader* test_header = packet_buffer_->NextRtpHeader();
380 EXPECT_EQ(rtp_header.header.timestamp, test_header->timestamp); 414 EXPECT_EQ(rtp_header.header.timestamp, test_header->timestamp);
381 EXPECT_EQ(rtp_header.header.sequenceNumber, test_header->sequenceNumber); 415 EXPECT_EQ(rtp_header.header.sequenceNumber, test_header->sequenceNumber);
382 } 416 }
383 417
418 TEST_F(NetEqImplTest, TestDtmfPacketAVT) {
419 TestDtmfPacket(NetEqDecoder::kDecoderAVT);
420 }
421
422 TEST_F(NetEqImplTest, TestDtmfPacketAVT16kHz) {
423 TestDtmfPacket(NetEqDecoder::kDecoderAVT16kHz);
424 }
425
426 TEST_F(NetEqImplTest, TestDtmfPacketAVT32kHz) {
427 TestDtmfPacket(NetEqDecoder::kDecoderAVT32kHz);
428 }
429
430 TEST_F(NetEqImplTest, TestDtmfPacketAVT48kHz) {
431 TestDtmfPacket(NetEqDecoder::kDecoderAVT48kHz);
432 }
433
384 // This test verifies that timestamps propagate from the incoming packets 434 // This test verifies that timestamps propagate from the incoming packets
385 // through to the sync buffer and to the playout timestamp. 435 // through to the sync buffer and to the playout timestamp.
386 TEST_F(NetEqImplTest, VerifyTimestampPropagation) { 436 TEST_F(NetEqImplTest, VerifyTimestampPropagation) {
387 UseNoMocks(); 437 UseNoMocks();
388 CreateInstance(); 438 CreateInstance();
389 439
390 const uint8_t kPayloadType = 17; // Just an arbitrary number. 440 const uint8_t kPayloadType = 17; // Just an arbitrary number.
391 const uint32_t kReceiveTime = 17; // Value doesn't matter for this test. 441 const uint32_t kReceiveTime = 17; // Value doesn't matter for this test.
392 const int kSampleRateHz = 8000; 442 const int kSampleRateHz = 8000;
393 const size_t kPayloadLengthSamples = 443 const size_t kPayloadLengthSamples =
(...skipping 1031 matching lines...) Expand 10 before | Expand all | Expand 10 after
1425 EXPECT_CALL(*mock_delay_manager_, BufferLimits(_, _)) 1475 EXPECT_CALL(*mock_delay_manager_, BufferLimits(_, _))
1426 .Times(1) 1476 .Times(1)
1427 .WillOnce(DoAll(SetArgPointee<0>(1), SetArgPointee<1>(2))); 1477 .WillOnce(DoAll(SetArgPointee<0>(1), SetArgPointee<1>(2)));
1428 1478
1429 bool muted; 1479 bool muted;
1430 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_, &muted)); 1480 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_, &muted));
1431 EXPECT_EQ(kAccelerate, neteq_->last_operation_for_test()); 1481 EXPECT_EQ(kAccelerate, neteq_->last_operation_for_test());
1432 } 1482 }
1433 1483
1434 }// namespace webrtc 1484 }// namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698