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

Side by Side Diff: webrtc/audio/audio_send_stream_unittest.cc

Issue 2405183002: Moving WebRtcVoiceMediaChannel::SendSetCodec to AudioSendStream. (Closed)
Patch Set: on fredrik's comments 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) 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 26 matching lines...) Expand all
37 const int kAudioLevelId = 2; 37 const int kAudioLevelId = 2;
38 const int kAbsSendTimeId = 3; 38 const int kAbsSendTimeId = 3;
39 const int kTransportSequenceNumberId = 4; 39 const int kTransportSequenceNumberId = 4;
40 const int kEchoDelayMedian = 254; 40 const int kEchoDelayMedian = 254;
41 const int kEchoDelayStdDev = -3; 41 const int kEchoDelayStdDev = -3;
42 const int kEchoReturnLoss = -65; 42 const int kEchoReturnLoss = -65;
43 const int kEchoReturnLossEnhancement = 101; 43 const int kEchoReturnLossEnhancement = 101;
44 const unsigned int kSpeechInputLevel = 96; 44 const unsigned int kSpeechInputLevel = 96;
45 const CallStatistics kCallStats = { 45 const CallStatistics kCallStats = {
46 1345, 1678, 1901, 1234, 112, 13456, 17890, 1567, -1890, -1123}; 46 1345, 1678, 1901, 1234, 112, 13456, 17890, 1567, -1890, -1123};
47 const CodecInst kCodecInst = {-121, "codec_name_send", 48000, -231, 0, -671};
48 const ReportBlock kReportBlock = {456, 780, 123, 567, 890, 132, 143, 13354}; 47 const ReportBlock kReportBlock = {456, 780, 123, 567, 890, 132, 143, 13354};
49 const int kTelephoneEventPayloadType = 123; 48 const int kTelephoneEventPayloadType = 123;
50 const int kTelephoneEventCode = 45; 49 const int kTelephoneEventCode = 45;
51 const int kTelephoneEventDuration = 6789; 50 const int kTelephoneEventDuration = 6789;
51 constexpr CodecInst kOpusCodec = {111, "opus", 48000, 960, 2, 64000};
52 52
53 class MockLimitObserver : public BitrateAllocator::LimitObserver { 53 class MockLimitObserver : public BitrateAllocator::LimitObserver {
54 public: 54 public:
55 MOCK_METHOD2(OnAllocationLimitsChanged, 55 MOCK_METHOD2(OnAllocationLimitsChanged,
56 void(uint32_t min_send_bitrate_bps, 56 void(uint32_t min_send_bitrate_bps,
57 uint32_t max_padding_bitrate_bps)); 57 uint32_t max_padding_bitrate_bps));
58 }; 58 };
59 59
60 struct ConfigHelper { 60 struct ConfigHelper {
61 ConfigHelper() 61 ConfigHelper()
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 EXPECT_CALL(*channel_proxy_, RegisterExternalTransport(nullptr)) 104 EXPECT_CALL(*channel_proxy_, RegisterExternalTransport(nullptr))
105 .Times(1); 105 .Times(1);
106 EXPECT_CALL(*channel_proxy_, DeRegisterExternalTransport()) 106 EXPECT_CALL(*channel_proxy_, DeRegisterExternalTransport())
107 .Times(1); 107 .Times(1);
108 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(testing::NotNull())) 108 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(testing::NotNull()))
109 .Times(1); 109 .Times(1);
110 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(testing::IsNull())) 110 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(testing::IsNull()))
111 .Times(1); // Destructor resets the event log 111 .Times(1); // Destructor resets the event log
112 return channel_proxy_; 112 return channel_proxy_;
113 })); 113 }));
114 SetupMockForSetupSendCodec();
114 stream_config_.voe_channel_id = kChannelId; 115 stream_config_.voe_channel_id = kChannelId;
115 stream_config_.rtp.ssrc = kSsrc; 116 stream_config_.rtp.ssrc = kSsrc;
116 stream_config_.rtp.nack.rtp_history_ms = 200; 117 stream_config_.rtp.nack.rtp_history_ms = 200;
117 stream_config_.rtp.c_name = kCName; 118 stream_config_.rtp.c_name = kCName;
118 stream_config_.rtp.extensions.push_back( 119 stream_config_.rtp.extensions.push_back(
119 RtpExtension(RtpExtension::kAudioLevelUri, kAudioLevelId)); 120 RtpExtension(RtpExtension::kAudioLevelUri, kAudioLevelId));
120 stream_config_.rtp.extensions.push_back( 121 stream_config_.rtp.extensions.push_back(
121 RtpExtension(RtpExtension::kAbsSendTimeUri, kAbsSendTimeId)); 122 RtpExtension(RtpExtension::kAbsSendTimeUri, kAbsSendTimeId));
122 stream_config_.rtp.extensions.push_back(RtpExtension( 123 stream_config_.rtp.extensions.push_back(RtpExtension(
123 RtpExtension::kTransportSequenceNumberUri, kTransportSequenceNumberId)); 124 RtpExtension::kTransportSequenceNumberUri, kTransportSequenceNumberId));
125 stream_config_.send_codec_spec.codec_inst = kOpusCodec;
124 } 126 }
125 127
126 AudioSendStream::Config& config() { return stream_config_; } 128 AudioSendStream::Config& config() { return stream_config_; }
127 rtc::scoped_refptr<AudioState> audio_state() { return audio_state_; } 129 rtc::scoped_refptr<AudioState> audio_state() { return audio_state_; }
128 MockVoEChannelProxy* channel_proxy() { return channel_proxy_; } 130 MockVoEChannelProxy* channel_proxy() { return channel_proxy_; }
129 CongestionController* congestion_controller() { 131 CongestionController* congestion_controller() {
130 return &congestion_controller_; 132 return &congestion_controller_;
131 } 133 }
132 BitrateAllocator* bitrate_allocator() { return &bitrate_allocator_; } 134 BitrateAllocator* bitrate_allocator() { return &bitrate_allocator_; }
133 rtc::TaskQueue* worker_queue() { return &worker_queue_; } 135 rtc::TaskQueue* worker_queue() { return &worker_queue_; }
134 RtcEventLog* event_log() { return &event_log_; } 136 RtcEventLog* event_log() { return &event_log_; }
135 137
138 void SetupMockForSetupSendCodec() {
139 EXPECT_CALL(voice_engine_, SetVADStatus(kChannelId, _, _, _))
140 .WillRepeatedly(Return(0));
141 EXPECT_CALL(voice_engine_, SetFECStatus(kChannelId, _))
142 .WillRepeatedly(Return(0));
143 EXPECT_CALL(voice_engine_, SetSendCodec(kChannelId, _))
144 .WillRepeatedly(Return(0));
145 // Let |GetSendCodec| return -1 for the first time to indicate that no send
146 // codec has been set.
147 EXPECT_CALL(voice_engine_, GetSendCodec(kChannelId, _))
148 .WillOnce(Return(-1));
149 }
150
136 void SetupMockForSendTelephoneEvent() { 151 void SetupMockForSendTelephoneEvent() {
137 EXPECT_TRUE(channel_proxy_); 152 EXPECT_TRUE(channel_proxy_);
138 EXPECT_CALL(*channel_proxy_, 153 EXPECT_CALL(*channel_proxy_,
139 SetSendTelephoneEventPayloadType(kTelephoneEventPayloadType)) 154 SetSendTelephoneEventPayloadType(kTelephoneEventPayloadType))
140 .WillOnce(Return(true)); 155 .WillOnce(Return(true));
141 EXPECT_CALL(*channel_proxy_, 156 EXPECT_CALL(*channel_proxy_,
142 SendTelephoneEventOutband(kTelephoneEventCode, kTelephoneEventDuration)) 157 SendTelephoneEventOutband(kTelephoneEventCode, kTelephoneEventDuration))
143 .WillOnce(Return(true)); 158 .WillOnce(Return(true));
144 } 159 }
145 160
146 void SetupMockForGetStats() { 161 void SetupMockForGetStats() {
147 using testing::DoAll; 162 using testing::DoAll;
148 using testing::SetArgReferee; 163 using testing::SetArgReferee;
149 164
150 std::vector<ReportBlock> report_blocks; 165 std::vector<ReportBlock> report_blocks;
151 webrtc::ReportBlock block = kReportBlock; 166 webrtc::ReportBlock block = kReportBlock;
152 report_blocks.push_back(block); // Has wrong SSRC. 167 report_blocks.push_back(block); // Has wrong SSRC.
153 block.source_SSRC = kSsrc; 168 block.source_SSRC = kSsrc;
154 report_blocks.push_back(block); // Correct block. 169 report_blocks.push_back(block); // Correct block.
155 block.fraction_lost = 0; 170 block.fraction_lost = 0;
156 report_blocks.push_back(block); // Duplicate SSRC, bad fraction_lost. 171 report_blocks.push_back(block); // Duplicate SSRC, bad fraction_lost.
157 172
158 EXPECT_TRUE(channel_proxy_); 173 EXPECT_TRUE(channel_proxy_);
159 EXPECT_CALL(*channel_proxy_, GetRTCPStatistics()) 174 EXPECT_CALL(*channel_proxy_, GetRTCPStatistics())
160 .WillRepeatedly(Return(kCallStats)); 175 .WillRepeatedly(Return(kCallStats));
161 EXPECT_CALL(*channel_proxy_, GetRemoteRTCPReportBlocks()) 176 EXPECT_CALL(*channel_proxy_, GetRemoteRTCPReportBlocks())
162 .WillRepeatedly(Return(report_blocks)); 177 .WillRepeatedly(Return(report_blocks));
163 178
164 EXPECT_CALL(voice_engine_, GetSendCodec(kChannelId, _)) 179 EXPECT_CALL(voice_engine_, GetSendCodec(kChannelId, _))
165 .WillRepeatedly(DoAll(SetArgReferee<1>(kCodecInst), Return(0))); 180 .WillRepeatedly(DoAll(SetArgReferee<1>(kOpusCodec), Return(0)));
166 EXPECT_CALL(voice_engine_, GetSpeechInputLevelFullRange(_)) 181 EXPECT_CALL(voice_engine_, GetSpeechInputLevelFullRange(_))
167 .WillRepeatedly(DoAll(SetArgReferee<0>(kSpeechInputLevel), Return(0))); 182 .WillRepeatedly(DoAll(SetArgReferee<0>(kSpeechInputLevel), Return(0)));
168 EXPECT_CALL(voice_engine_, GetEcMetricsStatus(_)) 183 EXPECT_CALL(voice_engine_, GetEcMetricsStatus(_))
169 .WillRepeatedly(DoAll(SetArgReferee<0>(true), Return(0))); 184 .WillRepeatedly(DoAll(SetArgReferee<0>(true), Return(0)));
170 EXPECT_CALL(voice_engine_, GetEchoMetrics(_, _, _, _)) 185 EXPECT_CALL(voice_engine_, GetEchoMetrics(_, _, _, _))
171 .WillRepeatedly(DoAll(SetArgReferee<0>(kEchoReturnLoss), 186 .WillRepeatedly(DoAll(SetArgReferee<0>(kEchoReturnLoss),
172 SetArgReferee<1>(kEchoReturnLossEnhancement), 187 SetArgReferee<1>(kEchoReturnLossEnhancement),
173 Return(0))); 188 Return(0)));
174 EXPECT_CALL(voice_engine_, GetEcDelayMetrics(_, _, _)) 189 EXPECT_CALL(voice_engine_, GetEcDelayMetrics(_, _, _))
175 .WillRepeatedly(DoAll(SetArgReferee<0>(kEchoDelayMedian), 190 .WillRepeatedly(DoAll(SetArgReferee<0>(kEchoDelayMedian),
(...skipping 18 matching lines...) Expand all
194 }; 209 };
195 } // namespace 210 } // namespace
196 211
197 TEST(AudioSendStreamTest, ConfigToString) { 212 TEST(AudioSendStreamTest, ConfigToString) {
198 AudioSendStream::Config config(nullptr); 213 AudioSendStream::Config config(nullptr);
199 config.rtp.ssrc = kSsrc; 214 config.rtp.ssrc = kSsrc;
200 config.rtp.extensions.push_back( 215 config.rtp.extensions.push_back(
201 RtpExtension(RtpExtension::kAbsSendTimeUri, kAbsSendTimeId)); 216 RtpExtension(RtpExtension::kAbsSendTimeUri, kAbsSendTimeId));
202 config.rtp.c_name = kCName; 217 config.rtp.c_name = kCName;
203 config.voe_channel_id = kChannelId; 218 config.voe_channel_id = kChannelId;
204 config.cng_payload_type = 42; 219 config.send_codec_spec.cng_payload_type = 42;
205 EXPECT_EQ( 220 EXPECT_EQ(
206 "{rtp: {ssrc: 1234, extensions: [{uri: " 221 "{rtp: {ssrc: 1234, extensions: [{uri: "
207 "http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time, id: 3}], " 222 "http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time, id: 3}], "
208 "nack: {rtp_history_ms: 0}, c_name: foo_name}, voe_channel_id: 1, " 223 "nack: {rtp_history_ms: 0}, c_name: foo_name}, voe_channel_id: 1, "
209 "cng_payload_type: 42}", 224 "cng_payload_type: 42}",
210 config.ToString()); 225 config.ToString());
211 } 226 }
212 227
213 TEST(AudioSendStreamTest, ConstructDestruct) { 228 TEST(AudioSendStreamTest, ConstructDestruct) {
214 ConfigHelper helper; 229 ConfigHelper helper;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 helper.congestion_controller(), helper.bitrate_allocator(), 261 helper.congestion_controller(), helper.bitrate_allocator(),
247 helper.event_log()); 262 helper.event_log());
248 helper.SetupMockForGetStats(); 263 helper.SetupMockForGetStats();
249 AudioSendStream::Stats stats = send_stream.GetStats(); 264 AudioSendStream::Stats stats = send_stream.GetStats();
250 EXPECT_EQ(kSsrc, stats.local_ssrc); 265 EXPECT_EQ(kSsrc, stats.local_ssrc);
251 EXPECT_EQ(static_cast<int64_t>(kCallStats.bytesSent), stats.bytes_sent); 266 EXPECT_EQ(static_cast<int64_t>(kCallStats.bytesSent), stats.bytes_sent);
252 EXPECT_EQ(kCallStats.packetsSent, stats.packets_sent); 267 EXPECT_EQ(kCallStats.packetsSent, stats.packets_sent);
253 EXPECT_EQ(static_cast<int32_t>(kReportBlock.cumulative_num_packets_lost), 268 EXPECT_EQ(static_cast<int32_t>(kReportBlock.cumulative_num_packets_lost),
254 stats.packets_lost); 269 stats.packets_lost);
255 EXPECT_EQ(Q8ToFloat(kReportBlock.fraction_lost), stats.fraction_lost); 270 EXPECT_EQ(Q8ToFloat(kReportBlock.fraction_lost), stats.fraction_lost);
256 EXPECT_EQ(std::string(kCodecInst.plname), stats.codec_name); 271 EXPECT_EQ(std::string(kOpusCodec.plname), stats.codec_name);
257 EXPECT_EQ(static_cast<int32_t>(kReportBlock.extended_highest_sequence_number), 272 EXPECT_EQ(static_cast<int32_t>(kReportBlock.extended_highest_sequence_number),
258 stats.ext_seqnum); 273 stats.ext_seqnum);
259 EXPECT_EQ(static_cast<int32_t>(kReportBlock.interarrival_jitter / 274 EXPECT_EQ(static_cast<int32_t>(kReportBlock.interarrival_jitter /
260 (kCodecInst.plfreq / 1000)), 275 (kOpusCodec.plfreq / 1000)),
261 stats.jitter_ms); 276 stats.jitter_ms);
262 EXPECT_EQ(kCallStats.rttMs, stats.rtt_ms); 277 EXPECT_EQ(kCallStats.rttMs, stats.rtt_ms);
263 EXPECT_EQ(static_cast<int32_t>(kSpeechInputLevel), stats.audio_level); 278 EXPECT_EQ(static_cast<int32_t>(kSpeechInputLevel), stats.audio_level);
264 EXPECT_EQ(-1, stats.aec_quality_min); 279 EXPECT_EQ(-1, stats.aec_quality_min);
265 EXPECT_EQ(kEchoDelayMedian, stats.echo_delay_median_ms); 280 EXPECT_EQ(kEchoDelayMedian, stats.echo_delay_median_ms);
266 EXPECT_EQ(kEchoDelayStdDev, stats.echo_delay_std_ms); 281 EXPECT_EQ(kEchoDelayStdDev, stats.echo_delay_std_ms);
267 EXPECT_EQ(kEchoReturnLoss, stats.echo_return_loss); 282 EXPECT_EQ(kEchoReturnLoss, stats.echo_return_loss);
268 EXPECT_EQ(kEchoReturnLossEnhancement, stats.echo_return_loss_enhancement); 283 EXPECT_EQ(kEchoReturnLossEnhancement, stats.echo_return_loss_enhancement);
269 EXPECT_FALSE(stats.typing_noise_detected); 284 EXPECT_FALSE(stats.typing_noise_detected);
270 } 285 }
271 286
272 TEST(AudioSendStreamTest, GetStatsTypingNoiseDetected) { 287 TEST(AudioSendStreamTest, GetStatsTypingNoiseDetected) {
273 ConfigHelper helper; 288 ConfigHelper helper;
274 internal::AudioSendStream send_stream( 289 internal::AudioSendStream send_stream(
275 helper.config(), helper.audio_state(), helper.worker_queue(), 290 helper.config(), helper.audio_state(), helper.worker_queue(),
276 helper.congestion_controller(), helper.bitrate_allocator(), 291 helper.congestion_controller(), helper.bitrate_allocator(),
277 helper.event_log()); 292 helper.event_log());
278 helper.SetupMockForGetStats(); 293 helper.SetupMockForGetStats();
279 EXPECT_FALSE(send_stream.GetStats().typing_noise_detected); 294 EXPECT_FALSE(send_stream.GetStats().typing_noise_detected);
280 295
281 internal::AudioState* internal_audio_state = 296 internal::AudioState* internal_audio_state =
282 static_cast<internal::AudioState*>(helper.audio_state().get()); 297 static_cast<internal::AudioState*>(helper.audio_state().get());
283 VoiceEngineObserver* voe_observer = 298 VoiceEngineObserver* voe_observer =
284 static_cast<VoiceEngineObserver*>(internal_audio_state); 299 static_cast<VoiceEngineObserver*>(internal_audio_state);
285 voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_WARNING); 300 voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_WARNING);
286 EXPECT_TRUE(send_stream.GetStats().typing_noise_detected); 301 EXPECT_TRUE(send_stream.GetStats().typing_noise_detected);
287 voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_OFF_WARNING); 302 voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_OFF_WARNING);
288 EXPECT_FALSE(send_stream.GetStats().typing_noise_detected); 303 EXPECT_FALSE(send_stream.GetStats().typing_noise_detected);
289 } 304 }
305
306 // TODO(minyue): Add tests on logics involved in SetSendCodecs.
307
290 } // namespace test 308 } // namespace test
291 } // namespace webrtc 309 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698