Index: webrtc/video/end_to_end_tests.cc |
diff --git a/webrtc/video/end_to_end_tests.cc b/webrtc/video/end_to_end_tests.cc |
index 51d1d2c3fdb7e90062d3638c7dbcb1824fb8a66f..48dc3e8bbd223495345f3482c03ef4e50dd278a5 100644 |
--- a/webrtc/video/end_to_end_tests.cc |
+++ b/webrtc/video/end_to_end_tests.cc |
@@ -1542,82 +1542,115 @@ TEST_F(EndToEndTest, AssignsTransportSequenceNumbers) { |
tester.RunTest(); |
} |
-void TransportFeedbackTest(bool feedback_enabled) { |
- static const int kExtensionId = 5; |
- class TransportFeedbackObserver : public test::DirectTransport { |
- public: |
- TransportFeedbackObserver(Call* receiver_call, rtc::Event* done_event) |
- : DirectTransport(receiver_call), done_(done_event) {} |
- virtual ~TransportFeedbackObserver() {} |
+class TransportFeedbackTester : public test::EndToEndTest { |
+ public: |
+ explicit TransportFeedbackTester(bool feedback_enabled, |
+ size_t num_video_streams, |
+ size_t num_audio_streams) |
+ : EndToEndTest(::webrtc::EndToEndTest::kDefaultTimeoutMs), |
+ feedback_enabled_(feedback_enabled), |
+ num_video_streams_(num_video_streams), |
+ num_audio_streams_(num_audio_streams) { |
+ // Only one stream of each supported for now. |
+ EXPECT_LE(num_video_streams, 1u); |
+ EXPECT_LE(num_audio_streams, 1u); |
+ } |
- bool SendRtcp(const uint8_t* data, size_t length) override { |
- RTCPUtility::RTCPParserV2 parser(data, length, true); |
- EXPECT_TRUE(parser.IsValid()); |
+ protected: |
+ Action OnSendRtcp(const uint8_t* data, size_t length) override { |
+ EXPECT_FALSE(HasTransportFeedback(data, length)); |
+ return SEND_PACKET; |
+ } |
- RTCPUtility::RTCPPacketTypes packet_type = parser.Begin(); |
- while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) { |
- if (packet_type == RTCPUtility::RTCPPacketTypes::kTransportFeedback) { |
- done_->Set(); |
- break; |
- } |
- packet_type = parser.Iterate(); |
- } |
+ Action OnReceiveRtcp(const uint8_t* data, size_t length) override { |
+ if (HasTransportFeedback(data, length)) |
+ observation_complete_.Set(); |
+ return SEND_PACKET; |
+ } |
- return test::DirectTransport::SendRtcp(data, length); |
+ bool HasTransportFeedback(const uint8_t* data, size_t length) const { |
+ RTCPUtility::RTCPParserV2 parser(data, length, true); |
+ EXPECT_TRUE(parser.IsValid()); |
+ |
+ RTCPUtility::RTCPPacketTypes packet_type = parser.Begin(); |
+ while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) { |
+ if (packet_type == RTCPUtility::RTCPPacketTypes::kTransportFeedback) |
+ return true; |
+ packet_type = parser.Iterate(); |
} |
- rtc::Event* done_; |
- }; |
+ return false; |
+ } |
- class TransportFeedbackTester : public MultiStreamTest { |
- public: |
- explicit TransportFeedbackTester(bool feedback_enabled) |
- : feedback_enabled_(feedback_enabled), done_(false, false) {} |
- virtual ~TransportFeedbackTester() {} |
+ void PerformTest() override { |
+ const int64_t kDisabledFeedbackTimeoutMs = 5000; |
+ EXPECT_EQ(feedback_enabled_, |
+ observation_complete_.Wait(feedback_enabled_ |
+ ? test::CallTest::kDefaultTimeoutMs |
+ : kDisabledFeedbackTimeoutMs)); |
+ } |
- protected: |
- void Wait() override { |
- const int64_t kDisabledFeedbackTimeoutMs = 5000; |
- EXPECT_EQ(feedback_enabled_, done_.Wait(feedback_enabled_ |
- ? test::CallTest::kDefaultTimeoutMs |
- : kDisabledFeedbackTimeoutMs)); |
- } |
+ void OnCallsCreated(Call* sender_call, Call* receiver_call) override { |
+ receiver_call_ = receiver_call; |
+ } |
- void UpdateSendConfig( |
- size_t stream_index, |
- VideoSendStream::Config* send_config, |
- VideoEncoderConfig* encoder_config, |
- test::FrameGeneratorCapturer** frame_generator) override { |
- send_config->rtp.extensions.push_back( |
- RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId)); |
- } |
+ size_t GetNumVideoStreams() const override { return num_video_streams_; } |
+ size_t GetNumAudioStreams() const override { return num_audio_streams_; } |
- void UpdateReceiveConfig( |
- size_t stream_index, |
- VideoReceiveStream::Config* receive_config) override { |
- receive_config->rtp.extensions.push_back( |
- RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId)); |
- receive_config->rtp.transport_cc = feedback_enabled_; |
- } |
+ void ModifyVideoConfigs( |
+ VideoSendStream::Config* send_config, |
+ std::vector<VideoReceiveStream::Config>* receive_configs, |
+ VideoEncoderConfig* encoder_config) override { |
+ send_config->rtp.extensions.clear(); |
+ send_config->rtp.extensions.push_back( |
+ RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId)); |
+ (*receive_configs)[0].rtp.extensions = send_config->rtp.extensions; |
+ (*receive_configs)[0].rtp.transport_cc = feedback_enabled_; |
+ } |
- test::DirectTransport* CreateReceiveTransport( |
- Call* receiver_call) override { |
- return new TransportFeedbackObserver(receiver_call, &done_); |
- } |
+ void ModifyAudioConfigs( |
+ AudioSendStream::Config* send_config, |
+ std::vector<AudioReceiveStream::Config>* receive_configs) override { |
+ send_config->rtp.extensions.clear(); |
+ send_config->rtp.extensions.push_back( |
+ RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId)); |
+ (*receive_configs)[0].rtp.extensions.clear(); |
+ (*receive_configs)[0].rtp.extensions = send_config->rtp.extensions; |
+ (*receive_configs)[0].rtp.transport_cc = feedback_enabled_; |
+ (*receive_configs)[0].combined_audio_video_bwe = true; |
+ } |
- private: |
- const bool feedback_enabled_; |
- rtc::Event done_; |
- } tester(feedback_enabled); |
- tester.RunTest(); |
+ private: |
+ static const int kExtensionId = 5; |
+ const bool feedback_enabled_; |
+ const size_t num_video_streams_; |
+ const size_t num_audio_streams_; |
+ Call* receiver_call_; |
+}; |
+ |
+TEST_F(EndToEndTest, VideoReceivesTransportFeedback) { |
+ TransportFeedbackTester test(true, 1, 0); |
+ RunBaseTest(&test); |
+} |
+ |
+TEST_F(EndToEndTest, VideoTransportFeedbackNotConfigured) { |
+ TransportFeedbackTester test(false, 1, 0); |
+ RunBaseTest(&test); |
} |
-TEST_F(EndToEndTest, ReceivesTransportFeedback) { |
- TransportFeedbackTest(true); |
+TEST_F(EndToEndTest, AudioReceivesTransportFeedback) { |
+ TransportFeedbackTester test(true, 0, 1); |
+ RunBaseTest(&test); |
} |
-TEST_F(EndToEndTest, TransportFeedbackNotConfigured) { |
- TransportFeedbackTest(false); |
+TEST_F(EndToEndTest, AudioTransportFeedbackNotConfigured) { |
+ TransportFeedbackTester test(false, 0, 1); |
+ RunBaseTest(&test); |
+} |
+ |
+TEST_F(EndToEndTest, AudioVideoReceivesTransportFeedback) { |
+ TransportFeedbackTester test(true, 1, 1); |
+ RunBaseTest(&test); |
} |
TEST_F(EndToEndTest, ObserversEncodedFrames) { |