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

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: 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/video/video_quality_test.cc ('k') | no next file » | 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> // 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/ref_count.h" 32 #include "webrtc/system_wrappers/include/ref_count.h"
33 #include "webrtc/system_wrappers/include/sleep.h" 33 #include "webrtc/system_wrappers/include/sleep.h"
34 #include "webrtc/test/call_test.h" 34 #include "webrtc/test/call_test.h"
35 #include "webrtc/test/configurable_frame_size_encoder.h" 35 #include "webrtc/test/configurable_frame_size_encoder.h"
36 #include "webrtc/test/fake_texture_frame.h" 36 #include "webrtc/test/fake_texture_frame.h"
37 #include "webrtc/test/null_transport.h" 37 #include "webrtc/test/null_transport.h"
38 #include "webrtc/test/testsupport/perf_test.h" 38 #include "webrtc/test/testsupport/perf_test.h"
39 #include "webrtc/video/send_statistics_proxy.h" 39 #include "webrtc/video/send_statistics_proxy.h"
40 #include "webrtc/video_frame.h" 40 #include "webrtc/video_frame.h"
41 #include "webrtc/video_send_stream.h" 41 #include "webrtc/video_send_stream.h"
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 95
96 private: 96 private:
97 Action OnSendRtcp(const uint8_t* packet, size_t length) override { 97 Action OnSendRtcp(const uint8_t* packet, size_t length) override {
98 RTCPUtility::RTCPParserV2 parser(packet, length, true); 98 RTCPUtility::RTCPParserV2 parser(packet, length, true);
99 EXPECT_TRUE(parser.IsValid()); 99 EXPECT_TRUE(parser.IsValid());
100 100
101 RTCPUtility::RTCPPacketTypes packet_type = parser.Begin(); 101 RTCPUtility::RTCPPacketTypes packet_type = parser.Begin();
102 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) { 102 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) {
103 if (packet_type == RTCPUtility::RTCPPacketTypes::kSdesChunk) { 103 if (packet_type == RTCPUtility::RTCPPacketTypes::kSdesChunk) {
104 EXPECT_EQ(parser.Packet().CName.CName, kCName); 104 EXPECT_EQ(parser.Packet().CName.CName, kCName);
105 observation_complete_->Set(); 105 observation_complete_.Set();
106 } 106 }
107 107
108 packet_type = parser.Iterate(); 108 packet_type = parser.Iterate();
109 } 109 }
110 110
111 return SEND_PACKET; 111 return SEND_PACKET;
112 } 112 }
113 113
114 void ModifyConfigs(VideoSendStream::Config* send_config, 114 void ModifyConfigs(VideoSendStream::Config* send_config,
115 std::vector<VideoReceiveStream::Config>* receive_configs, 115 std::vector<VideoReceiveStream::Config>* receive_configs,
116 VideoEncoderConfig* encoder_config) override { 116 VideoEncoderConfig* encoder_config) override {
117 send_config->rtp.c_name = kCName; 117 send_config->rtp.c_name = kCName;
118 } 118 }
119 119
120 void PerformTest() override { 120 void PerformTest() override {
121 EXPECT_EQ(kEventSignaled, Wait()) 121 EXPECT_TRUE(Wait()) << "Timed out while waiting for RTCP with CNAME.";
122 << "Timed out while waiting for RTCP with CNAME.";
123 } 122 }
124 } test; 123 } test;
125 124
126 RunBaseTest(&test, FakeNetworkPipe::Config()); 125 RunBaseTest(&test, FakeNetworkPipe::Config());
127 } 126 }
128 127
129 TEST_F(VideoSendStreamTest, SupportsAbsoluteSendTime) { 128 TEST_F(VideoSendStreamTest, SupportsAbsoluteSendTime) {
130 class AbsoluteSendTimeObserver : public test::SendTest { 129 class AbsoluteSendTimeObserver : public test::SendTest {
131 public: 130 public:
132 AbsoluteSendTimeObserver() : SendTest(kDefaultTimeoutMs) { 131 AbsoluteSendTimeObserver() : SendTest(kDefaultTimeoutMs) {
133 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension( 132 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension(
134 kRtpExtensionAbsoluteSendTime, test::kAbsSendTimeExtensionId)); 133 kRtpExtensionAbsoluteSendTime, test::kAbsSendTimeExtensionId));
135 } 134 }
136 135
137 Action OnSendRtp(const uint8_t* packet, size_t length) override { 136 Action OnSendRtp(const uint8_t* packet, size_t length) override {
138 RTPHeader header; 137 RTPHeader header;
139 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 138 EXPECT_TRUE(parser_->Parse(packet, length, &header));
140 139
141 EXPECT_FALSE(header.extension.hasTransmissionTimeOffset); 140 EXPECT_FALSE(header.extension.hasTransmissionTimeOffset);
142 EXPECT_TRUE(header.extension.hasAbsoluteSendTime); 141 EXPECT_TRUE(header.extension.hasAbsoluteSendTime);
143 EXPECT_EQ(header.extension.transmissionTimeOffset, 0); 142 EXPECT_EQ(header.extension.transmissionTimeOffset, 0);
144 EXPECT_GT(header.extension.absoluteSendTime, 0u); 143 EXPECT_GT(header.extension.absoluteSendTime, 0u);
145 observation_complete_->Set(); 144 observation_complete_.Set();
146 145
147 return SEND_PACKET; 146 return SEND_PACKET;
148 } 147 }
149 148
150 void ModifyConfigs(VideoSendStream::Config* send_config, 149 void ModifyConfigs(VideoSendStream::Config* send_config,
151 std::vector<VideoReceiveStream::Config>* receive_configs, 150 std::vector<VideoReceiveStream::Config>* receive_configs,
152 VideoEncoderConfig* encoder_config) override { 151 VideoEncoderConfig* encoder_config) override {
153 send_config->rtp.extensions.clear(); 152 send_config->rtp.extensions.clear();
154 send_config->rtp.extensions.push_back(RtpExtension( 153 send_config->rtp.extensions.push_back(RtpExtension(
155 RtpExtension::kAbsSendTime, test::kAbsSendTimeExtensionId)); 154 RtpExtension::kAbsSendTime, test::kAbsSendTimeExtensionId));
156 } 155 }
157 156
158 void PerformTest() override { 157 void PerformTest() override {
159 EXPECT_EQ(kEventSignaled, Wait()) 158 EXPECT_TRUE(Wait()) << "Timed out while waiting for single RTP packet.";
160 << "Timed out while waiting for single RTP packet.";
161 } 159 }
162 } test; 160 } test;
163 161
164 RunBaseTest(&test, FakeNetworkPipe::Config()); 162 RunBaseTest(&test, FakeNetworkPipe::Config());
165 } 163 }
166 164
167 TEST_F(VideoSendStreamTest, SupportsTransmissionTimeOffset) { 165 TEST_F(VideoSendStreamTest, SupportsTransmissionTimeOffset) {
168 static const int kEncodeDelayMs = 5; 166 static const int kEncodeDelayMs = 5;
169 class TransmissionTimeOffsetObserver : public test::SendTest { 167 class TransmissionTimeOffsetObserver : public test::SendTest {
170 public: 168 public:
171 TransmissionTimeOffsetObserver() 169 TransmissionTimeOffsetObserver()
172 : SendTest(kDefaultTimeoutMs), 170 : SendTest(kDefaultTimeoutMs),
173 encoder_(Clock::GetRealTimeClock(), kEncodeDelayMs) { 171 encoder_(Clock::GetRealTimeClock(), kEncodeDelayMs) {
174 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension( 172 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension(
175 kRtpExtensionTransmissionTimeOffset, test::kTOffsetExtensionId)); 173 kRtpExtensionTransmissionTimeOffset, test::kTOffsetExtensionId));
176 } 174 }
177 175
178 private: 176 private:
179 Action OnSendRtp(const uint8_t* packet, size_t length) override { 177 Action OnSendRtp(const uint8_t* packet, size_t length) override {
180 RTPHeader header; 178 RTPHeader header;
181 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 179 EXPECT_TRUE(parser_->Parse(packet, length, &header));
182 180
183 EXPECT_TRUE(header.extension.hasTransmissionTimeOffset); 181 EXPECT_TRUE(header.extension.hasTransmissionTimeOffset);
184 EXPECT_FALSE(header.extension.hasAbsoluteSendTime); 182 EXPECT_FALSE(header.extension.hasAbsoluteSendTime);
185 EXPECT_GT(header.extension.transmissionTimeOffset, 0); 183 EXPECT_GT(header.extension.transmissionTimeOffset, 0);
186 EXPECT_EQ(header.extension.absoluteSendTime, 0u); 184 EXPECT_EQ(header.extension.absoluteSendTime, 0u);
187 observation_complete_->Set(); 185 observation_complete_.Set();
188 186
189 return SEND_PACKET; 187 return SEND_PACKET;
190 } 188 }
191 189
192 void ModifyConfigs(VideoSendStream::Config* send_config, 190 void ModifyConfigs(VideoSendStream::Config* send_config,
193 std::vector<VideoReceiveStream::Config>* receive_configs, 191 std::vector<VideoReceiveStream::Config>* receive_configs,
194 VideoEncoderConfig* encoder_config) override { 192 VideoEncoderConfig* encoder_config) override {
195 send_config->encoder_settings.encoder = &encoder_; 193 send_config->encoder_settings.encoder = &encoder_;
196 send_config->rtp.extensions.clear(); 194 send_config->rtp.extensions.clear();
197 send_config->rtp.extensions.push_back( 195 send_config->rtp.extensions.push_back(
198 RtpExtension(RtpExtension::kTOffset, test::kTOffsetExtensionId)); 196 RtpExtension(RtpExtension::kTOffset, test::kTOffsetExtensionId));
199 } 197 }
200 198
201 void PerformTest() override { 199 void PerformTest() override {
202 EXPECT_EQ(kEventSignaled, Wait()) 200 EXPECT_TRUE(Wait()) << "Timed out while waiting for a single RTP packet.";
203 << "Timed out while waiting for a single RTP packet.";
204 } 201 }
205 202
206 test::DelayedEncoder encoder_; 203 test::DelayedEncoder encoder_;
207 } test; 204 } test;
208 205
209 RunBaseTest(&test, FakeNetworkPipe::Config()); 206 RunBaseTest(&test, FakeNetworkPipe::Config());
210 } 207 }
211 208
212 TEST_F(VideoSendStreamTest, SupportsTransportWideSequenceNumbers) { 209 TEST_F(VideoSendStreamTest, SupportsTransportWideSequenceNumbers) {
213 static const uint8_t kExtensionId = 13; 210 static const uint8_t kExtensionId = 13;
214 class TransportWideSequenceNumberObserver : public test::SendTest { 211 class TransportWideSequenceNumberObserver : public test::SendTest {
215 public: 212 public:
216 TransportWideSequenceNumberObserver() 213 TransportWideSequenceNumberObserver()
217 : SendTest(kDefaultTimeoutMs), encoder_(Clock::GetRealTimeClock()) { 214 : SendTest(kDefaultTimeoutMs), encoder_(Clock::GetRealTimeClock()) {
218 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension( 215 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension(
219 kRtpExtensionTransportSequenceNumber, kExtensionId)); 216 kRtpExtensionTransportSequenceNumber, kExtensionId));
220 } 217 }
221 218
222 private: 219 private:
223 Action OnSendRtp(const uint8_t* packet, size_t length) override { 220 Action OnSendRtp(const uint8_t* packet, size_t length) override {
224 RTPHeader header; 221 RTPHeader header;
225 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 222 EXPECT_TRUE(parser_->Parse(packet, length, &header));
226 223
227 EXPECT_TRUE(header.extension.hasTransportSequenceNumber); 224 EXPECT_TRUE(header.extension.hasTransportSequenceNumber);
228 EXPECT_FALSE(header.extension.hasTransmissionTimeOffset); 225 EXPECT_FALSE(header.extension.hasTransmissionTimeOffset);
229 EXPECT_FALSE(header.extension.hasAbsoluteSendTime); 226 EXPECT_FALSE(header.extension.hasAbsoluteSendTime);
230 227
231 observation_complete_->Set(); 228 observation_complete_.Set();
232 229
233 return SEND_PACKET; 230 return SEND_PACKET;
234 } 231 }
235 232
236 void ModifyConfigs(VideoSendStream::Config* send_config, 233 void ModifyConfigs(VideoSendStream::Config* send_config,
237 std::vector<VideoReceiveStream::Config>* receive_configs, 234 std::vector<VideoReceiveStream::Config>* receive_configs,
238 VideoEncoderConfig* encoder_config) override { 235 VideoEncoderConfig* encoder_config) override {
239 send_config->encoder_settings.encoder = &encoder_; 236 send_config->encoder_settings.encoder = &encoder_;
240 send_config->rtp.extensions.clear(); 237 send_config->rtp.extensions.clear();
241 send_config->rtp.extensions.push_back( 238 send_config->rtp.extensions.push_back(
242 RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId)); 239 RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId));
243 } 240 }
244 241
245 void PerformTest() override { 242 void PerformTest() override {
246 EXPECT_EQ(kEventSignaled, Wait()) 243 EXPECT_TRUE(Wait()) << "Timed out while waiting for a single RTP packet.";
247 << "Timed out while waiting for a single RTP packet.";
248 } 244 }
249 245
250 test::FakeEncoder encoder_; 246 test::FakeEncoder encoder_;
251 } test; 247 } test;
252 248
253 RunBaseTest(&test, FakeNetworkPipe::Config()); 249 RunBaseTest(&test, FakeNetworkPipe::Config());
254 } 250 }
255 251
256 class FakeReceiveStatistics : public NullReceiveStatistics { 252 class FakeReceiveStatistics : public NullReceiveStatistics {
257 public: 253 public:
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 if (encapsulated_payload_type != -1) { 369 if (encapsulated_payload_type != -1) {
374 if (encapsulated_payload_type == 370 if (encapsulated_payload_type ==
375 VideoSendStreamTest::kUlpfecPayloadType) { 371 VideoSendStreamTest::kUlpfecPayloadType) {
376 received_fec_ = true; 372 received_fec_ = true;
377 } else { 373 } else {
378 received_media_ = true; 374 received_media_ = true;
379 } 375 }
380 } 376 }
381 377
382 if (received_media_ && received_fec_ && send_count_ > 100) 378 if (received_media_ && received_fec_ && send_count_ > 100)
383 observation_complete_->Set(); 379 observation_complete_.Set();
384 380
385 prev_header_ = header; 381 prev_header_ = header;
386 382
387 return SEND_PACKET; 383 return SEND_PACKET;
388 } 384 }
389 385
390 void ModifyConfigs(VideoSendStream::Config* send_config, 386 void ModifyConfigs(VideoSendStream::Config* send_config,
391 std::vector<VideoReceiveStream::Config>* receive_configs, 387 std::vector<VideoReceiveStream::Config>* receive_configs,
392 VideoEncoderConfig* encoder_config) override { 388 VideoEncoderConfig* encoder_config) override {
393 transport_adapter_.reset( 389 transport_adapter_.reset(
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 retransmit_ssrc_ != kSendSsrcs[0]) { 469 retransmit_ssrc_ != kSendSsrcs[0]) {
474 // Not kSendSsrcs[0], assume correct RTX packet. Extract sequence 470 // Not kSendSsrcs[0], assume correct RTX packet. Extract sequence
475 // number. 471 // number.
476 const uint8_t* rtx_header = packet + header.headerLength; 472 const uint8_t* rtx_header = packet + header.headerLength;
477 sequence_number = (rtx_header[0] << 8) + rtx_header[1]; 473 sequence_number = (rtx_header[0] << 8) + rtx_header[1];
478 } 474 }
479 475
480 if (sequence_number == nacked_sequence_number_) { 476 if (sequence_number == nacked_sequence_number_) {
481 EXPECT_EQ(retransmit_ssrc_, header.ssrc); 477 EXPECT_EQ(retransmit_ssrc_, header.ssrc);
482 EXPECT_EQ(retransmit_payload_type_, header.payloadType); 478 EXPECT_EQ(retransmit_payload_type_, header.payloadType);
483 observation_complete_->Set(); 479 observation_complete_.Set();
484 } 480 }
485 481
486 return SEND_PACKET; 482 return SEND_PACKET;
487 } 483 }
488 484
489 void ModifyConfigs(VideoSendStream::Config* send_config, 485 void ModifyConfigs(VideoSendStream::Config* send_config,
490 std::vector<VideoReceiveStream::Config>* receive_configs, 486 std::vector<VideoReceiveStream::Config>* receive_configs,
491 VideoEncoderConfig* encoder_config) override { 487 VideoEncoderConfig* encoder_config) override {
492 transport_adapter_.reset( 488 transport_adapter_.reset(
493 new internal::TransportAdapter(send_config->send_transport)); 489 new internal::TransportAdapter(send_config->send_transport));
494 transport_adapter_->Enable(); 490 transport_adapter_->Enable();
495 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 491 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
496 send_config->rtp.rtx.payload_type = retransmit_payload_type_; 492 send_config->rtp.rtx.payload_type = retransmit_payload_type_;
497 if (retransmit_ssrc_ != kSendSsrcs[0]) 493 if (retransmit_ssrc_ != kSendSsrcs[0])
498 send_config->rtp.rtx.ssrcs.push_back(retransmit_ssrc_); 494 send_config->rtp.rtx.ssrcs.push_back(retransmit_ssrc_);
499 } 495 }
500 496
501 void PerformTest() override { 497 void PerformTest() override {
502 EXPECT_EQ(kEventSignaled, Wait()) 498 EXPECT_TRUE(Wait()) << "Timed out while waiting for NACK retransmission.";
503 << "Timed out while waiting for NACK retransmission.";
504 } 499 }
505 500
506 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_; 501 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_;
507 int send_count_; 502 int send_count_;
508 uint32_t retransmit_ssrc_; 503 uint32_t retransmit_ssrc_;
509 uint8_t retransmit_payload_type_; 504 uint8_t retransmit_payload_type_;
510 int nacked_sequence_number_; 505 int nacked_sequence_number_;
511 } test(retransmit_ssrc, retransmit_payload_type); 506 } test(retransmit_ssrc, retransmit_payload_type);
512 507
513 RunBaseTest(&test, FakeNetworkPipe::Config()); 508 RunBaseTest(&test, FakeNetworkPipe::Config());
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
609 EXPECT_GE(accumulated_size_, current_size_rtp_); 604 EXPECT_GE(accumulated_size_, current_size_rtp_);
610 if (test_generic_packetization_) { 605 if (test_generic_packetization_) {
611 EXPECT_EQ(current_size_rtp_, accumulated_payload_); 606 EXPECT_EQ(current_size_rtp_, accumulated_payload_);
612 } 607 }
613 608
614 // Last packet of frame; reset counters. 609 // Last packet of frame; reset counters.
615 accumulated_size_ = 0; 610 accumulated_size_ = 0;
616 accumulated_payload_ = 0; 611 accumulated_payload_ = 0;
617 if (current_size_rtp_ == stop_size_) { 612 if (current_size_rtp_ == stop_size_) {
618 // Done! (Don't increase size again, might arrive more @ stop_size). 613 // Done! (Don't increase size again, might arrive more @ stop_size).
619 observation_complete_->Set(); 614 observation_complete_.Set();
620 } else { 615 } else {
621 // Increase next expected frame size. If testing with FEC, make sure 616 // Increase next expected frame size. If testing with FEC, make sure
622 // a FEC packet has been received for this frame size before 617 // a FEC packet has been received for this frame size before
623 // proceeding, to make sure that redundancy packets don't exceed 618 // proceeding, to make sure that redundancy packets don't exceed
624 // size limit. 619 // size limit.
625 if (!use_fec_) { 620 if (!use_fec_) {
626 ++current_size_rtp_; 621 ++current_size_rtp_;
627 } else if (fec_packet_received_) { 622 } else if (fec_packet_received_) {
628 fec_packet_received_ = false; 623 fec_packet_received_ = false;
629 ++current_size_rtp_; 624 ++current_size_rtp_;
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
688 send_config->encoder_settings.encoder = &encoder_; 683 send_config->encoder_settings.encoder = &encoder_;
689 send_config->rtp.max_packet_size = kMaxPacketSize; 684 send_config->rtp.max_packet_size = kMaxPacketSize;
690 send_config->post_encode_callback = this; 685 send_config->post_encode_callback = this;
691 686
692 // Make sure there is at least one extension header, to make the RTP 687 // Make sure there is at least one extension header, to make the RTP
693 // header larger than the base length of 12 bytes. 688 // header larger than the base length of 12 bytes.
694 EXPECT_FALSE(send_config->rtp.extensions.empty()); 689 EXPECT_FALSE(send_config->rtp.extensions.empty());
695 } 690 }
696 691
697 void PerformTest() override { 692 void PerformTest() override {
698 EXPECT_EQ(kEventSignaled, Wait()) 693 EXPECT_TRUE(Wait()) << "Timed out while observing incoming RTP packets.";
699 << "Timed out while observing incoming RTP packets.";
700 } 694 }
701 695
702 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_; 696 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_;
703 test::ConfigurableFrameSizeEncoder encoder_; 697 test::ConfigurableFrameSizeEncoder encoder_;
704 698
705 const size_t max_packet_size_; 699 const size_t max_packet_size_;
706 const size_t stop_size_; 700 const size_t stop_size_;
707 const bool test_generic_packetization_; 701 const bool test_generic_packetization_;
708 const bool use_fec_; 702 const bool use_fec_;
709 703
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
789 if (header.paddingLength == 0) { 783 if (header.paddingLength == 0) {
790 // Non-padding packet observed. Test is almost complete. Will just 784 // Non-padding packet observed. Test is almost complete. Will just
791 // have to wait for the stats to change. 785 // have to wait for the stats to change.
792 test_state_ = kWaitingForStats; 786 test_state_ = kWaitingForStats;
793 } 787 }
794 SendRtcpFeedback(0); // REMB is only sent if value is > 0. 788 SendRtcpFeedback(0); // REMB is only sent if value is > 0.
795 } else if (test_state_ == kWaitingForStats) { 789 } else if (test_state_ == kWaitingForStats) {
796 VideoSendStream::Stats stats = stream_->GetStats(); 790 VideoSendStream::Stats stats = stream_->GetStats();
797 if (stats.suspended == false) { 791 if (stats.suspended == false) {
798 // Stats flipped to false. Test is complete. 792 // Stats flipped to false. Test is complete.
799 observation_complete_->Set(); 793 observation_complete_.Set();
800 } 794 }
801 SendRtcpFeedback(0); // REMB is only sent if value is > 0. 795 SendRtcpFeedback(0); // REMB is only sent if value is > 0.
802 } 796 }
803 797
804 return SEND_PACKET; 798 return SEND_PACKET;
805 } 799 }
806 800
807 // This method implements the I420FrameCallback. 801 // This method implements the I420FrameCallback.
808 void FrameCallback(VideoFrame* video_frame) override { 802 void FrameCallback(VideoFrame* video_frame) override {
809 rtc::CritScope lock(&crit_); 803 rtc::CritScope lock(&crit_);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
843 send_config->suspend_below_min_bitrate = true; 837 send_config->suspend_below_min_bitrate = true;
844 int min_bitrate_bps = encoder_config->streams[0].min_bitrate_bps; 838 int min_bitrate_bps = encoder_config->streams[0].min_bitrate_bps;
845 set_low_remb_bps(min_bitrate_bps - 10000); 839 set_low_remb_bps(min_bitrate_bps - 10000);
846 int threshold_window = std::max(min_bitrate_bps / 10, 10000); 840 int threshold_window = std::max(min_bitrate_bps / 10, 10000);
847 ASSERT_GT(encoder_config->streams[0].max_bitrate_bps, 841 ASSERT_GT(encoder_config->streams[0].max_bitrate_bps,
848 min_bitrate_bps + threshold_window + 5000); 842 min_bitrate_bps + threshold_window + 5000);
849 set_high_remb_bps(min_bitrate_bps + threshold_window + 5000); 843 set_high_remb_bps(min_bitrate_bps + threshold_window + 5000);
850 } 844 }
851 845
852 void PerformTest() override { 846 void PerformTest() override {
853 EXPECT_EQ(kEventSignaled, Wait()) 847 EXPECT_TRUE(Wait()) << "Timed out during suspend-below-min-bitrate test.";
854 << "Timed out during suspend-below-min-bitrate test.";
855 } 848 }
856 849
857 enum TestState { 850 enum TestState {
858 kBeforeSuspend, 851 kBeforeSuspend,
859 kDuringSuspend, 852 kDuringSuspend,
860 kWaitingForPacket, 853 kWaitingForPacket,
861 kWaitingForStats 854 kWaitingForStats
862 }; 855 };
863 856
864 virtual void SendRtcpFeedback(int remb_value) 857 virtual void SendRtcpFeedback(int remb_value)
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
911 capturer_->Stop(); 904 capturer_->Stop();
912 return SEND_PACKET; 905 return SEND_PACKET;
913 } 906 }
914 907
915 Action OnSendRtcp(const uint8_t* packet, size_t length) override { 908 Action OnSendRtcp(const uint8_t* packet, size_t length) override {
916 rtc::CritScope lock(&crit_); 909 rtc::CritScope lock(&crit_);
917 const int kVideoMutedThresholdMs = 10000; 910 const int kVideoMutedThresholdMs = 10000;
918 if (last_packet_time_ms_ > 0 && 911 if (last_packet_time_ms_ > 0 &&
919 clock_->TimeInMilliseconds() - last_packet_time_ms_ > 912 clock_->TimeInMilliseconds() - last_packet_time_ms_ >
920 kVideoMutedThresholdMs) 913 kVideoMutedThresholdMs)
921 observation_complete_->Set(); 914 observation_complete_.Set();
922 // Receive statistics reporting having lost 50% of the packets. 915 // Receive statistics reporting having lost 50% of the packets.
923 FakeReceiveStatistics receive_stats(kSendSsrcs[0], 1, 1, 0); 916 FakeReceiveStatistics receive_stats(kSendSsrcs[0], 1, 1, 0);
924 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), &receive_stats, 917 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), &receive_stats,
925 nullptr, transport_adapter_.get()); 918 nullptr, transport_adapter_.get());
926 919
927 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); 920 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize);
928 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); 921 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]);
929 922
930 RTCPSender::FeedbackState feedback_state; 923 RTCPSender::FeedbackState feedback_state;
931 924
(...skipping 11 matching lines...) Expand all
943 936
944 size_t GetNumStreams() const override { return 3; } 937 size_t GetNumStreams() const override { return 3; }
945 938
946 virtual void OnFrameGeneratorCapturerCreated( 939 virtual void OnFrameGeneratorCapturerCreated(
947 test::FrameGeneratorCapturer* frame_generator_capturer) { 940 test::FrameGeneratorCapturer* frame_generator_capturer) {
948 rtc::CritScope lock(&crit_); 941 rtc::CritScope lock(&crit_);
949 capturer_ = frame_generator_capturer; 942 capturer_ = frame_generator_capturer;
950 } 943 }
951 944
952 void PerformTest() override { 945 void PerformTest() override {
953 EXPECT_EQ(kEventSignaled, Wait()) 946 EXPECT_TRUE(Wait())
954 << "Timed out while waiting for RTP packets to stop being sent."; 947 << "Timed out while waiting for RTP packets to stop being sent.";
955 } 948 }
956 949
957 Clock* const clock_; 950 Clock* const clock_;
958 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_; 951 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_;
959 rtc::CriticalSection crit_; 952 rtc::CriticalSection crit_;
960 int64_t last_packet_time_ms_ GUARDED_BY(crit_); 953 int64_t last_packet_time_ms_ GUARDED_BY(crit_);
961 test::FrameGeneratorCapturer* capturer_ GUARDED_BY(crit_); 954 test::FrameGeneratorCapturer* capturer_ GUARDED_BY(crit_);
962 } test; 955 } test;
963 956
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1003 static_cast<size_t>(total_bitrate_bps), 996 static_cast<size_t>(total_bitrate_bps),
1004 "bps", 997 "bps",
1005 false); 998 false);
1006 if (total_bitrate_bps > kHighBitrateBps) { 999 if (total_bitrate_bps > kHighBitrateBps) {
1007 rtp_rtcp_->SetREMBData(kRembBitrateBps, 1000 rtp_rtcp_->SetREMBData(kRembBitrateBps,
1008 std::vector<uint32_t>(1, header.ssrc)); 1001 std::vector<uint32_t>(1, header.ssrc));
1009 rtp_rtcp_->Process(); 1002 rtp_rtcp_->Process();
1010 bitrate_capped_ = true; 1003 bitrate_capped_ = true;
1011 } else if (bitrate_capped_ && 1004 } else if (bitrate_capped_ &&
1012 total_bitrate_bps < kRembRespectedBitrateBps) { 1005 total_bitrate_bps < kRembRespectedBitrateBps) {
1013 observation_complete_->Set(); 1006 observation_complete_.Set();
1014 } 1007 }
1015 } 1008 }
1016 // Packets don't have to be delivered since the test is the receiver. 1009 // Packets don't have to be delivered since the test is the receiver.
1017 return DROP_PACKET; 1010 return DROP_PACKET;
1018 } 1011 }
1019 1012
1020 void OnStreamsCreated( 1013 void OnStreamsCreated(
1021 VideoSendStream* send_stream, 1014 VideoSendStream* send_stream,
1022 const std::vector<VideoReceiveStream*>& receive_streams) override { 1015 const std::vector<VideoReceiveStream*>& receive_streams) override {
1023 stream_ = send_stream; 1016 stream_ = send_stream;
1024 RtpRtcp::Configuration config; 1017 RtpRtcp::Configuration config;
1025 config.outgoing_transport = feedback_transport_.get(); 1018 config.outgoing_transport = feedback_transport_.get();
1026 rtp_rtcp_.reset(RtpRtcp::CreateRtpRtcp(config)); 1019 rtp_rtcp_.reset(RtpRtcp::CreateRtpRtcp(config));
1027 rtp_rtcp_->SetREMBStatus(true); 1020 rtp_rtcp_->SetREMBStatus(true);
1028 rtp_rtcp_->SetRTCPStatus(RtcpMode::kReducedSize); 1021 rtp_rtcp_->SetRTCPStatus(RtcpMode::kReducedSize);
1029 } 1022 }
1030 1023
1031 void ModifyConfigs(VideoSendStream::Config* send_config, 1024 void ModifyConfigs(VideoSendStream::Config* send_config,
1032 std::vector<VideoReceiveStream::Config>* receive_configs, 1025 std::vector<VideoReceiveStream::Config>* receive_configs,
1033 VideoEncoderConfig* encoder_config) override { 1026 VideoEncoderConfig* encoder_config) override {
1034 feedback_transport_.reset( 1027 feedback_transport_.reset(
1035 new internal::TransportAdapter(send_config->send_transport)); 1028 new internal::TransportAdapter(send_config->send_transport));
1036 feedback_transport_->Enable(); 1029 feedback_transport_->Enable();
1037 encoder_config->min_transmit_bitrate_bps = kMinTransmitBitrateBps; 1030 encoder_config->min_transmit_bitrate_bps = kMinTransmitBitrateBps;
1038 } 1031 }
1039 1032
1040 void PerformTest() override { 1033 void PerformTest() override {
1041 EXPECT_EQ(kEventSignaled, Wait()) 1034 EXPECT_TRUE(Wait())
1042 << "Timeout while waiting for low bitrate stats after REMB."; 1035 << "Timeout while waiting for low bitrate stats after REMB.";
1043 } 1036 }
1044 1037
1045 rtc::scoped_ptr<RtpRtcp> rtp_rtcp_; 1038 rtc::scoped_ptr<RtpRtcp> rtp_rtcp_;
1046 rtc::scoped_ptr<internal::TransportAdapter> feedback_transport_; 1039 rtc::scoped_ptr<internal::TransportAdapter> feedback_transport_;
1047 VideoSendStream* stream_; 1040 VideoSendStream* stream_;
1048 bool bitrate_capped_; 1041 bool bitrate_capped_;
1049 } test; 1042 } test;
1050 1043
1051 RunBaseTest(&test, FakeNetworkPipe::Config()); 1044 RunBaseTest(&test, FakeNetworkPipe::Config());
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1107 // reported in between. 1100 // reported in between.
1108 EXPECT_EQ(bitrate_config.start_bitrate_bps / 1000, 1101 EXPECT_EQ(bitrate_config.start_bitrate_bps / 1000,
1109 encoder.GetStartBitrateKbps()); 1102 encoder.GetStartBitrateKbps());
1110 1103
1111 DestroyStreams(); 1104 DestroyStreams();
1112 } 1105 }
1113 1106
1114 TEST_F(VideoSendStreamTest, CapturesTextureAndVideoFrames) { 1107 TEST_F(VideoSendStreamTest, CapturesTextureAndVideoFrames) {
1115 class FrameObserver : public I420FrameCallback { 1108 class FrameObserver : public I420FrameCallback {
1116 public: 1109 public:
1117 FrameObserver() : output_frame_event_(EventWrapper::Create()) {} 1110 FrameObserver() : output_frame_event_(false, false) {}
1118 1111
1119 void FrameCallback(VideoFrame* video_frame) override { 1112 void FrameCallback(VideoFrame* video_frame) override {
1120 output_frames_.push_back(*video_frame); 1113 output_frames_.push_back(*video_frame);
1121 output_frame_event_->Set(); 1114 output_frame_event_.Set();
1122 } 1115 }
1123 1116
1124 void WaitOutputFrame() { 1117 void WaitOutputFrame() {
1125 const uint32_t kWaitFrameTimeoutMs = 3000; 1118 const int kWaitFrameTimeoutMs = 3000;
1126 EXPECT_EQ(kEventSignaled, output_frame_event_->Wait(kWaitFrameTimeoutMs)) 1119 EXPECT_TRUE(output_frame_event_.Wait(kWaitFrameTimeoutMs))
1127 << "Timeout while waiting for output frames."; 1120 << "Timeout while waiting for output frames.";
1128 } 1121 }
1129 1122
1130 const std::vector<VideoFrame>& output_frames() const { 1123 const std::vector<VideoFrame>& output_frames() const {
1131 return output_frames_; 1124 return output_frames_;
1132 } 1125 }
1133 1126
1134 private: 1127 private:
1135 // Delivered output frames. 1128 // Delivered output frames.
1136 std::vector<VideoFrame> output_frames_; 1129 std::vector<VideoFrame> output_frames_;
1137 1130
1138 // Indicate an output frame has arrived. 1131 // Indicate an output frame has arrived.
1139 rtc::scoped_ptr<EventWrapper> output_frame_event_; 1132 rtc::Event output_frame_event_;
1140 }; 1133 };
1141 1134
1142 // Initialize send stream. 1135 // Initialize send stream.
1143 CreateSenderCall(Call::Config()); 1136 CreateSenderCall(Call::Config());
1144 1137
1145 test::NullTransport transport; 1138 test::NullTransport transport;
1146 CreateSendConfig(1, &transport); 1139 CreateSendConfig(1, &transport);
1147 FrameObserver observer; 1140 FrameObserver observer;
1148 send_config_.pre_encode_callback = &observer; 1141 send_config_.pre_encode_callback = &observer;
1149 CreateStreams(); 1142 CreateStreams();
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
1277 initialized_ = true; 1270 initialized_ = true;
1278 released_ = false; 1271 released_ = false;
1279 return 0; 1272 return 0;
1280 } 1273 }
1281 1274
1282 int32_t Encode(const VideoFrame& inputImage, 1275 int32_t Encode(const VideoFrame& inputImage,
1283 const CodecSpecificInfo* codecSpecificInfo, 1276 const CodecSpecificInfo* codecSpecificInfo,
1284 const std::vector<FrameType>* frame_types) override { 1277 const std::vector<FrameType>* frame_types) override {
1285 EXPECT_TRUE(IsReadyForEncode()); 1278 EXPECT_TRUE(IsReadyForEncode());
1286 1279
1287 observation_complete_->Set(); 1280 observation_complete_.Set();
1288 return 0; 1281 return 0;
1289 } 1282 }
1290 1283
1291 int32_t RegisterEncodeCompleteCallback( 1284 int32_t RegisterEncodeCompleteCallback(
1292 EncodedImageCallback* callback) override { 1285 EncodedImageCallback* callback) override {
1293 rtc::CritScope lock(&crit_); 1286 rtc::CritScope lock(&crit_);
1294 EXPECT_TRUE(initialized_); 1287 EXPECT_TRUE(initialized_);
1295 callback_registered_ = true; 1288 callback_registered_ = true;
1296 return 0; 1289 return 0;
1297 } 1290 }
(...skipping 29 matching lines...) Expand all
1327 } 1320 }
1328 1321
1329 void ModifyConfigs(VideoSendStream::Config* send_config, 1322 void ModifyConfigs(VideoSendStream::Config* send_config,
1330 std::vector<VideoReceiveStream::Config>* receive_configs, 1323 std::vector<VideoReceiveStream::Config>* receive_configs,
1331 VideoEncoderConfig* encoder_config) override { 1324 VideoEncoderConfig* encoder_config) override {
1332 send_config->encoder_settings.encoder = this; 1325 send_config->encoder_settings.encoder = this;
1333 encoder_config_ = *encoder_config; 1326 encoder_config_ = *encoder_config;
1334 } 1327 }
1335 1328
1336 void PerformTest() override { 1329 void PerformTest() override {
1337 EXPECT_EQ(kEventSignaled, Wait()) 1330 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode.";
1338 << "Timed out while waiting for Encode.";
1339 EXPECT_EQ(0u, num_releases()); 1331 EXPECT_EQ(0u, num_releases());
1340 stream_->ReconfigureVideoEncoder(encoder_config_); 1332 stream_->ReconfigureVideoEncoder(encoder_config_);
1341 EXPECT_EQ(0u, num_releases()); 1333 EXPECT_EQ(0u, num_releases());
1342 stream_->Stop(); 1334 stream_->Stop();
1343 // Encoder should not be released before destroying the VideoSendStream. 1335 // Encoder should not be released before destroying the VideoSendStream.
1344 EXPECT_FALSE(IsReleased()); 1336 EXPECT_FALSE(IsReleased());
1345 EXPECT_TRUE(IsReadyForEncode()); 1337 EXPECT_TRUE(IsReadyForEncode());
1346 stream_->Start(); 1338 stream_->Start();
1347 // Sanity check, make sure we still encode frames with this encoder. 1339 // Sanity check, make sure we still encode frames with this encoder.
1348 EXPECT_EQ(kEventSignaled, Wait()) 1340 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode.";
1349 << "Timed out while waiting for Encode.";
1350 } 1341 }
1351 1342
1352 rtc::CriticalSection crit_; 1343 rtc::CriticalSection crit_;
1353 VideoSendStream* stream_; 1344 VideoSendStream* stream_;
1354 bool initialized_ GUARDED_BY(crit_); 1345 bool initialized_ GUARDED_BY(crit_);
1355 bool callback_registered_ GUARDED_BY(crit_); 1346 bool callback_registered_ GUARDED_BY(crit_);
1356 size_t num_releases_ GUARDED_BY(crit_); 1347 size_t num_releases_ GUARDED_BY(crit_);
1357 bool released_ GUARDED_BY(crit_); 1348 bool released_ GUARDED_BY(crit_);
1358 VideoEncoderConfig encoder_config_; 1349 VideoEncoderConfig encoder_config_;
1359 } test_encoder; 1350 } test_encoder;
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
1580 1571
1581 RTCPUtility::RTCPPacketTypes packet_type = parser.Begin(); 1572 RTCPUtility::RTCPPacketTypes packet_type = parser.Begin();
1582 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) { 1573 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) {
1583 if (packet_type == RTCPUtility::RTCPPacketTypes::kSr) { 1574 if (packet_type == RTCPUtility::RTCPPacketTypes::kSr) {
1584 // Only compare sent media bytes if SenderPacketCount matches the 1575 // Only compare sent media bytes if SenderPacketCount matches the
1585 // number of sent rtp packets (a new rtp packet could be sent before 1576 // number of sent rtp packets (a new rtp packet could be sent before
1586 // the rtcp packet). 1577 // the rtcp packet).
1587 if (parser.Packet().SR.SenderOctetCount > 0 && 1578 if (parser.Packet().SR.SenderOctetCount > 0 &&
1588 parser.Packet().SR.SenderPacketCount == rtp_packets_sent_) { 1579 parser.Packet().SR.SenderPacketCount == rtp_packets_sent_) {
1589 EXPECT_EQ(media_bytes_sent_, parser.Packet().SR.SenderOctetCount); 1580 EXPECT_EQ(media_bytes_sent_, parser.Packet().SR.SenderOctetCount);
1590 observation_complete_->Set(); 1581 observation_complete_.Set();
1591 } 1582 }
1592 } 1583 }
1593 packet_type = parser.Iterate(); 1584 packet_type = parser.Iterate();
1594 } 1585 }
1595 1586
1596 return SEND_PACKET; 1587 return SEND_PACKET;
1597 } 1588 }
1598 1589
1599 void PerformTest() override { 1590 void PerformTest() override {
1600 EXPECT_EQ(kEventSignaled, Wait()) 1591 EXPECT_TRUE(Wait()) << "Timed out while waiting for RTCP sender report.";
1601 << "Timed out while waiting for RTCP sender report.";
1602 } 1592 }
1603 1593
1604 rtc::CriticalSection crit_; 1594 rtc::CriticalSection crit_;
1605 size_t rtp_packets_sent_ GUARDED_BY(&crit_); 1595 size_t rtp_packets_sent_ GUARDED_BY(&crit_);
1606 size_t media_bytes_sent_ GUARDED_BY(&crit_); 1596 size_t media_bytes_sent_ GUARDED_BY(&crit_);
1607 } test; 1597 } test;
1608 1598
1609 RunBaseTest(&test, FakeNetworkPipe::Config()); 1599 RunBaseTest(&test, FakeNetworkPipe::Config());
1610 } 1600 }
1611 1601
1612 TEST_F(VideoSendStreamTest, TranslatesTwoLayerScreencastToTargetBitrate) { 1602 TEST_F(VideoSendStreamTest, TranslatesTwoLayerScreencastToTargetBitrate) {
1613 static const int kScreencastTargetBitrateKbps = 200; 1603 static const int kScreencastTargetBitrateKbps = 200;
1614 class ScreencastTargetBitrateTest : public test::SendTest, 1604 class ScreencastTargetBitrateTest : public test::SendTest,
1615 public test::FakeEncoder { 1605 public test::FakeEncoder {
1616 public: 1606 public:
1617 ScreencastTargetBitrateTest() 1607 ScreencastTargetBitrateTest()
1618 : SendTest(kDefaultTimeoutMs), 1608 : SendTest(kDefaultTimeoutMs),
1619 test::FakeEncoder(Clock::GetRealTimeClock()) {} 1609 test::FakeEncoder(Clock::GetRealTimeClock()) {}
1620 1610
1621 private: 1611 private:
1622 int32_t InitEncode(const VideoCodec* config, 1612 int32_t InitEncode(const VideoCodec* config,
1623 int32_t number_of_cores, 1613 int32_t number_of_cores,
1624 size_t max_payload_size) override { 1614 size_t max_payload_size) override {
1625 EXPECT_EQ(static_cast<unsigned int>(kScreencastTargetBitrateKbps), 1615 EXPECT_EQ(static_cast<unsigned int>(kScreencastTargetBitrateKbps),
1626 config->targetBitrate); 1616 config->targetBitrate);
1627 observation_complete_->Set(); 1617 observation_complete_.Set();
1628 return test::FakeEncoder::InitEncode( 1618 return test::FakeEncoder::InitEncode(
1629 config, number_of_cores, max_payload_size); 1619 config, number_of_cores, max_payload_size);
1630 } 1620 }
1631 void ModifyConfigs(VideoSendStream::Config* send_config, 1621 void ModifyConfigs(VideoSendStream::Config* send_config,
1632 std::vector<VideoReceiveStream::Config>* receive_configs, 1622 std::vector<VideoReceiveStream::Config>* receive_configs,
1633 VideoEncoderConfig* encoder_config) override { 1623 VideoEncoderConfig* encoder_config) override {
1634 send_config->encoder_settings.encoder = this; 1624 send_config->encoder_settings.encoder = this;
1635 EXPECT_EQ(1u, encoder_config->streams.size()); 1625 EXPECT_EQ(1u, encoder_config->streams.size());
1636 EXPECT_TRUE( 1626 EXPECT_TRUE(
1637 encoder_config->streams[0].temporal_layer_thresholds_bps.empty()); 1627 encoder_config->streams[0].temporal_layer_thresholds_bps.empty());
1638 encoder_config->streams[0].temporal_layer_thresholds_bps.push_back( 1628 encoder_config->streams[0].temporal_layer_thresholds_bps.push_back(
1639 kScreencastTargetBitrateKbps * 1000); 1629 kScreencastTargetBitrateKbps * 1000);
1640 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen; 1630 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen;
1641 } 1631 }
1642 1632
1643 void PerformTest() override { 1633 void PerformTest() override {
1644 EXPECT_EQ(kEventSignaled, Wait()) 1634 EXPECT_TRUE(Wait())
1645 << "Timed out while waiting for the encoder to be initialized."; 1635 << "Timed out while waiting for the encoder to be initialized.";
1646 } 1636 }
1647 } test; 1637 } test;
1648 1638
1649 RunBaseTest(&test, FakeNetworkPipe::Config()); 1639 RunBaseTest(&test, FakeNetworkPipe::Config());
1650 } 1640 }
1651 1641
1652 TEST_F(VideoSendStreamTest, ReconfigureBitratesSetsEncoderBitratesCorrectly) { 1642 TEST_F(VideoSendStreamTest, ReconfigureBitratesSetsEncoderBitratesCorrectly) {
1653 // These are chosen to be "kind of odd" to not be accidentally checked against 1643 // These are chosen to be "kind of odd" to not be accidentally checked against
1654 // default values. 1644 // default values.
(...skipping 15 matching lines...) Expand all
1670 int32_t InitEncode(const VideoCodec* codecSettings, 1660 int32_t InitEncode(const VideoCodec* codecSettings,
1671 int32_t numberOfCores, 1661 int32_t numberOfCores,
1672 size_t maxPayloadSize) override { 1662 size_t maxPayloadSize) override {
1673 if (num_initializations_ == 0) { 1663 if (num_initializations_ == 0) {
1674 EXPECT_EQ(static_cast<unsigned int>(kMinBitrateKbps), 1664 EXPECT_EQ(static_cast<unsigned int>(kMinBitrateKbps),
1675 codecSettings->minBitrate); 1665 codecSettings->minBitrate);
1676 EXPECT_EQ(static_cast<unsigned int>(kStartBitrateKbps), 1666 EXPECT_EQ(static_cast<unsigned int>(kStartBitrateKbps),
1677 codecSettings->startBitrate); 1667 codecSettings->startBitrate);
1678 EXPECT_EQ(static_cast<unsigned int>(kMaxBitrateKbps), 1668 EXPECT_EQ(static_cast<unsigned int>(kMaxBitrateKbps),
1679 codecSettings->maxBitrate); 1669 codecSettings->maxBitrate);
1680 observation_complete_->Set(); 1670 observation_complete_.Set();
1681 } else if (num_initializations_ == 1) { 1671 } else if (num_initializations_ == 1) {
1682 EXPECT_EQ(static_cast<unsigned int>(kLowerMaxBitrateKbps), 1672 EXPECT_EQ(static_cast<unsigned int>(kLowerMaxBitrateKbps),
1683 codecSettings->maxBitrate); 1673 codecSettings->maxBitrate);
1684 // The start bitrate should be kept (-1) and capped to the max bitrate. 1674 // The start bitrate should be kept (-1) and capped to the max bitrate.
1685 // Since this is not an end-to-end call no receiver should have been 1675 // Since this is not an end-to-end call no receiver should have been
1686 // returning a REMB that could lower this estimate. 1676 // returning a REMB that could lower this estimate.
1687 EXPECT_EQ(codecSettings->startBitrate, codecSettings->maxBitrate); 1677 EXPECT_EQ(codecSettings->startBitrate, codecSettings->maxBitrate);
1688 } else if (num_initializations_ == 2) { 1678 } else if (num_initializations_ == 2) {
1689 EXPECT_EQ(static_cast<unsigned int>(kIncreasedMaxBitrateKbps), 1679 EXPECT_EQ(static_cast<unsigned int>(kIncreasedMaxBitrateKbps),
1690 codecSettings->maxBitrate); 1680 codecSettings->maxBitrate);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1723 VideoSendStream* send_stream, 1713 VideoSendStream* send_stream,
1724 const std::vector<VideoReceiveStream*>& receive_streams) override { 1714 const std::vector<VideoReceiveStream*>& receive_streams) override {
1725 send_stream_ = send_stream; 1715 send_stream_ = send_stream;
1726 } 1716 }
1727 1717
1728 void PerformTest() override { 1718 void PerformTest() override {
1729 Call::Config::BitrateConfig bitrate_config; 1719 Call::Config::BitrateConfig bitrate_config;
1730 bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000; 1720 bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000;
1731 bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; 1721 bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000;
1732 call_->SetBitrateConfig(bitrate_config); 1722 call_->SetBitrateConfig(bitrate_config);
1733 EXPECT_EQ(kEventSignaled, Wait()) 1723 EXPECT_TRUE(Wait())
1734 << "Timed out while waiting encoder to be configured."; 1724 << "Timed out while waiting encoder to be configured.";
1735 encoder_config_.streams[0].min_bitrate_bps = 0; 1725 encoder_config_.streams[0].min_bitrate_bps = 0;
1736 encoder_config_.streams[0].max_bitrate_bps = kLowerMaxBitrateKbps * 1000; 1726 encoder_config_.streams[0].max_bitrate_bps = kLowerMaxBitrateKbps * 1000;
1737 send_stream_->ReconfigureVideoEncoder(encoder_config_); 1727 send_stream_->ReconfigureVideoEncoder(encoder_config_);
1738 EXPECT_EQ(2, num_initializations_) 1728 EXPECT_EQ(2, num_initializations_)
1739 << "Encoder should have been reconfigured with the new value."; 1729 << "Encoder should have been reconfigured with the new value.";
1740 encoder_config_.streams[0].target_bitrate_bps = 1730 encoder_config_.streams[0].target_bitrate_bps =
1741 encoder_config_.streams[0].min_bitrate_bps; 1731 encoder_config_.streams[0].min_bitrate_bps;
1742 encoder_config_.streams[0].max_bitrate_bps = 1732 encoder_config_.streams[0].max_bitrate_bps =
1743 kIncreasedMaxBitrateKbps * 1000; 1733 kIncreasedMaxBitrateKbps * 1000;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1786 for (size_t i = 0; i < kNumStreams; ++i) { 1776 for (size_t i = 0; i < kNumStreams; ++i) {
1787 specifics.codecSpecific.generic.simulcast_idx = static_cast<uint8_t>(i); 1777 specifics.codecSpecific.generic.simulcast_idx = static_cast<uint8_t>(i);
1788 encoded._frameType = (*frame_types)[i]; 1778 encoded._frameType = (*frame_types)[i];
1789 encoded._encodedWidth = kEncodedResolution[i].width; 1779 encoded._encodedWidth = kEncodedResolution[i].width;
1790 encoded._encodedHeight = kEncodedResolution[i].height; 1780 encoded._encodedHeight = kEncodedResolution[i].height;
1791 RTC_DCHECK(callback_ != nullptr); 1781 RTC_DCHECK(callback_ != nullptr);
1792 if (callback_->Encoded(encoded, &specifics, nullptr) != 0) 1782 if (callback_->Encoded(encoded, &specifics, nullptr) != 0)
1793 return -1; 1783 return -1;
1794 } 1784 }
1795 1785
1796 observation_complete_->Set(); 1786 observation_complete_.Set();
1797 return 0; 1787 return 0;
1798 } 1788 }
1799 void ModifyConfigs(VideoSendStream::Config* send_config, 1789 void ModifyConfigs(VideoSendStream::Config* send_config,
1800 std::vector<VideoReceiveStream::Config>* receive_configs, 1790 std::vector<VideoReceiveStream::Config>* receive_configs,
1801 VideoEncoderConfig* encoder_config) override { 1791 VideoEncoderConfig* encoder_config) override {
1802 send_config->encoder_settings.encoder = this; 1792 send_config->encoder_settings.encoder = this;
1803 EXPECT_EQ(kNumStreams, encoder_config->streams.size()); 1793 EXPECT_EQ(kNumStreams, encoder_config->streams.size());
1804 } 1794 }
1805 1795
1806 size_t GetNumStreams() const override { return kNumStreams; } 1796 size_t GetNumStreams() const override { return kNumStreams; }
1807 1797
1808 void PerformTest() override { 1798 void PerformTest() override {
1809 EXPECT_EQ(kEventSignaled, Wait()) 1799 EXPECT_TRUE(Wait())
1810 << "Timed out while waiting for the encoder to send one frame."; 1800 << "Timed out while waiting for the encoder to send one frame.";
1811 VideoSendStream::Stats stats = send_stream_->GetStats(); 1801 VideoSendStream::Stats stats = send_stream_->GetStats();
1812 1802
1813 for (size_t i = 0; i < kNumStreams; ++i) { 1803 for (size_t i = 0; i < kNumStreams; ++i) {
1814 ASSERT_TRUE(stats.substreams.find(kSendSsrcs[i]) != 1804 ASSERT_TRUE(stats.substreams.find(kSendSsrcs[i]) !=
1815 stats.substreams.end()) 1805 stats.substreams.end())
1816 << "No stats for SSRC: " << kSendSsrcs[i] 1806 << "No stats for SSRC: " << kSendSsrcs[i]
1817 << ", stats should exist as soon as frames have been encoded."; 1807 << ", stats should exist as soon as frames have been encoded.";
1818 VideoSendStream::StreamStats ssrc_stats = 1808 VideoSendStream::StreamStats ssrc_stats =
1819 stats.substreams[kSendSsrcs[i]]; 1809 stats.substreams[kSendSsrcs[i]];
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1861 send_config->encoder_settings.payload_name = "VP9"; 1851 send_config->encoder_settings.payload_name = "VP9";
1862 send_config->encoder_settings.payload_type = kVp9PayloadType; 1852 send_config->encoder_settings.payload_type = kVp9PayloadType;
1863 ModifyConfigsHook(send_config, receive_configs, encoder_config); 1853 ModifyConfigsHook(send_config, receive_configs, encoder_config);
1864 EXPECT_EQ(1u, encoder_config->streams.size()); 1854 EXPECT_EQ(1u, encoder_config->streams.size());
1865 encoder_config->streams[0].temporal_layer_thresholds_bps.resize( 1855 encoder_config->streams[0].temporal_layer_thresholds_bps.resize(
1866 vp9_settings_.numberOfTemporalLayers - 1); 1856 vp9_settings_.numberOfTemporalLayers - 1);
1867 encoder_config_ = *encoder_config; 1857 encoder_config_ = *encoder_config;
1868 } 1858 }
1869 1859
1870 void PerformTest() override { 1860 void PerformTest() override {
1871 EXPECT_EQ(kEventSignaled, Wait()) 1861 EXPECT_TRUE(Wait()) << "Test timed out waiting for VP9 packet, num frames "
1872 << "Test timed out waiting for VP9 packet, num frames " << frames_sent_; 1862 << frames_sent_;
1873 } 1863 }
1874 1864
1875 Action OnSendRtp(const uint8_t* packet, size_t length) override { 1865 Action OnSendRtp(const uint8_t* packet, size_t length) override {
1876 RTPHeader header; 1866 RTPHeader header;
1877 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 1867 EXPECT_TRUE(parser_->Parse(packet, length, &header));
1878 1868
1879 EXPECT_EQ(kVp9PayloadType, header.payloadType); 1869 EXPECT_EQ(kVp9PayloadType, header.payloadType);
1880 const uint8_t* payload = packet + header.headerLength; 1870 const uint8_t* payload = packet + header.headerLength;
1881 size_t payload_length = length - header.headerLength - header.paddingLength; 1871 size_t payload_length = length - header.headerLength - header.paddingLength;
1882 1872
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
2173 2163
2174 if (IsNewPictureId(vp9)) { 2164 if (IsNewPictureId(vp9)) {
2175 EXPECT_EQ(0, vp9.spatial_idx); 2165 EXPECT_EQ(0, vp9.spatial_idx);
2176 EXPECT_EQ(num_spatial_layers_ - 1, last_vp9_.spatial_idx); 2166 EXPECT_EQ(num_spatial_layers_ - 1, last_vp9_.spatial_idx);
2177 } 2167 }
2178 2168
2179 VerifyFixedTemporalLayerStructure(vp9, 2169 VerifyFixedTemporalLayerStructure(vp9,
2180 l_field_ ? num_temporal_layers_ : 0); 2170 l_field_ ? num_temporal_layers_ : 0);
2181 2171
2182 if (frames_sent_ > kNumFramesToSend) 2172 if (frames_sent_ > kNumFramesToSend)
2183 observation_complete_->Set(); 2173 observation_complete_.Set();
2184 } 2174 }
2185 const uint8_t num_temporal_layers_; 2175 const uint8_t num_temporal_layers_;
2186 const uint8_t num_spatial_layers_; 2176 const uint8_t num_spatial_layers_;
2187 const bool l_field_; 2177 const bool l_field_;
2188 } test(num_temporal_layers, num_spatial_layers); 2178 } test(num_temporal_layers, num_spatial_layers);
2189 2179
2190 RunBaseTest(&test, FakeNetworkPipe::Config()); 2180 RunBaseTest(&test, FakeNetworkPipe::Config());
2191 } 2181 }
2192 2182
2193 TEST_F(VideoSendStreamTest, Vp9FlexModeRefCount) { 2183 TEST_F(VideoSendStreamTest, Vp9FlexModeRefCount) {
2194 class FlexibleMode : public Vp9HeaderObserver { 2184 class FlexibleMode : public Vp9HeaderObserver {
2195 void ModifyConfigsHook( 2185 void ModifyConfigsHook(
2196 VideoSendStream::Config* send_config, 2186 VideoSendStream::Config* send_config,
2197 std::vector<VideoReceiveStream::Config>* receive_configs, 2187 std::vector<VideoReceiveStream::Config>* receive_configs,
2198 VideoEncoderConfig* encoder_config) override { 2188 VideoEncoderConfig* encoder_config) override {
2199 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen; 2189 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen;
2200 vp9_settings_.flexibleMode = true; 2190 vp9_settings_.flexibleMode = true;
2201 vp9_settings_.numberOfTemporalLayers = 1; 2191 vp9_settings_.numberOfTemporalLayers = 1;
2202 vp9_settings_.numberOfSpatialLayers = 2; 2192 vp9_settings_.numberOfSpatialLayers = 2;
2203 } 2193 }
2204 2194
2205 void InspectHeader(const RTPVideoHeaderVP9& vp9_header) override { 2195 void InspectHeader(const RTPVideoHeaderVP9& vp9_header) override {
2206 EXPECT_TRUE(vp9_header.flexible_mode); 2196 EXPECT_TRUE(vp9_header.flexible_mode);
2207 EXPECT_EQ(kNoTl0PicIdx, vp9_header.tl0_pic_idx); 2197 EXPECT_EQ(kNoTl0PicIdx, vp9_header.tl0_pic_idx);
2208 if (vp9_header.inter_pic_predicted) { 2198 if (vp9_header.inter_pic_predicted) {
2209 EXPECT_GT(vp9_header.num_ref_pics, 0u); 2199 EXPECT_GT(vp9_header.num_ref_pics, 0u);
2210 observation_complete_->Set(); 2200 observation_complete_.Set();
2211 } 2201 }
2212 } 2202 }
2213 } test; 2203 } test;
2214 2204
2215 RunBaseTest(&test, FakeNetworkPipe::Config()); 2205 RunBaseTest(&test, FakeNetworkPipe::Config());
2216 } 2206 }
2217 2207
2218 } // namespace webrtc 2208 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/video/video_quality_test.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698