OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |