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

Side by Side Diff: webrtc/video/end_to_end_tests.cc

Issue 1487893004: Replace EventWrapper in video/, test/ and call/. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years 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) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 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 #include <algorithm> 10 #include <algorithm>
11 #include <map> 11 #include <map>
12 #include <sstream> 12 #include <sstream>
13 #include <string> 13 #include <string>
14 14
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 16
17 #include "webrtc/base/checks.h" 17 #include "webrtc/base/checks.h"
18 #include "webrtc/base/event.h" 18 #include "webrtc/base/event.h"
19 #include "webrtc/base/scoped_ptr.h" 19 #include "webrtc/base/scoped_ptr.h"
20 #include "webrtc/call.h" 20 #include "webrtc/call.h"
21 #include "webrtc/call/transport_adapter.h" 21 #include "webrtc/call/transport_adapter.h"
22 #include "webrtc/frame_callback.h" 22 #include "webrtc/frame_callback.h"
23 #include "webrtc/modules/rtp_rtcp/source/byte_io.h" 23 #include "webrtc/modules/rtp_rtcp/source/byte_io.h"
24 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" 24 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h"
25 #include "webrtc/modules/video_coding/codecs/vp8/include/vp8.h" 25 #include "webrtc/modules/video_coding/codecs/vp8/include/vp8.h"
26 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h" 26 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h"
27 #include "webrtc/modules/video_coding/include/video_coding_defines.h" 27 #include "webrtc/modules/video_coding/include/video_coding_defines.h"
28 #include "webrtc/system_wrappers/include/critical_section_wrapper.h" 28 #include "webrtc/system_wrappers/include/critical_section_wrapper.h"
29 #include "webrtc/system_wrappers/include/event_wrapper.h" 29 #include "webrtc/system_wrappers/include/event_wrapper.h"
mflodman 2015/12/10 08:11:34 Remove
pbos-webrtc 2015/12/10 11:44:55 Done.
30 #include "webrtc/system_wrappers/include/metrics.h" 30 #include "webrtc/system_wrappers/include/metrics.h"
31 #include "webrtc/system_wrappers/include/sleep.h" 31 #include "webrtc/system_wrappers/include/sleep.h"
32 #include "webrtc/test/call_test.h" 32 #include "webrtc/test/call_test.h"
33 #include "webrtc/test/direct_transport.h" 33 #include "webrtc/test/direct_transport.h"
34 #include "webrtc/test/encoder_settings.h" 34 #include "webrtc/test/encoder_settings.h"
35 #include "webrtc/test/fake_audio_device.h" 35 #include "webrtc/test/fake_audio_device.h"
36 #include "webrtc/test/fake_decoder.h" 36 #include "webrtc/test/fake_decoder.h"
37 #include "webrtc/test/fake_encoder.h" 37 #include "webrtc/test/fake_encoder.h"
38 #include "webrtc/test/frame_generator.h" 38 #include "webrtc/test/frame_generator.h"
39 #include "webrtc/test/frame_generator_capturer.h" 39 #include "webrtc/test/frame_generator_capturer.h"
40 #include "webrtc/test/histogram.h" 40 #include "webrtc/test/histogram.h"
41 #include "webrtc/test/null_transport.h" 41 #include "webrtc/test/null_transport.h"
42 #include "webrtc/test/rtcp_packet_parser.h" 42 #include "webrtc/test/rtcp_packet_parser.h"
43 #include "webrtc/test/rtp_rtcp_observer.h" 43 #include "webrtc/test/rtp_rtcp_observer.h"
44 #include "webrtc/test/testsupport/fileutils.h" 44 #include "webrtc/test/testsupport/fileutils.h"
45 #include "webrtc/test/testsupport/gtest_disable.h" 45 #include "webrtc/test/testsupport/gtest_disable.h"
46 #include "webrtc/test/testsupport/perf_test.h" 46 #include "webrtc/test/testsupport/perf_test.h"
47 #include "webrtc/video_encoder.h" 47 #include "webrtc/video_encoder.h"
48 48
49 namespace webrtc { 49 namespace webrtc {
50 50
51 static const unsigned long kSilenceTimeoutMs = 2000; 51 static const int kSilenceTimeoutMs = 2000;
52 52
53 class EndToEndTest : public test::CallTest { 53 class EndToEndTest : public test::CallTest {
54 public: 54 public:
55 EndToEndTest() {} 55 EndToEndTest() {}
56 56
57 virtual ~EndToEndTest() { 57 virtual ~EndToEndTest() {
58 EXPECT_EQ(nullptr, send_stream_); 58 EXPECT_EQ(nullptr, send_stream_);
59 EXPECT_TRUE(receive_streams_.empty()); 59 EXPECT_TRUE(receive_streams_.empty());
60 } 60 }
61 61
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 TEST_F(EndToEndTest, RendersSingleDelayedFrame) { 117 TEST_F(EndToEndTest, RendersSingleDelayedFrame) {
118 static const int kWidth = 320; 118 static const int kWidth = 320;
119 static const int kHeight = 240; 119 static const int kHeight = 240;
120 // This constant is chosen to be higher than the timeout in the video_render 120 // This constant is chosen to be higher than the timeout in the video_render
121 // module. This makes sure that frames aren't dropped if there are no other 121 // module. This makes sure that frames aren't dropped if there are no other
122 // frames in the queue. 122 // frames in the queue.
123 static const int kDelayRenderCallbackMs = 1000; 123 static const int kDelayRenderCallbackMs = 1000;
124 124
125 class Renderer : public VideoRenderer { 125 class Renderer : public VideoRenderer {
126 public: 126 public:
127 Renderer() : event_(EventWrapper::Create()) {} 127 Renderer() : event_(false, false) {}
128 128
129 void RenderFrame(const VideoFrame& video_frame, 129 void RenderFrame(const VideoFrame& video_frame,
130 int /*time_to_render_ms*/) override { 130 int /*time_to_render_ms*/) override {
131 event_->Set(); 131 event_.Set();
132 } 132 }
133 133
134 bool IsTextureSupported() const override { return false; } 134 bool IsTextureSupported() const override { return false; }
135 135
136 EventTypeWrapper Wait() { return event_->Wait(kDefaultTimeoutMs); } 136 bool Wait() { return event_.Wait(kDefaultTimeoutMs); }
137 137
138 rtc::scoped_ptr<EventWrapper> event_; 138 rtc::Event event_;
139 } renderer; 139 } renderer;
140 140
141 class TestFrameCallback : public I420FrameCallback { 141 class TestFrameCallback : public I420FrameCallback {
142 public: 142 public:
143 TestFrameCallback() : event_(EventWrapper::Create()) {} 143 TestFrameCallback() : event_(false, false) {}
144 144
145 EventTypeWrapper Wait() { return event_->Wait(kDefaultTimeoutMs); } 145 bool Wait() { return event_.Wait(kDefaultTimeoutMs); }
146 146
147 private: 147 private:
148 void FrameCallback(VideoFrame* frame) override { 148 void FrameCallback(VideoFrame* frame) override {
149 SleepMs(kDelayRenderCallbackMs); 149 SleepMs(kDelayRenderCallbackMs);
150 event_->Set(); 150 event_.Set();
151 } 151 }
152 152
153 rtc::scoped_ptr<EventWrapper> event_; 153 rtc::Event event_;
154 }; 154 };
155 155
156 CreateCalls(Call::Config(), Call::Config()); 156 CreateCalls(Call::Config(), Call::Config());
157 157
158 test::DirectTransport sender_transport(sender_call_.get()); 158 test::DirectTransport sender_transport(sender_call_.get());
159 test::DirectTransport receiver_transport(receiver_call_.get()); 159 test::DirectTransport receiver_transport(receiver_call_.get());
160 sender_transport.SetReceiver(receiver_call_->Receiver()); 160 sender_transport.SetReceiver(receiver_call_->Receiver());
161 receiver_transport.SetReceiver(sender_call_->Receiver()); 161 receiver_transport.SetReceiver(sender_call_->Receiver());
162 162
163 CreateSendConfig(1, &sender_transport); 163 CreateSendConfig(1, &sender_transport);
164 CreateMatchingReceiveConfigs(&receiver_transport); 164 CreateMatchingReceiveConfigs(&receiver_transport);
165 165
166 TestFrameCallback pre_render_callback; 166 TestFrameCallback pre_render_callback;
167 receive_configs_[0].pre_render_callback = &pre_render_callback; 167 receive_configs_[0].pre_render_callback = &pre_render_callback;
168 receive_configs_[0].renderer = &renderer; 168 receive_configs_[0].renderer = &renderer;
169 169
170 CreateStreams(); 170 CreateStreams();
171 Start(); 171 Start();
172 172
173 // Create frames that are smaller than the send width/height, this is done to 173 // Create frames that are smaller than the send width/height, this is done to
174 // check that the callbacks are done after processing video. 174 // check that the callbacks are done after processing video.
175 rtc::scoped_ptr<test::FrameGenerator> frame_generator( 175 rtc::scoped_ptr<test::FrameGenerator> frame_generator(
176 test::FrameGenerator::CreateChromaGenerator(kWidth, kHeight)); 176 test::FrameGenerator::CreateChromaGenerator(kWidth, kHeight));
177 send_stream_->Input()->IncomingCapturedFrame(*frame_generator->NextFrame()); 177 send_stream_->Input()->IncomingCapturedFrame(*frame_generator->NextFrame());
178 EXPECT_EQ(kEventSignaled, pre_render_callback.Wait()) 178 EXPECT_TRUE(pre_render_callback.Wait())
179 << "Timed out while waiting for pre-render callback."; 179 << "Timed out while waiting for pre-render callback.";
180 EXPECT_EQ(kEventSignaled, renderer.Wait()) 180 EXPECT_TRUE(renderer.Wait())
181 << "Timed out while waiting for the frame to render."; 181 << "Timed out while waiting for the frame to render.";
182 182
183 Stop(); 183 Stop();
184 184
185 sender_transport.StopSending(); 185 sender_transport.StopSending();
186 receiver_transport.StopSending(); 186 receiver_transport.StopSending();
187 187
188 DestroyStreams(); 188 DestroyStreams();
189 } 189 }
190 190
191 TEST_F(EndToEndTest, TransmitsFirstFrame) { 191 TEST_F(EndToEndTest, TransmitsFirstFrame) {
192 class Renderer : public VideoRenderer { 192 class Renderer : public VideoRenderer {
193 public: 193 public:
194 Renderer() : event_(EventWrapper::Create()) {} 194 Renderer() : event_(false, false) {}
195 195
196 void RenderFrame(const VideoFrame& video_frame, 196 void RenderFrame(const VideoFrame& video_frame,
197 int /*time_to_render_ms*/) override { 197 int /*time_to_render_ms*/) override {
198 event_->Set(); 198 event_.Set();
199 } 199 }
200 bool IsTextureSupported() const override { return false; } 200 bool IsTextureSupported() const override { return false; }
201 201
202 EventTypeWrapper Wait() { return event_->Wait(kDefaultTimeoutMs); } 202 bool Wait() { return event_.Wait(kDefaultTimeoutMs); }
203 203
204 rtc::scoped_ptr<EventWrapper> event_; 204 rtc::Event event_;
205 } renderer; 205 } renderer;
206 206
207 CreateCalls(Call::Config(), Call::Config()); 207 CreateCalls(Call::Config(), Call::Config());
208 208
209 test::DirectTransport sender_transport(sender_call_.get()); 209 test::DirectTransport sender_transport(sender_call_.get());
210 test::DirectTransport receiver_transport(receiver_call_.get()); 210 test::DirectTransport receiver_transport(receiver_call_.get());
211 sender_transport.SetReceiver(receiver_call_->Receiver()); 211 sender_transport.SetReceiver(receiver_call_->Receiver());
212 receiver_transport.SetReceiver(sender_call_->Receiver()); 212 receiver_transport.SetReceiver(sender_call_->Receiver());
213 213
214 CreateSendConfig(1, &sender_transport); 214 CreateSendConfig(1, &sender_transport);
215 CreateMatchingReceiveConfigs(&receiver_transport); 215 CreateMatchingReceiveConfigs(&receiver_transport);
216 receive_configs_[0].renderer = &renderer; 216 receive_configs_[0].renderer = &renderer;
217 217
218 CreateStreams(); 218 CreateStreams();
219 Start(); 219 Start();
220 220
221 rtc::scoped_ptr<test::FrameGenerator> frame_generator( 221 rtc::scoped_ptr<test::FrameGenerator> frame_generator(
222 test::FrameGenerator::CreateChromaGenerator( 222 test::FrameGenerator::CreateChromaGenerator(
223 encoder_config_.streams[0].width, encoder_config_.streams[0].height)); 223 encoder_config_.streams[0].width, encoder_config_.streams[0].height));
224 send_stream_->Input()->IncomingCapturedFrame(*frame_generator->NextFrame()); 224 send_stream_->Input()->IncomingCapturedFrame(*frame_generator->NextFrame());
225 225
226 EXPECT_EQ(kEventSignaled, renderer.Wait()) 226 EXPECT_TRUE(renderer.Wait())
227 << "Timed out while waiting for the frame to render."; 227 << "Timed out while waiting for the frame to render.";
228 228
229 Stop(); 229 Stop();
230 230
231 sender_transport.StopSending(); 231 sender_transport.StopSending();
232 receiver_transport.StopSending(); 232 receiver_transport.StopSending();
233 233
234 DestroyStreams(); 234 DestroyStreams();
235 } 235 }
236 236
237 TEST_F(EndToEndTest, SendsAndReceivesVP9) { 237 TEST_F(EndToEndTest, SendsAndReceivesVP9) {
238 class VP9Observer : public test::EndToEndTest, public VideoRenderer { 238 class VP9Observer : public test::EndToEndTest, public VideoRenderer {
239 public: 239 public:
240 VP9Observer() 240 VP9Observer()
241 : EndToEndTest(2 * kDefaultTimeoutMs), 241 : EndToEndTest(2 * kDefaultTimeoutMs),
242 encoder_(VideoEncoder::Create(VideoEncoder::kVp9)), 242 encoder_(VideoEncoder::Create(VideoEncoder::kVp9)),
243 decoder_(VP9Decoder::Create()), 243 decoder_(VP9Decoder::Create()),
244 frame_counter_(0) {} 244 frame_counter_(0) {}
245 245
246 void PerformTest() override { 246 void PerformTest() override {
247 EXPECT_EQ(kEventSignaled, Wait()) 247 EXPECT_TRUE(Wait())
248 << "Timed out while waiting for enough frames to be decoded."; 248 << "Timed out while waiting for enough frames to be decoded.";
249 } 249 }
250 250
251 void ModifyConfigs(VideoSendStream::Config* send_config, 251 void ModifyConfigs(VideoSendStream::Config* send_config,
252 std::vector<VideoReceiveStream::Config>* receive_configs, 252 std::vector<VideoReceiveStream::Config>* receive_configs,
253 VideoEncoderConfig* encoder_config) override { 253 VideoEncoderConfig* encoder_config) override {
254 send_config->encoder_settings.encoder = encoder_.get(); 254 send_config->encoder_settings.encoder = encoder_.get();
255 send_config->encoder_settings.payload_name = "VP9"; 255 send_config->encoder_settings.payload_name = "VP9";
256 send_config->encoder_settings.payload_type = 124; 256 send_config->encoder_settings.payload_type = 124;
257 encoder_config->streams[0].min_bitrate_bps = 50000; 257 encoder_config->streams[0].min_bitrate_bps = 50000;
258 encoder_config->streams[0].target_bitrate_bps = 258 encoder_config->streams[0].target_bitrate_bps =
259 encoder_config->streams[0].max_bitrate_bps = 2000000; 259 encoder_config->streams[0].max_bitrate_bps = 2000000;
260 260
261 (*receive_configs)[0].renderer = this; 261 (*receive_configs)[0].renderer = this;
262 (*receive_configs)[0].decoders.resize(1); 262 (*receive_configs)[0].decoders.resize(1);
263 (*receive_configs)[0].decoders[0].payload_type = 263 (*receive_configs)[0].decoders[0].payload_type =
264 send_config->encoder_settings.payload_type; 264 send_config->encoder_settings.payload_type;
265 (*receive_configs)[0].decoders[0].payload_name = 265 (*receive_configs)[0].decoders[0].payload_name =
266 send_config->encoder_settings.payload_name; 266 send_config->encoder_settings.payload_name;
267 (*receive_configs)[0].decoders[0].decoder = decoder_.get(); 267 (*receive_configs)[0].decoders[0].decoder = decoder_.get();
268 } 268 }
269 269
270 void RenderFrame(const VideoFrame& video_frame, 270 void RenderFrame(const VideoFrame& video_frame,
271 int time_to_render_ms) override { 271 int time_to_render_ms) override {
272 const int kRequiredFrames = 500; 272 const int kRequiredFrames = 500;
273 if (++frame_counter_ == kRequiredFrames) 273 if (++frame_counter_ == kRequiredFrames)
274 observation_complete_->Set(); 274 observation_complete_.Set();
275 } 275 }
276 276
277 bool IsTextureSupported() const override { return false; } 277 bool IsTextureSupported() const override { return false; }
278 278
279 private: 279 private:
280 rtc::scoped_ptr<webrtc::VideoEncoder> encoder_; 280 rtc::scoped_ptr<webrtc::VideoEncoder> encoder_;
281 rtc::scoped_ptr<webrtc::VideoDecoder> decoder_; 281 rtc::scoped_ptr<webrtc::VideoDecoder> decoder_;
282 int frame_counter_; 282 int frame_counter_;
283 } test; 283 } test;
284 284
285 RunBaseTest(&test, FakeNetworkPipe::Config()); 285 RunBaseTest(&test, FakeNetworkPipe::Config());
286 } 286 }
287 287
288 TEST_F(EndToEndTest, SendsAndReceivesH264) { 288 TEST_F(EndToEndTest, SendsAndReceivesH264) {
289 class H264Observer : public test::EndToEndTest, public VideoRenderer { 289 class H264Observer : public test::EndToEndTest, public VideoRenderer {
290 public: 290 public:
291 H264Observer() 291 H264Observer()
292 : EndToEndTest(2 * kDefaultTimeoutMs), 292 : EndToEndTest(2 * kDefaultTimeoutMs),
293 fake_encoder_(Clock::GetRealTimeClock()), 293 fake_encoder_(Clock::GetRealTimeClock()),
294 frame_counter_(0) {} 294 frame_counter_(0) {}
295 295
296 void PerformTest() override { 296 void PerformTest() override {
297 EXPECT_EQ(kEventSignaled, Wait()) 297 EXPECT_TRUE(Wait())
298 << "Timed out while waiting for enough frames to be decoded."; 298 << "Timed out while waiting for enough frames to be decoded.";
299 } 299 }
300 300
301 void ModifyConfigs(VideoSendStream::Config* send_config, 301 void ModifyConfigs(VideoSendStream::Config* send_config,
302 std::vector<VideoReceiveStream::Config>* receive_configs, 302 std::vector<VideoReceiveStream::Config>* receive_configs,
303 VideoEncoderConfig* encoder_config) override { 303 VideoEncoderConfig* encoder_config) override {
304 send_config->rtp.nack.rtp_history_ms = 304 send_config->rtp.nack.rtp_history_ms =
305 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 305 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
306 send_config->encoder_settings.encoder = &fake_encoder_; 306 send_config->encoder_settings.encoder = &fake_encoder_;
307 send_config->encoder_settings.payload_name = "H264"; 307 send_config->encoder_settings.payload_name = "H264";
308 send_config->encoder_settings.payload_type = kFakeSendPayloadType; 308 send_config->encoder_settings.payload_type = kFakeSendPayloadType;
309 encoder_config->streams[0].min_bitrate_bps = 50000; 309 encoder_config->streams[0].min_bitrate_bps = 50000;
310 encoder_config->streams[0].target_bitrate_bps = 310 encoder_config->streams[0].target_bitrate_bps =
311 encoder_config->streams[0].max_bitrate_bps = 2000000; 311 encoder_config->streams[0].max_bitrate_bps = 2000000;
312 312
313 (*receive_configs)[0].renderer = this; 313 (*receive_configs)[0].renderer = this;
314 (*receive_configs)[0].decoders.resize(1); 314 (*receive_configs)[0].decoders.resize(1);
315 (*receive_configs)[0].decoders[0].payload_type = 315 (*receive_configs)[0].decoders[0].payload_type =
316 send_config->encoder_settings.payload_type; 316 send_config->encoder_settings.payload_type;
317 (*receive_configs)[0].decoders[0].payload_name = 317 (*receive_configs)[0].decoders[0].payload_name =
318 send_config->encoder_settings.payload_name; 318 send_config->encoder_settings.payload_name;
319 (*receive_configs)[0].decoders[0].decoder = &fake_decoder_; 319 (*receive_configs)[0].decoders[0].decoder = &fake_decoder_;
320 } 320 }
321 321
322 void RenderFrame(const VideoFrame& video_frame, 322 void RenderFrame(const VideoFrame& video_frame,
323 int time_to_render_ms) override { 323 int time_to_render_ms) override {
324 const int kRequiredFrames = 500; 324 const int kRequiredFrames = 500;
325 if (++frame_counter_ == kRequiredFrames) 325 if (++frame_counter_ == kRequiredFrames)
326 observation_complete_->Set(); 326 observation_complete_.Set();
327 } 327 }
328 328
329 bool IsTextureSupported() const override { return false; } 329 bool IsTextureSupported() const override { return false; }
330 330
331 private: 331 private:
332 test::FakeH264Decoder fake_decoder_; 332 test::FakeH264Decoder fake_decoder_;
333 test::FakeH264Encoder fake_encoder_; 333 test::FakeH264Encoder fake_encoder_;
334 int frame_counter_; 334 int frame_counter_;
335 } test; 335 } test;
336 336
337 RunBaseTest(&test, FakeNetworkPipe::Config()); 337 RunBaseTest(&test, FakeNetworkPipe::Config());
338 } 338 }
339 339
340 TEST_F(EndToEndTest, ReceiverUsesLocalSsrc) { 340 TEST_F(EndToEndTest, ReceiverUsesLocalSsrc) {
341 class SyncRtcpObserver : public test::EndToEndTest { 341 class SyncRtcpObserver : public test::EndToEndTest {
342 public: 342 public:
343 SyncRtcpObserver() : EndToEndTest(kDefaultTimeoutMs) {} 343 SyncRtcpObserver() : EndToEndTest(kDefaultTimeoutMs) {}
344 344
345 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { 345 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override {
346 RTCPUtility::RTCPParserV2 parser(packet, length, true); 346 RTCPUtility::RTCPParserV2 parser(packet, length, true);
347 EXPECT_TRUE(parser.IsValid()); 347 EXPECT_TRUE(parser.IsValid());
348 uint32_t ssrc = 0; 348 uint32_t ssrc = 0;
349 ssrc |= static_cast<uint32_t>(packet[4]) << 24; 349 ssrc |= static_cast<uint32_t>(packet[4]) << 24;
350 ssrc |= static_cast<uint32_t>(packet[5]) << 16; 350 ssrc |= static_cast<uint32_t>(packet[5]) << 16;
351 ssrc |= static_cast<uint32_t>(packet[6]) << 8; 351 ssrc |= static_cast<uint32_t>(packet[6]) << 8;
352 ssrc |= static_cast<uint32_t>(packet[7]) << 0; 352 ssrc |= static_cast<uint32_t>(packet[7]) << 0;
353 EXPECT_EQ(kReceiverLocalSsrc, ssrc); 353 EXPECT_EQ(kReceiverLocalSsrc, ssrc);
354 observation_complete_->Set(); 354 observation_complete_.Set();
355 355
356 return SEND_PACKET; 356 return SEND_PACKET;
357 } 357 }
358 358
359 void PerformTest() override { 359 void PerformTest() override {
360 EXPECT_EQ(kEventSignaled, Wait()) 360 EXPECT_TRUE(Wait())
361 << "Timed out while waiting for a receiver RTCP packet to be sent."; 361 << "Timed out while waiting for a receiver RTCP packet to be sent.";
362 } 362 }
363 } test; 363 } test;
364 364
365 RunBaseTest(&test, FakeNetworkPipe::Config()); 365 RunBaseTest(&test, FakeNetworkPipe::Config());
366 } 366 }
367 367
368 TEST_F(EndToEndTest, ReceivesAndRetransmitsNack) { 368 TEST_F(EndToEndTest, ReceivesAndRetransmitsNack) {
369 static const int kNumberOfNacksToObserve = 2; 369 static const int kNumberOfNacksToObserve = 2;
370 static const int kLossBurstSize = 2; 370 static const int kLossBurstSize = 2;
(...skipping 12 matching lines...) Expand all
383 rtc::CritScope lock(&crit_); 383 rtc::CritScope lock(&crit_);
384 RTPHeader header; 384 RTPHeader header;
385 EXPECT_TRUE(rtp_parser_->Parse(packet, length, &header)); 385 EXPECT_TRUE(rtp_parser_->Parse(packet, length, &header));
386 386
387 // Never drop retransmitted packets. 387 // Never drop retransmitted packets.
388 if (dropped_packets_.find(header.sequenceNumber) != 388 if (dropped_packets_.find(header.sequenceNumber) !=
389 dropped_packets_.end()) { 389 dropped_packets_.end()) {
390 retransmitted_packets_.insert(header.sequenceNumber); 390 retransmitted_packets_.insert(header.sequenceNumber);
391 if (nacks_left_ <= 0 && 391 if (nacks_left_ <= 0 &&
392 retransmitted_packets_.size() == dropped_packets_.size()) { 392 retransmitted_packets_.size() == dropped_packets_.size()) {
393 observation_complete_->Set(); 393 observation_complete_.Set();
394 } 394 }
395 return SEND_PACKET; 395 return SEND_PACKET;
396 } 396 }
397 397
398 ++sent_rtp_packets_; 398 ++sent_rtp_packets_;
399 399
400 // Enough NACKs received, stop dropping packets. 400 // Enough NACKs received, stop dropping packets.
401 if (nacks_left_ <= 0) 401 if (nacks_left_ <= 0)
402 return SEND_PACKET; 402 return SEND_PACKET;
403 403
(...skipping 28 matching lines...) Expand all
432 } 432 }
433 433
434 void ModifyConfigs(VideoSendStream::Config* send_config, 434 void ModifyConfigs(VideoSendStream::Config* send_config,
435 std::vector<VideoReceiveStream::Config>* receive_configs, 435 std::vector<VideoReceiveStream::Config>* receive_configs,
436 VideoEncoderConfig* encoder_config) override { 436 VideoEncoderConfig* encoder_config) override {
437 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 437 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
438 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 438 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
439 } 439 }
440 440
441 void PerformTest() override { 441 void PerformTest() override {
442 EXPECT_EQ(kEventSignaled, Wait()) 442 EXPECT_TRUE(Wait())
443 << "Timed out waiting for packets to be NACKed, retransmitted and " 443 << "Timed out waiting for packets to be NACKed, retransmitted and "
444 "rendered."; 444 "rendered.";
445 } 445 }
446 446
447 rtc::CriticalSection crit_; 447 rtc::CriticalSection crit_;
448 rtc::scoped_ptr<RtpHeaderParser> rtp_parser_; 448 rtc::scoped_ptr<RtpHeaderParser> rtp_parser_;
449 std::set<uint16_t> dropped_packets_; 449 std::set<uint16_t> dropped_packets_;
450 std::set<uint16_t> retransmitted_packets_; 450 std::set<uint16_t> retransmitted_packets_;
451 uint64_t sent_rtp_packets_; 451 uint64_t sent_rtp_packets_;
452 int packets_left_to_drop_; 452 int packets_left_to_drop_;
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 510
511 return SEND_PACKET; 511 return SEND_PACKET;
512 } 512 }
513 513
514 void RenderFrame(const VideoFrame& video_frame, 514 void RenderFrame(const VideoFrame& video_frame,
515 int time_to_render_ms) override { 515 int time_to_render_ms) override {
516 rtc::CritScope lock(&crit_); 516 rtc::CritScope lock(&crit_);
517 // Rendering frame with timestamp of packet that was dropped -> FEC 517 // Rendering frame with timestamp of packet that was dropped -> FEC
518 // protection worked. 518 // protection worked.
519 if (protected_timestamps_.count(video_frame.timestamp()) != 0) 519 if (protected_timestamps_.count(video_frame.timestamp()) != 0)
520 observation_complete_->Set(); 520 observation_complete_.Set();
521 } 521 }
522 522
523 bool IsTextureSupported() const override { return false; } 523 bool IsTextureSupported() const override { return false; }
524 524
525 enum { 525 enum {
526 kFirstPacket, 526 kFirstPacket,
527 kDropEveryOtherPacketUntilFec, 527 kDropEveryOtherPacketUntilFec,
528 kDropNextMediaPacket, 528 kDropNextMediaPacket,
529 } state_; 529 } state_;
530 530
531 void ModifyConfigs(VideoSendStream::Config* send_config, 531 void ModifyConfigs(VideoSendStream::Config* send_config,
532 std::vector<VideoReceiveStream::Config>* receive_configs, 532 std::vector<VideoReceiveStream::Config>* receive_configs,
533 VideoEncoderConfig* encoder_config) override { 533 VideoEncoderConfig* encoder_config) override {
534 // TODO(pbos): Run this test with combined NACK/FEC enabled as well. 534 // TODO(pbos): Run this test with combined NACK/FEC enabled as well.
535 // int rtp_history_ms = 1000; 535 // int rtp_history_ms = 1000;
536 // (*receive_configs)[0].rtp.nack.rtp_history_ms = rtp_history_ms; 536 // (*receive_configs)[0].rtp.nack.rtp_history_ms = rtp_history_ms;
537 // send_config->rtp.nack.rtp_history_ms = rtp_history_ms; 537 // send_config->rtp.nack.rtp_history_ms = rtp_history_ms;
538 send_config->rtp.fec.red_payload_type = kRedPayloadType; 538 send_config->rtp.fec.red_payload_type = kRedPayloadType;
539 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; 539 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType;
540 540
541 (*receive_configs)[0].rtp.fec.red_payload_type = kRedPayloadType; 541 (*receive_configs)[0].rtp.fec.red_payload_type = kRedPayloadType;
542 (*receive_configs)[0].rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; 542 (*receive_configs)[0].rtp.fec.ulpfec_payload_type = kUlpfecPayloadType;
543 (*receive_configs)[0].renderer = this; 543 (*receive_configs)[0].renderer = this;
544 } 544 }
545 545
546 void PerformTest() override { 546 void PerformTest() override {
547 EXPECT_EQ(kEventSignaled, Wait()) 547 EXPECT_TRUE(Wait())
548 << "Timed out waiting for dropped frames frames to be rendered."; 548 << "Timed out waiting for dropped frames frames to be rendered.";
549 } 549 }
550 550
551 rtc::CriticalSection crit_; 551 rtc::CriticalSection crit_;
552 std::set<uint32_t> protected_sequence_numbers_ GUARDED_BY(crit_); 552 std::set<uint32_t> protected_sequence_numbers_ GUARDED_BY(crit_);
553 std::set<uint32_t> protected_timestamps_ GUARDED_BY(crit_); 553 std::set<uint32_t> protected_timestamps_ GUARDED_BY(crit_);
554 } test; 554 } test;
555 555
556 RunBaseTest(&test, FakeNetworkPipe::Config()); 556 RunBaseTest(&test, FakeNetworkPipe::Config());
557 } 557 }
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { 622 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override {
623 rtc::CritScope lock_(&crit_); 623 rtc::CritScope lock_(&crit_);
624 if (state_ == kVerifyFecPacketNotInNackList) { 624 if (state_ == kVerifyFecPacketNotInNackList) {
625 test::RtcpPacketParser rtcp_parser; 625 test::RtcpPacketParser rtcp_parser;
626 rtcp_parser.Parse(packet, length); 626 rtcp_parser.Parse(packet, length);
627 std::vector<uint16_t> nacks = rtcp_parser.nack_item()->last_nack_list(); 627 std::vector<uint16_t> nacks = rtcp_parser.nack_item()->last_nack_list();
628 if (!nacks.empty() && 628 if (!nacks.empty() &&
629 IsNewerSequenceNumber(nacks.back(), fec_sequence_number_)) { 629 IsNewerSequenceNumber(nacks.back(), fec_sequence_number_)) {
630 EXPECT_TRUE(std::find( 630 EXPECT_TRUE(std::find(
631 nacks.begin(), nacks.end(), fec_sequence_number_) == nacks.end()); 631 nacks.begin(), nacks.end(), fec_sequence_number_) == nacks.end());
632 observation_complete_->Set(); 632 observation_complete_.Set();
633 } 633 }
634 } 634 }
635 return SEND_PACKET; 635 return SEND_PACKET;
636 } 636 }
637 637
638 // TODO(holmer): Investigate why we don't send FEC packets when the bitrate 638 // TODO(holmer): Investigate why we don't send FEC packets when the bitrate
639 // is 10 kbps. 639 // is 10 kbps.
640 Call::Config GetSenderCallConfig() override { 640 Call::Config GetSenderCallConfig() override {
641 Call::Config config; 641 Call::Config config;
642 const int kMinBitrateBps = 30000; 642 const int kMinBitrateBps = 30000;
643 config.bitrate_config.min_bitrate_bps = kMinBitrateBps; 643 config.bitrate_config.min_bitrate_bps = kMinBitrateBps;
644 return config; 644 return config;
645 } 645 }
646 646
647 void ModifyConfigs(VideoSendStream::Config* send_config, 647 void ModifyConfigs(VideoSendStream::Config* send_config,
648 std::vector<VideoReceiveStream::Config>* receive_configs, 648 std::vector<VideoReceiveStream::Config>* receive_configs,
649 VideoEncoderConfig* encoder_config) override { 649 VideoEncoderConfig* encoder_config) override {
650 // Configure hybrid NACK/FEC. 650 // Configure hybrid NACK/FEC.
651 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 651 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
652 send_config->rtp.fec.red_payload_type = kRedPayloadType; 652 send_config->rtp.fec.red_payload_type = kRedPayloadType;
653 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; 653 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType;
654 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 654 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
655 (*receive_configs)[0].rtp.fec.red_payload_type = kRedPayloadType; 655 (*receive_configs)[0].rtp.fec.red_payload_type = kRedPayloadType;
656 (*receive_configs)[0].rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; 656 (*receive_configs)[0].rtp.fec.ulpfec_payload_type = kUlpfecPayloadType;
657 } 657 }
658 658
659 void PerformTest() override { 659 void PerformTest() override {
660 EXPECT_EQ(kEventSignaled, Wait()) 660 EXPECT_TRUE(Wait())
661 << "Timed out while waiting for FEC packets to be received."; 661 << "Timed out while waiting for FEC packets to be received.";
662 } 662 }
663 663
664 enum { 664 enum {
665 kFirstPacket, 665 kFirstPacket,
666 kDropEveryOtherPacketUntilFec, 666 kDropEveryOtherPacketUntilFec,
667 kDropAllMediaPacketsUntilFec, 667 kDropAllMediaPacketsUntilFec,
668 kVerifyFecPacketNotInNackList, 668 kVerifyFecPacketNotInNackList,
669 } state_; 669 } state_;
670 670
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 return DROP_PACKET; 732 return DROP_PACKET;
733 } 733 }
734 734
735 return SEND_PACKET; 735 return SEND_PACKET;
736 } 736 }
737 737
738 void FrameCallback(VideoFrame* frame) override { 738 void FrameCallback(VideoFrame* frame) override {
739 rtc::CritScope lock(&crit_); 739 rtc::CritScope lock(&crit_);
740 if (frame->timestamp() == retransmitted_timestamp_) { 740 if (frame->timestamp() == retransmitted_timestamp_) {
741 EXPECT_TRUE(frame_retransmitted_); 741 EXPECT_TRUE(frame_retransmitted_);
742 observation_complete_->Set(); 742 observation_complete_.Set();
743 } 743 }
744 } 744 }
745 745
746 void ModifyConfigs(VideoSendStream::Config* send_config, 746 void ModifyConfigs(VideoSendStream::Config* send_config,
747 std::vector<VideoReceiveStream::Config>* receive_configs, 747 std::vector<VideoReceiveStream::Config>* receive_configs,
748 VideoEncoderConfig* encoder_config) override { 748 VideoEncoderConfig* encoder_config) override {
749 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 749 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
750 (*receive_configs)[0].pre_render_callback = this; 750 (*receive_configs)[0].pre_render_callback = this;
751 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 751 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
752 752
753 if (payload_type_ == kRedPayloadType) { 753 if (payload_type_ == kRedPayloadType) {
754 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; 754 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType;
755 send_config->rtp.fec.red_payload_type = kRedPayloadType; 755 send_config->rtp.fec.red_payload_type = kRedPayloadType;
756 (*receive_configs)[0].rtp.fec.red_payload_type = kRedPayloadType; 756 (*receive_configs)[0].rtp.fec.red_payload_type = kRedPayloadType;
757 (*receive_configs)[0].rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; 757 (*receive_configs)[0].rtp.fec.ulpfec_payload_type = kUlpfecPayloadType;
758 } 758 }
759 759
760 if (retransmission_ssrc_ == kSendRtxSsrcs[0]) { 760 if (retransmission_ssrc_ == kSendRtxSsrcs[0]) {
761 send_config->rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[0]); 761 send_config->rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[0]);
762 send_config->rtp.rtx.payload_type = kSendRtxPayloadType; 762 send_config->rtp.rtx.payload_type = kSendRtxPayloadType;
763 (*receive_configs)[0].rtp.rtx[kFakeSendPayloadType].ssrc = 763 (*receive_configs)[0].rtp.rtx[kFakeSendPayloadType].ssrc =
764 kSendRtxSsrcs[0]; 764 kSendRtxSsrcs[0];
765 (*receive_configs)[0].rtp.rtx[kFakeSendPayloadType].payload_type = 765 (*receive_configs)[0].rtp.rtx[kFakeSendPayloadType].payload_type =
766 kSendRtxPayloadType; 766 kSendRtxPayloadType;
767 } 767 }
768 } 768 }
769 769
770 void PerformTest() override { 770 void PerformTest() override {
771 EXPECT_EQ(kEventSignaled, Wait()) 771 EXPECT_TRUE(Wait())
772 << "Timed out while waiting for retransmission to render."; 772 << "Timed out while waiting for retransmission to render.";
773 } 773 }
774 774
775 int GetPayloadType(bool use_rtx, bool use_red) { 775 int GetPayloadType(bool use_rtx, bool use_red) {
776 return use_rtx ? kSendRtxPayloadType 776 return use_rtx ? kSendRtxPayloadType
777 : (use_red ? kRedPayloadType : kFakeSendPayloadType); 777 : (use_red ? kRedPayloadType : kFakeSendPayloadType);
778 } 778 }
779 779
780 rtc::CriticalSection crit_; 780 rtc::CriticalSection crit_;
781 const int payload_type_; 781 const int payload_type_;
(...skipping 23 matching lines...) Expand all
805 TEST_F(EndToEndTest, DecodesRetransmittedFrameByRedOverRtx) { 805 TEST_F(EndToEndTest, DecodesRetransmittedFrameByRedOverRtx) {
806 DecodesRetransmittedFrame(true, true); 806 DecodesRetransmittedFrame(true, true);
807 } 807 }
808 808
809 TEST_F(EndToEndTest, UsesFrameCallbacks) { 809 TEST_F(EndToEndTest, UsesFrameCallbacks) {
810 static const int kWidth = 320; 810 static const int kWidth = 320;
811 static const int kHeight = 240; 811 static const int kHeight = 240;
812 812
813 class Renderer : public VideoRenderer { 813 class Renderer : public VideoRenderer {
814 public: 814 public:
815 Renderer() : event_(EventWrapper::Create()) {} 815 Renderer() : event_(false, false) {}
816 816
817 void RenderFrame(const VideoFrame& video_frame, 817 void RenderFrame(const VideoFrame& video_frame,
818 int /*time_to_render_ms*/) override { 818 int /*time_to_render_ms*/) override {
819 EXPECT_EQ(0, *video_frame.buffer(kYPlane)) 819 EXPECT_EQ(0, *video_frame.buffer(kYPlane))
820 << "Rendered frame should have zero luma which is applied by the " 820 << "Rendered frame should have zero luma which is applied by the "
821 "pre-render callback."; 821 "pre-render callback.";
822 event_->Set(); 822 event_.Set();
823 } 823 }
824 824
825 bool IsTextureSupported() const override { return false; } 825 bool IsTextureSupported() const override { return false; }
826 826
827 EventTypeWrapper Wait() { return event_->Wait(kDefaultTimeoutMs); } 827 bool Wait() { return event_.Wait(kDefaultTimeoutMs); }
828 rtc::scoped_ptr<EventWrapper> event_; 828 rtc::Event event_;
829 } renderer; 829 } renderer;
830 830
831 class TestFrameCallback : public I420FrameCallback { 831 class TestFrameCallback : public I420FrameCallback {
832 public: 832 public:
833 TestFrameCallback(int expected_luma_byte, int next_luma_byte) 833 TestFrameCallback(int expected_luma_byte, int next_luma_byte)
834 : event_(EventWrapper::Create()), 834 : event_(false, false),
835 expected_luma_byte_(expected_luma_byte), 835 expected_luma_byte_(expected_luma_byte),
836 next_luma_byte_(next_luma_byte) {} 836 next_luma_byte_(next_luma_byte) {}
837 837
838 EventTypeWrapper Wait() { return event_->Wait(kDefaultTimeoutMs); } 838 bool Wait() { return event_.Wait(kDefaultTimeoutMs); }
839 839
840 private: 840 private:
841 virtual void FrameCallback(VideoFrame* frame) { 841 virtual void FrameCallback(VideoFrame* frame) {
842 EXPECT_EQ(kWidth, frame->width()) 842 EXPECT_EQ(kWidth, frame->width())
843 << "Width not as expected, callback done before resize?"; 843 << "Width not as expected, callback done before resize?";
844 EXPECT_EQ(kHeight, frame->height()) 844 EXPECT_EQ(kHeight, frame->height())
845 << "Height not as expected, callback done before resize?"; 845 << "Height not as expected, callback done before resize?";
846 846
847 // Previous luma specified, observed luma should be fairly close. 847 // Previous luma specified, observed luma should be fairly close.
848 if (expected_luma_byte_ != -1) { 848 if (expected_luma_byte_ != -1) {
849 EXPECT_NEAR(expected_luma_byte_, *frame->buffer(kYPlane), 10); 849 EXPECT_NEAR(expected_luma_byte_, *frame->buffer(kYPlane), 10);
850 } 850 }
851 851
852 memset(frame->buffer(kYPlane), 852 memset(frame->buffer(kYPlane),
853 next_luma_byte_, 853 next_luma_byte_,
854 frame->allocated_size(kYPlane)); 854 frame->allocated_size(kYPlane));
855 855
856 event_->Set(); 856 event_.Set();
857 } 857 }
858 858
859 rtc::scoped_ptr<EventWrapper> event_; 859 rtc::Event event_;
860 int expected_luma_byte_; 860 int expected_luma_byte_;
861 int next_luma_byte_; 861 int next_luma_byte_;
862 }; 862 };
863 863
864 TestFrameCallback pre_encode_callback(-1, 255); // Changes luma to 255. 864 TestFrameCallback pre_encode_callback(-1, 255); // Changes luma to 255.
865 TestFrameCallback pre_render_callback(255, 0); // Changes luma from 255 to 0. 865 TestFrameCallback pre_render_callback(255, 0); // Changes luma from 255 to 0.
866 866
867 CreateCalls(Call::Config(), Call::Config()); 867 CreateCalls(Call::Config(), Call::Config());
868 868
869 test::DirectTransport sender_transport(sender_call_.get()); 869 test::DirectTransport sender_transport(sender_call_.get());
(...skipping 17 matching lines...) Expand all
887 887
888 CreateStreams(); 888 CreateStreams();
889 Start(); 889 Start();
890 890
891 // Create frames that are smaller than the send width/height, this is done to 891 // Create frames that are smaller than the send width/height, this is done to
892 // check that the callbacks are done after processing video. 892 // check that the callbacks are done after processing video.
893 rtc::scoped_ptr<test::FrameGenerator> frame_generator( 893 rtc::scoped_ptr<test::FrameGenerator> frame_generator(
894 test::FrameGenerator::CreateChromaGenerator(kWidth / 2, kHeight / 2)); 894 test::FrameGenerator::CreateChromaGenerator(kWidth / 2, kHeight / 2));
895 send_stream_->Input()->IncomingCapturedFrame(*frame_generator->NextFrame()); 895 send_stream_->Input()->IncomingCapturedFrame(*frame_generator->NextFrame());
896 896
897 EXPECT_EQ(kEventSignaled, pre_encode_callback.Wait()) 897 EXPECT_TRUE(pre_encode_callback.Wait())
898 << "Timed out while waiting for pre-encode callback."; 898 << "Timed out while waiting for pre-encode callback.";
899 EXPECT_EQ(kEventSignaled, pre_render_callback.Wait()) 899 EXPECT_TRUE(pre_render_callback.Wait())
900 << "Timed out while waiting for pre-render callback."; 900 << "Timed out while waiting for pre-render callback.";
901 EXPECT_EQ(kEventSignaled, renderer.Wait()) 901 EXPECT_TRUE(renderer.Wait())
902 << "Timed out while waiting for the frame to render."; 902 << "Timed out while waiting for the frame to render.";
903 903
904 Stop(); 904 Stop();
905 905
906 sender_transport.StopSending(); 906 sender_transport.StopSending();
907 receiver_transport.StopSending(); 907 receiver_transport.StopSending();
908 908
909 DestroyStreams(); 909 DestroyStreams();
910 } 910 }
911 911
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
958 } 958 }
959 } 959 }
960 return SEND_PACKET; 960 return SEND_PACKET;
961 } 961 }
962 962
963 void RenderFrame(const VideoFrame& video_frame, 963 void RenderFrame(const VideoFrame& video_frame,
964 int time_to_render_ms) override { 964 int time_to_render_ms) override {
965 rtc::CritScope lock(&crit_); 965 rtc::CritScope lock(&crit_);
966 if (received_pli_ && 966 if (received_pli_ &&
967 video_frame.timestamp() > highest_dropped_timestamp_) { 967 video_frame.timestamp() > highest_dropped_timestamp_) {
968 observation_complete_->Set(); 968 observation_complete_.Set();
969 } 969 }
970 if (!received_pli_) 970 if (!received_pli_)
971 frames_to_drop_ = kPacketsToDrop; 971 frames_to_drop_ = kPacketsToDrop;
972 } 972 }
973 973
974 bool IsTextureSupported() const override { return false; } 974 bool IsTextureSupported() const override { return false; }
975 975
976 void ModifyConfigs(VideoSendStream::Config* send_config, 976 void ModifyConfigs(VideoSendStream::Config* send_config,
977 std::vector<VideoReceiveStream::Config>* receive_configs, 977 std::vector<VideoReceiveStream::Config>* receive_configs,
978 VideoEncoderConfig* encoder_config) override { 978 VideoEncoderConfig* encoder_config) override {
979 send_config->rtp.nack.rtp_history_ms = rtp_history_ms_; 979 send_config->rtp.nack.rtp_history_ms = rtp_history_ms_;
980 (*receive_configs)[0].rtp.nack.rtp_history_ms = rtp_history_ms_; 980 (*receive_configs)[0].rtp.nack.rtp_history_ms = rtp_history_ms_;
981 (*receive_configs)[0].renderer = this; 981 (*receive_configs)[0].renderer = this;
982 } 982 }
983 983
984 void PerformTest() override { 984 void PerformTest() override {
985 EXPECT_EQ(kEventSignaled, Wait()) << "Timed out waiting for PLI to be " 985 EXPECT_TRUE(Wait()) << "Timed out waiting for PLI to be "
986 "received and a frame to be " 986 "received and a frame to be "
987 "rendered afterwards."; 987 "rendered afterwards.";
988 } 988 }
989 989
990 rtc::CriticalSection crit_; 990 rtc::CriticalSection crit_;
991 int rtp_history_ms_; 991 int rtp_history_ms_;
992 bool nack_enabled_; 992 bool nack_enabled_;
993 uint32_t highest_dropped_timestamp_ GUARDED_BY(&crit_); 993 uint32_t highest_dropped_timestamp_ GUARDED_BY(&crit_);
994 int frames_to_drop_ GUARDED_BY(&crit_); 994 int frames_to_drop_ GUARDED_BY(&crit_);
995 bool received_pli_ GUARDED_BY(&crit_); 995 bool received_pli_ GUARDED_BY(&crit_);
996 } test(rtp_history_ms); 996 } test(rtp_history_ms);
997 997
998 RunBaseTest(&test, FakeNetworkPipe::Config()); 998 RunBaseTest(&test, FakeNetworkPipe::Config());
999 } 999 }
1000 1000
1001 TEST_F(EndToEndTest, ReceivesPliAndRecoversWithNack) { 1001 TEST_F(EndToEndTest, ReceivesPliAndRecoversWithNack) {
1002 ReceivesPliAndRecovers(1000); 1002 ReceivesPliAndRecovers(1000);
1003 } 1003 }
1004 1004
1005 TEST_F(EndToEndTest, ReceivesPliAndRecoversWithoutNack) { 1005 TEST_F(EndToEndTest, ReceivesPliAndRecoversWithoutNack) {
1006 ReceivesPliAndRecovers(0); 1006 ReceivesPliAndRecovers(0);
1007 } 1007 }
1008 1008
1009 TEST_F(EndToEndTest, UnknownRtpPacketGivesUnknownSsrcReturnCode) { 1009 TEST_F(EndToEndTest, UnknownRtpPacketGivesUnknownSsrcReturnCode) {
1010 class PacketInputObserver : public PacketReceiver { 1010 class PacketInputObserver : public PacketReceiver {
1011 public: 1011 public:
1012 explicit PacketInputObserver(PacketReceiver* receiver) 1012 explicit PacketInputObserver(PacketReceiver* receiver)
1013 : receiver_(receiver), delivered_packet_(EventWrapper::Create()) {} 1013 : receiver_(receiver), delivered_packet_(false, false) {}
1014 1014
1015 EventTypeWrapper Wait() { 1015 bool Wait() { return delivered_packet_.Wait(kDefaultTimeoutMs); }
1016 return delivered_packet_->Wait(kDefaultTimeoutMs);
1017 }
1018 1016
1019 private: 1017 private:
1020 DeliveryStatus DeliverPacket(MediaType media_type, 1018 DeliveryStatus DeliverPacket(MediaType media_type,
1021 const uint8_t* packet, 1019 const uint8_t* packet,
1022 size_t length, 1020 size_t length,
1023 const PacketTime& packet_time) override { 1021 const PacketTime& packet_time) override {
1024 if (RtpHeaderParser::IsRtcp(packet, length)) { 1022 if (RtpHeaderParser::IsRtcp(packet, length)) {
1025 return receiver_->DeliverPacket(media_type, packet, length, 1023 return receiver_->DeliverPacket(media_type, packet, length,
1026 packet_time); 1024 packet_time);
1027 } else { 1025 } else {
1028 DeliveryStatus delivery_status = 1026 DeliveryStatus delivery_status =
1029 receiver_->DeliverPacket(media_type, packet, length, packet_time); 1027 receiver_->DeliverPacket(media_type, packet, length, packet_time);
1030 EXPECT_EQ(DELIVERY_UNKNOWN_SSRC, delivery_status); 1028 EXPECT_EQ(DELIVERY_UNKNOWN_SSRC, delivery_status);
1031 delivered_packet_->Set(); 1029 delivered_packet_.Set();
1032 return delivery_status; 1030 return delivery_status;
1033 } 1031 }
1034 } 1032 }
1035 1033
1036 PacketReceiver* receiver_; 1034 PacketReceiver* receiver_;
1037 rtc::scoped_ptr<EventWrapper> delivered_packet_; 1035 rtc::Event delivered_packet_;
1038 }; 1036 };
1039 1037
1040 CreateCalls(Call::Config(), Call::Config()); 1038 CreateCalls(Call::Config(), Call::Config());
1041 1039
1042 test::DirectTransport send_transport(sender_call_.get()); 1040 test::DirectTransport send_transport(sender_call_.get());
1043 test::DirectTransport receive_transport(receiver_call_.get()); 1041 test::DirectTransport receive_transport(receiver_call_.get());
1044 PacketInputObserver input_observer(receiver_call_->Receiver()); 1042 PacketInputObserver input_observer(receiver_call_->Receiver());
1045 send_transport.SetReceiver(&input_observer); 1043 send_transport.SetReceiver(&input_observer);
1046 receive_transport.SetReceiver(sender_call_->Receiver()); 1044 receive_transport.SetReceiver(sender_call_->Receiver());
1047 1045
1048 CreateSendConfig(1, &send_transport); 1046 CreateSendConfig(1, &send_transport);
1049 CreateMatchingReceiveConfigs(&receive_transport); 1047 CreateMatchingReceiveConfigs(&receive_transport);
1050 1048
1051 CreateStreams(); 1049 CreateStreams();
1052 CreateFrameGeneratorCapturer(); 1050 CreateFrameGeneratorCapturer();
1053 Start(); 1051 Start();
1054 1052
1055 receiver_call_->DestroyVideoReceiveStream(receive_streams_[0]); 1053 receiver_call_->DestroyVideoReceiveStream(receive_streams_[0]);
1056 receive_streams_.clear(); 1054 receive_streams_.clear();
1057 1055
1058 // Wait() waits for a received packet. 1056 // Wait() waits for a received packet.
1059 EXPECT_EQ(kEventSignaled, input_observer.Wait()); 1057 EXPECT_TRUE(input_observer.Wait());
1060 1058
1061 Stop(); 1059 Stop();
1062 1060
1063 DestroyStreams(); 1061 DestroyStreams();
1064 1062
1065 send_transport.StopSending(); 1063 send_transport.StopSending();
1066 receive_transport.StopSending(); 1064 receive_transport.StopSending();
1067 } 1065 }
1068 1066
1069 void EndToEndTest::RespectsRtcpMode(RtcpMode rtcp_mode) { 1067 void EndToEndTest::RespectsRtcpMode(RtcpMode rtcp_mode) {
(...skipping 28 matching lines...) Expand all
1098 break; 1096 break;
1099 } 1097 }
1100 packet_type = parser.Iterate(); 1098 packet_type = parser.Iterate();
1101 } 1099 }
1102 1100
1103 switch (rtcp_mode_) { 1101 switch (rtcp_mode_) {
1104 case RtcpMode::kCompound: 1102 case RtcpMode::kCompound:
1105 if (!has_report_block) { 1103 if (!has_report_block) {
1106 ADD_FAILURE() << "Received RTCP packet without receiver report for " 1104 ADD_FAILURE() << "Received RTCP packet without receiver report for "
1107 "RtcpMode::kCompound."; 1105 "RtcpMode::kCompound.";
1108 observation_complete_->Set(); 1106 observation_complete_.Set();
1109 } 1107 }
1110 1108
1111 if (sent_rtcp_ >= kNumCompoundRtcpPacketsToObserve) 1109 if (sent_rtcp_ >= kNumCompoundRtcpPacketsToObserve)
1112 observation_complete_->Set(); 1110 observation_complete_.Set();
1113 1111
1114 break; 1112 break;
1115 case RtcpMode::kReducedSize: 1113 case RtcpMode::kReducedSize:
1116 if (!has_report_block) 1114 if (!has_report_block)
1117 observation_complete_->Set(); 1115 observation_complete_.Set();
1118 break; 1116 break;
1119 case RtcpMode::kOff: 1117 case RtcpMode::kOff:
1120 RTC_NOTREACHED(); 1118 RTC_NOTREACHED();
1121 break; 1119 break;
1122 } 1120 }
1123 1121
1124 return SEND_PACKET; 1122 return SEND_PACKET;
1125 } 1123 }
1126 1124
1127 void ModifyConfigs(VideoSendStream::Config* send_config, 1125 void ModifyConfigs(VideoSendStream::Config* send_config,
1128 std::vector<VideoReceiveStream::Config>* receive_configs, 1126 std::vector<VideoReceiveStream::Config>* receive_configs,
1129 VideoEncoderConfig* encoder_config) override { 1127 VideoEncoderConfig* encoder_config) override {
1130 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 1128 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
1131 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 1129 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
1132 (*receive_configs)[0].rtp.rtcp_mode = rtcp_mode_; 1130 (*receive_configs)[0].rtp.rtcp_mode = rtcp_mode_;
1133 } 1131 }
1134 1132
1135 void PerformTest() override { 1133 void PerformTest() override {
1136 EXPECT_EQ(kEventSignaled, Wait()) 1134 EXPECT_TRUE(Wait())
1137 << (rtcp_mode_ == RtcpMode::kCompound 1135 << (rtcp_mode_ == RtcpMode::kCompound
1138 ? "Timed out before observing enough compound packets." 1136 ? "Timed out before observing enough compound packets."
1139 : "Timed out before receiving a non-compound RTCP packet."); 1137 : "Timed out before receiving a non-compound RTCP packet.");
1140 } 1138 }
1141 1139
1142 RtcpMode rtcp_mode_; 1140 RtcpMode rtcp_mode_;
1143 int sent_rtp_; 1141 int sent_rtp_;
1144 int sent_rtcp_; 1142 int sent_rtcp_;
1145 } test(rtcp_mode); 1143 } test(rtcp_mode);
1146 1144
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
1277 // as every renderer has received a frame, the test finishes. 1275 // as every renderer has received a frame, the test finishes.
1278 TEST_F(EndToEndTest, SendsAndReceivesMultipleStreams) { 1276 TEST_F(EndToEndTest, SendsAndReceivesMultipleStreams) {
1279 class VideoOutputObserver : public VideoRenderer { 1277 class VideoOutputObserver : public VideoRenderer {
1280 public: 1278 public:
1281 VideoOutputObserver(const MultiStreamTest::CodecSettings& settings, 1279 VideoOutputObserver(const MultiStreamTest::CodecSettings& settings,
1282 uint32_t ssrc, 1280 uint32_t ssrc,
1283 test::FrameGeneratorCapturer** frame_generator) 1281 test::FrameGeneratorCapturer** frame_generator)
1284 : settings_(settings), 1282 : settings_(settings),
1285 ssrc_(ssrc), 1283 ssrc_(ssrc),
1286 frame_generator_(frame_generator), 1284 frame_generator_(frame_generator),
1287 done_(EventWrapper::Create()) {} 1285 done_(false, false) {}
1288 1286
1289 void RenderFrame(const VideoFrame& video_frame, 1287 void RenderFrame(const VideoFrame& video_frame,
1290 int time_to_render_ms) override { 1288 int time_to_render_ms) override {
1291 EXPECT_EQ(settings_.width, video_frame.width()); 1289 EXPECT_EQ(settings_.width, video_frame.width());
1292 EXPECT_EQ(settings_.height, video_frame.height()); 1290 EXPECT_EQ(settings_.height, video_frame.height());
1293 (*frame_generator_)->Stop(); 1291 (*frame_generator_)->Stop();
1294 done_->Set(); 1292 done_.Set();
1295 } 1293 }
1296 1294
1297 uint32_t Ssrc() { return ssrc_; } 1295 uint32_t Ssrc() { return ssrc_; }
1298 1296
1299 bool IsTextureSupported() const override { return false; } 1297 bool IsTextureSupported() const override { return false; }
1300 1298
1301 EventTypeWrapper Wait() { return done_->Wait(kDefaultTimeoutMs); } 1299 bool Wait() { return done_.Wait(kDefaultTimeoutMs); }
1302 1300
1303 private: 1301 private:
1304 const MultiStreamTest::CodecSettings& settings_; 1302 const MultiStreamTest::CodecSettings& settings_;
1305 const uint32_t ssrc_; 1303 const uint32_t ssrc_;
1306 test::FrameGeneratorCapturer** const frame_generator_; 1304 test::FrameGeneratorCapturer** const frame_generator_;
1307 rtc::scoped_ptr<EventWrapper> done_; 1305 rtc::Event done_;
1308 }; 1306 };
1309 1307
1310 class Tester : public MultiStreamTest { 1308 class Tester : public MultiStreamTest {
1311 public: 1309 public:
1312 Tester() {} 1310 Tester() {}
1313 virtual ~Tester() {} 1311 virtual ~Tester() {}
1314 1312
1315 protected: 1313 protected:
1316 void Wait() override { 1314 void Wait() override {
1317 for (const auto& observer : observers_) { 1315 for (const auto& observer : observers_) {
1318 EXPECT_EQ(EventTypeWrapper::kEventSignaled, observer->Wait()) 1316 EXPECT_TRUE(observer->Wait()) << "Time out waiting for from on ssrc "
1319 << "Time out waiting for from on ssrc " << observer->Ssrc(); 1317 << observer->Ssrc();
1320 } 1318 }
1321 } 1319 }
1322 1320
1323 void UpdateSendConfig( 1321 void UpdateSendConfig(
1324 size_t stream_index, 1322 size_t stream_index,
1325 VideoSendStream::Config* send_config, 1323 VideoSendStream::Config* send_config,
1326 VideoEncoderConfig* encoder_config, 1324 VideoEncoderConfig* encoder_config,
1327 test::FrameGeneratorCapturer** frame_generator) override { 1325 test::FrameGeneratorCapturer** frame_generator) override {
1328 observers_[stream_index].reset(new VideoOutputObserver( 1326 observers_[stream_index].reset(new VideoOutputObserver(
1329 codec_settings[stream_index], send_config->rtp.ssrcs.front(), 1327 codec_settings[stream_index], send_config->rtp.ssrcs.front(),
(...skipping 15 matching lines...) Expand all
1345 1343
1346 TEST_F(EndToEndTest, AssignsTransportSequenceNumbers) { 1344 TEST_F(EndToEndTest, AssignsTransportSequenceNumbers) {
1347 static const int kExtensionId = 5; 1345 static const int kExtensionId = 5;
1348 1346
1349 class RtpExtensionHeaderObserver : public test::DirectTransport { 1347 class RtpExtensionHeaderObserver : public test::DirectTransport {
1350 public: 1348 public:
1351 RtpExtensionHeaderObserver(Call* sender_call, 1349 RtpExtensionHeaderObserver(Call* sender_call,
1352 const uint32_t& first_media_ssrc, 1350 const uint32_t& first_media_ssrc,
1353 const std::map<uint32_t, uint32_t>& ssrc_map) 1351 const std::map<uint32_t, uint32_t>& ssrc_map)
1354 : DirectTransport(sender_call), 1352 : DirectTransport(sender_call),
1355 done_(EventWrapper::Create()), 1353 done_(false, false),
1356 parser_(RtpHeaderParser::Create()), 1354 parser_(RtpHeaderParser::Create()),
1357 first_media_ssrc_(first_media_ssrc), 1355 first_media_ssrc_(first_media_ssrc),
1358 rtx_to_media_ssrcs_(ssrc_map), 1356 rtx_to_media_ssrcs_(ssrc_map),
1359 padding_observed_(false), 1357 padding_observed_(false),
1360 rtx_padding_observed_(false), 1358 rtx_padding_observed_(false),
1361 retransmit_observed_(false), 1359 retransmit_observed_(false),
1362 started_(false) { 1360 started_(false) {
1363 parser_->RegisterRtpHeaderExtension(kRtpExtensionTransportSequenceNumber, 1361 parser_->RegisterRtpHeaderExtension(kRtpExtensionTransportSequenceNumber,
1364 kExtensionId); 1362 kExtensionId);
1365 } 1363 }
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1414 retransmit_observed_ = true; 1412 retransmit_observed_ = true;
1415 seq_no_map->erase(it); 1413 seq_no_map->erase(it);
1416 } else { 1414 } else {
1417 rtx_padding_observed_ = true; 1415 rtx_padding_observed_ = true;
1418 } 1416 }
1419 } else { 1417 } else {
1420 streams_observed_.insert(header.ssrc); 1418 streams_observed_.insert(header.ssrc);
1421 } 1419 }
1422 1420
1423 if (IsDone()) 1421 if (IsDone())
1424 done_->Set(); 1422 done_.Set();
1425 1423
1426 if (drop_packet) 1424 if (drop_packet)
1427 return true; 1425 return true;
1428 } 1426 }
1429 } 1427 }
1430 1428
1431 return test::DirectTransport::SendRtp(data, length, options); 1429 return test::DirectTransport::SendRtp(data, length, options);
1432 } 1430 }
1433 1431
1434 bool IsDone() { 1432 bool IsDone() {
1435 bool observed_types_ok = 1433 bool observed_types_ok =
1436 streams_observed_.size() == MultiStreamTest::kNumStreams && 1434 streams_observed_.size() == MultiStreamTest::kNumStreams &&
1437 padding_observed_ && retransmit_observed_ && rtx_padding_observed_; 1435 padding_observed_ && retransmit_observed_ && rtx_padding_observed_;
1438 if (!observed_types_ok) 1436 if (!observed_types_ok)
1439 return false; 1437 return false;
1440 // We should not have any gaps in the sequence number range. 1438 // We should not have any gaps in the sequence number range.
1441 size_t seqno_range = 1439 size_t seqno_range =
1442 *received_packed_ids_.rbegin() - *received_packed_ids_.begin() + 1; 1440 *received_packed_ids_.rbegin() - *received_packed_ids_.begin() + 1;
1443 return seqno_range == received_packed_ids_.size(); 1441 return seqno_range == received_packed_ids_.size();
1444 } 1442 }
1445 1443
1446 EventTypeWrapper Wait() { 1444 bool Wait() {
1447 { 1445 {
1448 // Can't be sure until this point that rtx_to_media_ssrcs_ etc have 1446 // Can't be sure until this point that rtx_to_media_ssrcs_ etc have
1449 // been initialized and are OK to read. 1447 // been initialized and are OK to read.
1450 rtc::CritScope cs(&lock_); 1448 rtc::CritScope cs(&lock_);
1451 started_ = true; 1449 started_ = true;
1452 } 1450 }
1453 return done_->Wait(kDefaultTimeoutMs); 1451 return done_.Wait(kDefaultTimeoutMs);
1454 } 1452 }
1455 1453
1456 rtc::CriticalSection lock_; 1454 rtc::CriticalSection lock_;
1457 rtc::scoped_ptr<EventWrapper> done_; 1455 rtc::Event done_;
1458 rtc::scoped_ptr<RtpHeaderParser> parser_; 1456 rtc::scoped_ptr<RtpHeaderParser> parser_;
1459 SequenceNumberUnwrapper unwrapper_; 1457 SequenceNumberUnwrapper unwrapper_;
1460 std::set<int64_t> received_packed_ids_; 1458 std::set<int64_t> received_packed_ids_;
1461 std::set<uint32_t> streams_observed_; 1459 std::set<uint32_t> streams_observed_;
1462 std::map<uint32_t, std::set<uint16_t>> dropped_seq_; 1460 std::map<uint32_t, std::set<uint16_t>> dropped_seq_;
1463 const uint32_t& first_media_ssrc_; 1461 const uint32_t& first_media_ssrc_;
1464 const std::map<uint32_t, uint32_t>& rtx_to_media_ssrcs_; 1462 const std::map<uint32_t, uint32_t>& rtx_to_media_ssrcs_;
1465 bool padding_observed_; 1463 bool padding_observed_;
1466 bool rtx_padding_observed_; 1464 bool rtx_padding_observed_;
1467 bool retransmit_observed_; 1465 bool retransmit_observed_;
1468 bool started_; 1466 bool started_;
1469 }; 1467 };
1470 1468
1471 class TransportSequenceNumberTester : public MultiStreamTest { 1469 class TransportSequenceNumberTester : public MultiStreamTest {
1472 public: 1470 public:
1473 TransportSequenceNumberTester() 1471 TransportSequenceNumberTester()
1474 : first_media_ssrc_(0), observer_(nullptr) {} 1472 : first_media_ssrc_(0), observer_(nullptr) {}
1475 virtual ~TransportSequenceNumberTester() {} 1473 virtual ~TransportSequenceNumberTester() {}
1476 1474
1477 protected: 1475 protected:
1478 void Wait() override { 1476 void Wait() override {
1479 RTC_DCHECK(observer_ != nullptr); 1477 RTC_DCHECK(observer_ != nullptr);
1480 EXPECT_EQ(EventTypeWrapper::kEventSignaled, observer_->Wait()); 1478 EXPECT_TRUE(observer_->Wait());
1481 } 1479 }
1482 1480
1483 void UpdateSendConfig( 1481 void UpdateSendConfig(
1484 size_t stream_index, 1482 size_t stream_index,
1485 VideoSendStream::Config* send_config, 1483 VideoSendStream::Config* send_config,
1486 VideoEncoderConfig* encoder_config, 1484 VideoEncoderConfig* encoder_config,
1487 test::FrameGeneratorCapturer** frame_generator) override { 1485 test::FrameGeneratorCapturer** frame_generator) override {
1488 send_config->rtp.extensions.clear(); 1486 send_config->rtp.extensions.clear();
1489 send_config->rtp.extensions.push_back( 1487 send_config->rtp.extensions.push_back(
1490 RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId)); 1488 RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId));
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
1607 } 1605 }
1608 1606
1609 TEST_F(EndToEndTest, TransportFeedbackNotConfigured) { 1607 TEST_F(EndToEndTest, TransportFeedbackNotConfigured) {
1610 TransportFeedbackTest(false); 1608 TransportFeedbackTest(false);
1611 } 1609 }
1612 1610
1613 TEST_F(EndToEndTest, ObserversEncodedFrames) { 1611 TEST_F(EndToEndTest, ObserversEncodedFrames) {
1614 class EncodedFrameTestObserver : public EncodedFrameObserver { 1612 class EncodedFrameTestObserver : public EncodedFrameObserver {
1615 public: 1613 public:
1616 EncodedFrameTestObserver() 1614 EncodedFrameTestObserver()
1617 : length_(0), 1615 : length_(0), frame_type_(kEmptyFrame), called_(false, false) {}
1618 frame_type_(kEmptyFrame),
1619 called_(EventWrapper::Create()) {}
1620 virtual ~EncodedFrameTestObserver() {} 1616 virtual ~EncodedFrameTestObserver() {}
1621 1617
1622 virtual void EncodedFrameCallback(const EncodedFrame& encoded_frame) { 1618 virtual void EncodedFrameCallback(const EncodedFrame& encoded_frame) {
1623 frame_type_ = encoded_frame.frame_type_; 1619 frame_type_ = encoded_frame.frame_type_;
1624 length_ = encoded_frame.length_; 1620 length_ = encoded_frame.length_;
1625 buffer_.reset(new uint8_t[length_]); 1621 buffer_.reset(new uint8_t[length_]);
1626 memcpy(buffer_.get(), encoded_frame.data_, length_); 1622 memcpy(buffer_.get(), encoded_frame.data_, length_);
1627 called_->Set(); 1623 called_.Set();
1628 } 1624 }
1629 1625
1630 EventTypeWrapper Wait() { return called_->Wait(kDefaultTimeoutMs); } 1626 bool Wait() { return called_.Wait(kDefaultTimeoutMs); }
1631 1627
1632 void ExpectEqualFrames(const EncodedFrameTestObserver& observer) { 1628 void ExpectEqualFrames(const EncodedFrameTestObserver& observer) {
1633 ASSERT_EQ(length_, observer.length_) 1629 ASSERT_EQ(length_, observer.length_)
1634 << "Observed frames are of different lengths."; 1630 << "Observed frames are of different lengths.";
1635 EXPECT_EQ(frame_type_, observer.frame_type_) 1631 EXPECT_EQ(frame_type_, observer.frame_type_)
1636 << "Observed frames have different frame types."; 1632 << "Observed frames have different frame types.";
1637 EXPECT_EQ(0, memcmp(buffer_.get(), observer.buffer_.get(), length_)) 1633 EXPECT_EQ(0, memcmp(buffer_.get(), observer.buffer_.get(), length_))
1638 << "Observed encoded frames have different content."; 1634 << "Observed encoded frames have different content.";
1639 } 1635 }
1640 1636
1641 private: 1637 private:
1642 rtc::scoped_ptr<uint8_t[]> buffer_; 1638 rtc::scoped_ptr<uint8_t[]> buffer_;
1643 size_t length_; 1639 size_t length_;
1644 FrameType frame_type_; 1640 FrameType frame_type_;
1645 rtc::scoped_ptr<EventWrapper> called_; 1641 rtc::Event called_;
1646 }; 1642 };
1647 1643
1648 EncodedFrameTestObserver post_encode_observer; 1644 EncodedFrameTestObserver post_encode_observer;
1649 EncodedFrameTestObserver pre_decode_observer; 1645 EncodedFrameTestObserver pre_decode_observer;
1650 1646
1651 CreateCalls(Call::Config(), Call::Config()); 1647 CreateCalls(Call::Config(), Call::Config());
1652 1648
1653 test::DirectTransport sender_transport(sender_call_.get()); 1649 test::DirectTransport sender_transport(sender_call_.get());
1654 test::DirectTransport receiver_transport(receiver_call_.get()); 1650 test::DirectTransport receiver_transport(receiver_call_.get());
1655 sender_transport.SetReceiver(receiver_call_->Receiver()); 1651 sender_transport.SetReceiver(receiver_call_->Receiver());
1656 receiver_transport.SetReceiver(sender_call_->Receiver()); 1652 receiver_transport.SetReceiver(sender_call_->Receiver());
1657 1653
1658 CreateSendConfig(1, &sender_transport); 1654 CreateSendConfig(1, &sender_transport);
1659 CreateMatchingReceiveConfigs(&receiver_transport); 1655 CreateMatchingReceiveConfigs(&receiver_transport);
1660 send_config_.post_encode_callback = &post_encode_observer; 1656 send_config_.post_encode_callback = &post_encode_observer;
1661 receive_configs_[0].pre_decode_callback = &pre_decode_observer; 1657 receive_configs_[0].pre_decode_callback = &pre_decode_observer;
1662 1658
1663 CreateStreams(); 1659 CreateStreams();
1664 Start(); 1660 Start();
1665 1661
1666 rtc::scoped_ptr<test::FrameGenerator> frame_generator( 1662 rtc::scoped_ptr<test::FrameGenerator> frame_generator(
1667 test::FrameGenerator::CreateChromaGenerator( 1663 test::FrameGenerator::CreateChromaGenerator(
1668 encoder_config_.streams[0].width, encoder_config_.streams[0].height)); 1664 encoder_config_.streams[0].width, encoder_config_.streams[0].height));
1669 send_stream_->Input()->IncomingCapturedFrame(*frame_generator->NextFrame()); 1665 send_stream_->Input()->IncomingCapturedFrame(*frame_generator->NextFrame());
1670 1666
1671 EXPECT_EQ(kEventSignaled, post_encode_observer.Wait()) 1667 EXPECT_TRUE(post_encode_observer.Wait())
1672 << "Timed out while waiting for send-side encoded-frame callback."; 1668 << "Timed out while waiting for send-side encoded-frame callback.";
1673 1669
1674 EXPECT_EQ(kEventSignaled, pre_decode_observer.Wait()) 1670 EXPECT_TRUE(pre_decode_observer.Wait())
1675 << "Timed out while waiting for pre-decode encoded-frame callback."; 1671 << "Timed out while waiting for pre-decode encoded-frame callback.";
1676 1672
1677 post_encode_observer.ExpectEqualFrames(pre_decode_observer); 1673 post_encode_observer.ExpectEqualFrames(pre_decode_observer);
1678 1674
1679 Stop(); 1675 Stop();
1680 1676
1681 sender_transport.StopSending(); 1677 sender_transport.StopSending();
1682 receiver_transport.StopSending(); 1678 receiver_transport.StopSending();
1683 1679
1684 DestroyStreams(); 1680 DestroyStreams();
(...skipping 19 matching lines...) Expand all
1704 } else if (packet_type == RTCPUtility::RTCPPacketTypes::kPsfbRembItem) { 1700 } else if (packet_type == RTCPUtility::RTCPPacketTypes::kPsfbRembItem) {
1705 const RTCPUtility::RTCPPacket& packet = parser.Packet(); 1701 const RTCPUtility::RTCPPacket& packet = parser.Packet();
1706 EXPECT_GT(packet.REMBItem.BitRate, 0u); 1702 EXPECT_GT(packet.REMBItem.BitRate, 0u);
1707 EXPECT_EQ(packet.REMBItem.NumberOfSSRCs, 1u); 1703 EXPECT_EQ(packet.REMBItem.NumberOfSSRCs, 1u);
1708 EXPECT_EQ(packet.REMBItem.SSRCs[0], kSendSsrcs[0]); 1704 EXPECT_EQ(packet.REMBItem.SSRCs[0], kSendSsrcs[0]);
1709 received_remb = true; 1705 received_remb = true;
1710 } 1706 }
1711 packet_type = parser.Iterate(); 1707 packet_type = parser.Iterate();
1712 } 1708 }
1713 if (received_psfb && received_remb) 1709 if (received_psfb && received_remb)
1714 observation_complete_->Set(); 1710 observation_complete_.Set();
1715 return SEND_PACKET; 1711 return SEND_PACKET;
1716 } 1712 }
1717 void PerformTest() override { 1713 void PerformTest() override {
1718 EXPECT_EQ(kEventSignaled, Wait()) << "Timed out while waiting for a " 1714 EXPECT_TRUE(Wait()) << "Timed out while waiting for a "
1719 "receiver RTCP REMB packet to be " 1715 "receiver RTCP REMB packet to be "
1720 "sent."; 1716 "sent.";
1721 } 1717 }
1722 } test; 1718 } test;
1723 1719
1724 RunBaseTest(&test, FakeNetworkPipe::Config()); 1720 RunBaseTest(&test, FakeNetworkPipe::Config());
1725 } 1721 }
1726 1722
1727 TEST_F(EndToEndTest, VerifyBandwidthStats) { 1723 TEST_F(EndToEndTest, VerifyBandwidthStats) {
1728 class RtcpObserver : public test::EndToEndTest { 1724 class RtcpObserver : public test::EndToEndTest {
1729 public: 1725 public:
1730 RtcpObserver() 1726 RtcpObserver()
1731 : EndToEndTest(kDefaultTimeoutMs), 1727 : EndToEndTest(kDefaultTimeoutMs),
1732 sender_call_(nullptr), 1728 sender_call_(nullptr),
1733 receiver_call_(nullptr), 1729 receiver_call_(nullptr),
1734 has_seen_pacer_delay_(false) {} 1730 has_seen_pacer_delay_(false) {}
1735 1731
1736 Action OnSendRtp(const uint8_t* packet, size_t length) override { 1732 Action OnSendRtp(const uint8_t* packet, size_t length) override {
1737 Call::Stats sender_stats = sender_call_->GetStats(); 1733 Call::Stats sender_stats = sender_call_->GetStats();
1738 Call::Stats receiver_stats = receiver_call_->GetStats(); 1734 Call::Stats receiver_stats = receiver_call_->GetStats();
1739 if (!has_seen_pacer_delay_) 1735 if (!has_seen_pacer_delay_)
1740 has_seen_pacer_delay_ = sender_stats.pacer_delay_ms > 0; 1736 has_seen_pacer_delay_ = sender_stats.pacer_delay_ms > 0;
1741 if (sender_stats.send_bandwidth_bps > 0 && 1737 if (sender_stats.send_bandwidth_bps > 0 &&
1742 receiver_stats.recv_bandwidth_bps > 0 && has_seen_pacer_delay_) { 1738 receiver_stats.recv_bandwidth_bps > 0 && has_seen_pacer_delay_) {
1743 observation_complete_->Set(); 1739 observation_complete_.Set();
1744 } 1740 }
1745 return SEND_PACKET; 1741 return SEND_PACKET;
1746 } 1742 }
1747 1743
1748 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { 1744 void OnCallsCreated(Call* sender_call, Call* receiver_call) override {
1749 sender_call_ = sender_call; 1745 sender_call_ = sender_call;
1750 receiver_call_ = receiver_call; 1746 receiver_call_ = receiver_call;
1751 } 1747 }
1752 1748
1753 void PerformTest() override { 1749 void PerformTest() override {
1754 EXPECT_EQ(kEventSignaled, Wait()) << "Timed out while waiting for " 1750 EXPECT_TRUE(Wait()) << "Timed out while waiting for "
1755 "non-zero bandwidth stats."; 1751 "non-zero bandwidth stats.";
1756 } 1752 }
1757 1753
1758 private: 1754 private:
1759 Call* sender_call_; 1755 Call* sender_call_;
1760 Call* receiver_call_; 1756 Call* receiver_call_;
1761 bool has_seen_pacer_delay_; 1757 bool has_seen_pacer_delay_;
1762 } test; 1758 } test;
1763 1759
1764 RunBaseTest(&test, FakeNetworkPipe::Config()); 1760 RunBaseTest(&test, FakeNetworkPipe::Config());
1765 } 1761 }
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1815 stream_stats.rtcp_packet_type_counts.nack_packets; 1811 stream_stats.rtcp_packet_type_counts.nack_packets;
1816 } 1812 }
1817 for (size_t i = 0; i < receive_streams_.size(); ++i) { 1813 for (size_t i = 0; i < receive_streams_.size(); ++i) {
1818 VideoReceiveStream::Stats stats = receive_streams_[i]->GetStats(); 1814 VideoReceiveStream::Stats stats = receive_streams_[i]->GetStats();
1819 receive_stream_nack_packets += 1815 receive_stream_nack_packets +=
1820 stats.rtcp_packet_type_counts.nack_packets; 1816 stats.rtcp_packet_type_counts.nack_packets;
1821 } 1817 }
1822 if (send_stream_nack_packets >= 1 && receive_stream_nack_packets >= 1) { 1818 if (send_stream_nack_packets >= 1 && receive_stream_nack_packets >= 1) {
1823 // NACK packet sent on receive stream and received on sent stream. 1819 // NACK packet sent on receive stream and received on sent stream.
1824 if (MinMetricRunTimePassed()) 1820 if (MinMetricRunTimePassed())
1825 observation_complete_->Set(); 1821 observation_complete_.Set();
1826 } 1822 }
1827 } 1823 }
1828 1824
1829 bool MinMetricRunTimePassed() { 1825 bool MinMetricRunTimePassed() {
1830 int64_t now = Clock::GetRealTimeClock()->TimeInMilliseconds(); 1826 int64_t now = Clock::GetRealTimeClock()->TimeInMilliseconds();
1831 if (start_runtime_ms_ == -1) { 1827 if (start_runtime_ms_ == -1) {
1832 start_runtime_ms_ = now; 1828 start_runtime_ms_ = now;
1833 return false; 1829 return false;
1834 } 1830 }
1835 int64_t elapsed_sec = (now - start_runtime_ms_) / 1000; 1831 int64_t elapsed_sec = (now - start_runtime_ms_) / 1000;
1836 return elapsed_sec > metrics::kMinRunTimeInSeconds; 1832 return elapsed_sec > metrics::kMinRunTimeInSeconds;
1837 } 1833 }
1838 1834
1839 void ModifyConfigs(VideoSendStream::Config* send_config, 1835 void ModifyConfigs(VideoSendStream::Config* send_config,
1840 std::vector<VideoReceiveStream::Config>* receive_configs, 1836 std::vector<VideoReceiveStream::Config>* receive_configs,
1841 VideoEncoderConfig* encoder_config) override { 1837 VideoEncoderConfig* encoder_config) override {
1842 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 1838 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
1843 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 1839 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
1844 } 1840 }
1845 1841
1846 void OnStreamsCreated( 1842 void OnStreamsCreated(
1847 VideoSendStream* send_stream, 1843 VideoSendStream* send_stream,
1848 const std::vector<VideoReceiveStream*>& receive_streams) override { 1844 const std::vector<VideoReceiveStream*>& receive_streams) override {
1849 send_stream_ = send_stream; 1845 send_stream_ = send_stream;
1850 receive_streams_ = receive_streams; 1846 receive_streams_ = receive_streams;
1851 } 1847 }
1852 1848
1853 void PerformTest() override { 1849 void PerformTest() override {
1854 EXPECT_EQ(kEventSignaled, Wait()) 1850 EXPECT_TRUE(Wait()) << "Timed out waiting for packet to be NACKed.";
1855 << "Timed out waiting for packet to be NACKed.";
1856 } 1851 }
1857 1852
1858 rtc::CriticalSection crit_; 1853 rtc::CriticalSection crit_;
1859 uint64_t sent_rtp_packets_; 1854 uint64_t sent_rtp_packets_;
1860 uint16_t dropped_rtp_packet_ GUARDED_BY(&crit_); 1855 uint16_t dropped_rtp_packet_ GUARDED_BY(&crit_);
1861 bool dropped_rtp_packet_requested_ GUARDED_BY(&crit_); 1856 bool dropped_rtp_packet_requested_ GUARDED_BY(&crit_);
1862 std::vector<VideoReceiveStream*> receive_streams_; 1857 std::vector<VideoReceiveStream*> receive_streams_;
1863 VideoSendStream* send_stream_; 1858 VideoSendStream* send_stream_;
1864 int64_t start_runtime_ms_; 1859 int64_t start_runtime_ms_;
1865 } test; 1860 } test;
(...skipping 18 matching lines...) Expand all
1884 : EndToEndTest(kLongTimeoutMs), 1879 : EndToEndTest(kLongTimeoutMs),
1885 use_rtx_(use_rtx), 1880 use_rtx_(use_rtx),
1886 use_red_(use_red), 1881 use_red_(use_red),
1887 sender_call_(nullptr), 1882 sender_call_(nullptr),
1888 receiver_call_(nullptr), 1883 receiver_call_(nullptr),
1889 start_runtime_ms_(-1) {} 1884 start_runtime_ms_(-1) {}
1890 1885
1891 private: 1886 private:
1892 Action OnSendRtp(const uint8_t* packet, size_t length) override { 1887 Action OnSendRtp(const uint8_t* packet, size_t length) override {
1893 if (MinMetricRunTimePassed()) 1888 if (MinMetricRunTimePassed())
1894 observation_complete_->Set(); 1889 observation_complete_.Set();
1895 1890
1896 // GetStats calls GetSendChannelRtcpStatistics 1891 // GetStats calls GetSendChannelRtcpStatistics
1897 // (via VideoSendStream::GetRtt) which updates ReportBlockStats used by 1892 // (via VideoSendStream::GetRtt) which updates ReportBlockStats used by
1898 // WebRTC.Video.SentPacketsLostInPercent. 1893 // WebRTC.Video.SentPacketsLostInPercent.
1899 // TODO(asapersson): Remove dependency on calling GetStats. 1894 // TODO(asapersson): Remove dependency on calling GetStats.
1900 sender_call_->GetStats(); 1895 sender_call_->GetStats();
1901 1896
1902 return SEND_PACKET; 1897 return SEND_PACKET;
1903 } 1898 }
1904 1899
(...skipping 30 matching lines...) Expand all
1935 kSendRtxPayloadType; 1930 kSendRtxPayloadType;
1936 } 1931 }
1937 } 1932 }
1938 1933
1939 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { 1934 void OnCallsCreated(Call* sender_call, Call* receiver_call) override {
1940 sender_call_ = sender_call; 1935 sender_call_ = sender_call;
1941 receiver_call_ = receiver_call; 1936 receiver_call_ = receiver_call;
1942 } 1937 }
1943 1938
1944 void PerformTest() override { 1939 void PerformTest() override {
1945 EXPECT_EQ(kEventSignaled, Wait()) 1940 EXPECT_TRUE(Wait()) << "Timed out waiting for packet to be NACKed.";
1946 << "Timed out waiting for packet to be NACKed.";
1947 } 1941 }
1948 1942
1949 bool use_rtx_; 1943 bool use_rtx_;
1950 bool use_red_; 1944 bool use_red_;
1951 Call* sender_call_; 1945 Call* sender_call_;
1952 Call* receiver_call_; 1946 Call* receiver_call_;
1953 int64_t start_runtime_ms_; 1947 int64_t start_runtime_ms_;
1954 } test(use_rtx, use_red); 1948 } test(use_rtx, use_red);
1955 1949
1956 test::ClearHistograms(); 1950 test::ClearHistograms();
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
2128 } 2122 }
2129 if (sent_rtcp_sr_ > kNumRtcpReportPacketsToObserve && 2123 if (sent_rtcp_sr_ > kNumRtcpReportPacketsToObserve &&
2130 sent_rtcp_rr_ > kNumRtcpReportPacketsToObserve) { 2124 sent_rtcp_rr_ > kNumRtcpReportPacketsToObserve) {
2131 if (enable_rrtr_) { 2125 if (enable_rrtr_) {
2132 EXPECT_GT(sent_rtcp_rrtr_, 0); 2126 EXPECT_GT(sent_rtcp_rrtr_, 0);
2133 EXPECT_GT(sent_rtcp_dlrr_, 0); 2127 EXPECT_GT(sent_rtcp_dlrr_, 0);
2134 } else { 2128 } else {
2135 EXPECT_EQ(0, sent_rtcp_rrtr_); 2129 EXPECT_EQ(0, sent_rtcp_rrtr_);
2136 EXPECT_EQ(0, sent_rtcp_dlrr_); 2130 EXPECT_EQ(0, sent_rtcp_dlrr_);
2137 } 2131 }
2138 observation_complete_->Set(); 2132 observation_complete_.Set();
2139 } 2133 }
2140 return SEND_PACKET; 2134 return SEND_PACKET;
2141 } 2135 }
2142 2136
2143 void ModifyConfigs(VideoSendStream::Config* send_config, 2137 void ModifyConfigs(VideoSendStream::Config* send_config,
2144 std::vector<VideoReceiveStream::Config>* receive_configs, 2138 std::vector<VideoReceiveStream::Config>* receive_configs,
2145 VideoEncoderConfig* encoder_config) override { 2139 VideoEncoderConfig* encoder_config) override {
2146 (*receive_configs)[0].rtp.rtcp_mode = RtcpMode::kReducedSize; 2140 (*receive_configs)[0].rtp.rtcp_mode = RtcpMode::kReducedSize;
2147 (*receive_configs)[0].rtp.rtcp_xr.receiver_reference_time_report = 2141 (*receive_configs)[0].rtp.rtcp_xr.receiver_reference_time_report =
2148 enable_rrtr_; 2142 enable_rrtr_;
2149 } 2143 }
2150 2144
2151 void PerformTest() override { 2145 void PerformTest() override {
2152 EXPECT_EQ(kEventSignaled, Wait()) 2146 EXPECT_TRUE(Wait())
2153 << "Timed out while waiting for RTCP SR/RR packets to be sent."; 2147 << "Timed out while waiting for RTCP SR/RR packets to be sent.";
2154 } 2148 }
2155 2149
2156 rtc::CriticalSection crit_; 2150 rtc::CriticalSection crit_;
2157 bool enable_rrtr_; 2151 bool enable_rrtr_;
2158 int sent_rtcp_sr_; 2152 int sent_rtcp_sr_;
2159 int sent_rtcp_rr_ GUARDED_BY(&crit_); 2153 int sent_rtcp_rr_ GUARDED_BY(&crit_);
2160 int sent_rtcp_rrtr_ GUARDED_BY(&crit_); 2154 int sent_rtcp_rrtr_ GUARDED_BY(&crit_);
2161 int sent_rtcp_dlrr_; 2155 int sent_rtcp_dlrr_;
2162 } test(enable_rrtr); 2156 } test(enable_rrtr);
(...skipping 20 matching lines...) Expand all
2183 2177
2184 private: 2178 private:
2185 Action OnSendRtp(const uint8_t* packet, size_t length) override { 2179 Action OnSendRtp(const uint8_t* packet, size_t length) override {
2186 RTPHeader header; 2180 RTPHeader header;
2187 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 2181 EXPECT_TRUE(parser_->Parse(packet, length, &header));
2188 2182
2189 EXPECT_TRUE(valid_ssrcs_[header.ssrc]) 2183 EXPECT_TRUE(valid_ssrcs_[header.ssrc])
2190 << "Received unknown SSRC: " << header.ssrc; 2184 << "Received unknown SSRC: " << header.ssrc;
2191 2185
2192 if (!valid_ssrcs_[header.ssrc]) 2186 if (!valid_ssrcs_[header.ssrc])
2193 observation_complete_->Set(); 2187 observation_complete_.Set();
2194 2188
2195 if (!is_observed_[header.ssrc]) { 2189 if (!is_observed_[header.ssrc]) {
2196 is_observed_[header.ssrc] = true; 2190 is_observed_[header.ssrc] = true;
2197 --ssrcs_to_observe_; 2191 --ssrcs_to_observe_;
2198 if (expect_single_ssrc_) { 2192 if (expect_single_ssrc_) {
2199 expect_single_ssrc_ = false; 2193 expect_single_ssrc_ = false;
2200 observation_complete_->Set(); 2194 observation_complete_.Set();
2201 } 2195 }
2202 } 2196 }
2203 2197
2204 if (ssrcs_to_observe_ == 0) 2198 if (ssrcs_to_observe_ == 0)
2205 observation_complete_->Set(); 2199 observation_complete_.Set();
2206 2200
2207 return SEND_PACKET; 2201 return SEND_PACKET;
2208 } 2202 }
2209 2203
2210 size_t GetNumStreams() const override { return num_ssrcs_; } 2204 size_t GetNumStreams() const override { return num_ssrcs_; }
2211 2205
2212 void ModifyConfigs(VideoSendStream::Config* send_config, 2206 void ModifyConfigs(VideoSendStream::Config* send_config,
2213 std::vector<VideoReceiveStream::Config>* receive_configs, 2207 std::vector<VideoReceiveStream::Config>* receive_configs,
2214 VideoEncoderConfig* encoder_config) override { 2208 VideoEncoderConfig* encoder_config) override {
2215 if (num_ssrcs_ > 1) { 2209 if (num_ssrcs_ > 1) {
(...skipping 10 matching lines...) Expand all
2226 encoder_config->streams.resize(1); 2220 encoder_config->streams.resize(1);
2227 } 2221 }
2228 2222
2229 void OnStreamsCreated( 2223 void OnStreamsCreated(
2230 VideoSendStream* send_stream, 2224 VideoSendStream* send_stream,
2231 const std::vector<VideoReceiveStream*>& receive_streams) override { 2225 const std::vector<VideoReceiveStream*>& receive_streams) override {
2232 send_stream_ = send_stream; 2226 send_stream_ = send_stream;
2233 } 2227 }
2234 2228
2235 void PerformTest() override { 2229 void PerformTest() override {
2236 EXPECT_EQ(kEventSignaled, Wait()) 2230 EXPECT_TRUE(Wait()) << "Timed out while waiting for "
2237 << "Timed out while waiting for " 2231 << (send_single_ssrc_first_ ? "first SSRC."
2238 << (send_single_ssrc_first_ ? "first SSRC." : "SSRCs."); 2232 : "SSRCs.");
2239 2233
2240 if (send_single_ssrc_first_) { 2234 if (send_single_ssrc_first_) {
2241 // Set full simulcast and continue with the rest of the SSRCs. 2235 // Set full simulcast and continue with the rest of the SSRCs.
2242 send_stream_->ReconfigureVideoEncoder(encoder_config_all_streams_); 2236 send_stream_->ReconfigureVideoEncoder(encoder_config_all_streams_);
2243 EXPECT_EQ(kEventSignaled, Wait()) 2237 EXPECT_TRUE(Wait()) << "Timed out while waiting on additional SSRCs.";
2244 << "Timed out while waiting on additional SSRCs.";
2245 } 2238 }
2246 } 2239 }
2247 2240
2248 private: 2241 private:
2249 std::map<uint32_t, bool> valid_ssrcs_; 2242 std::map<uint32_t, bool> valid_ssrcs_;
2250 std::map<uint32_t, bool> is_observed_; 2243 std::map<uint32_t, bool> is_observed_;
2251 2244
2252 const size_t num_ssrcs_; 2245 const size_t num_ssrcs_;
2253 const bool send_single_ssrc_first_; 2246 const bool send_single_ssrc_first_;
2254 2247
(...skipping 28 matching lines...) Expand all
2283 VideoEncoderConfig* encoder_config) override { 2276 VideoEncoderConfig* encoder_config) override {
2284 send_config->encoder_settings.encoder = this; 2277 send_config->encoder_settings.encoder = this;
2285 } 2278 }
2286 2279
2287 int32_t SetRates(uint32_t new_target_bitrate, uint32_t framerate) override { 2280 int32_t SetRates(uint32_t new_target_bitrate, uint32_t framerate) override {
2288 // Make sure not to trigger on any default zero bitrates. 2281 // Make sure not to trigger on any default zero bitrates.
2289 if (new_target_bitrate == 0) 2282 if (new_target_bitrate == 0)
2290 return 0; 2283 return 0;
2291 rtc::CritScope lock(&crit_); 2284 rtc::CritScope lock(&crit_);
2292 bitrate_kbps_ = new_target_bitrate; 2285 bitrate_kbps_ = new_target_bitrate;
2293 observation_complete_->Set(); 2286 observation_complete_.Set();
2294 return 0; 2287 return 0;
2295 } 2288 }
2296 2289
2297 void PerformTest() override { 2290 void PerformTest() override {
2298 ASSERT_EQ(kEventSignaled, Wait()) 2291 ASSERT_TRUE(Wait())
2299 << "Timed out while waiting for encoder SetRates() call."; 2292 << "Timed out while waiting for encoder SetRates() call.";
2300 // Wait for GetStats to report a corresponding bitrate. 2293 // Wait for GetStats to report a corresponding bitrate.
2301 for (unsigned int i = 0; i < kDefaultTimeoutMs; ++i) { 2294 for (int i = 0; i < kDefaultTimeoutMs; ++i) {
2302 VideoSendStream::Stats stats = send_stream_->GetStats(); 2295 VideoSendStream::Stats stats = send_stream_->GetStats();
2303 { 2296 {
2304 rtc::CritScope lock(&crit_); 2297 rtc::CritScope lock(&crit_);
2305 if ((stats.target_media_bitrate_bps + 500) / 1000 == 2298 if ((stats.target_media_bitrate_bps + 500) / 1000 ==
2306 static_cast<int>(bitrate_kbps_)) { 2299 static_cast<int>(bitrate_kbps_)) {
2307 return; 2300 return;
2308 } 2301 }
2309 } 2302 }
2310 SleepMs(1); 2303 SleepMs(1);
2311 } 2304 }
(...skipping 12 matching lines...) Expand all
2324 2317
2325 TEST_F(EndToEndTest, GetStats) { 2318 TEST_F(EndToEndTest, GetStats) {
2326 static const int kStartBitrateBps = 3000000; 2319 static const int kStartBitrateBps = 3000000;
2327 static const int kExpectedRenderDelayMs = 20; 2320 static const int kExpectedRenderDelayMs = 20;
2328 class StatsObserver : public test::EndToEndTest, public I420FrameCallback { 2321 class StatsObserver : public test::EndToEndTest, public I420FrameCallback {
2329 public: 2322 public:
2330 StatsObserver() 2323 StatsObserver()
2331 : EndToEndTest(kLongTimeoutMs), 2324 : EndToEndTest(kLongTimeoutMs),
2332 send_stream_(nullptr), 2325 send_stream_(nullptr),
2333 expected_send_ssrcs_(), 2326 expected_send_ssrcs_(),
2334 check_stats_event_(EventWrapper::Create()) {} 2327 check_stats_event_(false, false) {}
2335 2328
2336 private: 2329 private:
2337 Action OnSendRtp(const uint8_t* packet, size_t length) override { 2330 Action OnSendRtp(const uint8_t* packet, size_t length) override {
2338 check_stats_event_->Set(); 2331 check_stats_event_.Set();
2339 return SEND_PACKET; 2332 return SEND_PACKET;
2340 } 2333 }
2341 2334
2342 Action OnSendRtcp(const uint8_t* packet, size_t length) override { 2335 Action OnSendRtcp(const uint8_t* packet, size_t length) override {
2343 check_stats_event_->Set(); 2336 check_stats_event_.Set();
2344 return SEND_PACKET; 2337 return SEND_PACKET;
2345 } 2338 }
2346 2339
2347 Action OnReceiveRtp(const uint8_t* packet, size_t length) override { 2340 Action OnReceiveRtp(const uint8_t* packet, size_t length) override {
2348 check_stats_event_->Set(); 2341 check_stats_event_.Set();
2349 return SEND_PACKET; 2342 return SEND_PACKET;
2350 } 2343 }
2351 2344
2352 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { 2345 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override {
2353 check_stats_event_->Set(); 2346 check_stats_event_.Set();
2354 return SEND_PACKET; 2347 return SEND_PACKET;
2355 } 2348 }
2356 2349
2357 void FrameCallback(VideoFrame* video_frame) override { 2350 void FrameCallback(VideoFrame* video_frame) override {
2358 // Ensure that we have at least 5ms send side delay. 2351 // Ensure that we have at least 5ms send side delay.
2359 int64_t render_time = video_frame->render_time_ms(); 2352 int64_t render_time = video_frame->render_time_ms();
2360 if (render_time > 0) 2353 if (render_time > 0)
2361 video_frame->set_render_time_ms(render_time - 5); 2354 video_frame->set_render_time_ms(render_time - 5);
2362 } 2355 }
2363 2356
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
2533 if (!receive_ok) 2526 if (!receive_ok)
2534 receive_ok = CheckReceiveStats(); 2527 receive_ok = CheckReceiveStats();
2535 if (!send_ok) 2528 if (!send_ok)
2536 send_ok = CheckSendStats(); 2529 send_ok = CheckSendStats();
2537 2530
2538 if (receive_ok && send_ok) 2531 if (receive_ok && send_ok)
2539 return; 2532 return;
2540 2533
2541 int64_t time_until_timout_ = stop_time - now; 2534 int64_t time_until_timout_ = stop_time - now;
2542 if (time_until_timout_ > 0) 2535 if (time_until_timout_ > 0)
2543 check_stats_event_->Wait(time_until_timout_); 2536 check_stats_event_.Wait(time_until_timout_);
2544 now = clock->TimeInMilliseconds(); 2537 now = clock->TimeInMilliseconds();
2545 } 2538 }
2546 2539
2547 ADD_FAILURE() << "Timed out waiting for filled stats."; 2540 ADD_FAILURE() << "Timed out waiting for filled stats.";
2548 for (std::map<std::string, bool>::const_iterator it = 2541 for (std::map<std::string, bool>::const_iterator it =
2549 receive_stats_filled_.begin(); 2542 receive_stats_filled_.begin();
2550 it != receive_stats_filled_.end(); 2543 it != receive_stats_filled_.end();
2551 ++it) { 2544 ++it) {
2552 if (!it->second) { 2545 if (!it->second) {
2553 ADD_FAILURE() << "Missing receive stats: " << it->first; 2546 ADD_FAILURE() << "Missing receive stats: " << it->first;
(...skipping 13 matching lines...) Expand all
2567 std::vector<VideoReceiveStream*> receive_streams_; 2560 std::vector<VideoReceiveStream*> receive_streams_;
2568 std::map<std::string, bool> receive_stats_filled_; 2561 std::map<std::string, bool> receive_stats_filled_;
2569 2562
2570 VideoSendStream* send_stream_; 2563 VideoSendStream* send_stream_;
2571 std::map<std::string, bool> send_stats_filled_; 2564 std::map<std::string, bool> send_stats_filled_;
2572 2565
2573 std::vector<uint32_t> expected_receive_ssrcs_; 2566 std::vector<uint32_t> expected_receive_ssrcs_;
2574 std::set<uint32_t> expected_send_ssrcs_; 2567 std::set<uint32_t> expected_send_ssrcs_;
2575 std::string expected_cname_; 2568 std::string expected_cname_;
2576 2569
2577 rtc::scoped_ptr<EventWrapper> check_stats_event_; 2570 rtc::Event check_stats_event_;
2578 } test; 2571 } test;
2579 2572
2580 FakeNetworkPipe::Config network_config; 2573 FakeNetworkPipe::Config network_config;
2581 network_config.loss_percent = 5; 2574 network_config.loss_percent = 5;
2582 RunBaseTest(&test, network_config); 2575 RunBaseTest(&test, network_config);
2583 } 2576 }
2584 2577
2585 TEST_F(EndToEndTest, ReceiverReferenceTimeReportEnabled) { 2578 TEST_F(EndToEndTest, ReceiverReferenceTimeReportEnabled) {
2586 TestXrReceiverReferenceTimeReport(true); 2579 TestXrReceiverReferenceTimeReport(true);
2587 } 2580 }
(...skipping 15 matching lines...) Expand all
2603 void OnStreamsCreated( 2596 void OnStreamsCreated(
2604 VideoSendStream* send_stream, 2597 VideoSendStream* send_stream,
2605 const std::vector<VideoReceiveStream*>& receive_streams) override { 2598 const std::vector<VideoReceiveStream*>& receive_streams) override {
2606 receive_stream_ = receive_streams[0]; 2599 receive_stream_ = receive_streams[0];
2607 } 2600 }
2608 2601
2609 Action OnSendRtp(const uint8_t* packet, size_t length) override { 2602 Action OnSendRtp(const uint8_t* packet, size_t length) override {
2610 if (sent_rtp_ >= kNumRtpPacketsToSend) { 2603 if (sent_rtp_ >= kNumRtpPacketsToSend) {
2611 VideoReceiveStream::Stats stats = receive_stream_->GetStats(); 2604 VideoReceiveStream::Stats stats = receive_stream_->GetStats();
2612 if (kNumRtpPacketsToSend == stats.rtp_stats.transmitted.packets) { 2605 if (kNumRtpPacketsToSend == stats.rtp_stats.transmitted.packets) {
2613 observation_complete_->Set(); 2606 observation_complete_.Set();
2614 } 2607 }
2615 return DROP_PACKET; 2608 return DROP_PACKET;
2616 } 2609 }
2617 ++sent_rtp_; 2610 ++sent_rtp_;
2618 return SEND_PACKET; 2611 return SEND_PACKET;
2619 } 2612 }
2620 2613
2621 void PerformTest() override { 2614 void PerformTest() override {
2622 EXPECT_EQ(kEventSignaled, Wait()) 2615 EXPECT_TRUE(Wait())
2623 << "Timed out while verifying number of received RTP packets."; 2616 << "Timed out while verifying number of received RTP packets.";
2624 } 2617 }
2625 2618
2626 VideoReceiveStream* receive_stream_; 2619 VideoReceiveStream* receive_stream_;
2627 uint32_t sent_rtp_; 2620 uint32_t sent_rtp_;
2628 } test; 2621 } test;
2629 2622
2630 RunBaseTest(&test, FakeNetworkPipe::Config()); 2623 RunBaseTest(&test, FakeNetworkPipe::Config());
2631 } 2624 }
2632 2625
(...skipping 28 matching lines...) Expand all
2661 EXPECT_LE(header.headerLength + header.paddingLength, length); 2654 EXPECT_LE(header.headerLength + header.paddingLength, length);
2662 const bool packet_is_redundant_payload = 2655 const bool packet_is_redundant_payload =
2663 header.headerLength + header.paddingLength < length; 2656 header.headerLength + header.paddingLength < length;
2664 2657
2665 if (!packet_is_redundant_payload) 2658 if (!packet_is_redundant_payload)
2666 return SEND_PACKET; 2659 return SEND_PACKET;
2667 2660
2668 if (!observed_redundant_retransmission_[header.ssrc]) { 2661 if (!observed_redundant_retransmission_[header.ssrc]) {
2669 observed_redundant_retransmission_[header.ssrc] = true; 2662 observed_redundant_retransmission_[header.ssrc] = true;
2670 if (--ssrcs_to_observe_ == 0) 2663 if (--ssrcs_to_observe_ == 0)
2671 observation_complete_->Set(); 2664 observation_complete_.Set();
2672 } 2665 }
2673 2666
2674 return SEND_PACKET; 2667 return SEND_PACKET;
2675 } 2668 }
2676 2669
2677 size_t GetNumStreams() const override { return kNumSsrcs; } 2670 size_t GetNumStreams() const override { return kNumSsrcs; }
2678 2671
2679 void ModifyConfigs(VideoSendStream::Config* send_config, 2672 void ModifyConfigs(VideoSendStream::Config* send_config,
2680 std::vector<VideoReceiveStream::Config>* receive_configs, 2673 std::vector<VideoReceiveStream::Config>* receive_configs,
2681 VideoEncoderConfig* encoder_config) override { 2674 VideoEncoderConfig* encoder_config) override {
2682 // Set low simulcast bitrates to not have to wait for bandwidth ramp-up. 2675 // Set low simulcast bitrates to not have to wait for bandwidth ramp-up.
2683 for (size_t i = 0; i < encoder_config->streams.size(); ++i) { 2676 for (size_t i = 0; i < encoder_config->streams.size(); ++i) {
2684 encoder_config->streams[i].min_bitrate_bps = 10000; 2677 encoder_config->streams[i].min_bitrate_bps = 10000;
2685 encoder_config->streams[i].target_bitrate_bps = 15000; 2678 encoder_config->streams[i].target_bitrate_bps = 15000;
2686 encoder_config->streams[i].max_bitrate_bps = 20000; 2679 encoder_config->streams[i].max_bitrate_bps = 20000;
2687 } 2680 }
2688 2681
2689 send_config->rtp.rtx.payload_type = kSendRtxPayloadType; 2682 send_config->rtp.rtx.payload_type = kSendRtxPayloadType;
2690 2683
2691 for (size_t i = 0; i < kNumSsrcs; ++i) 2684 for (size_t i = 0; i < kNumSsrcs; ++i)
2692 send_config->rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[i]); 2685 send_config->rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[i]);
2693 2686
2694 // Significantly higher than max bitrates for all video streams -> forcing 2687 // Significantly higher than max bitrates for all video streams -> forcing
2695 // padding to trigger redundant padding on all RTX SSRCs. 2688 // padding to trigger redundant padding on all RTX SSRCs.
2696 encoder_config->min_transmit_bitrate_bps = 100000; 2689 encoder_config->min_transmit_bitrate_bps = 100000;
2697 } 2690 }
2698 2691
2699 void PerformTest() override { 2692 void PerformTest() override {
2700 EXPECT_EQ(kEventSignaled, Wait()) 2693 EXPECT_TRUE(Wait())
2701 << "Timed out while waiting for redundant payloads on all SSRCs."; 2694 << "Timed out while waiting for redundant payloads on all SSRCs.";
2702 } 2695 }
2703 2696
2704 private: 2697 private:
2705 size_t ssrcs_to_observe_; 2698 size_t ssrcs_to_observe_;
2706 std::map<uint32_t, bool> observed_redundant_retransmission_; 2699 std::map<uint32_t, bool> observed_redundant_retransmission_;
2707 std::map<uint32_t, bool> registered_rtx_ssrc_; 2700 std::map<uint32_t, bool> registered_rtx_ssrc_;
2708 } test; 2701 } test;
2709 2702
2710 RunBaseTest(&test, FakeNetworkPipe::Config()); 2703 RunBaseTest(&test, FakeNetworkPipe::Config());
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
2779 << " -> " << timestamp << ") too large for SSRC: " << ssrc << "."; 2772 << " -> " << timestamp << ") too large for SSRC: " << ssrc << ".";
2780 } 2773 }
2781 last_observed_timestamp_[ssrc] = timestamp; 2774 last_observed_timestamp_[ssrc] = timestamp;
2782 } 2775 }
2783 2776
2784 rtc::CritScope lock(&crit_); 2777 rtc::CritScope lock(&crit_);
2785 // Wait for media packets on all ssrcs. 2778 // Wait for media packets on all ssrcs.
2786 if (!ssrc_observed_[ssrc] && !only_padding) { 2779 if (!ssrc_observed_[ssrc] && !only_padding) {
2787 ssrc_observed_[ssrc] = true; 2780 ssrc_observed_[ssrc] = true;
2788 if (--ssrcs_to_observe_ == 0) 2781 if (--ssrcs_to_observe_ == 0)
2789 observation_complete_->Set(); 2782 observation_complete_.Set();
2790 } 2783 }
2791 2784
2792 return SEND_PACKET; 2785 return SEND_PACKET;
2793 } 2786 }
2794 2787
2795 std::map<uint32_t, uint16_t> last_observed_sequence_number_; 2788 std::map<uint32_t, uint16_t> last_observed_sequence_number_;
2796 std::map<uint32_t, uint32_t> last_observed_timestamp_; 2789 std::map<uint32_t, uint32_t> last_observed_timestamp_;
2797 std::map<uint32_t, bool> configured_ssrcs_; 2790 std::map<uint32_t, bool> configured_ssrcs_;
2798 2791
2799 rtc::CriticalSection crit_; 2792 rtc::CriticalSection crit_;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
2840 one_stream.streams.front().max_bitrate_bps += 2833 one_stream.streams.front().max_bitrate_bps +=
2841 encoder_config_.streams[i].max_bitrate_bps; 2834 encoder_config_.streams[i].max_bitrate_bps;
2842 } 2835 }
2843 2836
2844 CreateMatchingReceiveConfigs(&receive_transport); 2837 CreateMatchingReceiveConfigs(&receive_transport);
2845 2838
2846 CreateStreams(); 2839 CreateStreams();
2847 CreateFrameGeneratorCapturer(); 2840 CreateFrameGeneratorCapturer();
2848 2841
2849 Start(); 2842 Start();
2850 EXPECT_EQ(kEventSignaled, observer.Wait()) 2843 EXPECT_TRUE(observer.Wait())
2851 << "Timed out waiting for all SSRCs to send packets."; 2844 << "Timed out waiting for all SSRCs to send packets.";
2852 2845
2853 // Test stream resetting more than once to make sure that the state doesn't 2846 // Test stream resetting more than once to make sure that the state doesn't
2854 // get set once (this could be due to using std::map::insert for instance). 2847 // get set once (this could be due to using std::map::insert for instance).
2855 for (size_t i = 0; i < 3; ++i) { 2848 for (size_t i = 0; i < 3; ++i) {
2856 frame_generator_capturer_->Stop(); 2849 frame_generator_capturer_->Stop();
2857 sender_call_->DestroyVideoSendStream(send_stream_); 2850 sender_call_->DestroyVideoSendStream(send_stream_);
2858 2851
2859 // Re-create VideoSendStream with only one stream. 2852 // Re-create VideoSendStream with only one stream.
2860 send_stream_ = 2853 send_stream_ =
2861 sender_call_->CreateVideoSendStream(send_config_, one_stream); 2854 sender_call_->CreateVideoSendStream(send_config_, one_stream);
2862 send_stream_->Start(); 2855 send_stream_->Start();
2863 CreateFrameGeneratorCapturer(); 2856 CreateFrameGeneratorCapturer();
2864 frame_generator_capturer_->Start(); 2857 frame_generator_capturer_->Start();
2865 2858
2866 observer.ResetExpectedSsrcs(1); 2859 observer.ResetExpectedSsrcs(1);
2867 EXPECT_EQ(kEventSignaled, observer.Wait()) 2860 EXPECT_TRUE(observer.Wait()) << "Timed out waiting for single RTP packet.";
2868 << "Timed out waiting for single RTP packet.";
2869 2861
2870 // Reconfigure back to use all streams. 2862 // Reconfigure back to use all streams.
2871 send_stream_->ReconfigureVideoEncoder(encoder_config_); 2863 send_stream_->ReconfigureVideoEncoder(encoder_config_);
2872 observer.ResetExpectedSsrcs(kNumSsrcs); 2864 observer.ResetExpectedSsrcs(kNumSsrcs);
2873 EXPECT_EQ(kEventSignaled, observer.Wait()) 2865 EXPECT_TRUE(observer.Wait())
2874 << "Timed out waiting for all SSRCs to send packets."; 2866 << "Timed out waiting for all SSRCs to send packets.";
2875 2867
2876 // Reconfigure down to one stream. 2868 // Reconfigure down to one stream.
2877 send_stream_->ReconfigureVideoEncoder(one_stream); 2869 send_stream_->ReconfigureVideoEncoder(one_stream);
2878 observer.ResetExpectedSsrcs(1); 2870 observer.ResetExpectedSsrcs(1);
2879 EXPECT_EQ(kEventSignaled, observer.Wait()) 2871 EXPECT_TRUE(observer.Wait()) << "Timed out waiting for single RTP packet.";
2880 << "Timed out waiting for single RTP packet.";
2881 2872
2882 // Reconfigure back to use all streams. 2873 // Reconfigure back to use all streams.
2883 send_stream_->ReconfigureVideoEncoder(encoder_config_); 2874 send_stream_->ReconfigureVideoEncoder(encoder_config_);
2884 observer.ResetExpectedSsrcs(kNumSsrcs); 2875 observer.ResetExpectedSsrcs(kNumSsrcs);
2885 EXPECT_EQ(kEventSignaled, observer.Wait()) 2876 EXPECT_TRUE(observer.Wait())
2886 << "Timed out waiting for all SSRCs to send packets."; 2877 << "Timed out waiting for all SSRCs to send packets.";
2887 } 2878 }
2888 2879
2889 send_transport.StopSending(); 2880 send_transport.StopSending();
2890 receive_transport.StopSending(); 2881 receive_transport.StopSending();
2891 2882
2892 Stop(); 2883 Stop();
2893 DestroyStreams(); 2884 DestroyStreams();
2894 } 2885 }
2895 2886
(...skipping 13 matching lines...) Expand all
2909 // checking paused_ again. This should be enough for one round of pacing, 2900 // checking paused_ again. This should be enough for one round of pacing,
2910 // otherwise increase. 2901 // otherwise increase.
2911 static const int kNumAcceptedDowntimeRtp = 5; 2902 static const int kNumAcceptedDowntimeRtp = 5;
2912 // A single RTCP may be in the pipeline. 2903 // A single RTCP may be in the pipeline.
2913 static const int kNumAcceptedDowntimeRtcp = 1; 2904 static const int kNumAcceptedDowntimeRtcp = 1;
2914 class NetworkStateTest : public test::EndToEndTest, public test::FakeEncoder { 2905 class NetworkStateTest : public test::EndToEndTest, public test::FakeEncoder {
2915 public: 2906 public:
2916 NetworkStateTest() 2907 NetworkStateTest()
2917 : EndToEndTest(kDefaultTimeoutMs), 2908 : EndToEndTest(kDefaultTimeoutMs),
2918 FakeEncoder(Clock::GetRealTimeClock()), 2909 FakeEncoder(Clock::GetRealTimeClock()),
2919 encoded_frames_(EventWrapper::Create()), 2910 encoded_frames_(false, false),
2920 packet_event_(EventWrapper::Create()), 2911 packet_event_(false, false),
2921 sender_call_(nullptr), 2912 sender_call_(nullptr),
2922 receiver_call_(nullptr), 2913 receiver_call_(nullptr),
2923 sender_state_(kNetworkUp), 2914 sender_state_(kNetworkUp),
2924 sender_rtp_(0), 2915 sender_rtp_(0),
2925 sender_rtcp_(0), 2916 sender_rtcp_(0),
2926 receiver_rtcp_(0), 2917 receiver_rtcp_(0),
2927 down_frames_(0) {} 2918 down_frames_(0) {}
2928 2919
2929 Action OnSendRtp(const uint8_t* packet, size_t length) override { 2920 Action OnSendRtp(const uint8_t* packet, size_t length) override {
2930 rtc::CritScope lock(&test_crit_); 2921 rtc::CritScope lock(&test_crit_);
2931 ++sender_rtp_; 2922 ++sender_rtp_;
2932 packet_event_->Set(); 2923 packet_event_.Set();
2933 return SEND_PACKET; 2924 return SEND_PACKET;
2934 } 2925 }
2935 2926
2936 Action OnSendRtcp(const uint8_t* packet, size_t length) override { 2927 Action OnSendRtcp(const uint8_t* packet, size_t length) override {
2937 rtc::CritScope lock(&test_crit_); 2928 rtc::CritScope lock(&test_crit_);
2938 ++sender_rtcp_; 2929 ++sender_rtcp_;
2939 packet_event_->Set(); 2930 packet_event_.Set();
2940 return SEND_PACKET; 2931 return SEND_PACKET;
2941 } 2932 }
2942 2933
2943 Action OnReceiveRtp(const uint8_t* packet, size_t length) override { 2934 Action OnReceiveRtp(const uint8_t* packet, size_t length) override {
2944 ADD_FAILURE() << "Unexpected receiver RTP, should not be sending."; 2935 ADD_FAILURE() << "Unexpected receiver RTP, should not be sending.";
2945 return SEND_PACKET; 2936 return SEND_PACKET;
2946 } 2937 }
2947 2938
2948 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { 2939 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override {
2949 rtc::CritScope lock(&test_crit_); 2940 rtc::CritScope lock(&test_crit_);
2950 ++receiver_rtcp_; 2941 ++receiver_rtcp_;
2951 packet_event_->Set(); 2942 packet_event_.Set();
2952 return SEND_PACKET; 2943 return SEND_PACKET;
2953 } 2944 }
2954 2945
2955 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { 2946 void OnCallsCreated(Call* sender_call, Call* receiver_call) override {
2956 sender_call_ = sender_call; 2947 sender_call_ = sender_call;
2957 receiver_call_ = receiver_call; 2948 receiver_call_ = receiver_call;
2958 } 2949 }
2959 2950
2960 void ModifyConfigs(VideoSendStream::Config* send_config, 2951 void ModifyConfigs(VideoSendStream::Config* send_config,
2961 std::vector<VideoReceiveStream::Config>* receive_configs, 2952 std::vector<VideoReceiveStream::Config>* receive_configs,
2962 VideoEncoderConfig* encoder_config) override { 2953 VideoEncoderConfig* encoder_config) override {
2963 send_config->encoder_settings.encoder = this; 2954 send_config->encoder_settings.encoder = this;
2964 } 2955 }
2965 2956
2966 void PerformTest() override { 2957 void PerformTest() override {
2967 EXPECT_EQ(kEventSignaled, encoded_frames_->Wait(kDefaultTimeoutMs)) 2958 EXPECT_TRUE(encoded_frames_.Wait(kDefaultTimeoutMs))
2968 << "No frames received by the encoder."; 2959 << "No frames received by the encoder.";
2969 // Wait for packets from both sender/receiver. 2960 // Wait for packets from both sender/receiver.
2970 WaitForPacketsOrSilence(false, false); 2961 WaitForPacketsOrSilence(false, false);
2971 2962
2972 // Sender-side network down. 2963 // Sender-side network down.
2973 sender_call_->SignalNetworkState(kNetworkDown); 2964 sender_call_->SignalNetworkState(kNetworkDown);
2974 { 2965 {
2975 rtc::CritScope lock(&test_crit_); 2966 rtc::CritScope lock(&test_crit_);
2976 // After network goes down we shouldn't be encoding more frames. 2967 // After network goes down we shouldn't be encoding more frames.
2977 sender_state_ = kNetworkDown; 2968 sender_state_ = kNetworkDown;
(...skipping 20 matching lines...) Expand all
2998 int32_t Encode(const VideoFrame& input_image, 2989 int32_t Encode(const VideoFrame& input_image,
2999 const CodecSpecificInfo* codec_specific_info, 2990 const CodecSpecificInfo* codec_specific_info,
3000 const std::vector<FrameType>* frame_types) override { 2991 const std::vector<FrameType>* frame_types) override {
3001 { 2992 {
3002 rtc::CritScope lock(&test_crit_); 2993 rtc::CritScope lock(&test_crit_);
3003 if (sender_state_ == kNetworkDown) { 2994 if (sender_state_ == kNetworkDown) {
3004 ++down_frames_; 2995 ++down_frames_;
3005 EXPECT_LE(down_frames_, 1) 2996 EXPECT_LE(down_frames_, 1)
3006 << "Encoding more than one frame while network is down."; 2997 << "Encoding more than one frame while network is down.";
3007 if (down_frames_ > 1) 2998 if (down_frames_ > 1)
3008 encoded_frames_->Set(); 2999 encoded_frames_.Set();
3009 } else { 3000 } else {
3010 encoded_frames_->Set(); 3001 encoded_frames_.Set();
3011 } 3002 }
3012 } 3003 }
3013 return test::FakeEncoder::Encode( 3004 return test::FakeEncoder::Encode(
3014 input_image, codec_specific_info, frame_types); 3005 input_image, codec_specific_info, frame_types);
3015 } 3006 }
3016 3007
3017 private: 3008 private:
3018 void WaitForPacketsOrSilence(bool sender_down, bool receiver_down) { 3009 void WaitForPacketsOrSilence(bool sender_down, bool receiver_down) {
3019 int64_t initial_time_ms = clock_->TimeInMilliseconds(); 3010 int64_t initial_time_ms = clock_->TimeInMilliseconds();
3020 int initial_sender_rtp; 3011 int initial_sender_rtp;
3021 int initial_sender_rtcp; 3012 int initial_sender_rtcp;
3022 int initial_receiver_rtcp; 3013 int initial_receiver_rtcp;
3023 { 3014 {
3024 rtc::CritScope lock(&test_crit_); 3015 rtc::CritScope lock(&test_crit_);
3025 initial_sender_rtp = sender_rtp_; 3016 initial_sender_rtp = sender_rtp_;
3026 initial_sender_rtcp = sender_rtcp_; 3017 initial_sender_rtcp = sender_rtcp_;
3027 initial_receiver_rtcp = receiver_rtcp_; 3018 initial_receiver_rtcp = receiver_rtcp_;
3028 } 3019 }
3029 bool sender_done = false; 3020 bool sender_done = false;
3030 bool receiver_done = false; 3021 bool receiver_done = false;
3031 while(!sender_done || !receiver_done) { 3022 while(!sender_done || !receiver_done) {
3032 packet_event_->Wait(kSilenceTimeoutMs); 3023 packet_event_.Wait(kSilenceTimeoutMs);
3033 int64_t time_now_ms = clock_->TimeInMilliseconds(); 3024 int64_t time_now_ms = clock_->TimeInMilliseconds();
3034 rtc::CritScope lock(&test_crit_); 3025 rtc::CritScope lock(&test_crit_);
3035 if (sender_down) { 3026 if (sender_down) {
3036 ASSERT_LE(sender_rtp_ - initial_sender_rtp, kNumAcceptedDowntimeRtp) 3027 ASSERT_LE(sender_rtp_ - initial_sender_rtp, kNumAcceptedDowntimeRtp)
3037 << "RTP sent during sender-side downtime."; 3028 << "RTP sent during sender-side downtime.";
3038 ASSERT_LE(sender_rtcp_ - initial_sender_rtcp, 3029 ASSERT_LE(sender_rtcp_ - initial_sender_rtcp,
3039 kNumAcceptedDowntimeRtcp) 3030 kNumAcceptedDowntimeRtcp)
3040 << "RTCP sent during sender-side downtime."; 3031 << "RTCP sent during sender-side downtime.";
3041 if (time_now_ms - initial_time_ms >= 3032 if (time_now_ms - initial_time_ms >=
3042 static_cast<int64_t>(kSilenceTimeoutMs)) { 3033 static_cast<int64_t>(kSilenceTimeoutMs)) {
(...skipping 12 matching lines...) Expand all
3055 receiver_done = true; 3046 receiver_done = true;
3056 } 3047 }
3057 } else { 3048 } else {
3058 if (receiver_rtcp_ > initial_receiver_rtcp) 3049 if (receiver_rtcp_ > initial_receiver_rtcp)
3059 receiver_done = true; 3050 receiver_done = true;
3060 } 3051 }
3061 } 3052 }
3062 } 3053 }
3063 3054
3064 rtc::CriticalSection test_crit_; 3055 rtc::CriticalSection test_crit_;
3065 const rtc::scoped_ptr<EventWrapper> encoded_frames_; 3056 rtc::Event encoded_frames_;
3066 const rtc::scoped_ptr<EventWrapper> packet_event_; 3057 rtc::Event packet_event_;
3067 Call* sender_call_; 3058 Call* sender_call_;
3068 Call* receiver_call_; 3059 Call* receiver_call_;
3069 NetworkState sender_state_ GUARDED_BY(test_crit_); 3060 NetworkState sender_state_ GUARDED_BY(test_crit_);
3070 int sender_rtp_ GUARDED_BY(test_crit_); 3061 int sender_rtp_ GUARDED_BY(test_crit_);
3071 int sender_rtcp_ GUARDED_BY(test_crit_); 3062 int sender_rtcp_ GUARDED_BY(test_crit_);
3072 int receiver_rtcp_ GUARDED_BY(test_crit_); 3063 int receiver_rtcp_ GUARDED_BY(test_crit_);
3073 int down_frames_ GUARDED_BY(test_crit_); 3064 int down_frames_ GUARDED_BY(test_crit_);
3074 } test; 3065 } test;
3075 3066
3076 RunBaseTest(&test, FakeNetworkPipe::Config()); 3067 RunBaseTest(&test, FakeNetworkPipe::Config());
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
3204 EXPECT_TRUE(default_receive_config.rtp.rtx.empty()) 3195 EXPECT_TRUE(default_receive_config.rtp.rtx.empty())
3205 << "Enabling RTX requires rtpmap: rtx negotiation."; 3196 << "Enabling RTX requires rtpmap: rtx negotiation.";
3206 EXPECT_TRUE(default_receive_config.rtp.extensions.empty()) 3197 EXPECT_TRUE(default_receive_config.rtp.extensions.empty())
3207 << "Enabling RTP extensions require negotiation."; 3198 << "Enabling RTP extensions require negotiation.";
3208 3199
3209 VerifyEmptyNackConfig(default_receive_config.rtp.nack); 3200 VerifyEmptyNackConfig(default_receive_config.rtp.nack);
3210 VerifyEmptyFecConfig(default_receive_config.rtp.fec); 3201 VerifyEmptyFecConfig(default_receive_config.rtp.fec);
3211 } 3202 }
3212 3203
3213 } // namespace webrtc 3204 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698