OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2015 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 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 const uint32_t kSsrc = 1234; | 48 const uint32_t kSsrc = 1234; |
49 const char* kCName = "foo_name"; | 49 const char* kCName = "foo_name"; |
50 const int kAudioLevelId = 2; | 50 const int kAudioLevelId = 2; |
51 const int kTransportSequenceNumberId = 4; | 51 const int kTransportSequenceNumberId = 4; |
52 const int kEchoDelayMedian = 254; | 52 const int kEchoDelayMedian = 254; |
53 const int kEchoDelayStdDev = -3; | 53 const int kEchoDelayStdDev = -3; |
54 const int kEchoReturnLoss = -65; | 54 const int kEchoReturnLoss = -65; |
55 const int kEchoReturnLossEnhancement = 101; | 55 const int kEchoReturnLossEnhancement = 101; |
56 const float kResidualEchoLikelihood = -1.0f; | 56 const float kResidualEchoLikelihood = -1.0f; |
57 const int32_t kSpeechInputLevel = 96; | 57 const int32_t kSpeechInputLevel = 96; |
| 58 const double kTotalInputEnergy = 0.25; |
| 59 const double kTotalInputDuration = 0.5; |
58 const CallStatistics kCallStats = { | 60 const CallStatistics kCallStats = { |
59 1345, 1678, 1901, 1234, 112, 13456, 17890, 1567, -1890, -1123}; | 61 1345, 1678, 1901, 1234, 112, 13456, 17890, 1567, -1890, -1123}; |
60 const ReportBlock kReportBlock = {456, 780, 123, 567, 890, 132, 143, 13354}; | 62 const ReportBlock kReportBlock = {456, 780, 123, 567, 890, 132, 143, 13354}; |
61 const int kTelephoneEventPayloadType = 123; | 63 const int kTelephoneEventPayloadType = 123; |
62 const int kTelephoneEventPayloadFrequency = 65432; | 64 const int kTelephoneEventPayloadFrequency = 65432; |
63 const int kTelephoneEventCode = 45; | 65 const int kTelephoneEventCode = 45; |
64 const int kTelephoneEventDuration = 6789; | 66 const int kTelephoneEventDuration = 6789; |
65 const CodecInst kIsacCodec = {103, "isac", 16000, 320, 1, 32000}; | 67 const CodecInst kIsacCodec = {103, "isac", 16000, 320, 1, 32000}; |
66 constexpr int kIsacPayloadType = 103; | 68 constexpr int kIsacPayloadType = 103; |
67 const SdpAudioFormat kIsacFormat = {"isac", 16000, 1}; | 69 const SdpAudioFormat kIsacFormat = {"isac", 16000, 1}; |
68 const SdpAudioFormat kOpusFormat = {"opus", 48000, 2}; | 70 const SdpAudioFormat kOpusFormat = {"opus", 48000, 2}; |
69 const SdpAudioFormat kG722Format = {"g722", 8000, 1}; | 71 const SdpAudioFormat kG722Format = {"g722", 8000, 1}; |
70 const AudioCodecSpec kCodecSpecs[] = { | 72 const AudioCodecSpec kCodecSpecs[] = { |
71 {kIsacFormat, {16000, 1, 32000, 10000, 32000}}, | 73 {kIsacFormat, {16000, 1, 32000, 10000, 32000}}, |
72 {kOpusFormat, {48000, 1, 32000, 6000, 510000}}, | 74 {kOpusFormat, {48000, 1, 32000, 6000, 510000}}, |
73 {kG722Format, {16000, 1, 64000}}}; | 75 {kG722Format, {16000, 1, 64000}}}; |
74 | 76 |
75 class MockLimitObserver : public BitrateAllocator::LimitObserver { | 77 class MockLimitObserver : public BitrateAllocator::LimitObserver { |
76 public: | 78 public: |
77 MOCK_METHOD2(OnAllocationLimitsChanged, | 79 MOCK_METHOD2(OnAllocationLimitsChanged, |
78 void(uint32_t min_send_bitrate_bps, | 80 void(uint32_t min_send_bitrate_bps, |
79 uint32_t max_padding_bitrate_bps)); | 81 uint32_t max_padding_bitrate_bps)); |
80 }; | 82 }; |
81 | 83 |
82 class MockTransmitMixer : public voe::TransmitMixer { | 84 class MockTransmitMixer : public voe::TransmitMixer { |
83 public: | 85 public: |
84 MOCK_CONST_METHOD0(AudioLevelFullRange, int16_t()); | 86 MOCK_CONST_METHOD0(AudioLevelFullRange, int16_t()); |
| 87 MOCK_CONST_METHOD0(GetTotalInputEnergy, double()); |
| 88 MOCK_CONST_METHOD0(GetTotalInputDuration, double()); |
85 }; | 89 }; |
86 | 90 |
87 std::unique_ptr<MockAudioEncoder> SetupAudioEncoderMock( | 91 std::unique_ptr<MockAudioEncoder> SetupAudioEncoderMock( |
88 int payload_type, | 92 int payload_type, |
89 const SdpAudioFormat& format) { | 93 const SdpAudioFormat& format) { |
90 for (const auto& spec : kCodecSpecs) { | 94 for (const auto& spec : kCodecSpecs) { |
91 if (format == spec.format) { | 95 if (format == spec.format) { |
92 std::unique_ptr<MockAudioEncoder> encoder(new MockAudioEncoder); | 96 std::unique_ptr<MockAudioEncoder> encoder(new MockAudioEncoder); |
93 ON_CALL(*encoder.get(), SampleRateHz()) | 97 ON_CALL(*encoder.get(), SampleRateHz()) |
94 .WillByDefault(Return(spec.info.sample_rate_hz)); | 98 .WillByDefault(Return(spec.info.sample_rate_hz)); |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
275 EXPECT_TRUE(channel_proxy_); | 279 EXPECT_TRUE(channel_proxy_); |
276 EXPECT_CALL(*channel_proxy_, GetRTCPStatistics()) | 280 EXPECT_CALL(*channel_proxy_, GetRTCPStatistics()) |
277 .WillRepeatedly(Return(kCallStats)); | 281 .WillRepeatedly(Return(kCallStats)); |
278 EXPECT_CALL(*channel_proxy_, GetRemoteRTCPReportBlocks()) | 282 EXPECT_CALL(*channel_proxy_, GetRemoteRTCPReportBlocks()) |
279 .WillRepeatedly(Return(report_blocks)); | 283 .WillRepeatedly(Return(report_blocks)); |
280 EXPECT_CALL(voice_engine_, transmit_mixer()) | 284 EXPECT_CALL(voice_engine_, transmit_mixer()) |
281 .WillRepeatedly(Return(&transmit_mixer_)); | 285 .WillRepeatedly(Return(&transmit_mixer_)); |
282 | 286 |
283 EXPECT_CALL(transmit_mixer_, AudioLevelFullRange()) | 287 EXPECT_CALL(transmit_mixer_, AudioLevelFullRange()) |
284 .WillRepeatedly(Return(kSpeechInputLevel)); | 288 .WillRepeatedly(Return(kSpeechInputLevel)); |
| 289 EXPECT_CALL(transmit_mixer_, GetTotalInputEnergy()) |
| 290 .WillRepeatedly(Return(kTotalInputEnergy)); |
| 291 EXPECT_CALL(transmit_mixer_, GetTotalInputDuration()) |
| 292 .WillRepeatedly(Return(kTotalInputDuration)); |
285 | 293 |
286 // We have to set the instantaneous value, the average, min and max. We only | 294 // We have to set the instantaneous value, the average, min and max. We only |
287 // care about the instantaneous value, so we set all to the same value. | 295 // care about the instantaneous value, so we set all to the same value. |
288 audio_processing_stats_.echo_return_loss.Set( | 296 audio_processing_stats_.echo_return_loss.Set( |
289 kEchoReturnLoss, kEchoReturnLoss, kEchoReturnLoss, kEchoReturnLoss); | 297 kEchoReturnLoss, kEchoReturnLoss, kEchoReturnLoss, kEchoReturnLoss); |
290 audio_processing_stats_.echo_return_loss_enhancement.Set( | 298 audio_processing_stats_.echo_return_loss_enhancement.Set( |
291 kEchoReturnLossEnhancement, kEchoReturnLossEnhancement, | 299 kEchoReturnLossEnhancement, kEchoReturnLossEnhancement, |
292 kEchoReturnLossEnhancement, kEchoReturnLossEnhancement); | 300 kEchoReturnLossEnhancement, kEchoReturnLossEnhancement); |
293 audio_processing_stats_.delay_median = kEchoDelayMedian; | 301 audio_processing_stats_.delay_median = kEchoDelayMedian; |
294 audio_processing_stats_.delay_standard_deviation = kEchoDelayStdDev; | 302 audio_processing_stats_.delay_standard_deviation = kEchoDelayStdDev; |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
409 stats.packets_lost); | 417 stats.packets_lost); |
410 EXPECT_EQ(Q8ToFloat(kReportBlock.fraction_lost), stats.fraction_lost); | 418 EXPECT_EQ(Q8ToFloat(kReportBlock.fraction_lost), stats.fraction_lost); |
411 EXPECT_EQ(std::string(kIsacCodec.plname), stats.codec_name); | 419 EXPECT_EQ(std::string(kIsacCodec.plname), stats.codec_name); |
412 EXPECT_EQ(static_cast<int32_t>(kReportBlock.extended_highest_sequence_number), | 420 EXPECT_EQ(static_cast<int32_t>(kReportBlock.extended_highest_sequence_number), |
413 stats.ext_seqnum); | 421 stats.ext_seqnum); |
414 EXPECT_EQ(static_cast<int32_t>(kReportBlock.interarrival_jitter / | 422 EXPECT_EQ(static_cast<int32_t>(kReportBlock.interarrival_jitter / |
415 (kIsacCodec.plfreq / 1000)), | 423 (kIsacCodec.plfreq / 1000)), |
416 stats.jitter_ms); | 424 stats.jitter_ms); |
417 EXPECT_EQ(kCallStats.rttMs, stats.rtt_ms); | 425 EXPECT_EQ(kCallStats.rttMs, stats.rtt_ms); |
418 EXPECT_EQ(static_cast<int32_t>(kSpeechInputLevel), stats.audio_level); | 426 EXPECT_EQ(static_cast<int32_t>(kSpeechInputLevel), stats.audio_level); |
| 427 EXPECT_EQ(kTotalInputEnergy, stats.total_input_energy); |
| 428 EXPECT_EQ(kTotalInputDuration, stats.total_input_duration); |
419 EXPECT_EQ(-1, stats.aec_quality_min); | 429 EXPECT_EQ(-1, stats.aec_quality_min); |
420 EXPECT_EQ(kEchoDelayMedian, stats.echo_delay_median_ms); | 430 EXPECT_EQ(kEchoDelayMedian, stats.echo_delay_median_ms); |
421 EXPECT_EQ(kEchoDelayStdDev, stats.echo_delay_std_ms); | 431 EXPECT_EQ(kEchoDelayStdDev, stats.echo_delay_std_ms); |
422 EXPECT_EQ(kEchoReturnLoss, stats.echo_return_loss); | 432 EXPECT_EQ(kEchoReturnLoss, stats.echo_return_loss); |
423 EXPECT_EQ(kEchoReturnLossEnhancement, stats.echo_return_loss_enhancement); | 433 EXPECT_EQ(kEchoReturnLossEnhancement, stats.echo_return_loss_enhancement); |
424 EXPECT_EQ(kResidualEchoLikelihood, stats.residual_echo_likelihood); | 434 EXPECT_EQ(kResidualEchoLikelihood, stats.residual_echo_likelihood); |
425 EXPECT_FALSE(stats.typing_noise_detected); | 435 EXPECT_FALSE(stats.typing_noise_detected); |
426 } | 436 } |
427 | 437 |
428 TEST(AudioSendStreamTest, GetStatsTypingNoiseDetected) { | 438 TEST(AudioSendStreamTest, GetStatsTypingNoiseDetected) { |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
536 stream_config.send_codec_spec->cng_payload_type = rtc::Optional<int>(105); | 546 stream_config.send_codec_spec->cng_payload_type = rtc::Optional<int>(105); |
537 internal::AudioSendStream send_stream( | 547 internal::AudioSendStream send_stream( |
538 stream_config, helper.audio_state(), helper.worker_queue(), | 548 stream_config, helper.audio_state(), helper.worker_queue(), |
539 helper.transport(), helper.bitrate_allocator(), helper.event_log(), | 549 helper.transport(), helper.bitrate_allocator(), helper.event_log(), |
540 helper.rtcp_rtt_stats(), rtc::Optional<RtpState>()); | 550 helper.rtcp_rtt_stats(), rtc::Optional<RtpState>()); |
541 send_stream.Reconfigure(stream_config); | 551 send_stream.Reconfigure(stream_config); |
542 } | 552 } |
543 | 553 |
544 } // namespace test | 554 } // namespace test |
545 } // namespace webrtc | 555 } // namespace webrtc |
OLD | NEW |