| Index: webrtc/video/video_send_stream_tests.cc
|
| diff --git a/webrtc/video/video_send_stream_tests.cc b/webrtc/video/video_send_stream_tests.cc
|
| index 7a11ae1243b190aac712275e379c9302968b0ca7..e0f9962c6e5269a0c31c316011103050200b79fb 100644
|
| --- a/webrtc/video/video_send_stream_tests.cc
|
| +++ b/webrtc/video/video_send_stream_tests.cc
|
| @@ -356,25 +356,17 @@ class UlpfecObserver : public test::EndToEndTest {
|
| bool use_nack,
|
| bool expect_red,
|
| bool expect_ulpfec,
|
| - const std::string& codec)
|
| + const std::string& codec,
|
| + VideoEncoder* encoder)
|
| : EndToEndTest(VideoSendStreamTest::kDefaultTimeoutMs),
|
| + encoder_(encoder),
|
| payload_name_(codec),
|
| use_nack_(use_nack),
|
| expect_red_(expect_red),
|
| expect_ulpfec_(expect_ulpfec),
|
| sent_media_(false),
|
| sent_ulpfec_(false),
|
| - header_extensions_enabled_(header_extensions_enabled) {
|
| - if (codec == "H264") {
|
| - encoder_.reset(new test::FakeH264Encoder(Clock::GetRealTimeClock()));
|
| - } else if (codec == "VP8") {
|
| - encoder_.reset(VP8Encoder::Create());
|
| - } else if (codec == "VP9") {
|
| - encoder_.reset(VP9Encoder::Create());
|
| - } else {
|
| - RTC_NOTREACHED();
|
| - }
|
| - }
|
| + header_extensions_enabled_(header_extensions_enabled) {}
|
|
|
| private:
|
| Action OnSendRtp(const uint8_t* packet, size_t length) override {
|
| @@ -462,7 +454,7 @@ class UlpfecObserver : public test::EndToEndTest {
|
| (*receive_configs)[0].rtp.nack.rtp_history_ms =
|
| VideoSendStreamTest::kNackRtpHistoryMs;
|
| }
|
| - send_config->encoder_settings.encoder = encoder_.get();
|
| + send_config->encoder_settings.encoder = encoder_;
|
| send_config->encoder_settings.payload_name = payload_name_;
|
| send_config->rtp.ulpfec.red_payload_type =
|
| VideoSendStreamTest::kRedPayloadType;
|
| @@ -486,8 +478,8 @@ class UlpfecObserver : public test::EndToEndTest {
|
| }
|
|
|
| std::unique_ptr<internal::TransportAdapter> transport_adapter_;
|
| - std::unique_ptr<VideoEncoder> encoder_;
|
| - const std::string payload_name_;
|
| + VideoEncoder* const encoder_;
|
| + std::string payload_name_;
|
| const bool use_nack_;
|
| const bool expect_red_;
|
| const bool expect_ulpfec_;
|
| @@ -498,12 +490,14 @@ class UlpfecObserver : public test::EndToEndTest {
|
| };
|
|
|
| TEST_F(VideoSendStreamTest, SupportsUlpfecWithExtensions) {
|
| - UlpfecObserver test(true, false, true, true, "VP8");
|
| + std::unique_ptr<VideoEncoder> encoder(VP8Encoder::Create());
|
| + UlpfecObserver test(true, false, true, true, "VP8", encoder.get());
|
| RunBaseTest(&test);
|
| }
|
|
|
| TEST_F(VideoSendStreamTest, SupportsUlpfecWithoutExtensions) {
|
| - UlpfecObserver test(false, false, true, true, "VP8");
|
| + std::unique_ptr<VideoEncoder> encoder(VP8Encoder::Create());
|
| + UlpfecObserver test(false, false, true, true, "VP8", encoder.get());
|
| RunBaseTest(&test);
|
| }
|
|
|
| @@ -512,51 +506,56 @@ TEST_F(VideoSendStreamTest, SupportsUlpfecWithoutExtensions) {
|
| // bandwidth since the receiver has to wait for FEC retransmissions to determine
|
| // that the received state is actually decodable.
|
| TEST_F(VideoSendStreamTest, DoesNotUtilizeUlpfecForH264WithNackEnabled) {
|
| - UlpfecObserver test(false, true, true, false, "H264");
|
| + std::unique_ptr<VideoEncoder> encoder(
|
| + new test::FakeH264Encoder(Clock::GetRealTimeClock()));
|
| + UlpfecObserver test(false, true, true, false, "H264", encoder.get());
|
| RunBaseTest(&test);
|
| }
|
|
|
| // Without retransmissions FEC for H264 is fine.
|
| TEST_F(VideoSendStreamTest, DoesUtilizeUlpfecForH264WithoutNackEnabled) {
|
| - UlpfecObserver test(false, false, true, true, "H264");
|
| + std::unique_ptr<VideoEncoder> encoder(
|
| + new test::FakeH264Encoder(Clock::GetRealTimeClock()));
|
| + UlpfecObserver test(false, false, true, true, "H264", encoder.get());
|
| RunBaseTest(&test);
|
| }
|
|
|
| TEST_F(VideoSendStreamTest, DoesUtilizeUlpfecForVp8WithNackEnabled) {
|
| - UlpfecObserver test(false, true, true, true, "VP8");
|
| + std::unique_ptr<VideoEncoder> encoder(VP8Encoder::Create());
|
| + UlpfecObserver test(false, true, true, true, "VP8", encoder.get());
|
| RunBaseTest(&test);
|
| }
|
|
|
| #if !defined(RTC_DISABLE_VP9)
|
| TEST_F(VideoSendStreamTest, DoesUtilizeUlpfecForVp9WithNackEnabled) {
|
| - UlpfecObserver test(false, true, true, true, "VP9");
|
| + std::unique_ptr<VideoEncoder> encoder(VP9Encoder::Create());
|
| + UlpfecObserver test(false, true, true, true, "VP9", encoder.get());
|
| RunBaseTest(&test);
|
| }
|
| #endif // !defined(RTC_DISABLE_VP9)
|
|
|
| +TEST_F(VideoSendStreamTest, SupportsUlpfecWithMultiThreadedH264) {
|
| + std::unique_ptr<VideoEncoder> encoder(
|
| + new test::MultiThreadedFakeH264Encoder(Clock::GetRealTimeClock()));
|
| + UlpfecObserver test(false, false, true, true, "H264", encoder.get());
|
| + RunBaseTest(&test);
|
| +}
|
| +
|
| // TODO(brandtr): Move these FlexFEC tests when we have created
|
| // FlexfecSendStream.
|
| class FlexfecObserver : public test::EndToEndTest {
|
| public:
|
| FlexfecObserver(bool header_extensions_enabled,
|
| bool use_nack,
|
| - const std::string& codec)
|
| + const std::string& codec,
|
| + VideoEncoder* encoder)
|
| : EndToEndTest(VideoSendStreamTest::kDefaultTimeoutMs),
|
| + encoder_(encoder),
|
| payload_name_(codec),
|
| use_nack_(use_nack),
|
| sent_media_(false),
|
| sent_flexfec_(false),
|
| - header_extensions_enabled_(header_extensions_enabled) {
|
| - if (codec == "H264") {
|
| - encoder_.reset(new test::FakeH264Encoder(Clock::GetRealTimeClock()));
|
| - } else if (codec == "VP8") {
|
| - encoder_.reset(VP8Encoder::Create());
|
| - } else if (codec == "VP9") {
|
| - encoder_.reset(VP9Encoder::Create());
|
| - } else {
|
| - RTC_NOTREACHED();
|
| - }
|
| - }
|
| + header_extensions_enabled_(header_extensions_enabled) {}
|
|
|
| size_t GetNumFlexfecStreams() const override { return 1; }
|
|
|
| @@ -611,7 +610,7 @@ class FlexfecObserver : public test::EndToEndTest {
|
| (*receive_configs)[0].rtp.nack.rtp_history_ms =
|
| VideoSendStreamTest::kNackRtpHistoryMs;
|
| }
|
| - send_config->encoder_settings.encoder = encoder_.get();
|
| + send_config->encoder_settings.encoder = encoder_;
|
| send_config->encoder_settings.payload_name = payload_name_;
|
| if (header_extensions_enabled_) {
|
| send_config->rtp.extensions.push_back(RtpExtension(
|
| @@ -630,8 +629,8 @@ class FlexfecObserver : public test::EndToEndTest {
|
| }
|
|
|
| std::unique_ptr<internal::TransportAdapter> transport_adapter_;
|
| - std::unique_ptr<VideoEncoder> encoder_;
|
| - const std::string payload_name_;
|
| + VideoEncoder* const encoder_;
|
| + std::string payload_name_;
|
| const bool use_nack_;
|
| bool sent_media_;
|
| bool sent_flexfec_;
|
| @@ -639,39 +638,55 @@ class FlexfecObserver : public test::EndToEndTest {
|
| };
|
|
|
| TEST_F(VideoSendStreamTest, SupportsFlexfecVp8) {
|
| - FlexfecObserver test(false, false, "VP8");
|
| + std::unique_ptr<VideoEncoder> encoder(VP8Encoder::Create());
|
| + FlexfecObserver test(false, false, "VP8", encoder.get());
|
| RunBaseTest(&test);
|
| }
|
|
|
| TEST_F(VideoSendStreamTest, SupportsFlexfecWithNackVp8) {
|
| - FlexfecObserver test(false, true, "VP8");
|
| + std::unique_ptr<VideoEncoder> encoder(VP8Encoder::Create());
|
| + FlexfecObserver test(false, true, "VP8", encoder.get());
|
| RunBaseTest(&test);
|
| }
|
|
|
| TEST_F(VideoSendStreamTest, SupportsFlexfecWithRtpExtensionsVp8) {
|
| - FlexfecObserver test(true, false, "VP8");
|
| + std::unique_ptr<VideoEncoder> encoder(VP8Encoder::Create());
|
| + FlexfecObserver test(true, false, "VP8", encoder.get());
|
| RunBaseTest(&test);
|
| }
|
|
|
| #if !defined(RTC_DISABLE_VP9)
|
| TEST_F(VideoSendStreamTest, SupportsFlexfecVp9) {
|
| - FlexfecObserver test(false, false, "VP9");
|
| + std::unique_ptr<VideoEncoder> encoder(VP9Encoder::Create());
|
| + FlexfecObserver test(false, false, "VP9", encoder.get());
|
| RunBaseTest(&test);
|
| }
|
|
|
| TEST_F(VideoSendStreamTest, SupportsFlexfecWithNackVp9) {
|
| - FlexfecObserver test(false, true, "VP9");
|
| + std::unique_ptr<VideoEncoder> encoder(VP9Encoder::Create());
|
| + FlexfecObserver test(false, true, "VP9", encoder.get());
|
| RunBaseTest(&test);
|
| }
|
| #endif // defined(RTC_DISABLE_VP9)
|
|
|
| TEST_F(VideoSendStreamTest, SupportsFlexfecH264) {
|
| - FlexfecObserver test(false, false, "H264");
|
| + std::unique_ptr<VideoEncoder> encoder(
|
| + new test::FakeH264Encoder(Clock::GetRealTimeClock()));
|
| + FlexfecObserver test(false, false, "H264", encoder.get());
|
| RunBaseTest(&test);
|
| }
|
|
|
| TEST_F(VideoSendStreamTest, SupportsFlexfecWithNackH264) {
|
| - FlexfecObserver test(false, true, "H264");
|
| + std::unique_ptr<VideoEncoder> encoder(
|
| + new test::FakeH264Encoder(Clock::GetRealTimeClock()));
|
| + FlexfecObserver test(false, true, "H264", encoder.get());
|
| + RunBaseTest(&test);
|
| +}
|
| +
|
| +TEST_F(VideoSendStreamTest, SupportsFlexfecWithMultiThreadedH264) {
|
| + std::unique_ptr<VideoEncoder> encoder(
|
| + new test::MultiThreadedFakeH264Encoder(Clock::GetRealTimeClock()));
|
| + FlexfecObserver test(false, false, "H264", encoder.get());
|
| RunBaseTest(&test);
|
| }
|
|
|
|
|