diff --git a/video/end_to_end_tests/multi_stream_tester.cc b/video/end_to_end_tests/multi_stream_tester.cc index 0f94e22979..104b9d4609 100644 --- a/video/end_to_end_tests/multi_stream_tester.cc +++ b/video/end_to_end_tests/multi_stream_tester.cc @@ -31,20 +31,23 @@ namespace webrtc { -MultiStreamTester::MultiStreamTester() { +MultiStreamTester::MultiStreamTester(TaskQueueBase* task_queue) + : task_queue_(task_queue) { // TODO(sprang): Cleanup when msvc supports explicit initializers for array. codec_settings[0] = {1, 640, 480}; codec_settings[1] = {2, 320, 240}; codec_settings[2] = {3, 240, 160}; + class multi_stream_test { + public: + multi_stream_test(); + }; } -MultiStreamTester::~MultiStreamTester() = default; +MultiStreamTester::~MultiStreamTester() {} void MultiStreamTester::RunTest() { webrtc::RtcEventLogNull event_log; auto task_queue_factory = CreateDefaultTaskQueueFactory(); - auto task_queue = task_queue_factory->CreateTaskQueue( - "TaskQueue", TaskQueueFactory::Priority::NORMAL); Call::Config config(&event_log); config.task_queue_factory = task_queue_factory.get(); std::unique_ptr sender_call; @@ -61,12 +64,12 @@ void MultiStreamTester::RunTest() { CreateBuiltinVideoBitrateAllocatorFactory(); InternalDecoderFactory decoder_factory; - SendTask(RTC_FROM_HERE, task_queue.get(), [&]() { + SendTask(RTC_FROM_HERE, task_queue_, [&]() { sender_call = absl::WrapUnique(Call::Create(config)); receiver_call = absl::WrapUnique(Call::Create(config)); - sender_transport = CreateSendTransport(task_queue.get(), sender_call.get()); + sender_transport = CreateSendTransport(task_queue_, sender_call.get()); receiver_transport = - CreateReceiveTransport(task_queue.get(), receiver_call.get()); + CreateReceiveTransport(task_queue_, receiver_call.get()); sender_transport->SetReceiver(receiver_call->Receiver()); receiver_transport->SetReceiver(sender_call->Receiver()); @@ -122,7 +125,7 @@ void MultiStreamTester::RunTest() { Wait(); - SendTask(RTC_FROM_HERE, task_queue.get(), [&]() { + SendTask(RTC_FROM_HERE, task_queue_, [&]() { for (size_t i = 0; i < kNumStreams; ++i) { frame_generators[i]->Stop(); sender_call->DestroyVideoSendStream(send_streams[i]); diff --git a/video/end_to_end_tests/multi_stream_tester.h b/video/end_to_end_tests/multi_stream_tester.h index 1753741c06..845442e39a 100644 --- a/video/end_to_end_tests/multi_stream_tester.h +++ b/video/end_to_end_tests/multi_stream_tester.h @@ -35,7 +35,7 @@ class MultiStreamTester { int height; } codec_settings[kNumStreams]; - MultiStreamTester(); + explicit MultiStreamTester(TaskQueueBase* task_queue); virtual ~MultiStreamTester(); @@ -58,6 +58,8 @@ class MultiStreamTester { virtual std::unique_ptr CreateReceiveTransport( TaskQueueBase* task_queue, Call* receiver_call); + + TaskQueueBase* const task_queue_; }; } // namespace webrtc #endif // VIDEO_END_TO_END_TESTS_MULTI_STREAM_TESTER_H_ diff --git a/video/end_to_end_tests/multi_stream_tests.cc b/video/end_to_end_tests/multi_stream_tests.cc index e20d70f3ed..0eed98df93 100644 --- a/video/end_to_end_tests/multi_stream_tests.cc +++ b/video/end_to_end_tests/multi_stream_tests.cc @@ -21,14 +21,20 @@ #include "call/video_receive_stream.h" #include "call/video_send_stream.h" #include "rtc_base/event.h" +#include "test/call_test.h" #include "test/frame_generator_capturer.h" #include "test/gtest.h" #include "video/end_to_end_tests/multi_stream_tester.h" namespace webrtc { +class MultiStreamEndToEndTest : public test::CallTest { + public: + MultiStreamEndToEndTest() = default; +}; + // Each renderer verifies that it receives the expected resolution, and as soon // as every renderer has received a frame, the test finishes. -TEST(MultiStreamEndToEndTest, SendsAndReceivesMultipleStreams) { +TEST_F(MultiStreamEndToEndTest, SendsAndReceivesMultipleStreams) { class VideoOutputObserver : public rtc::VideoSinkInterface { public: VideoOutputObserver(const MultiStreamTester::CodecSettings& settings, @@ -45,7 +51,7 @@ TEST(MultiStreamEndToEndTest, SendsAndReceivesMultipleStreams) { uint32_t Ssrc() { return ssrc_; } - bool Wait() { return done_.Wait(30 * 1000); } + bool Wait() { return done_.Wait(kDefaultTimeoutMs); } private: const MultiStreamTester::CodecSettings& settings_; @@ -56,8 +62,9 @@ TEST(MultiStreamEndToEndTest, SendsAndReceivesMultipleStreams) { class Tester : public MultiStreamTester { public: - Tester() = default; - ~Tester() override = default; + explicit Tester(TaskQueueBase* task_queue) + : MultiStreamTester(task_queue) {} + virtual ~Tester() {} protected: void Wait() override { @@ -72,9 +79,9 @@ TEST(MultiStreamEndToEndTest, SendsAndReceivesMultipleStreams) { VideoSendStream::Config* send_config, VideoEncoderConfig* encoder_config, test::FrameGeneratorCapturer** frame_generator) override { - observers_[stream_index] = std::make_unique( + observers_[stream_index].reset(new VideoOutputObserver( codec_settings[stream_index], send_config->rtp.ssrcs.front(), - frame_generator); + frame_generator)); } void UpdateReceiveConfig( @@ -85,7 +92,7 @@ TEST(MultiStreamEndToEndTest, SendsAndReceivesMultipleStreams) { private: std::unique_ptr observers_[kNumStreams]; - } tester; + } tester(task_queue()); tester.RunTest(); } diff --git a/video/end_to_end_tests/transport_feedback_tests.cc b/video/end_to_end_tests/transport_feedback_tests.cc index 55c8bc4245..0f7b737c08 100644 --- a/video/end_to_end_tests/transport_feedback_tests.cc +++ b/video/end_to_end_tests/transport_feedback_tests.cc @@ -29,13 +29,15 @@ enum : int { // The first valid value is 1. }; } // namespace -TEST(TransportFeedbackMultiStreamTest, AssignsTransportSequenceNumbers) { - static constexpr int kSendRtxPayloadType = 98; - static constexpr int kDefaultTimeoutMs = 30 * 1000; - static constexpr int kNackRtpHistoryMs = 1000; - static constexpr uint32_t kSendRtxSsrcs[MultiStreamTester::kNumStreams] = { - 0xBADCAFD, 0xBADCAFE, 0xBADCAFF}; +class TransportFeedbackEndToEndTest : public test::CallTest { + public: + TransportFeedbackEndToEndTest() { + RegisterRtpExtension(RtpExtension(RtpExtension::kTransportSequenceNumberUri, + kTransportSequenceNumberExtensionId)); + } +}; +TEST_F(TransportFeedbackEndToEndTest, AssignsTransportSequenceNumbers) { class RtpExtensionHeaderObserver : public test::DirectTransport { public: RtpExtensionHeaderObserver( @@ -54,6 +56,7 @@ TEST(TransportFeedbackMultiStreamTest, AssignsTransportSequenceNumbers) { parser_(RtpHeaderParser::CreateForTest()), first_media_ssrc_(first_media_ssrc), rtx_to_media_ssrcs_(ssrc_map), + padding_observed_(false), rtx_padding_observed_(false), retransmit_observed_(false), started_(false) { @@ -146,7 +149,6 @@ TEST(TransportFeedbackMultiStreamTest, AssignsTransportSequenceNumbers) { return done_.Wait(kDefaultTimeoutMs); } - private: rtc::CriticalSection lock_; rtc::Event done_; std::unique_ptr parser_; @@ -156,6 +158,7 @@ TEST(TransportFeedbackMultiStreamTest, AssignsTransportSequenceNumbers) { std::map> dropped_seq_; const uint32_t& first_media_ssrc_; const std::map& rtx_to_media_ssrcs_; + bool padding_observed_; bool rtx_padding_observed_; bool retransmit_observed_; bool started_; @@ -163,9 +166,11 @@ TEST(TransportFeedbackMultiStreamTest, AssignsTransportSequenceNumbers) { class TransportSequenceNumberTester : public MultiStreamTester { public: - TransportSequenceNumberTester() - : first_media_ssrc_(0), observer_(nullptr) {} - ~TransportSequenceNumberTester() override = default; + explicit TransportSequenceNumberTester(TaskQueueBase* task_queue) + : MultiStreamTester(task_queue), + first_media_ssrc_(0), + observer_(nullptr) {} + virtual ~TransportSequenceNumberTester() {} protected: void Wait() override { @@ -233,19 +238,11 @@ TEST(TransportFeedbackMultiStreamTest, AssignsTransportSequenceNumbers) { uint32_t first_media_ssrc_; std::map rtx_to_media_ssrcs_; RtpExtensionHeaderObserver* observer_; - } tester; + } tester(task_queue()); tester.RunTest(); } -class TransportFeedbackEndToEndTest : public test::CallTest { - public: - TransportFeedbackEndToEndTest() { - RegisterRtpExtension(RtpExtension(RtpExtension::kTransportSequenceNumberUri, - kTransportSequenceNumberExtensionId)); - } -}; - class TransportFeedbackTester : public test::EndToEndTest { public: TransportFeedbackTester(bool feedback_enabled,