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

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

Issue 1487893004: Replace EventWrapper in video/, test/ and call/. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 #include <algorithm> // max 10 #include <algorithm> // max
11 #include <vector> 11 #include <vector>
12 12
13 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
14 14
15 #include "webrtc/base/bind.h" 15 #include "webrtc/base/bind.h"
16 #include "webrtc/base/checks.h" 16 #include "webrtc/base/checks.h"
17 #include "webrtc/base/criticalsection.h" 17 #include "webrtc/base/criticalsection.h"
18 #include "webrtc/base/event.h"
18 #include "webrtc/base/logging.h" 19 #include "webrtc/base/logging.h"
19 #include "webrtc/base/platform_thread.h" 20 #include "webrtc/base/platform_thread.h"
20 #include "webrtc/base/scoped_ptr.h" 21 #include "webrtc/base/scoped_ptr.h"
21 #include "webrtc/call.h" 22 #include "webrtc/call.h"
22 #include "webrtc/call/transport_adapter.h" 23 #include "webrtc/call/transport_adapter.h"
23 #include "webrtc/frame_callback.h" 24 #include "webrtc/frame_callback.h"
24 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h" 25 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h"
25 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h" 26 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h"
26 #include "webrtc/modules/rtp_rtcp/source/rtcp_sender.h" 27 #include "webrtc/modules/rtp_rtcp/source/rtcp_sender.h"
27 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" 28 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h"
28 #include "webrtc/modules/rtp_rtcp/source/rtp_format_vp9.h" 29 #include "webrtc/modules/rtp_rtcp/source/rtp_format_vp9.h"
29 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h" 30 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h"
30 #include "webrtc/system_wrappers/include/critical_section_wrapper.h" 31 #include "webrtc/system_wrappers/include/critical_section_wrapper.h"
31 #include "webrtc/system_wrappers/include/event_wrapper.h" 32 #include "webrtc/system_wrappers/include/event_wrapper.h"
mflodman 2015/12/10 08:11:34 Remove.
pbos-webrtc 2015/12/10 11:44:55 Done.
32 #include "webrtc/system_wrappers/include/ref_count.h" 33 #include "webrtc/system_wrappers/include/ref_count.h"
33 #include "webrtc/system_wrappers/include/sleep.h" 34 #include "webrtc/system_wrappers/include/sleep.h"
34 #include "webrtc/test/call_test.h" 35 #include "webrtc/test/call_test.h"
35 #include "webrtc/test/configurable_frame_size_encoder.h" 36 #include "webrtc/test/configurable_frame_size_encoder.h"
36 #include "webrtc/test/fake_texture_frame.h" 37 #include "webrtc/test/fake_texture_frame.h"
37 #include "webrtc/test/null_transport.h" 38 #include "webrtc/test/null_transport.h"
38 #include "webrtc/test/testsupport/perf_test.h" 39 #include "webrtc/test/testsupport/perf_test.h"
39 #include "webrtc/video/send_statistics_proxy.h" 40 #include "webrtc/video/send_statistics_proxy.h"
40 #include "webrtc/video_frame.h" 41 #include "webrtc/video_frame.h"
41 #include "webrtc/video_send_stream.h" 42 #include "webrtc/video_send_stream.h"
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 93
93 private: 94 private:
94 Action OnSendRtcp(const uint8_t* packet, size_t length) override { 95 Action OnSendRtcp(const uint8_t* packet, size_t length) override {
95 RTCPUtility::RTCPParserV2 parser(packet, length, true); 96 RTCPUtility::RTCPParserV2 parser(packet, length, true);
96 EXPECT_TRUE(parser.IsValid()); 97 EXPECT_TRUE(parser.IsValid());
97 98
98 RTCPUtility::RTCPPacketTypes packet_type = parser.Begin(); 99 RTCPUtility::RTCPPacketTypes packet_type = parser.Begin();
99 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) { 100 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) {
100 if (packet_type == RTCPUtility::RTCPPacketTypes::kSdesChunk) { 101 if (packet_type == RTCPUtility::RTCPPacketTypes::kSdesChunk) {
101 EXPECT_EQ(parser.Packet().CName.CName, kCName); 102 EXPECT_EQ(parser.Packet().CName.CName, kCName);
102 observation_complete_->Set(); 103 observation_complete_.Set();
103 } 104 }
104 105
105 packet_type = parser.Iterate(); 106 packet_type = parser.Iterate();
106 } 107 }
107 108
108 return SEND_PACKET; 109 return SEND_PACKET;
109 } 110 }
110 111
111 void ModifyConfigs(VideoSendStream::Config* send_config, 112 void ModifyConfigs(VideoSendStream::Config* send_config,
112 std::vector<VideoReceiveStream::Config>* receive_configs, 113 std::vector<VideoReceiveStream::Config>* receive_configs,
113 VideoEncoderConfig* encoder_config) override { 114 VideoEncoderConfig* encoder_config) override {
114 send_config->rtp.c_name = kCName; 115 send_config->rtp.c_name = kCName;
115 } 116 }
116 117
117 void PerformTest() override { 118 void PerformTest() override {
118 EXPECT_EQ(kEventSignaled, Wait()) 119 EXPECT_TRUE(Wait()) << "Timed out while waiting for RTCP with CNAME.";
119 << "Timed out while waiting for RTCP with CNAME.";
120 } 120 }
121 } test; 121 } test;
122 122
123 RunBaseTest(&test, FakeNetworkPipe::Config()); 123 RunBaseTest(&test, FakeNetworkPipe::Config());
124 } 124 }
125 125
126 TEST_F(VideoSendStreamTest, SupportsAbsoluteSendTime) { 126 TEST_F(VideoSendStreamTest, SupportsAbsoluteSendTime) {
127 static const uint8_t kAbsSendTimeExtensionId = 13; 127 static const uint8_t kAbsSendTimeExtensionId = 13;
128 class AbsoluteSendTimeObserver : public test::SendTest { 128 class AbsoluteSendTimeObserver : public test::SendTest {
129 public: 129 public:
130 AbsoluteSendTimeObserver() : SendTest(kDefaultTimeoutMs) { 130 AbsoluteSendTimeObserver() : SendTest(kDefaultTimeoutMs) {
131 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension( 131 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension(
132 kRtpExtensionAbsoluteSendTime, kAbsSendTimeExtensionId)); 132 kRtpExtensionAbsoluteSendTime, kAbsSendTimeExtensionId));
133 } 133 }
134 134
135 Action OnSendRtp(const uint8_t* packet, size_t length) override { 135 Action OnSendRtp(const uint8_t* packet, size_t length) override {
136 RTPHeader header; 136 RTPHeader header;
137 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 137 EXPECT_TRUE(parser_->Parse(packet, length, &header));
138 138
139 EXPECT_FALSE(header.extension.hasTransmissionTimeOffset); 139 EXPECT_FALSE(header.extension.hasTransmissionTimeOffset);
140 EXPECT_TRUE(header.extension.hasAbsoluteSendTime); 140 EXPECT_TRUE(header.extension.hasAbsoluteSendTime);
141 EXPECT_EQ(header.extension.transmissionTimeOffset, 0); 141 EXPECT_EQ(header.extension.transmissionTimeOffset, 0);
142 EXPECT_GT(header.extension.absoluteSendTime, 0u); 142 EXPECT_GT(header.extension.absoluteSendTime, 0u);
143 observation_complete_->Set(); 143 observation_complete_.Set();
144 144
145 return SEND_PACKET; 145 return SEND_PACKET;
146 } 146 }
147 147
148 void ModifyConfigs(VideoSendStream::Config* send_config, 148 void ModifyConfigs(VideoSendStream::Config* send_config,
149 std::vector<VideoReceiveStream::Config>* receive_configs, 149 std::vector<VideoReceiveStream::Config>* receive_configs,
150 VideoEncoderConfig* encoder_config) override { 150 VideoEncoderConfig* encoder_config) override {
151 send_config->rtp.extensions.clear(); 151 send_config->rtp.extensions.clear();
152 send_config->rtp.extensions.push_back( 152 send_config->rtp.extensions.push_back(
153 RtpExtension(RtpExtension::kAbsSendTime, kAbsSendTimeExtensionId)); 153 RtpExtension(RtpExtension::kAbsSendTime, kAbsSendTimeExtensionId));
154 } 154 }
155 155
156 void PerformTest() override { 156 void PerformTest() override {
157 EXPECT_EQ(kEventSignaled, Wait()) 157 EXPECT_TRUE(Wait()) << "Timed out while waiting for single RTP packet.";
158 << "Timed out while waiting for single RTP packet.";
159 } 158 }
160 } test; 159 } test;
161 160
162 RunBaseTest(&test, FakeNetworkPipe::Config()); 161 RunBaseTest(&test, FakeNetworkPipe::Config());
163 } 162 }
164 163
165 TEST_F(VideoSendStreamTest, SupportsTransmissionTimeOffset) { 164 TEST_F(VideoSendStreamTest, SupportsTransmissionTimeOffset) {
166 static const int kEncodeDelayMs = 5; 165 static const int kEncodeDelayMs = 5;
167 class TransmissionTimeOffsetObserver : public test::SendTest { 166 class TransmissionTimeOffsetObserver : public test::SendTest {
168 public: 167 public:
169 TransmissionTimeOffsetObserver() 168 TransmissionTimeOffsetObserver()
170 : SendTest(kDefaultTimeoutMs), 169 : SendTest(kDefaultTimeoutMs),
171 encoder_(Clock::GetRealTimeClock(), kEncodeDelayMs) { 170 encoder_(Clock::GetRealTimeClock(), kEncodeDelayMs) {
172 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension( 171 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension(
173 kRtpExtensionTransmissionTimeOffset, test::kTOffsetExtensionId)); 172 kRtpExtensionTransmissionTimeOffset, test::kTOffsetExtensionId));
174 } 173 }
175 174
176 private: 175 private:
177 Action OnSendRtp(const uint8_t* packet, size_t length) override { 176 Action OnSendRtp(const uint8_t* packet, size_t length) override {
178 RTPHeader header; 177 RTPHeader header;
179 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 178 EXPECT_TRUE(parser_->Parse(packet, length, &header));
180 179
181 EXPECT_TRUE(header.extension.hasTransmissionTimeOffset); 180 EXPECT_TRUE(header.extension.hasTransmissionTimeOffset);
182 EXPECT_FALSE(header.extension.hasAbsoluteSendTime); 181 EXPECT_FALSE(header.extension.hasAbsoluteSendTime);
183 EXPECT_GT(header.extension.transmissionTimeOffset, 0); 182 EXPECT_GT(header.extension.transmissionTimeOffset, 0);
184 EXPECT_EQ(header.extension.absoluteSendTime, 0u); 183 EXPECT_EQ(header.extension.absoluteSendTime, 0u);
185 observation_complete_->Set(); 184 observation_complete_.Set();
186 185
187 return SEND_PACKET; 186 return SEND_PACKET;
188 } 187 }
189 188
190 void ModifyConfigs(VideoSendStream::Config* send_config, 189 void ModifyConfigs(VideoSendStream::Config* send_config,
191 std::vector<VideoReceiveStream::Config>* receive_configs, 190 std::vector<VideoReceiveStream::Config>* receive_configs,
192 VideoEncoderConfig* encoder_config) override { 191 VideoEncoderConfig* encoder_config) override {
193 send_config->encoder_settings.encoder = &encoder_; 192 send_config->encoder_settings.encoder = &encoder_;
194 send_config->rtp.extensions.clear(); 193 send_config->rtp.extensions.clear();
195 send_config->rtp.extensions.push_back( 194 send_config->rtp.extensions.push_back(
196 RtpExtension(RtpExtension::kTOffset, test::kTOffsetExtensionId)); 195 RtpExtension(RtpExtension::kTOffset, test::kTOffsetExtensionId));
197 } 196 }
198 197
199 void PerformTest() override { 198 void PerformTest() override {
200 EXPECT_EQ(kEventSignaled, Wait()) 199 EXPECT_TRUE(Wait()) << "Timed out while waiting for a single RTP packet.";
201 << "Timed out while waiting for a single RTP packet.";
202 } 200 }
203 201
204 test::DelayedEncoder encoder_; 202 test::DelayedEncoder encoder_;
205 } test; 203 } test;
206 204
207 RunBaseTest(&test, FakeNetworkPipe::Config()); 205 RunBaseTest(&test, FakeNetworkPipe::Config());
208 } 206 }
209 207
210 TEST_F(VideoSendStreamTest, SupportsTransportWideSequenceNumbers) { 208 TEST_F(VideoSendStreamTest, SupportsTransportWideSequenceNumbers) {
211 static const uint8_t kExtensionId = 13; 209 static const uint8_t kExtensionId = 13;
212 class TransportWideSequenceNumberObserver : public test::SendTest { 210 class TransportWideSequenceNumberObserver : public test::SendTest {
213 public: 211 public:
214 TransportWideSequenceNumberObserver() 212 TransportWideSequenceNumberObserver()
215 : SendTest(kDefaultTimeoutMs), encoder_(Clock::GetRealTimeClock()) { 213 : SendTest(kDefaultTimeoutMs), encoder_(Clock::GetRealTimeClock()) {
216 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension( 214 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension(
217 kRtpExtensionTransportSequenceNumber, kExtensionId)); 215 kRtpExtensionTransportSequenceNumber, kExtensionId));
218 } 216 }
219 217
220 private: 218 private:
221 Action OnSendRtp(const uint8_t* packet, size_t length) override { 219 Action OnSendRtp(const uint8_t* packet, size_t length) override {
222 RTPHeader header; 220 RTPHeader header;
223 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 221 EXPECT_TRUE(parser_->Parse(packet, length, &header));
224 222
225 EXPECT_TRUE(header.extension.hasTransportSequenceNumber); 223 EXPECT_TRUE(header.extension.hasTransportSequenceNumber);
226 EXPECT_FALSE(header.extension.hasTransmissionTimeOffset); 224 EXPECT_FALSE(header.extension.hasTransmissionTimeOffset);
227 EXPECT_FALSE(header.extension.hasAbsoluteSendTime); 225 EXPECT_FALSE(header.extension.hasAbsoluteSendTime);
228 226
229 observation_complete_->Set(); 227 observation_complete_.Set();
230 228
231 return SEND_PACKET; 229 return SEND_PACKET;
232 } 230 }
233 231
234 void ModifyConfigs(VideoSendStream::Config* send_config, 232 void ModifyConfigs(VideoSendStream::Config* send_config,
235 std::vector<VideoReceiveStream::Config>* receive_configs, 233 std::vector<VideoReceiveStream::Config>* receive_configs,
236 VideoEncoderConfig* encoder_config) override { 234 VideoEncoderConfig* encoder_config) override {
237 send_config->encoder_settings.encoder = &encoder_; 235 send_config->encoder_settings.encoder = &encoder_;
238 send_config->rtp.extensions.clear(); 236 send_config->rtp.extensions.clear();
239 send_config->rtp.extensions.push_back( 237 send_config->rtp.extensions.push_back(
240 RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId)); 238 RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId));
241 } 239 }
242 240
243 void PerformTest() override { 241 void PerformTest() override {
244 EXPECT_EQ(kEventSignaled, Wait()) 242 EXPECT_TRUE(Wait()) << "Timed out while waiting for a single RTP packet.";
245 << "Timed out while waiting for a single RTP packet.";
246 } 243 }
247 244
248 test::FakeEncoder encoder_; 245 test::FakeEncoder encoder_;
249 } test; 246 } test;
250 247
251 RunBaseTest(&test, FakeNetworkPipe::Config()); 248 RunBaseTest(&test, FakeNetworkPipe::Config());
252 } 249 }
253 250
254 class FakeReceiveStatistics : public NullReceiveStatistics { 251 class FakeReceiveStatistics : public NullReceiveStatistics {
255 public: 252 public:
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 348
352 if (encapsulated_payload_type != -1) { 349 if (encapsulated_payload_type != -1) {
353 if (encapsulated_payload_type == kUlpfecPayloadType) { 350 if (encapsulated_payload_type == kUlpfecPayloadType) {
354 received_fec_ = true; 351 received_fec_ = true;
355 } else { 352 } else {
356 received_media_ = true; 353 received_media_ = true;
357 } 354 }
358 } 355 }
359 356
360 if (received_media_ && received_fec_) 357 if (received_media_ && received_fec_)
361 observation_complete_->Set(); 358 observation_complete_.Set();
362 359
363 return SEND_PACKET; 360 return SEND_PACKET;
364 } 361 }
365 362
366 void ModifyConfigs(VideoSendStream::Config* send_config, 363 void ModifyConfigs(VideoSendStream::Config* send_config,
367 std::vector<VideoReceiveStream::Config>* receive_configs, 364 std::vector<VideoReceiveStream::Config>* receive_configs,
368 VideoEncoderConfig* encoder_config) override { 365 VideoEncoderConfig* encoder_config) override {
369 transport_adapter_.reset( 366 transport_adapter_.reset(
370 new internal::TransportAdapter(send_config->send_transport)); 367 new internal::TransportAdapter(send_config->send_transport));
371 transport_adapter_->Enable(); 368 transport_adapter_->Enable();
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 retransmit_ssrc_ != kSendSsrcs[0]) { 426 retransmit_ssrc_ != kSendSsrcs[0]) {
430 // Not kSendSsrcs[0], assume correct RTX packet. Extract sequence 427 // Not kSendSsrcs[0], assume correct RTX packet. Extract sequence
431 // number. 428 // number.
432 const uint8_t* rtx_header = packet + header.headerLength; 429 const uint8_t* rtx_header = packet + header.headerLength;
433 sequence_number = (rtx_header[0] << 8) + rtx_header[1]; 430 sequence_number = (rtx_header[0] << 8) + rtx_header[1];
434 } 431 }
435 432
436 if (sequence_number == nacked_sequence_number_) { 433 if (sequence_number == nacked_sequence_number_) {
437 EXPECT_EQ(retransmit_ssrc_, header.ssrc); 434 EXPECT_EQ(retransmit_ssrc_, header.ssrc);
438 EXPECT_EQ(retransmit_payload_type_, header.payloadType); 435 EXPECT_EQ(retransmit_payload_type_, header.payloadType);
439 observation_complete_->Set(); 436 observation_complete_.Set();
440 } 437 }
441 438
442 return SEND_PACKET; 439 return SEND_PACKET;
443 } 440 }
444 441
445 void ModifyConfigs(VideoSendStream::Config* send_config, 442 void ModifyConfigs(VideoSendStream::Config* send_config,
446 std::vector<VideoReceiveStream::Config>* receive_configs, 443 std::vector<VideoReceiveStream::Config>* receive_configs,
447 VideoEncoderConfig* encoder_config) override { 444 VideoEncoderConfig* encoder_config) override {
448 transport_adapter_.reset( 445 transport_adapter_.reset(
449 new internal::TransportAdapter(send_config->send_transport)); 446 new internal::TransportAdapter(send_config->send_transport));
450 transport_adapter_->Enable(); 447 transport_adapter_->Enable();
451 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 448 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
452 send_config->rtp.rtx.payload_type = retransmit_payload_type_; 449 send_config->rtp.rtx.payload_type = retransmit_payload_type_;
453 if (retransmit_ssrc_ != kSendSsrcs[0]) 450 if (retransmit_ssrc_ != kSendSsrcs[0])
454 send_config->rtp.rtx.ssrcs.push_back(retransmit_ssrc_); 451 send_config->rtp.rtx.ssrcs.push_back(retransmit_ssrc_);
455 } 452 }
456 453
457 void PerformTest() override { 454 void PerformTest() override {
458 EXPECT_EQ(kEventSignaled, Wait()) 455 EXPECT_TRUE(Wait()) << "Timed out while waiting for NACK retransmission.";
459 << "Timed out while waiting for NACK retransmission.";
460 } 456 }
461 457
462 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_; 458 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_;
463 int send_count_; 459 int send_count_;
464 uint32_t retransmit_ssrc_; 460 uint32_t retransmit_ssrc_;
465 uint8_t retransmit_payload_type_; 461 uint8_t retransmit_payload_type_;
466 int nacked_sequence_number_; 462 int nacked_sequence_number_;
467 } test(retransmit_ssrc, retransmit_payload_type); 463 } test(retransmit_ssrc, retransmit_payload_type);
468 464
469 RunBaseTest(&test, FakeNetworkPipe::Config()); 465 RunBaseTest(&test, FakeNetworkPipe::Config());
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
565 EXPECT_GE(accumulated_size_, current_size_rtp_); 561 EXPECT_GE(accumulated_size_, current_size_rtp_);
566 if (test_generic_packetization_) { 562 if (test_generic_packetization_) {
567 EXPECT_EQ(current_size_rtp_, accumulated_payload_); 563 EXPECT_EQ(current_size_rtp_, accumulated_payload_);
568 } 564 }
569 565
570 // Last packet of frame; reset counters. 566 // Last packet of frame; reset counters.
571 accumulated_size_ = 0; 567 accumulated_size_ = 0;
572 accumulated_payload_ = 0; 568 accumulated_payload_ = 0;
573 if (current_size_rtp_ == stop_size_) { 569 if (current_size_rtp_ == stop_size_) {
574 // Done! (Don't increase size again, might arrive more @ stop_size). 570 // Done! (Don't increase size again, might arrive more @ stop_size).
575 observation_complete_->Set(); 571 observation_complete_.Set();
576 } else { 572 } else {
577 // Increase next expected frame size. If testing with FEC, make sure 573 // Increase next expected frame size. If testing with FEC, make sure
578 // a FEC packet has been received for this frame size before 574 // a FEC packet has been received for this frame size before
579 // proceeding, to make sure that redundancy packets don't exceed 575 // proceeding, to make sure that redundancy packets don't exceed
580 // size limit. 576 // size limit.
581 if (!use_fec_) { 577 if (!use_fec_) {
582 ++current_size_rtp_; 578 ++current_size_rtp_;
583 } else if (fec_packet_received_) { 579 } else if (fec_packet_received_) {
584 fec_packet_received_ = false; 580 fec_packet_received_ = false;
585 ++current_size_rtp_; 581 ++current_size_rtp_;
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
644 send_config->encoder_settings.encoder = &encoder_; 640 send_config->encoder_settings.encoder = &encoder_;
645 send_config->rtp.max_packet_size = kMaxPacketSize; 641 send_config->rtp.max_packet_size = kMaxPacketSize;
646 send_config->post_encode_callback = this; 642 send_config->post_encode_callback = this;
647 643
648 // Make sure there is at least one extension header, to make the RTP 644 // Make sure there is at least one extension header, to make the RTP
649 // header larger than the base length of 12 bytes. 645 // header larger than the base length of 12 bytes.
650 EXPECT_FALSE(send_config->rtp.extensions.empty()); 646 EXPECT_FALSE(send_config->rtp.extensions.empty());
651 } 647 }
652 648
653 void PerformTest() override { 649 void PerformTest() override {
654 EXPECT_EQ(kEventSignaled, Wait()) 650 EXPECT_TRUE(Wait()) << "Timed out while observing incoming RTP packets.";
655 << "Timed out while observing incoming RTP packets.";
656 } 651 }
657 652
658 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_; 653 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_;
659 test::ConfigurableFrameSizeEncoder encoder_; 654 test::ConfigurableFrameSizeEncoder encoder_;
660 655
661 const size_t max_packet_size_; 656 const size_t max_packet_size_;
662 const size_t stop_size_; 657 const size_t stop_size_;
663 const bool test_generic_packetization_; 658 const bool test_generic_packetization_;
664 const bool use_fec_; 659 const bool use_fec_;
665 660
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
745 if (header.paddingLength == 0) { 740 if (header.paddingLength == 0) {
746 // Non-padding packet observed. Test is almost complete. Will just 741 // Non-padding packet observed. Test is almost complete. Will just
747 // have to wait for the stats to change. 742 // have to wait for the stats to change.
748 test_state_ = kWaitingForStats; 743 test_state_ = kWaitingForStats;
749 } 744 }
750 SendRtcpFeedback(0); // REMB is only sent if value is > 0. 745 SendRtcpFeedback(0); // REMB is only sent if value is > 0.
751 } else if (test_state_ == kWaitingForStats) { 746 } else if (test_state_ == kWaitingForStats) {
752 VideoSendStream::Stats stats = stream_->GetStats(); 747 VideoSendStream::Stats stats = stream_->GetStats();
753 if (stats.suspended == false) { 748 if (stats.suspended == false) {
754 // Stats flipped to false. Test is complete. 749 // Stats flipped to false. Test is complete.
755 observation_complete_->Set(); 750 observation_complete_.Set();
756 } 751 }
757 SendRtcpFeedback(0); // REMB is only sent if value is > 0. 752 SendRtcpFeedback(0); // REMB is only sent if value is > 0.
758 } 753 }
759 754
760 return SEND_PACKET; 755 return SEND_PACKET;
761 } 756 }
762 757
763 // This method implements the I420FrameCallback. 758 // This method implements the I420FrameCallback.
764 void FrameCallback(VideoFrame* video_frame) override { 759 void FrameCallback(VideoFrame* video_frame) override {
765 rtc::CritScope lock(&crit_); 760 rtc::CritScope lock(&crit_);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
799 send_config->suspend_below_min_bitrate = true; 794 send_config->suspend_below_min_bitrate = true;
800 int min_bitrate_bps = encoder_config->streams[0].min_bitrate_bps; 795 int min_bitrate_bps = encoder_config->streams[0].min_bitrate_bps;
801 set_low_remb_bps(min_bitrate_bps - 10000); 796 set_low_remb_bps(min_bitrate_bps - 10000);
802 int threshold_window = std::max(min_bitrate_bps / 10, 10000); 797 int threshold_window = std::max(min_bitrate_bps / 10, 10000);
803 ASSERT_GT(encoder_config->streams[0].max_bitrate_bps, 798 ASSERT_GT(encoder_config->streams[0].max_bitrate_bps,
804 min_bitrate_bps + threshold_window + 5000); 799 min_bitrate_bps + threshold_window + 5000);
805 set_high_remb_bps(min_bitrate_bps + threshold_window + 5000); 800 set_high_remb_bps(min_bitrate_bps + threshold_window + 5000);
806 } 801 }
807 802
808 void PerformTest() override { 803 void PerformTest() override {
809 EXPECT_EQ(kEventSignaled, Wait()) 804 EXPECT_TRUE(Wait()) << "Timed out during suspend-below-min-bitrate test.";
810 << "Timed out during suspend-below-min-bitrate test.";
811 } 805 }
812 806
813 enum TestState { 807 enum TestState {
814 kBeforeSuspend, 808 kBeforeSuspend,
815 kDuringSuspend, 809 kDuringSuspend,
816 kWaitingForPacket, 810 kWaitingForPacket,
817 kWaitingForStats 811 kWaitingForStats
818 }; 812 };
819 813
820 virtual void SendRtcpFeedback(int remb_value) 814 virtual void SendRtcpFeedback(int remb_value)
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
867 capturer_->Stop(); 861 capturer_->Stop();
868 return SEND_PACKET; 862 return SEND_PACKET;
869 } 863 }
870 864
871 Action OnSendRtcp(const uint8_t* packet, size_t length) override { 865 Action OnSendRtcp(const uint8_t* packet, size_t length) override {
872 rtc::CritScope lock(&crit_); 866 rtc::CritScope lock(&crit_);
873 const int kVideoMutedThresholdMs = 10000; 867 const int kVideoMutedThresholdMs = 10000;
874 if (last_packet_time_ms_ > 0 && 868 if (last_packet_time_ms_ > 0 &&
875 clock_->TimeInMilliseconds() - last_packet_time_ms_ > 869 clock_->TimeInMilliseconds() - last_packet_time_ms_ >
876 kVideoMutedThresholdMs) 870 kVideoMutedThresholdMs)
877 observation_complete_->Set(); 871 observation_complete_.Set();
878 // Receive statistics reporting having lost 50% of the packets. 872 // Receive statistics reporting having lost 50% of the packets.
879 FakeReceiveStatistics receive_stats(kSendSsrcs[0], 1, 1, 0); 873 FakeReceiveStatistics receive_stats(kSendSsrcs[0], 1, 1, 0);
880 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), &receive_stats, 874 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), &receive_stats,
881 nullptr, transport_adapter_.get()); 875 nullptr, transport_adapter_.get());
882 876
883 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); 877 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize);
884 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); 878 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]);
885 879
886 RTCPSender::FeedbackState feedback_state; 880 RTCPSender::FeedbackState feedback_state;
887 881
(...skipping 11 matching lines...) Expand all
899 893
900 size_t GetNumStreams() const override { return 3; } 894 size_t GetNumStreams() const override { return 3; }
901 895
902 virtual void OnFrameGeneratorCapturerCreated( 896 virtual void OnFrameGeneratorCapturerCreated(
903 test::FrameGeneratorCapturer* frame_generator_capturer) { 897 test::FrameGeneratorCapturer* frame_generator_capturer) {
904 rtc::CritScope lock(&crit_); 898 rtc::CritScope lock(&crit_);
905 capturer_ = frame_generator_capturer; 899 capturer_ = frame_generator_capturer;
906 } 900 }
907 901
908 void PerformTest() override { 902 void PerformTest() override {
909 EXPECT_EQ(kEventSignaled, Wait()) 903 EXPECT_TRUE(Wait())
910 << "Timed out while waiting for RTP packets to stop being sent."; 904 << "Timed out while waiting for RTP packets to stop being sent.";
911 } 905 }
912 906
913 Clock* const clock_; 907 Clock* const clock_;
914 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_; 908 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_;
915 rtc::CriticalSection crit_; 909 rtc::CriticalSection crit_;
916 int64_t last_packet_time_ms_ GUARDED_BY(crit_); 910 int64_t last_packet_time_ms_ GUARDED_BY(crit_);
917 test::FrameGeneratorCapturer* capturer_ GUARDED_BY(crit_); 911 test::FrameGeneratorCapturer* capturer_ GUARDED_BY(crit_);
918 } test; 912 } test;
919 913
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
959 static_cast<size_t>(total_bitrate_bps), 953 static_cast<size_t>(total_bitrate_bps),
960 "bps", 954 "bps",
961 false); 955 false);
962 if (total_bitrate_bps > kHighBitrateBps) { 956 if (total_bitrate_bps > kHighBitrateBps) {
963 rtp_rtcp_->SetREMBData(kRembBitrateBps, 957 rtp_rtcp_->SetREMBData(kRembBitrateBps,
964 std::vector<uint32_t>(1, header.ssrc)); 958 std::vector<uint32_t>(1, header.ssrc));
965 rtp_rtcp_->Process(); 959 rtp_rtcp_->Process();
966 bitrate_capped_ = true; 960 bitrate_capped_ = true;
967 } else if (bitrate_capped_ && 961 } else if (bitrate_capped_ &&
968 total_bitrate_bps < kRembRespectedBitrateBps) { 962 total_bitrate_bps < kRembRespectedBitrateBps) {
969 observation_complete_->Set(); 963 observation_complete_.Set();
970 } 964 }
971 } 965 }
972 // Packets don't have to be delivered since the test is the receiver. 966 // Packets don't have to be delivered since the test is the receiver.
973 return DROP_PACKET; 967 return DROP_PACKET;
974 } 968 }
975 969
976 void OnStreamsCreated( 970 void OnStreamsCreated(
977 VideoSendStream* send_stream, 971 VideoSendStream* send_stream,
978 const std::vector<VideoReceiveStream*>& receive_streams) override { 972 const std::vector<VideoReceiveStream*>& receive_streams) override {
979 stream_ = send_stream; 973 stream_ = send_stream;
980 RtpRtcp::Configuration config; 974 RtpRtcp::Configuration config;
981 config.outgoing_transport = feedback_transport_.get(); 975 config.outgoing_transport = feedback_transport_.get();
982 rtp_rtcp_.reset(RtpRtcp::CreateRtpRtcp(config)); 976 rtp_rtcp_.reset(RtpRtcp::CreateRtpRtcp(config));
983 rtp_rtcp_->SetREMBStatus(true); 977 rtp_rtcp_->SetREMBStatus(true);
984 rtp_rtcp_->SetRTCPStatus(RtcpMode::kReducedSize); 978 rtp_rtcp_->SetRTCPStatus(RtcpMode::kReducedSize);
985 } 979 }
986 980
987 void ModifyConfigs(VideoSendStream::Config* send_config, 981 void ModifyConfigs(VideoSendStream::Config* send_config,
988 std::vector<VideoReceiveStream::Config>* receive_configs, 982 std::vector<VideoReceiveStream::Config>* receive_configs,
989 VideoEncoderConfig* encoder_config) override { 983 VideoEncoderConfig* encoder_config) override {
990 feedback_transport_.reset( 984 feedback_transport_.reset(
991 new internal::TransportAdapter(send_config->send_transport)); 985 new internal::TransportAdapter(send_config->send_transport));
992 feedback_transport_->Enable(); 986 feedback_transport_->Enable();
993 encoder_config->min_transmit_bitrate_bps = kMinTransmitBitrateBps; 987 encoder_config->min_transmit_bitrate_bps = kMinTransmitBitrateBps;
994 } 988 }
995 989
996 void PerformTest() override { 990 void PerformTest() override {
997 EXPECT_EQ(kEventSignaled, Wait()) 991 EXPECT_TRUE(Wait())
998 << "Timeout while waiting for low bitrate stats after REMB."; 992 << "Timeout while waiting for low bitrate stats after REMB.";
999 } 993 }
1000 994
1001 rtc::scoped_ptr<RtpRtcp> rtp_rtcp_; 995 rtc::scoped_ptr<RtpRtcp> rtp_rtcp_;
1002 rtc::scoped_ptr<internal::TransportAdapter> feedback_transport_; 996 rtc::scoped_ptr<internal::TransportAdapter> feedback_transport_;
1003 VideoSendStream* stream_; 997 VideoSendStream* stream_;
1004 bool bitrate_capped_; 998 bool bitrate_capped_;
1005 } test; 999 } test;
1006 1000
1007 RunBaseTest(&test, FakeNetworkPipe::Config()); 1001 RunBaseTest(&test, FakeNetworkPipe::Config());
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1063 // reported in between. 1057 // reported in between.
1064 EXPECT_EQ(bitrate_config.start_bitrate_bps / 1000, 1058 EXPECT_EQ(bitrate_config.start_bitrate_bps / 1000,
1065 encoder.GetStartBitrateKbps()); 1059 encoder.GetStartBitrateKbps());
1066 1060
1067 DestroyStreams(); 1061 DestroyStreams();
1068 } 1062 }
1069 1063
1070 TEST_F(VideoSendStreamTest, CapturesTextureAndVideoFrames) { 1064 TEST_F(VideoSendStreamTest, CapturesTextureAndVideoFrames) {
1071 class FrameObserver : public I420FrameCallback { 1065 class FrameObserver : public I420FrameCallback {
1072 public: 1066 public:
1073 FrameObserver() : output_frame_event_(EventWrapper::Create()) {} 1067 FrameObserver() : output_frame_event_(false, false) {}
1074 1068
1075 void FrameCallback(VideoFrame* video_frame) override { 1069 void FrameCallback(VideoFrame* video_frame) override {
1076 output_frames_.push_back(*video_frame); 1070 output_frames_.push_back(*video_frame);
1077 output_frame_event_->Set(); 1071 output_frame_event_.Set();
1078 } 1072 }
1079 1073
1080 void WaitOutputFrame() { 1074 void WaitOutputFrame() {
1081 const unsigned long kWaitFrameTimeoutMs = 3000; 1075 const int kWaitFrameTimeoutMs = 3000;
1082 EXPECT_EQ(kEventSignaled, output_frame_event_->Wait(kWaitFrameTimeoutMs)) 1076 EXPECT_TRUE(output_frame_event_.Wait(kWaitFrameTimeoutMs))
1083 << "Timeout while waiting for output frames."; 1077 << "Timeout while waiting for output frames.";
1084 } 1078 }
1085 1079
1086 const std::vector<VideoFrame>& output_frames() const { 1080 const std::vector<VideoFrame>& output_frames() const {
1087 return output_frames_; 1081 return output_frames_;
1088 } 1082 }
1089 1083
1090 private: 1084 private:
1091 // Delivered output frames. 1085 // Delivered output frames.
1092 std::vector<VideoFrame> output_frames_; 1086 std::vector<VideoFrame> output_frames_;
1093 1087
1094 // Indicate an output frame has arrived. 1088 // Indicate an output frame has arrived.
1095 rtc::scoped_ptr<EventWrapper> output_frame_event_; 1089 rtc::Event output_frame_event_;
1096 }; 1090 };
1097 1091
1098 // Initialize send stream. 1092 // Initialize send stream.
1099 CreateSenderCall(Call::Config()); 1093 CreateSenderCall(Call::Config());
1100 1094
1101 test::NullTransport transport; 1095 test::NullTransport transport;
1102 CreateSendConfig(1, &transport); 1096 CreateSendConfig(1, &transport);
1103 FrameObserver observer; 1097 FrameObserver observer;
1104 send_config_.pre_encode_callback = &observer; 1098 send_config_.pre_encode_callback = &observer;
1105 CreateStreams(); 1099 CreateStreams();
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
1233 initialized_ = true; 1227 initialized_ = true;
1234 released_ = false; 1228 released_ = false;
1235 return 0; 1229 return 0;
1236 } 1230 }
1237 1231
1238 int32_t Encode(const VideoFrame& inputImage, 1232 int32_t Encode(const VideoFrame& inputImage,
1239 const CodecSpecificInfo* codecSpecificInfo, 1233 const CodecSpecificInfo* codecSpecificInfo,
1240 const std::vector<FrameType>* frame_types) override { 1234 const std::vector<FrameType>* frame_types) override {
1241 EXPECT_TRUE(IsReadyForEncode()); 1235 EXPECT_TRUE(IsReadyForEncode());
1242 1236
1243 observation_complete_->Set(); 1237 observation_complete_.Set();
1244 return 0; 1238 return 0;
1245 } 1239 }
1246 1240
1247 int32_t RegisterEncodeCompleteCallback( 1241 int32_t RegisterEncodeCompleteCallback(
1248 EncodedImageCallback* callback) override { 1242 EncodedImageCallback* callback) override {
1249 rtc::CritScope lock(&crit_); 1243 rtc::CritScope lock(&crit_);
1250 EXPECT_TRUE(initialized_); 1244 EXPECT_TRUE(initialized_);
1251 callback_registered_ = true; 1245 callback_registered_ = true;
1252 return 0; 1246 return 0;
1253 } 1247 }
(...skipping 29 matching lines...) Expand all
1283 } 1277 }
1284 1278
1285 void ModifyConfigs(VideoSendStream::Config* send_config, 1279 void ModifyConfigs(VideoSendStream::Config* send_config,
1286 std::vector<VideoReceiveStream::Config>* receive_configs, 1280 std::vector<VideoReceiveStream::Config>* receive_configs,
1287 VideoEncoderConfig* encoder_config) override { 1281 VideoEncoderConfig* encoder_config) override {
1288 send_config->encoder_settings.encoder = this; 1282 send_config->encoder_settings.encoder = this;
1289 encoder_config_ = *encoder_config; 1283 encoder_config_ = *encoder_config;
1290 } 1284 }
1291 1285
1292 void PerformTest() override { 1286 void PerformTest() override {
1293 EXPECT_EQ(kEventSignaled, Wait()) 1287 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode.";
1294 << "Timed out while waiting for Encode.";
1295 EXPECT_EQ(0u, num_releases()); 1288 EXPECT_EQ(0u, num_releases());
1296 stream_->ReconfigureVideoEncoder(encoder_config_); 1289 stream_->ReconfigureVideoEncoder(encoder_config_);
1297 EXPECT_EQ(0u, num_releases()); 1290 EXPECT_EQ(0u, num_releases());
1298 stream_->Stop(); 1291 stream_->Stop();
1299 // Encoder should not be released before destroying the VideoSendStream. 1292 // Encoder should not be released before destroying the VideoSendStream.
1300 EXPECT_FALSE(IsReleased()); 1293 EXPECT_FALSE(IsReleased());
1301 EXPECT_TRUE(IsReadyForEncode()); 1294 EXPECT_TRUE(IsReadyForEncode());
1302 stream_->Start(); 1295 stream_->Start();
1303 // Sanity check, make sure we still encode frames with this encoder. 1296 // Sanity check, make sure we still encode frames with this encoder.
1304 EXPECT_EQ(kEventSignaled, Wait()) 1297 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode.";
1305 << "Timed out while waiting for Encode.";
1306 } 1298 }
1307 1299
1308 rtc::CriticalSection crit_; 1300 rtc::CriticalSection crit_;
1309 VideoSendStream* stream_; 1301 VideoSendStream* stream_;
1310 bool initialized_ GUARDED_BY(crit_); 1302 bool initialized_ GUARDED_BY(crit_);
1311 bool callback_registered_ GUARDED_BY(crit_); 1303 bool callback_registered_ GUARDED_BY(crit_);
1312 size_t num_releases_ GUARDED_BY(crit_); 1304 size_t num_releases_ GUARDED_BY(crit_);
1313 bool released_ GUARDED_BY(crit_); 1305 bool released_ GUARDED_BY(crit_);
1314 VideoEncoderConfig encoder_config_; 1306 VideoEncoderConfig encoder_config_;
1315 } test_encoder; 1307 } test_encoder;
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
1537 1529
1538 RTCPUtility::RTCPPacketTypes packet_type = parser.Begin(); 1530 RTCPUtility::RTCPPacketTypes packet_type = parser.Begin();
1539 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) { 1531 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) {
1540 if (packet_type == RTCPUtility::RTCPPacketTypes::kSr) { 1532 if (packet_type == RTCPUtility::RTCPPacketTypes::kSr) {
1541 // Only compare sent media bytes if SenderPacketCount matches the 1533 // Only compare sent media bytes if SenderPacketCount matches the
1542 // number of sent rtp packets (a new rtp packet could be sent before 1534 // number of sent rtp packets (a new rtp packet could be sent before
1543 // the rtcp packet). 1535 // the rtcp packet).
1544 if (parser.Packet().SR.SenderOctetCount > 0 && 1536 if (parser.Packet().SR.SenderOctetCount > 0 &&
1545 parser.Packet().SR.SenderPacketCount == rtp_packets_sent_) { 1537 parser.Packet().SR.SenderPacketCount == rtp_packets_sent_) {
1546 EXPECT_EQ(media_bytes_sent_, parser.Packet().SR.SenderOctetCount); 1538 EXPECT_EQ(media_bytes_sent_, parser.Packet().SR.SenderOctetCount);
1547 observation_complete_->Set(); 1539 observation_complete_.Set();
1548 } 1540 }
1549 } 1541 }
1550 packet_type = parser.Iterate(); 1542 packet_type = parser.Iterate();
1551 } 1543 }
1552 1544
1553 return SEND_PACKET; 1545 return SEND_PACKET;
1554 } 1546 }
1555 1547
1556 void PerformTest() override { 1548 void PerformTest() override {
1557 EXPECT_EQ(kEventSignaled, Wait()) 1549 EXPECT_TRUE(Wait()) << "Timed out while waiting for RTCP sender report.";
1558 << "Timed out while waiting for RTCP sender report.";
1559 } 1550 }
1560 1551
1561 rtc::CriticalSection crit_; 1552 rtc::CriticalSection crit_;
1562 size_t rtp_packets_sent_ GUARDED_BY(&crit_); 1553 size_t rtp_packets_sent_ GUARDED_BY(&crit_);
1563 size_t media_bytes_sent_ GUARDED_BY(&crit_); 1554 size_t media_bytes_sent_ GUARDED_BY(&crit_);
1564 } test; 1555 } test;
1565 1556
1566 RunBaseTest(&test, FakeNetworkPipe::Config()); 1557 RunBaseTest(&test, FakeNetworkPipe::Config());
1567 } 1558 }
1568 1559
1569 TEST_F(VideoSendStreamTest, TranslatesTwoLayerScreencastToTargetBitrate) { 1560 TEST_F(VideoSendStreamTest, TranslatesTwoLayerScreencastToTargetBitrate) {
1570 static const int kScreencastTargetBitrateKbps = 200; 1561 static const int kScreencastTargetBitrateKbps = 200;
1571 class ScreencastTargetBitrateTest : public test::SendTest, 1562 class ScreencastTargetBitrateTest : public test::SendTest,
1572 public test::FakeEncoder { 1563 public test::FakeEncoder {
1573 public: 1564 public:
1574 ScreencastTargetBitrateTest() 1565 ScreencastTargetBitrateTest()
1575 : SendTest(kDefaultTimeoutMs), 1566 : SendTest(kDefaultTimeoutMs),
1576 test::FakeEncoder(Clock::GetRealTimeClock()) {} 1567 test::FakeEncoder(Clock::GetRealTimeClock()) {}
1577 1568
1578 private: 1569 private:
1579 int32_t InitEncode(const VideoCodec* config, 1570 int32_t InitEncode(const VideoCodec* config,
1580 int32_t number_of_cores, 1571 int32_t number_of_cores,
1581 size_t max_payload_size) override { 1572 size_t max_payload_size) override {
1582 EXPECT_EQ(static_cast<unsigned int>(kScreencastTargetBitrateKbps), 1573 EXPECT_EQ(static_cast<unsigned int>(kScreencastTargetBitrateKbps),
1583 config->targetBitrate); 1574 config->targetBitrate);
1584 observation_complete_->Set(); 1575 observation_complete_.Set();
1585 return test::FakeEncoder::InitEncode( 1576 return test::FakeEncoder::InitEncode(
1586 config, number_of_cores, max_payload_size); 1577 config, number_of_cores, max_payload_size);
1587 } 1578 }
1588 void ModifyConfigs(VideoSendStream::Config* send_config, 1579 void ModifyConfigs(VideoSendStream::Config* send_config,
1589 std::vector<VideoReceiveStream::Config>* receive_configs, 1580 std::vector<VideoReceiveStream::Config>* receive_configs,
1590 VideoEncoderConfig* encoder_config) override { 1581 VideoEncoderConfig* encoder_config) override {
1591 send_config->encoder_settings.encoder = this; 1582 send_config->encoder_settings.encoder = this;
1592 EXPECT_EQ(1u, encoder_config->streams.size()); 1583 EXPECT_EQ(1u, encoder_config->streams.size());
1593 EXPECT_TRUE( 1584 EXPECT_TRUE(
1594 encoder_config->streams[0].temporal_layer_thresholds_bps.empty()); 1585 encoder_config->streams[0].temporal_layer_thresholds_bps.empty());
1595 encoder_config->streams[0].temporal_layer_thresholds_bps.push_back( 1586 encoder_config->streams[0].temporal_layer_thresholds_bps.push_back(
1596 kScreencastTargetBitrateKbps * 1000); 1587 kScreencastTargetBitrateKbps * 1000);
1597 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen; 1588 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen;
1598 } 1589 }
1599 1590
1600 void PerformTest() override { 1591 void PerformTest() override {
1601 EXPECT_EQ(kEventSignaled, Wait()) 1592 EXPECT_TRUE(Wait())
1602 << "Timed out while waiting for the encoder to be initialized."; 1593 << "Timed out while waiting for the encoder to be initialized.";
1603 } 1594 }
1604 } test; 1595 } test;
1605 1596
1606 RunBaseTest(&test, FakeNetworkPipe::Config()); 1597 RunBaseTest(&test, FakeNetworkPipe::Config());
1607 } 1598 }
1608 1599
1609 TEST_F(VideoSendStreamTest, ReconfigureBitratesSetsEncoderBitratesCorrectly) { 1600 TEST_F(VideoSendStreamTest, ReconfigureBitratesSetsEncoderBitratesCorrectly) {
1610 // These are chosen to be "kind of odd" to not be accidentally checked against 1601 // These are chosen to be "kind of odd" to not be accidentally checked against
1611 // default values. 1602 // default values.
(...skipping 15 matching lines...) Expand all
1627 int32_t InitEncode(const VideoCodec* codecSettings, 1618 int32_t InitEncode(const VideoCodec* codecSettings,
1628 int32_t numberOfCores, 1619 int32_t numberOfCores,
1629 size_t maxPayloadSize) override { 1620 size_t maxPayloadSize) override {
1630 if (num_initializations_ == 0) { 1621 if (num_initializations_ == 0) {
1631 EXPECT_EQ(static_cast<unsigned int>(kMinBitrateKbps), 1622 EXPECT_EQ(static_cast<unsigned int>(kMinBitrateKbps),
1632 codecSettings->minBitrate); 1623 codecSettings->minBitrate);
1633 EXPECT_EQ(static_cast<unsigned int>(kStartBitrateKbps), 1624 EXPECT_EQ(static_cast<unsigned int>(kStartBitrateKbps),
1634 codecSettings->startBitrate); 1625 codecSettings->startBitrate);
1635 EXPECT_EQ(static_cast<unsigned int>(kMaxBitrateKbps), 1626 EXPECT_EQ(static_cast<unsigned int>(kMaxBitrateKbps),
1636 codecSettings->maxBitrate); 1627 codecSettings->maxBitrate);
1637 observation_complete_->Set(); 1628 observation_complete_.Set();
1638 } else if (num_initializations_ == 1) { 1629 } else if (num_initializations_ == 1) {
1639 EXPECT_EQ(static_cast<unsigned int>(kLowerMaxBitrateKbps), 1630 EXPECT_EQ(static_cast<unsigned int>(kLowerMaxBitrateKbps),
1640 codecSettings->maxBitrate); 1631 codecSettings->maxBitrate);
1641 // The start bitrate should be kept (-1) and capped to the max bitrate. 1632 // The start bitrate should be kept (-1) and capped to the max bitrate.
1642 // Since this is not an end-to-end call no receiver should have been 1633 // Since this is not an end-to-end call no receiver should have been
1643 // returning a REMB that could lower this estimate. 1634 // returning a REMB that could lower this estimate.
1644 EXPECT_EQ(codecSettings->startBitrate, codecSettings->maxBitrate); 1635 EXPECT_EQ(codecSettings->startBitrate, codecSettings->maxBitrate);
1645 } else if (num_initializations_ == 2) { 1636 } else if (num_initializations_ == 2) {
1646 EXPECT_EQ(static_cast<unsigned int>(kIncreasedMaxBitrateKbps), 1637 EXPECT_EQ(static_cast<unsigned int>(kIncreasedMaxBitrateKbps),
1647 codecSettings->maxBitrate); 1638 codecSettings->maxBitrate);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1680 VideoSendStream* send_stream, 1671 VideoSendStream* send_stream,
1681 const std::vector<VideoReceiveStream*>& receive_streams) override { 1672 const std::vector<VideoReceiveStream*>& receive_streams) override {
1682 send_stream_ = send_stream; 1673 send_stream_ = send_stream;
1683 } 1674 }
1684 1675
1685 void PerformTest() override { 1676 void PerformTest() override {
1686 Call::Config::BitrateConfig bitrate_config; 1677 Call::Config::BitrateConfig bitrate_config;
1687 bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000; 1678 bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000;
1688 bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; 1679 bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000;
1689 call_->SetBitrateConfig(bitrate_config); 1680 call_->SetBitrateConfig(bitrate_config);
1690 EXPECT_EQ(kEventSignaled, Wait()) 1681 EXPECT_TRUE(Wait())
1691 << "Timed out while waiting encoder to be configured."; 1682 << "Timed out while waiting encoder to be configured.";
1692 encoder_config_.streams[0].min_bitrate_bps = 0; 1683 encoder_config_.streams[0].min_bitrate_bps = 0;
1693 encoder_config_.streams[0].max_bitrate_bps = kLowerMaxBitrateKbps * 1000; 1684 encoder_config_.streams[0].max_bitrate_bps = kLowerMaxBitrateKbps * 1000;
1694 send_stream_->ReconfigureVideoEncoder(encoder_config_); 1685 send_stream_->ReconfigureVideoEncoder(encoder_config_);
1695 EXPECT_EQ(2, num_initializations_) 1686 EXPECT_EQ(2, num_initializations_)
1696 << "Encoder should have been reconfigured with the new value."; 1687 << "Encoder should have been reconfigured with the new value.";
1697 encoder_config_.streams[0].target_bitrate_bps = 1688 encoder_config_.streams[0].target_bitrate_bps =
1698 encoder_config_.streams[0].min_bitrate_bps; 1689 encoder_config_.streams[0].min_bitrate_bps;
1699 encoder_config_.streams[0].max_bitrate_bps = 1690 encoder_config_.streams[0].max_bitrate_bps =
1700 kIncreasedMaxBitrateKbps * 1000; 1691 kIncreasedMaxBitrateKbps * 1000;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1743 for (size_t i = 0; i < kNumStreams; ++i) { 1734 for (size_t i = 0; i < kNumStreams; ++i) {
1744 specifics.codecSpecific.generic.simulcast_idx = static_cast<uint8_t>(i); 1735 specifics.codecSpecific.generic.simulcast_idx = static_cast<uint8_t>(i);
1745 encoded._frameType = (*frame_types)[i]; 1736 encoded._frameType = (*frame_types)[i];
1746 encoded._encodedWidth = kEncodedResolution[i].width; 1737 encoded._encodedWidth = kEncodedResolution[i].width;
1747 encoded._encodedHeight = kEncodedResolution[i].height; 1738 encoded._encodedHeight = kEncodedResolution[i].height;
1748 RTC_DCHECK(callback_ != nullptr); 1739 RTC_DCHECK(callback_ != nullptr);
1749 if (callback_->Encoded(encoded, &specifics, nullptr) != 0) 1740 if (callback_->Encoded(encoded, &specifics, nullptr) != 0)
1750 return -1; 1741 return -1;
1751 } 1742 }
1752 1743
1753 observation_complete_->Set(); 1744 observation_complete_.Set();
1754 return 0; 1745 return 0;
1755 } 1746 }
1756 void ModifyConfigs(VideoSendStream::Config* send_config, 1747 void ModifyConfigs(VideoSendStream::Config* send_config,
1757 std::vector<VideoReceiveStream::Config>* receive_configs, 1748 std::vector<VideoReceiveStream::Config>* receive_configs,
1758 VideoEncoderConfig* encoder_config) override { 1749 VideoEncoderConfig* encoder_config) override {
1759 send_config->encoder_settings.encoder = this; 1750 send_config->encoder_settings.encoder = this;
1760 EXPECT_EQ(kNumStreams, encoder_config->streams.size()); 1751 EXPECT_EQ(kNumStreams, encoder_config->streams.size());
1761 } 1752 }
1762 1753
1763 size_t GetNumStreams() const override { return kNumStreams; } 1754 size_t GetNumStreams() const override { return kNumStreams; }
1764 1755
1765 void PerformTest() override { 1756 void PerformTest() override {
1766 EXPECT_EQ(kEventSignaled, Wait()) 1757 EXPECT_TRUE(Wait())
1767 << "Timed out while waiting for the encoder to send one frame."; 1758 << "Timed out while waiting for the encoder to send one frame.";
1768 VideoSendStream::Stats stats = send_stream_->GetStats(); 1759 VideoSendStream::Stats stats = send_stream_->GetStats();
1769 1760
1770 for (size_t i = 0; i < kNumStreams; ++i) { 1761 for (size_t i = 0; i < kNumStreams; ++i) {
1771 ASSERT_TRUE(stats.substreams.find(kSendSsrcs[i]) != 1762 ASSERT_TRUE(stats.substreams.find(kSendSsrcs[i]) !=
1772 stats.substreams.end()) 1763 stats.substreams.end())
1773 << "No stats for SSRC: " << kSendSsrcs[i] 1764 << "No stats for SSRC: " << kSendSsrcs[i]
1774 << ", stats should exist as soon as frames have been encoded."; 1765 << ", stats should exist as soon as frames have been encoded.";
1775 VideoSendStream::StreamStats ssrc_stats = 1766 VideoSendStream::StreamStats ssrc_stats =
1776 stats.substreams[kSendSsrcs[i]]; 1767 stats.substreams[kSendSsrcs[i]];
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1816 VideoEncoderConfig* encoder_config) override { 1807 VideoEncoderConfig* encoder_config) override {
1817 encoder_config->encoder_specific_settings = &vp9_settings_; 1808 encoder_config->encoder_specific_settings = &vp9_settings_;
1818 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen; 1809 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen;
1819 send_config->encoder_settings.encoder = vp9_encoder_.get(); 1810 send_config->encoder_settings.encoder = vp9_encoder_.get();
1820 send_config->encoder_settings.payload_name = "VP9"; 1811 send_config->encoder_settings.payload_name = "VP9";
1821 send_config->encoder_settings.payload_type = kVp9PayloadType; 1812 send_config->encoder_settings.payload_type = kVp9PayloadType;
1822 ModifyConfigsHook(send_config, receive_configs, encoder_config); 1813 ModifyConfigsHook(send_config, receive_configs, encoder_config);
1823 } 1814 }
1824 1815
1825 void PerformTest() override { 1816 void PerformTest() override {
1826 EXPECT_EQ(kEventSignaled, Wait()) 1817 EXPECT_TRUE(Wait()) << "Test timed out waiting for VP9 packet";
1827 << "Test timed out waiting for VP9 packet";
1828 } 1818 }
1829 1819
1830 Action OnSendRtp(const uint8_t* packet, size_t length) override { 1820 Action OnSendRtp(const uint8_t* packet, size_t length) override {
1831 RTPHeader header; 1821 RTPHeader header;
1832 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 1822 EXPECT_TRUE(parser_->Parse(packet, length, &header));
1833 1823
1834 if (header.payloadType == kVp9PayloadType) { 1824 if (header.payloadType == kVp9PayloadType) {
1835 RtpDepacketizerVp9 vp9depacketizer; 1825 RtpDepacketizerVp9 vp9depacketizer;
1836 RtpDepacketizer::ParsedPayload vp9payload; 1826 RtpDepacketizer::ParsedPayload vp9payload;
1837 const uint8_t* vp9_packet = packet + header.headerLength; 1827 const uint8_t* vp9_packet = packet + header.headerLength;
1838 size_t payload_length = 1828 size_t payload_length =
1839 length - header.headerLength - header.paddingLength; 1829 length - header.headerLength - header.paddingLength;
1840 1830
1841 if (payload_length > 0) { 1831 if (payload_length > 0) {
1842 bool parse_vp9header_successful = 1832 bool parse_vp9header_successful =
1843 vp9depacketizer.Parse(&vp9payload, vp9_packet, payload_length); 1833 vp9depacketizer.Parse(&vp9payload, vp9_packet, payload_length);
1844 bool is_vp9_codec_type = 1834 bool is_vp9_codec_type =
1845 vp9payload.type.Video.codec == RtpVideoCodecTypes::kRtpVideoVp9; 1835 vp9payload.type.Video.codec == RtpVideoCodecTypes::kRtpVideoVp9;
1846 EXPECT_TRUE(parse_vp9header_successful); 1836 EXPECT_TRUE(parse_vp9header_successful);
1847 EXPECT_TRUE(is_vp9_codec_type); 1837 EXPECT_TRUE(is_vp9_codec_type);
1848 1838
1849 RTPVideoHeaderVP9* vp9videoHeader = 1839 RTPVideoHeaderVP9* vp9videoHeader =
1850 &vp9payload.type.Video.codecHeader.VP9; 1840 &vp9payload.type.Video.codecHeader.VP9;
1851 if (parse_vp9header_successful && is_vp9_codec_type) { 1841 if (parse_vp9header_successful && is_vp9_codec_type) {
1852 InspectHeader(vp9videoHeader); 1842 InspectHeader(vp9videoHeader);
1853 } else { 1843 } else {
1854 observation_complete_->Set(); 1844 observation_complete_.Set();
1855 } 1845 }
1856 } 1846 }
1857 } 1847 }
1858 1848
1859 return SEND_PACKET; 1849 return SEND_PACKET;
1860 } 1850 }
1861 1851
1862 protected: 1852 protected:
1863 rtc::scoped_ptr<VP9Encoder> vp9_encoder_; 1853 rtc::scoped_ptr<VP9Encoder> vp9_encoder_;
1864 VideoCodecVP9 vp9_settings_; 1854 VideoCodecVP9 vp9_settings_;
1865 }; 1855 };
1866 1856
1867 TEST_F(VideoSendStreamTest, DISABLED_VP9FlexMode) { 1857 TEST_F(VideoSendStreamTest, DISABLED_VP9FlexMode) {
1868 class FlexibleMode : public VP9HeaderObeserver { 1858 class FlexibleMode : public VP9HeaderObeserver {
1869 void ModifyConfigsHook( 1859 void ModifyConfigsHook(
1870 VideoSendStream::Config* send_config, 1860 VideoSendStream::Config* send_config,
1871 std::vector<VideoReceiveStream::Config>* receive_configs, 1861 std::vector<VideoReceiveStream::Config>* receive_configs,
1872 VideoEncoderConfig* encoder_config) override { 1862 VideoEncoderConfig* encoder_config) override {
1873 vp9_settings_.flexibleMode = true; 1863 vp9_settings_.flexibleMode = true;
1874 } 1864 }
1875 1865
1876 void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override { 1866 void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override {
1877 EXPECT_TRUE(vp9videoHeader->flexible_mode); 1867 EXPECT_TRUE(vp9videoHeader->flexible_mode);
1878 observation_complete_->Set(); 1868 observation_complete_.Set();
1879 } 1869 }
1880 } test; 1870 } test;
1881 1871
1882 RunBaseTest(&test, FakeNetworkPipe::Config()); 1872 RunBaseTest(&test, FakeNetworkPipe::Config());
1883 } 1873 }
1884 1874
1885 TEST_F(VideoSendStreamTest, VP9FlexModeHasPictureId) { 1875 TEST_F(VideoSendStreamTest, VP9FlexModeHasPictureId) {
1886 class FlexibleMode : public VP9HeaderObeserver { 1876 class FlexibleMode : public VP9HeaderObeserver {
1887 void ModifyConfigsHook( 1877 void ModifyConfigsHook(
1888 VideoSendStream::Config* send_config, 1878 VideoSendStream::Config* send_config,
1889 std::vector<VideoReceiveStream::Config>* receive_configs, 1879 std::vector<VideoReceiveStream::Config>* receive_configs,
1890 VideoEncoderConfig* encoder_config) override { 1880 VideoEncoderConfig* encoder_config) override {
1891 vp9_settings_.flexibleMode = true; 1881 vp9_settings_.flexibleMode = true;
1892 } 1882 }
1893 1883
1894 void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override { 1884 void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override {
1895 EXPECT_NE(vp9videoHeader->picture_id, kNoPictureId); 1885 EXPECT_NE(vp9videoHeader->picture_id, kNoPictureId);
1896 observation_complete_->Set(); 1886 observation_complete_.Set();
1897 } 1887 }
1898 } test; 1888 } test;
1899 1889
1900 RunBaseTest(&test, FakeNetworkPipe::Config()); 1890 RunBaseTest(&test, FakeNetworkPipe::Config());
1901 } 1891 }
1902 1892
1903 TEST_F(VideoSendStreamTest, VP9FlexModeRefCount) { 1893 TEST_F(VideoSendStreamTest, VP9FlexModeRefCount) {
1904 class FlexibleMode : public VP9HeaderObeserver { 1894 class FlexibleMode : public VP9HeaderObeserver {
1905 void ModifyConfigsHook( 1895 void ModifyConfigsHook(
1906 VideoSendStream::Config* send_config, 1896 VideoSendStream::Config* send_config,
1907 std::vector<VideoReceiveStream::Config>* receive_configs, 1897 std::vector<VideoReceiveStream::Config>* receive_configs,
1908 VideoEncoderConfig* encoder_config) override { 1898 VideoEncoderConfig* encoder_config) override {
1909 vp9_settings_.flexibleMode = true; 1899 vp9_settings_.flexibleMode = true;
1910 } 1900 }
1911 1901
1912 void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override { 1902 void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override {
1913 EXPECT_TRUE(vp9videoHeader->flexible_mode); 1903 EXPECT_TRUE(vp9videoHeader->flexible_mode);
1914 if (vp9videoHeader->inter_pic_predicted) { 1904 if (vp9videoHeader->inter_pic_predicted) {
1915 EXPECT_GT(vp9videoHeader->num_ref_pics, 0u); 1905 EXPECT_GT(vp9videoHeader->num_ref_pics, 0u);
1916 observation_complete_->Set(); 1906 observation_complete_.Set();
1917 } 1907 }
1918 } 1908 }
1919 } test; 1909 } test;
1920 1910
1921 RunBaseTest(&test, FakeNetworkPipe::Config()); 1911 RunBaseTest(&test, FakeNetworkPipe::Config());
1922 } 1912 }
1923 1913
1924 TEST_F(VideoSendStreamTest, VP9FlexModeRefs) { 1914 TEST_F(VideoSendStreamTest, VP9FlexModeRefs) {
1925 class FlexibleMode : public VP9HeaderObeserver { 1915 class FlexibleMode : public VP9HeaderObeserver {
1926 void ModifyConfigsHook( 1916 void ModifyConfigsHook(
1927 VideoSendStream::Config* send_config, 1917 VideoSendStream::Config* send_config,
1928 std::vector<VideoReceiveStream::Config>* receive_configs, 1918 std::vector<VideoReceiveStream::Config>* receive_configs,
1929 VideoEncoderConfig* encoder_config) override { 1919 VideoEncoderConfig* encoder_config) override {
1930 vp9_settings_.flexibleMode = true; 1920 vp9_settings_.flexibleMode = true;
1931 } 1921 }
1932 1922
1933 void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override { 1923 void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override {
1934 EXPECT_TRUE(vp9videoHeader->flexible_mode); 1924 EXPECT_TRUE(vp9videoHeader->flexible_mode);
1935 if (vp9videoHeader->inter_pic_predicted) { 1925 if (vp9videoHeader->inter_pic_predicted) {
1936 EXPECT_GT(vp9videoHeader->num_ref_pics, 0u); 1926 EXPECT_GT(vp9videoHeader->num_ref_pics, 0u);
1937 observation_complete_->Set(); 1927 observation_complete_.Set();
1938 } 1928 }
1939 } 1929 }
1940 1930
1941 } test; 1931 } test;
1942 1932
1943 RunBaseTest(&test, FakeNetworkPipe::Config()); 1933 RunBaseTest(&test, FakeNetworkPipe::Config());
1944 } 1934 }
1945 1935
1946 } // namespace webrtc 1936 } // namespace webrtc
OLDNEW
« webrtc/video/video_capture_input_unittest.cc ('K') | « webrtc/video/video_quality_test.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698