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> | 10 #include <algorithm> |
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
259 << "Timed out while waiting for the frame to render."; | 259 << "Timed out while waiting for the frame to render."; |
260 | 260 |
261 Stop(); | 261 Stop(); |
262 | 262 |
263 sender_transport.StopSending(); | 263 sender_transport.StopSending(); |
264 receiver_transport.StopSending(); | 264 receiver_transport.StopSending(); |
265 | 265 |
266 DestroyStreams(); | 266 DestroyStreams(); |
267 } | 267 } |
268 | 268 |
| 269 class CodecObserver : public test::EndToEndTest, |
| 270 public rtc::VideoSinkInterface<VideoFrame> { |
| 271 public: |
| 272 CodecObserver(int no_frames_to_wait_for, |
| 273 VideoRotation rotation_to_test, |
| 274 const std::string& payload_name, |
| 275 webrtc::VideoEncoder* encoder, |
| 276 webrtc::VideoDecoder* decoder) |
| 277 : EndToEndTest(2 * webrtc::EndToEndTest::kDefaultTimeoutMs), |
| 278 no_frames_to_wait_for_(no_frames_to_wait_for), |
| 279 expected_rotation_(rotation_to_test), |
| 280 payload_name_(payload_name), |
| 281 encoder_(encoder), |
| 282 decoder_(decoder), |
| 283 frame_counter_(0) {} |
| 284 |
| 285 void PerformTest() override { |
| 286 EXPECT_TRUE(Wait()) |
| 287 << "Timed out while waiting for enough frames to be decoded."; |
| 288 } |
| 289 |
| 290 void ModifyVideoConfigs( |
| 291 VideoSendStream::Config* send_config, |
| 292 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 293 VideoEncoderConfig* encoder_config) override { |
| 294 send_config->encoder_settings.encoder = encoder_.get(); |
| 295 send_config->encoder_settings.payload_name = payload_name_; |
| 296 send_config->encoder_settings.payload_type = 126; |
| 297 encoder_config->streams[0].min_bitrate_bps = 50000; |
| 298 encoder_config->streams[0].target_bitrate_bps = |
| 299 encoder_config->streams[0].max_bitrate_bps = 2000000; |
| 300 |
| 301 (*receive_configs)[0].renderer = this; |
| 302 (*receive_configs)[0].decoders.resize(1); |
| 303 (*receive_configs)[0].decoders[0].payload_type = |
| 304 send_config->encoder_settings.payload_type; |
| 305 (*receive_configs)[0].decoders[0].payload_name = |
| 306 send_config->encoder_settings.payload_name; |
| 307 (*receive_configs)[0].decoders[0].decoder = decoder_.get(); |
| 308 } |
| 309 |
| 310 void OnFrame(const VideoFrame& video_frame) override { |
| 311 EXPECT_EQ(expected_rotation_, video_frame.rotation()); |
| 312 if (++frame_counter_ == no_frames_to_wait_for_) |
| 313 observation_complete_.Set(); |
| 314 } |
| 315 |
| 316 void OnFrameGeneratorCapturerCreated( |
| 317 test::FrameGeneratorCapturer* frame_generator_capturer) override { |
| 318 frame_generator_capturer->SetFakeRotation(expected_rotation_); |
| 319 } |
| 320 |
| 321 private: |
| 322 int no_frames_to_wait_for_; |
| 323 VideoRotation expected_rotation_; |
| 324 std::string payload_name_; |
| 325 std::unique_ptr<webrtc::VideoEncoder> encoder_; |
| 326 std::unique_ptr<webrtc::VideoDecoder> decoder_; |
| 327 int frame_counter_; |
| 328 }; |
| 329 |
| 330 TEST_F(EndToEndTest, SendsAndReceivesVP8Rotation90) { |
| 331 CodecObserver test(5, kVideoRotation_90, "VP8", |
| 332 VideoEncoder::Create(VideoEncoder::kVp8), |
| 333 VP8Decoder::Create()); |
| 334 RunBaseTest(&test); |
| 335 } |
| 336 |
269 TEST_F(EndToEndTest, SendsAndReceivesVP9) { | 337 TEST_F(EndToEndTest, SendsAndReceivesVP9) { |
270 class VP9Observer : public test::EndToEndTest, | 338 CodecObserver test(500, kVideoRotation_0, "VP9", |
271 public rtc::VideoSinkInterface<VideoFrame> { | 339 VideoEncoder::Create(VideoEncoder::kVp9), |
272 public: | 340 VP9Decoder::Create()); |
273 VP9Observer() | 341 RunBaseTest(&test); |
274 : EndToEndTest(2 * kDefaultTimeoutMs), | 342 } |
275 encoder_(VideoEncoder::Create(VideoEncoder::kVp9)), | |
276 decoder_(VP9Decoder::Create()), | |
277 frame_counter_(0) {} | |
278 | 343 |
279 void PerformTest() override { | 344 TEST_F(EndToEndTest, SendsAndReceivesVP9VideoRotation90) { |
280 EXPECT_TRUE(Wait()) | 345 CodecObserver test(5, kVideoRotation_90, "VP9", |
281 << "Timed out while waiting for enough frames to be decoded."; | 346 VideoEncoder::Create(VideoEncoder::kVp9), |
282 } | 347 VP9Decoder::Create()); |
283 | |
284 void ModifyVideoConfigs( | |
285 VideoSendStream::Config* send_config, | |
286 std::vector<VideoReceiveStream::Config>* receive_configs, | |
287 VideoEncoderConfig* encoder_config) override { | |
288 send_config->encoder_settings.encoder = encoder_.get(); | |
289 send_config->encoder_settings.payload_name = "VP9"; | |
290 send_config->encoder_settings.payload_type = 124; | |
291 encoder_config->streams[0].min_bitrate_bps = 50000; | |
292 encoder_config->streams[0].target_bitrate_bps = | |
293 encoder_config->streams[0].max_bitrate_bps = 2000000; | |
294 | |
295 (*receive_configs)[0].renderer = this; | |
296 (*receive_configs)[0].decoders.resize(1); | |
297 (*receive_configs)[0].decoders[0].payload_type = | |
298 send_config->encoder_settings.payload_type; | |
299 (*receive_configs)[0].decoders[0].payload_name = | |
300 send_config->encoder_settings.payload_name; | |
301 (*receive_configs)[0].decoders[0].decoder = decoder_.get(); | |
302 } | |
303 | |
304 void OnFrame(const VideoFrame& video_frame) override { | |
305 const int kRequiredFrames = 500; | |
306 if (++frame_counter_ == kRequiredFrames) | |
307 observation_complete_.Set(); | |
308 } | |
309 | |
310 private: | |
311 std::unique_ptr<webrtc::VideoEncoder> encoder_; | |
312 std::unique_ptr<webrtc::VideoDecoder> decoder_; | |
313 int frame_counter_; | |
314 } test; | |
315 | |
316 RunBaseTest(&test); | 348 RunBaseTest(&test); |
317 } | 349 } |
318 | 350 |
319 #if defined(WEBRTC_END_TO_END_H264_TESTS) | 351 #if defined(WEBRTC_END_TO_END_H264_TESTS) |
320 | 352 |
321 TEST_F(EndToEndTest, SendsAndReceivesH264) { | 353 TEST_F(EndToEndTest, SendsAndReceivesH264) { |
322 class H264Observer : public test::EndToEndTest, | 354 CodecObserver test(500, kVideoRotation_0, "H264", |
323 public rtc::VideoSinkInterface<VideoFrame> { | 355 VideoEncoder::Create(VideoEncoder::kH264), |
324 public: | 356 H264Decoder::Create()); |
325 H264Observer() | |
326 : EndToEndTest(2 * kDefaultTimeoutMs), | |
327 encoder_(VideoEncoder::Create(VideoEncoder::kH264)), | |
328 decoder_(H264Decoder::Create()), | |
329 frame_counter_(0) {} | |
330 | |
331 void PerformTest() override { | |
332 EXPECT_TRUE(Wait()) | |
333 << "Timed out while waiting for enough frames to be decoded."; | |
334 } | |
335 | |
336 void ModifyVideoConfigs( | |
337 VideoSendStream::Config* send_config, | |
338 std::vector<VideoReceiveStream::Config>* receive_configs, | |
339 VideoEncoderConfig* encoder_config) override { | |
340 send_config->rtp.nack.rtp_history_ms = | |
341 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | |
342 send_config->encoder_settings.encoder = encoder_.get(); | |
343 send_config->encoder_settings.payload_name = "H264"; | |
344 send_config->encoder_settings.payload_type = 126; | |
345 encoder_config->streams[0].min_bitrate_bps = 50000; | |
346 encoder_config->streams[0].target_bitrate_bps = | |
347 encoder_config->streams[0].max_bitrate_bps = 2000000; | |
348 | |
349 (*receive_configs)[0].renderer = this; | |
350 (*receive_configs)[0].decoders.resize(1); | |
351 (*receive_configs)[0].decoders[0].payload_type = | |
352 send_config->encoder_settings.payload_type; | |
353 (*receive_configs)[0].decoders[0].payload_name = | |
354 send_config->encoder_settings.payload_name; | |
355 (*receive_configs)[0].decoders[0].decoder = decoder_.get(); | |
356 } | |
357 | |
358 void OnFrame(const VideoFrame& video_frame) override { | |
359 const int kRequiredFrames = 500; | |
360 if (++frame_counter_ == kRequiredFrames) | |
361 observation_complete_.Set(); | |
362 } | |
363 | |
364 private: | |
365 std::unique_ptr<webrtc::VideoEncoder> encoder_; | |
366 std::unique_ptr<webrtc::VideoDecoder> decoder_; | |
367 int frame_counter_; | |
368 } test; | |
369 | |
370 RunBaseTest(&test); | 357 RunBaseTest(&test); |
371 } | 358 } |
372 | 359 |
| 360 TEST_F(EndToEndTest, SendsAndReceivesH264VideoRotation90) { |
| 361 CodecObserver test(5, kVideoRotation_90, "H264", |
| 362 VideoEncoder::Create(VideoEncoder::kH264), |
| 363 H264Decoder::Create()); |
| 364 RunBaseTest(&test); |
| 365 } |
| 366 |
373 #endif // defined(WEBRTC_END_TO_END_H264_TESTS) | 367 #endif // defined(WEBRTC_END_TO_END_H264_TESTS) |
374 | 368 |
375 TEST_F(EndToEndTest, ReceiverUsesLocalSsrc) { | 369 TEST_F(EndToEndTest, ReceiverUsesLocalSsrc) { |
376 class SyncRtcpObserver : public test::EndToEndTest { | 370 class SyncRtcpObserver : public test::EndToEndTest { |
377 public: | 371 public: |
378 SyncRtcpObserver() : EndToEndTest(kDefaultTimeoutMs) {} | 372 SyncRtcpObserver() : EndToEndTest(kDefaultTimeoutMs) {} |
379 | 373 |
380 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { | 374 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { |
381 RTCPUtility::RTCPParserV2 parser(packet, length, true); | 375 RTCPUtility::RTCPParserV2 parser(packet, length, true); |
382 EXPECT_TRUE(parser.IsValid()); | 376 EXPECT_TRUE(parser.IsValid()); |
(...skipping 3225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3608 private: | 3602 private: |
3609 bool video_observed_; | 3603 bool video_observed_; |
3610 bool audio_observed_; | 3604 bool audio_observed_; |
3611 SequenceNumberUnwrapper unwrapper_; | 3605 SequenceNumberUnwrapper unwrapper_; |
3612 std::set<int64_t> received_packet_ids_; | 3606 std::set<int64_t> received_packet_ids_; |
3613 } test; | 3607 } test; |
3614 | 3608 |
3615 RunBaseTest(&test); | 3609 RunBaseTest(&test); |
3616 } | 3610 } |
3617 } // namespace webrtc | 3611 } // namespace webrtc |
OLD | NEW |