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

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

Powered by Google App Engine
This is Rietveld 408576698