Refactor SimulcastTestUtility into SimulcastTestFixture{,Impl}
This will allow exposing the interface to downstream users that want to test VP8 simulcast. No functional changes to the tests themselves are expected. Bug: webrtc:9281 Change-Id: I4128b8f35a4412c5b330cf55c8dc0e173d4570da Reviewed-on: https://webrtc-review.googlesource.com/77361 Commit-Queue: Rasmus Brandt <brandtr@webrtc.org> Reviewed-by: Fredrik Solenberg <solenberg@webrtc.org> Reviewed-by: Magnus Jedvert <magjed@webrtc.org> Reviewed-by: Stefan Holmer <stefan@webrtc.org> Reviewed-by: Erik Språng <sprang@webrtc.org> Cr-Commit-Position: refs/heads/master@{#23469}
This commit is contained in:
committed by
Commit Bot
parent
29921cf097
commit
0cedc054a2
@ -12,90 +12,134 @@
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include "api/test/create_simulcast_test_fixture.h"
|
||||
#include "api/test/simulcast_test_fixture.h"
|
||||
#include "api/video_codecs/sdp_video_format.h"
|
||||
#include "api/video_codecs/video_encoder_factory.h"
|
||||
#include "common_video/include/video_frame_buffer.h"
|
||||
#include "media/engine/internalencoderfactory.h"
|
||||
#include "media/engine/simulcast_encoder_adapter.h"
|
||||
#include "modules/video_coding/codecs/vp8/simulcast_test_utility.h"
|
||||
#include "modules/video_coding/codecs/vp8/simulcast_test_fixture_impl.h"
|
||||
#include "modules/video_coding/include/video_codec_interface.h"
|
||||
#include "rtc_base/ptr_util.h"
|
||||
#include "test/function_video_decoder_factory.h"
|
||||
#include "test/function_video_encoder_factory.h"
|
||||
#include "test/gmock.h"
|
||||
#include "test/gtest.h"
|
||||
|
||||
using ::testing::_;
|
||||
using ::testing::Return;
|
||||
|
||||
namespace webrtc {
|
||||
namespace testing {
|
||||
namespace test {
|
||||
|
||||
class TestSimulcastEncoderAdapter : public TestVp8Simulcast {
|
||||
public:
|
||||
TestSimulcastEncoderAdapter() : factory_(new InternalEncoderFactory()) {}
|
||||
namespace {
|
||||
|
||||
protected:
|
||||
std::unique_ptr<VP8Encoder> CreateEncoder() override {
|
||||
return rtc::MakeUnique<SimulcastEncoderAdapter>(factory_.get(),
|
||||
SdpVideoFormat("VP8"));
|
||||
}
|
||||
std::unique_ptr<VP8Decoder> CreateDecoder() override {
|
||||
return VP8Decoder::Create();
|
||||
}
|
||||
constexpr int kDefaultWidth = 1280;
|
||||
constexpr int kDefaultHeight = 720;
|
||||
|
||||
private:
|
||||
std::unique_ptr<VideoEncoderFactory> factory_;
|
||||
};
|
||||
|
||||
TEST_F(TestSimulcastEncoderAdapter, TestKeyFrameRequestsOnAllStreams) {
|
||||
TestVp8Simulcast::TestKeyFrameRequestsOnAllStreams();
|
||||
std::unique_ptr<SimulcastTestFixture> CreateSpecificSimulcastTestFixture(
|
||||
VideoEncoderFactory* internal_encoder_factory) {
|
||||
std::unique_ptr<VideoEncoderFactory> encoder_factory =
|
||||
rtc::MakeUnique<FunctionVideoEncoderFactory>(
|
||||
[internal_encoder_factory]() {
|
||||
return rtc::MakeUnique<SimulcastEncoderAdapter>(
|
||||
internal_encoder_factory,
|
||||
SdpVideoFormat(cricket::kVp8CodecName));
|
||||
});
|
||||
std::unique_ptr<VideoDecoderFactory> decoder_factory =
|
||||
rtc::MakeUnique<FunctionVideoDecoderFactory>(
|
||||
[]() { return VP8Decoder::Create(); });
|
||||
return CreateSimulcastTestFixture(std::move(encoder_factory),
|
||||
std::move(decoder_factory));
|
||||
}
|
||||
|
||||
TEST_F(TestSimulcastEncoderAdapter, TestPaddingAllStreams) {
|
||||
TestVp8Simulcast::TestPaddingAllStreams();
|
||||
} // namespace
|
||||
|
||||
TEST(SimulcastEncoderAdapterSimulcastTest, TestKeyFrameRequestsOnAllStreams) {
|
||||
InternalEncoderFactory internal_encoder_factory;
|
||||
auto fixture = CreateSpecificSimulcastTestFixture(&internal_encoder_factory);
|
||||
fixture->TestKeyFrameRequestsOnAllStreams();
|
||||
}
|
||||
|
||||
TEST_F(TestSimulcastEncoderAdapter, TestPaddingTwoStreams) {
|
||||
TestVp8Simulcast::TestPaddingTwoStreams();
|
||||
TEST(SimulcastEncoderAdapterSimulcastTest, TestPaddingAllStreams) {
|
||||
InternalEncoderFactory internal_encoder_factory;
|
||||
auto fixture = CreateSpecificSimulcastTestFixture(&internal_encoder_factory);
|
||||
fixture->TestPaddingAllStreams();
|
||||
}
|
||||
|
||||
TEST_F(TestSimulcastEncoderAdapter, TestPaddingTwoStreamsOneMaxedOut) {
|
||||
TestVp8Simulcast::TestPaddingTwoStreamsOneMaxedOut();
|
||||
TEST(SimulcastEncoderAdapterSimulcastTest, TestPaddingTwoStreams) {
|
||||
InternalEncoderFactory internal_encoder_factory;
|
||||
auto fixture = CreateSpecificSimulcastTestFixture(&internal_encoder_factory);
|
||||
fixture->TestPaddingTwoStreams();
|
||||
}
|
||||
|
||||
TEST_F(TestSimulcastEncoderAdapter, TestPaddingOneStream) {
|
||||
TestVp8Simulcast::TestPaddingOneStream();
|
||||
TEST(SimulcastEncoderAdapterSimulcastTest, TestPaddingTwoStreamsOneMaxedOut) {
|
||||
InternalEncoderFactory internal_encoder_factory;
|
||||
auto fixture = CreateSpecificSimulcastTestFixture(&internal_encoder_factory);
|
||||
fixture->TestPaddingTwoStreamsOneMaxedOut();
|
||||
}
|
||||
|
||||
TEST_F(TestSimulcastEncoderAdapter, TestPaddingOneStreamTwoMaxedOut) {
|
||||
TestVp8Simulcast::TestPaddingOneStreamTwoMaxedOut();
|
||||
TEST(SimulcastEncoderAdapterSimulcastTest, TestPaddingOneStream) {
|
||||
InternalEncoderFactory internal_encoder_factory;
|
||||
auto fixture = CreateSpecificSimulcastTestFixture(&internal_encoder_factory);
|
||||
fixture->TestPaddingOneStream();
|
||||
}
|
||||
|
||||
TEST_F(TestSimulcastEncoderAdapter, TestSendAllStreams) {
|
||||
TestVp8Simulcast::TestSendAllStreams();
|
||||
TEST(SimulcastEncoderAdapterSimulcastTest, TestPaddingOneStreamTwoMaxedOut) {
|
||||
InternalEncoderFactory internal_encoder_factory;
|
||||
auto fixture = CreateSpecificSimulcastTestFixture(&internal_encoder_factory);
|
||||
fixture->TestPaddingOneStreamTwoMaxedOut();
|
||||
}
|
||||
|
||||
TEST_F(TestSimulcastEncoderAdapter, TestDisablingStreams) {
|
||||
TestVp8Simulcast::TestDisablingStreams();
|
||||
TEST(SimulcastEncoderAdapterSimulcastTest, TestSendAllStreams) {
|
||||
InternalEncoderFactory internal_encoder_factory;
|
||||
auto fixture = CreateSpecificSimulcastTestFixture(&internal_encoder_factory);
|
||||
fixture->TestSendAllStreams();
|
||||
}
|
||||
|
||||
TEST_F(TestSimulcastEncoderAdapter, TestActiveStreams) {
|
||||
TestVp8Simulcast::TestActiveStreams();
|
||||
TEST(SimulcastEncoderAdapterSimulcastTest, TestDisablingStreams) {
|
||||
InternalEncoderFactory internal_encoder_factory;
|
||||
auto fixture = CreateSpecificSimulcastTestFixture(&internal_encoder_factory);
|
||||
fixture->TestDisablingStreams();
|
||||
}
|
||||
|
||||
TEST_F(TestSimulcastEncoderAdapter, TestSwitchingToOneStream) {
|
||||
TestVp8Simulcast::TestSwitchingToOneStream();
|
||||
TEST(SimulcastEncoderAdapterSimulcastTest, TestActiveStreams) {
|
||||
InternalEncoderFactory internal_encoder_factory;
|
||||
auto fixture = CreateSpecificSimulcastTestFixture(&internal_encoder_factory);
|
||||
fixture->TestActiveStreams();
|
||||
}
|
||||
|
||||
TEST_F(TestSimulcastEncoderAdapter, TestSwitchingToOneOddStream) {
|
||||
TestVp8Simulcast::TestSwitchingToOneOddStream();
|
||||
TEST(SimulcastEncoderAdapterSimulcastTest, TestSwitchingToOneStream) {
|
||||
InternalEncoderFactory internal_encoder_factory;
|
||||
auto fixture = CreateSpecificSimulcastTestFixture(&internal_encoder_factory);
|
||||
fixture->TestSwitchingToOneStream();
|
||||
}
|
||||
|
||||
TEST_F(TestSimulcastEncoderAdapter, TestStrideEncodeDecode) {
|
||||
TestVp8Simulcast::TestStrideEncodeDecode();
|
||||
TEST(SimulcastEncoderAdapterSimulcastTest, TestSwitchingToOneOddStream) {
|
||||
InternalEncoderFactory internal_encoder_factory;
|
||||
auto fixture = CreateSpecificSimulcastTestFixture(&internal_encoder_factory);
|
||||
fixture->TestSwitchingToOneOddStream();
|
||||
}
|
||||
|
||||
TEST_F(TestSimulcastEncoderAdapter, TestSaptioTemporalLayers333PatternEncoder) {
|
||||
TestVp8Simulcast::TestSaptioTemporalLayers333PatternEncoder();
|
||||
TEST(SimulcastEncoderAdapterSimulcastTest, TestStrideEncodeDecode) {
|
||||
InternalEncoderFactory internal_encoder_factory;
|
||||
auto fixture = CreateSpecificSimulcastTestFixture(&internal_encoder_factory);
|
||||
fixture->TestStrideEncodeDecode();
|
||||
}
|
||||
|
||||
TEST_F(TestSimulcastEncoderAdapter, TestSpatioTemporalLayers321PatternEncoder) {
|
||||
TestVp8Simulcast::TestSpatioTemporalLayers321PatternEncoder();
|
||||
TEST(SimulcastEncoderAdapterSimulcastTest,
|
||||
TestSpatioTemporalLayers333PatternEncoder) {
|
||||
InternalEncoderFactory internal_encoder_factory;
|
||||
auto fixture = CreateSpecificSimulcastTestFixture(&internal_encoder_factory);
|
||||
fixture->TestSpatioTemporalLayers333PatternEncoder();
|
||||
}
|
||||
|
||||
TEST(SimulcastEncoderAdapterSimulcastTest,
|
||||
TestSpatioTemporalLayers321PatternEncoder) {
|
||||
InternalEncoderFactory internal_encoder_factory;
|
||||
auto fixture = CreateSpecificSimulcastTestFixture(&internal_encoder_factory);
|
||||
fixture->TestSpatioTemporalLayers321PatternEncoder();
|
||||
}
|
||||
|
||||
class MockVideoEncoder;
|
||||
@ -312,7 +356,7 @@ class TestSimulcastEncoderAdapterFake : public ::testing::Test,
|
||||
}
|
||||
|
||||
void SetupCodec() {
|
||||
TestVp8Simulcast::DefaultSettings(
|
||||
SimulcastTestFixtureImpl::DefaultSettings(
|
||||
&codec_, static_cast<const int*>(kTestTemporalLayerProfile));
|
||||
rate_allocator_.reset(new SimulcastRateAllocator(codec_));
|
||||
EXPECT_EQ(0, adapter_->InitEncode(&codec_, 1, 1200));
|
||||
@ -460,7 +504,7 @@ TEST_F(TestSimulcastEncoderAdapterFake, EncodedCallbackForDifferentEncoders) {
|
||||
// with the lowest stream.
|
||||
TEST_F(TestSimulcastEncoderAdapterFake, ReusesEncodersInOrder) {
|
||||
// Set up common settings for three streams.
|
||||
TestVp8Simulcast::DefaultSettings(
|
||||
SimulcastTestFixtureImpl::DefaultSettings(
|
||||
&codec_, static_cast<const int*>(kTestTemporalLayerProfile));
|
||||
rate_allocator_.reset(new SimulcastRateAllocator(codec_));
|
||||
adapter_->RegisterEncodeCompleteCallback(this);
|
||||
@ -658,7 +702,7 @@ TEST_F(TestSimulcastEncoderAdapterFake, ReinitDoesNotReorderFrameSimulcastIdx) {
|
||||
}
|
||||
|
||||
TEST_F(TestSimulcastEncoderAdapterFake, SupportsNativeHandleForSingleStreams) {
|
||||
TestVp8Simulcast::DefaultSettings(
|
||||
SimulcastTestFixtureImpl::DefaultSettings(
|
||||
&codec_, static_cast<const int*>(kTestTemporalLayerProfile));
|
||||
codec_.numberOfSimulcastStreams = 1;
|
||||
EXPECT_EQ(0, adapter_->InitEncode(&codec_, 1, 1200));
|
||||
@ -671,7 +715,7 @@ TEST_F(TestSimulcastEncoderAdapterFake, SupportsNativeHandleForSingleStreams) {
|
||||
}
|
||||
|
||||
TEST_F(TestSimulcastEncoderAdapterFake, SetRatesUnderMinBitrate) {
|
||||
TestVp8Simulcast::DefaultSettings(
|
||||
SimulcastTestFixtureImpl::DefaultSettings(
|
||||
&codec_, static_cast<const int*>(kTestTemporalLayerProfile));
|
||||
codec_.minBitrate = 50;
|
||||
codec_.numberOfSimulcastStreams = 1;
|
||||
@ -700,7 +744,7 @@ TEST_F(TestSimulcastEncoderAdapterFake, SetRatesUnderMinBitrate) {
|
||||
|
||||
TEST_F(TestSimulcastEncoderAdapterFake, SupportsImplementationName) {
|
||||
EXPECT_STREQ("SimulcastEncoderAdapter", adapter_->ImplementationName());
|
||||
TestVp8Simulcast::DefaultSettings(
|
||||
SimulcastTestFixtureImpl::DefaultSettings(
|
||||
&codec_, static_cast<const int*>(kTestTemporalLayerProfile));
|
||||
std::vector<const char*> encoder_names;
|
||||
encoder_names.push_back("codec1");
|
||||
@ -722,7 +766,7 @@ TEST_F(TestSimulcastEncoderAdapterFake, SupportsImplementationName) {
|
||||
|
||||
TEST_F(TestSimulcastEncoderAdapterFake,
|
||||
SupportsNativeHandleForMultipleStreams) {
|
||||
TestVp8Simulcast::DefaultSettings(
|
||||
SimulcastTestFixtureImpl::DefaultSettings(
|
||||
&codec_, static_cast<const int*>(kTestTemporalLayerProfile));
|
||||
codec_.numberOfSimulcastStreams = 3;
|
||||
EXPECT_EQ(0, adapter_->InitEncode(&codec_, 1, 1200));
|
||||
@ -759,7 +803,7 @@ class FakeNativeBuffer : public VideoFrameBuffer {
|
||||
|
||||
TEST_F(TestSimulcastEncoderAdapterFake,
|
||||
NativeHandleForwardingForMultipleStreams) {
|
||||
TestVp8Simulcast::DefaultSettings(
|
||||
SimulcastTestFixtureImpl::DefaultSettings(
|
||||
&codec_, static_cast<const int*>(kTestTemporalLayerProfile));
|
||||
codec_.numberOfSimulcastStreams = 3;
|
||||
// High start bitrate, so all streams are enabled.
|
||||
@ -783,7 +827,7 @@ TEST_F(TestSimulcastEncoderAdapterFake,
|
||||
}
|
||||
|
||||
TEST_F(TestSimulcastEncoderAdapterFake, TestFailureReturnCodesFromEncodeCalls) {
|
||||
TestVp8Simulcast::DefaultSettings(
|
||||
SimulcastTestFixtureImpl::DefaultSettings(
|
||||
&codec_, static_cast<const int*>(kTestTemporalLayerProfile));
|
||||
codec_.numberOfSimulcastStreams = 3;
|
||||
EXPECT_EQ(0, adapter_->InitEncode(&codec_, 1, 1200));
|
||||
@ -804,7 +848,7 @@ TEST_F(TestSimulcastEncoderAdapterFake, TestFailureReturnCodesFromEncodeCalls) {
|
||||
}
|
||||
|
||||
TEST_F(TestSimulcastEncoderAdapterFake, TestInitFailureCleansUpEncoders) {
|
||||
TestVp8Simulcast::DefaultSettings(
|
||||
SimulcastTestFixtureImpl::DefaultSettings(
|
||||
&codec_, static_cast<const int*>(kTestTemporalLayerProfile));
|
||||
codec_.numberOfSimulcastStreams = 3;
|
||||
helper_->factory()->set_init_encode_return_value(
|
||||
@ -814,5 +858,5 @@ TEST_F(TestSimulcastEncoderAdapterFake, TestInitFailureCleansUpEncoders) {
|
||||
EXPECT_TRUE(helper_->factory()->encoders().empty());
|
||||
}
|
||||
|
||||
} // namespace testing
|
||||
} // namespace test
|
||||
} // namespace webrtc
|
||||
|
||||
Reference in New Issue
Block a user