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

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

Issue 2493133002: Stop using hardcoded payload types for video codecs (Closed)
Patch Set: Addressing comments. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 #include <algorithm> 10 #include <algorithm>
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 private: 346 private:
347 int no_frames_to_wait_for_; 347 int no_frames_to_wait_for_;
348 VideoRotation expected_rotation_; 348 VideoRotation expected_rotation_;
349 std::string payload_name_; 349 std::string payload_name_;
350 std::unique_ptr<webrtc::VideoEncoder> encoder_; 350 std::unique_ptr<webrtc::VideoEncoder> encoder_;
351 std::unique_ptr<webrtc::VideoDecoder> decoder_; 351 std::unique_ptr<webrtc::VideoDecoder> decoder_;
352 int frame_counter_; 352 int frame_counter_;
353 }; 353 };
354 354
355 TEST_F(EndToEndTest, SendsAndReceivesVP8Rotation90) { 355 TEST_F(EndToEndTest, SendsAndReceivesVP8Rotation90) {
356 CodecObserver test(5, kVideoRotation_90, "VP8", 356 CodecObserver test(5, kVideoRotation_90, "VP8", VP8Encoder::Create(),
357 VideoEncoder::Create(VideoEncoder::kVp8),
358 VP8Decoder::Create()); 357 VP8Decoder::Create());
359 RunBaseTest(&test); 358 RunBaseTest(&test);
360 } 359 }
361 360
362 #if !defined(RTC_DISABLE_VP9) 361 #if !defined(RTC_DISABLE_VP9)
363 TEST_F(EndToEndTest, SendsAndReceivesVP9) { 362 TEST_F(EndToEndTest, SendsAndReceivesVP9) {
364 CodecObserver test(500, kVideoRotation_0, "VP9", 363 CodecObserver test(500, kVideoRotation_0, "VP9", VP9Encoder::Create(),
365 VideoEncoder::Create(VideoEncoder::kVp9),
366 VP9Decoder::Create()); 364 VP9Decoder::Create());
367 RunBaseTest(&test); 365 RunBaseTest(&test);
368 } 366 }
369 367
370 TEST_F(EndToEndTest, SendsAndReceivesVP9VideoRotation90) { 368 TEST_F(EndToEndTest, SendsAndReceivesVP9VideoRotation90) {
371 CodecObserver test(5, kVideoRotation_90, "VP9", 369 CodecObserver test(5, kVideoRotation_90, "VP9", VP9Encoder::Create(),
372 VideoEncoder::Create(VideoEncoder::kVp9),
373 VP9Decoder::Create()); 370 VP9Decoder::Create());
374 RunBaseTest(&test); 371 RunBaseTest(&test);
375 } 372 }
376 #endif // !defined(RTC_DISABLE_VP9) 373 #endif // !defined(RTC_DISABLE_VP9)
377 374
378 #if defined(WEBRTC_USE_H264) 375 #if defined(WEBRTC_USE_H264)
379 TEST_F(EndToEndTest, SendsAndReceivesH264) { 376 TEST_F(EndToEndTest, SendsAndReceivesH264) {
380 CodecObserver test(500, kVideoRotation_0, "H264", 377 CodecObserver test(500, kVideoRotation_0, "H264", H264Encoder::Create(),
381 VideoEncoder::Create(VideoEncoder::kH264),
382 H264Decoder::Create()); 378 H264Decoder::Create());
383 RunBaseTest(&test); 379 RunBaseTest(&test);
384 } 380 }
385 381
386 TEST_F(EndToEndTest, SendsAndReceivesH264VideoRotation90) { 382 TEST_F(EndToEndTest, SendsAndReceivesH264VideoRotation90) {
387 CodecObserver test(5, kVideoRotation_90, "H264", 383 CodecObserver test(5, kVideoRotation_90, "H264", H264Encoder::Create(),
388 VideoEncoder::Create(VideoEncoder::kH264),
389 H264Decoder::Create()); 384 H264Decoder::Create());
390 RunBaseTest(&test); 385 RunBaseTest(&test);
391 } 386 }
392 #endif // defined(WEBRTC_USE_H264) 387 #endif // defined(WEBRTC_USE_H264)
393 388
394 TEST_F(EndToEndTest, ReceiverUsesLocalSsrc) { 389 TEST_F(EndToEndTest, ReceiverUsesLocalSsrc) {
395 class SyncRtcpObserver : public test::EndToEndTest { 390 class SyncRtcpObserver : public test::EndToEndTest {
396 public: 391 public:
397 SyncRtcpObserver() : EndToEndTest(kDefaultTimeoutMs) {} 392 SyncRtcpObserver() : EndToEndTest(kDefaultTimeoutMs) {}
398 393
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
668 663
669 TEST_F(EndToEndTest, ReceivedUlpfecPacketsNotNacked) { 664 TEST_F(EndToEndTest, ReceivedUlpfecPacketsNotNacked) {
670 class UlpfecNackObserver : public test::EndToEndTest { 665 class UlpfecNackObserver : public test::EndToEndTest {
671 public: 666 public:
672 UlpfecNackObserver() 667 UlpfecNackObserver()
673 : EndToEndTest(kDefaultTimeoutMs), 668 : EndToEndTest(kDefaultTimeoutMs),
674 state_(kFirstPacket), 669 state_(kFirstPacket),
675 ulpfec_sequence_number_(0), 670 ulpfec_sequence_number_(0),
676 has_last_sequence_number_(false), 671 has_last_sequence_number_(false),
677 last_sequence_number_(0), 672 last_sequence_number_(0),
678 encoder_(VideoEncoder::Create(VideoEncoder::EncoderType::kVp8)), 673 encoder_(VP8Encoder::Create()),
679 decoder_(VP8Decoder::Create()) {} 674 decoder_(VP8Decoder::Create()) {}
680 675
681 private: 676 private:
682 Action OnSendRtp(const uint8_t* packet, size_t length) override { 677 Action OnSendRtp(const uint8_t* packet, size_t length) override {
683 rtc::CritScope lock_(&crit_); 678 rtc::CritScope lock_(&crit_);
684 RTPHeader header; 679 RTPHeader header;
685 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 680 EXPECT_TRUE(parser_->Parse(packet, length, &header));
686 681
687 int encapsulated_payload_type = -1; 682 int encapsulated_payload_type = -1;
688 if (header.payloadType == kRedPayloadType) { 683 if (header.payloadType == kRedPayloadType) {
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
836 static const int kDroppedFrameNumber = 10; 831 static const int kDroppedFrameNumber = 10;
837 class RetransmissionObserver : public test::EndToEndTest, 832 class RetransmissionObserver : public test::EndToEndTest,
838 public I420FrameCallback { 833 public I420FrameCallback {
839 public: 834 public:
840 RetransmissionObserver(bool enable_rtx, bool enable_red) 835 RetransmissionObserver(bool enable_rtx, bool enable_red)
841 : EndToEndTest(kDefaultTimeoutMs), 836 : EndToEndTest(kDefaultTimeoutMs),
842 payload_type_(GetPayloadType(false, enable_red)), 837 payload_type_(GetPayloadType(false, enable_red)),
843 retransmission_ssrc_(enable_rtx ? kSendRtxSsrcs[0] 838 retransmission_ssrc_(enable_rtx ? kSendRtxSsrcs[0]
844 : kVideoSendSsrcs[0]), 839 : kVideoSendSsrcs[0]),
845 retransmission_payload_type_(GetPayloadType(enable_rtx, enable_red)), 840 retransmission_payload_type_(GetPayloadType(enable_rtx, enable_red)),
846 encoder_(VideoEncoder::Create(VideoEncoder::EncoderType::kVp8)), 841 encoder_(VP8Encoder::Create()),
847 marker_bits_observed_(0), 842 marker_bits_observed_(0),
848 retransmitted_timestamp_(0) {} 843 retransmitted_timestamp_(0) {}
849 844
850 private: 845 private:
851 Action OnSendRtp(const uint8_t* packet, size_t length) override { 846 Action OnSendRtp(const uint8_t* packet, size_t length) override {
852 rtc::CritScope lock(&crit_); 847 rtc::CritScope lock(&crit_);
853 RTPHeader header; 848 RTPHeader header;
854 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 849 EXPECT_TRUE(parser_->Parse(packet, length, &header));
855 850
856 // Ignore padding-only packets over RTX. 851 // Ignore padding-only packets over RTX.
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
1235 std::unique_ptr<Call> receiver_call(Call::Create(config)); 1230 std::unique_ptr<Call> receiver_call(Call::Create(config));
1236 std::unique_ptr<test::DirectTransport> sender_transport( 1231 std::unique_ptr<test::DirectTransport> sender_transport(
1237 CreateSendTransport(sender_call.get())); 1232 CreateSendTransport(sender_call.get()));
1238 std::unique_ptr<test::DirectTransport> receiver_transport( 1233 std::unique_ptr<test::DirectTransport> receiver_transport(
1239 CreateReceiveTransport(receiver_call.get())); 1234 CreateReceiveTransport(receiver_call.get()));
1240 sender_transport->SetReceiver(receiver_call->Receiver()); 1235 sender_transport->SetReceiver(receiver_call->Receiver());
1241 receiver_transport->SetReceiver(sender_call->Receiver()); 1236 receiver_transport->SetReceiver(sender_call->Receiver());
1242 1237
1243 std::unique_ptr<VideoEncoder> encoders[kNumStreams]; 1238 std::unique_ptr<VideoEncoder> encoders[kNumStreams];
1244 for (size_t i = 0; i < kNumStreams; ++i) 1239 for (size_t i = 0; i < kNumStreams; ++i)
1245 encoders[i].reset(VideoEncoder::Create(VideoEncoder::kVp8)); 1240 encoders[i].reset(VP8Encoder::Create());
1246 1241
1247 VideoSendStream* send_streams[kNumStreams]; 1242 VideoSendStream* send_streams[kNumStreams];
1248 VideoReceiveStream* receive_streams[kNumStreams]; 1243 VideoReceiveStream* receive_streams[kNumStreams];
1249 1244
1250 test::FrameGeneratorCapturer* frame_generators[kNumStreams]; 1245 test::FrameGeneratorCapturer* frame_generators[kNumStreams];
1251 std::vector<std::unique_ptr<VideoDecoder>> allocated_decoders; 1246 std::vector<std::unique_ptr<VideoDecoder>> allocated_decoders;
1252 for (size_t i = 0; i < kNumStreams; ++i) { 1247 for (size_t i = 0; i < kNumStreams; ++i) {
1253 uint32_t ssrc = codec_settings[i].ssrc; 1248 uint32_t ssrc = codec_settings[i].ssrc;
1254 int width = codec_settings[i].width; 1249 int width = codec_settings[i].width;
1255 int height = codec_settings[i].height; 1250 int height = codec_settings[i].height;
(...skipping 829 matching lines...) Expand 10 before | Expand all | Expand 10 after
2085 bool screenshare) { 2080 bool screenshare) {
2086 class StatsObserver : public test::EndToEndTest, 2081 class StatsObserver : public test::EndToEndTest,
2087 public rtc::VideoSinkInterface<VideoFrame> { 2082 public rtc::VideoSinkInterface<VideoFrame> {
2088 public: 2083 public:
2089 StatsObserver(bool use_rtx, bool use_red, bool screenshare) 2084 StatsObserver(bool use_rtx, bool use_red, bool screenshare)
2090 : EndToEndTest(kLongTimeoutMs), 2085 : EndToEndTest(kLongTimeoutMs),
2091 use_rtx_(use_rtx), 2086 use_rtx_(use_rtx),
2092 use_red_(use_red), 2087 use_red_(use_red),
2093 screenshare_(screenshare), 2088 screenshare_(screenshare),
2094 // This test uses NACK, so to send FEC we can't use a fake encoder. 2089 // This test uses NACK, so to send FEC we can't use a fake encoder.
2095 vp8_encoder_( 2090 vp8_encoder_(use_red ? VP8Encoder::Create() : nullptr),
2096 use_red ? VideoEncoder::Create(VideoEncoder::EncoderType::kVp8)
2097 : nullptr),
2098 sender_call_(nullptr), 2091 sender_call_(nullptr),
2099 receiver_call_(nullptr), 2092 receiver_call_(nullptr),
2100 start_runtime_ms_(-1), 2093 start_runtime_ms_(-1),
2101 num_frames_received_(0) {} 2094 num_frames_received_(0) {}
2102 2095
2103 private: 2096 private:
2104 void OnFrame(const VideoFrame& video_frame) override { 2097 void OnFrame(const VideoFrame& video_frame) override {
2105 // The RTT is needed to estimate |ntp_time_ms| which is used by 2098 // The RTT is needed to estimate |ntp_time_ms| which is used by
2106 // end-to-end delay stats. Therefore, start counting received frames once 2099 // end-to-end delay stats. Therefore, start counting received frames once
2107 // |ntp_time_ms| is valid. 2100 // |ntp_time_ms| is valid.
(...skipping 1756 matching lines...) Expand 10 before | Expand all | Expand 10 after
3864 void PerformTest() override { 3857 void PerformTest() override {
3865 fixture_->LogSend(true); 3858 fixture_->LogSend(true);
3866 fixture_->LogReceive(true); 3859 fixture_->LogReceive(true);
3867 ASSERT_TRUE(Wait()) << "Timed out while waiting for frame logging."; 3860 ASSERT_TRUE(Wait()) << "Timed out while waiting for frame logging.";
3868 } 3861 }
3869 3862
3870 void ModifyVideoConfigs( 3863 void ModifyVideoConfigs(
3871 VideoSendStream::Config* send_config, 3864 VideoSendStream::Config* send_config,
3872 std::vector<VideoReceiveStream::Config>* receive_configs, 3865 std::vector<VideoReceiveStream::Config>* receive_configs,
3873 VideoEncoderConfig* encoder_config) override { 3866 VideoEncoderConfig* encoder_config) override {
3874 encoder_.reset(VideoEncoder::Create(VideoEncoder::kVp8)); 3867 encoder_.reset(VP8Encoder::Create());
3875 decoder_.reset(VP8Decoder::Create()); 3868 decoder_.reset(VP8Decoder::Create());
3876 3869
3877 send_config->post_encode_callback = this; 3870 send_config->post_encode_callback = this;
3878 send_config->encoder_settings.payload_name = "VP8"; 3871 send_config->encoder_settings.payload_name = "VP8";
3879 send_config->encoder_settings.encoder = encoder_.get(); 3872 send_config->encoder_settings.encoder = encoder_.get();
3880 3873
3881 (*receive_configs)[0].decoders.resize(1); 3874 (*receive_configs)[0].decoders.resize(1);
3882 (*receive_configs)[0].decoders[0].payload_type = 3875 (*receive_configs)[0].decoders[0].payload_type =
3883 send_config->encoder_settings.payload_type; 3876 send_config->encoder_settings.payload_type;
3884 (*receive_configs)[0].decoders[0].payload_name = 3877 (*receive_configs)[0].decoders[0].payload_name =
(...skipping 22 matching lines...) Expand all
3907 std::unique_ptr<VideoEncoder> encoder_; 3900 std::unique_ptr<VideoEncoder> encoder_;
3908 std::unique_ptr<VideoDecoder> decoder_; 3901 std::unique_ptr<VideoDecoder> decoder_;
3909 rtc::CriticalSection crit_; 3902 rtc::CriticalSection crit_;
3910 int recorded_frames_ GUARDED_BY(crit_); 3903 int recorded_frames_ GUARDED_BY(crit_);
3911 } test(this); 3904 } test(this);
3912 3905
3913 RunBaseTest(&test); 3906 RunBaseTest(&test);
3914 } 3907 }
3915 3908
3916 } // namespace webrtc 3909 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698