diff --git a/webrtc/video_engine/test/common/fake_encoder.cc b/webrtc/video_engine/test/common/fake_encoder.cc index cb9d79bfe..e355698f9 100644 --- a/webrtc/video_engine/test/common/fake_encoder.cc +++ b/webrtc/video_engine/test/common/fake_encoder.cc @@ -13,6 +13,7 @@ #include "testing/gtest/include/gtest/gtest.h" namespace webrtc { +namespace test { FakeEncoder::FakeEncoder(Clock* clock) : clock_(clock), @@ -24,6 +25,37 @@ FakeEncoder::FakeEncoder(Clock* clock) FakeEncoder::~FakeEncoder() {} +void FakeEncoder::SetCodecStreamSettings(VideoCodec* codec, + size_t num_streams) { + assert(num_streams > 0); + assert(num_streams <= kMaxSimulcastStreams); + + static const SimulcastStream stream_settings[] = { + {320, 180, 0, 150, 150, 50, codec->qpMax}, + {640, 360, 0, 500, 500, 150, codec->qpMax}, + {1280, 720, 0, 1200, 1200, 600, codec->qpMax}}; + // Add more streams to the settings above with reasonable values if required. + assert(num_streams <= sizeof(stream_settings) / sizeof(stream_settings[0])); + + codec->numberOfSimulcastStreams = static_cast(num_streams); + + unsigned int sum_of_max_bitrates = 0; + for (size_t i = 0; i < num_streams; ++i) { + codec->simulcastStream[i] = stream_settings[i]; + sum_of_max_bitrates += stream_settings[i].maxBitrate; + } + + size_t last_stream = num_streams - 1; + codec->width = stream_settings[last_stream].width; + codec->height = stream_settings[last_stream].height; + // Start with the average for the middle stream's max/min settings. + codec->startBitrate = (stream_settings[last_stream / 2].maxBitrate + + stream_settings[last_stream / 2].minBitrate) / + 2; + codec->minBitrate = stream_settings[0].minBitrate; + codec->maxBitrate = sum_of_max_bitrates; +} + int32_t FakeEncoder::InitEncode(const VideoCodec* config, int32_t number_of_cores, uint32_t max_payload_size) { @@ -96,4 +128,5 @@ int32_t FakeEncoder::SetRates(uint32_t new_target_bitrate, uint32_t framerate) { target_bitrate_kbps_ = new_target_bitrate; return 0; } +} // namespace test } // namespace webrtc diff --git a/webrtc/video_engine/test/common/fake_encoder.h b/webrtc/video_engine/test/common/fake_encoder.h index e1272c749..d4e19314a 100644 --- a/webrtc/video_engine/test/common/fake_encoder.h +++ b/webrtc/video_engine/test/common/fake_encoder.h @@ -17,13 +17,15 @@ #include "webrtc/system_wrappers/interface/clock.h" namespace webrtc { +namespace test { class FakeEncoder : public VideoEncoder { public: explicit FakeEncoder(Clock* clock); - virtual ~FakeEncoder(); + static void SetCodecStreamSettings(VideoCodec* codec, size_t num_streams); + virtual int32_t InitEncode(const VideoCodec* config, int32_t number_of_cores, uint32_t max_payload_size) OVERRIDE; @@ -51,6 +53,7 @@ class FakeEncoder : public VideoEncoder { int64_t last_encode_time_ms_; uint8_t encoded_buffer_[100000]; }; +} // namespace test } // namespace webrtc #endif // WEBRTC_VIDEO_ENGINE_TEST_COMMON_FAKE_ENCODER_H_ diff --git a/webrtc/video_engine/test/engine_tests.cc b/webrtc/video_engine/test/engine_tests.cc index 353184186..61a0f5c2f 100644 --- a/webrtc/video_engine/test/engine_tests.cc +++ b/webrtc/video_engine/test/engine_tests.cc @@ -133,39 +133,6 @@ class RampUpTest : public ::testing::TestWithParam { reserved_ssrcs_.clear(); } - static void SetCodecStreamSettings(VideoCodec* video_codec) { - video_codec->width = 1280; - video_codec->height = 720; - video_codec->startBitrate = 300; - video_codec->minBitrate = 50; - video_codec->maxBitrate = 1800; - - video_codec->numberOfSimulcastStreams = 3; - video_codec->simulcastStream[0].width = 320; - video_codec->simulcastStream[0].height = 180; - video_codec->simulcastStream[0].numberOfTemporalLayers = 0; - video_codec->simulcastStream[0].maxBitrate = 150; - video_codec->simulcastStream[0].targetBitrate = 150; - video_codec->simulcastStream[0].minBitrate = 50; - video_codec->simulcastStream[0].qpMax = video_codec->qpMax; - - video_codec->simulcastStream[1].width = 640; - video_codec->simulcastStream[1].height = 360; - video_codec->simulcastStream[1].numberOfTemporalLayers = 0; - video_codec->simulcastStream[1].maxBitrate = 500; - video_codec->simulcastStream[1].targetBitrate = 500; - video_codec->simulcastStream[1].minBitrate = 150; - video_codec->simulcastStream[1].qpMax = video_codec->qpMax; - - video_codec->simulcastStream[2].width = 1280; - video_codec->simulcastStream[2].height = 720; - video_codec->simulcastStream[2].numberOfTemporalLayers = 0; - video_codec->simulcastStream[2].maxBitrate = 1200; - video_codec->simulcastStream[2].targetBitrate = 1200; - video_codec->simulcastStream[2].minBitrate = 600; - video_codec->simulcastStream[2].qpMax = video_codec->qpMax; - } - protected: std::map reserved_ssrcs_; }; @@ -181,10 +148,10 @@ TEST_P(RampUpTest, RampUpWithPadding) { receiver_transport.SetReceiver(call->Receiver()); - FakeEncoder encoder(Clock::GetRealTimeClock()); + test::FakeEncoder encoder(Clock::GetRealTimeClock()); send_config.encoder = &encoder; send_config.internal_source = false; - SetCodecStreamSettings(&send_config.codec); + test::FakeEncoder::SetCodecStreamSettings(&send_config.codec, 3); send_config.codec.plType = 100; send_config.pacing = GetParam(); diff --git a/webrtc/video_engine/test/send_stream_tests.cc b/webrtc/video_engine/test/send_stream_tests.cc index 13a609362..0b142ae59 100644 --- a/webrtc/video_engine/test/send_stream_tests.cc +++ b/webrtc/video_engine/test/send_stream_tests.cc @@ -12,6 +12,7 @@ #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" #include "webrtc/system_wrappers/interface/event_wrapper.h" #include "webrtc/system_wrappers/interface/scoped_ptr.h" +#include "webrtc/video_engine/test/common/fake_encoder.h" #include "webrtc/video_engine/test/common/frame_generator.h" #include "webrtc/video_engine/test/common/frame_generator_capturer.h" #include "webrtc/video_engine/test/common/null_transport.h" @@ -40,6 +41,8 @@ class SendTransportObserver : public test::NullTransport { }; class VideoSendStreamTest : public ::testing::Test { + public: + VideoSendStreamTest() : fake_encoder_(Clock::GetRealTimeClock()) {} protected: static const uint32_t kSendSsrc; void RunSendTest(VideoCall* call, @@ -60,6 +63,17 @@ class VideoSendStreamTest : public ::testing::Test { send_stream->StopSend(); call->DestroySendStream(send_stream); } + + VideoSendStream::Config GetSendTestConfig(VideoCall* call) { + VideoSendStream::Config config = call->GetDefaultSendConfig(); + config.encoder = &fake_encoder_; + config.internal_source = false; + test::FakeEncoder::SetCodecStreamSettings(&config.codec, 1); + config.codec.plType = 100; + return config; + } + + test::FakeEncoder fake_encoder_; }; const uint32_t VideoSendStreamTest::kSendSsrc = 0xC0FFEE; @@ -84,7 +98,7 @@ TEST_F(VideoSendStreamTest, SendsSetSsrc) { VideoCall::Config call_config(&observer); scoped_ptr call(VideoCall::Create(call_config)); - VideoSendStream::Config send_config = call->GetDefaultSendConfig(); + VideoSendStream::Config send_config = GetSendTestConfig(call.get()); send_config.rtp.ssrcs.push_back(kSendSsrc); RunSendTest(call.get(), send_config, &observer); @@ -117,7 +131,7 @@ TEST_F(VideoSendStreamTest, SupportsCName) { VideoCall::Config call_config(&observer); scoped_ptr call(VideoCall::Create(call_config)); - VideoSendStream::Config send_config = call->GetDefaultSendConfig(); + VideoSendStream::Config send_config = GetSendTestConfig(call.get()); send_config.rtp.ssrcs.push_back(kSendSsrc); send_config.rtp.c_name = kCName;