Chromium Code Reviews| Index: webrtc/modules/video_coding/codecs/vp8/simulcast_unittest.h |
| diff --git a/webrtc/modules/video_coding/codecs/vp8/simulcast_unittest.h b/webrtc/modules/video_coding/codecs/vp8/simulcast_unittest.h |
| index e2d5bb87384fbbca678e00584162ebe2a7586dbd..dacfe8fa62c6ce6f3fe24d2ce3623e541b7b42b5 100644 |
| --- a/webrtc/modules/video_coding/codecs/vp8/simulcast_unittest.h |
| +++ b/webrtc/modules/video_coding/codecs/vp8/simulcast_unittest.h |
| @@ -12,6 +12,7 @@ |
| #define WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_SIMULCAST_UNITTEST_H_ |
| #include <algorithm> |
| +#include <map> |
| #include <memory> |
| #include <vector> |
| @@ -152,18 +153,32 @@ class SkipEncodingUnusedStreamsTest { |
| std::vector<unsigned int> RunTest(VP8Encoder* encoder, |
| VideoCodec* settings, |
| uint32_t target_bitrate) { |
| + class TemporalLayersIndex : public TemporalLayersListener { |
| + public: |
| + TemporalLayersIndex() {} |
| + ~TemporalLayersIndex() override {} |
| + |
| + void OnTemporalLayersCreated(int simulcast_id, |
| + TemporalLayers* layers) override { |
| + temporal_layers_[simulcast_id] = layers; |
| + } |
| + |
| + std::map<int, TemporalLayers*> temporal_layers_; |
| + } tl_index; |
| + |
| SpyingTemporalLayersFactory spy_factory; |
| + spy_factory.SetListener(&tl_index); |
| settings->codecSpecific.VP8.tl_factory = &spy_factory; |
| EXPECT_EQ(0, encoder->InitEncode(settings, 1, 1200)); |
| encoder->SetRates(target_bitrate, 30); |
| + int expected_index = 0; |
| std::vector<unsigned int> configured_bitrates; |
| - for (std::vector<TemporalLayers*>::const_iterator it = |
| - spy_factory.spying_layers_.begin(); |
| - it != spy_factory.spying_layers_.end(); ++it) { |
| + for (auto it : tl_index.temporal_layers_) { |
| + EXPECT_EQ(expected_index++, it.first); |
| configured_bitrates.push_back( |
| - static_cast<SpyingTemporalLayers*>(*it)->configured_bitrate_); |
| + static_cast<SpyingTemporalLayers*>(it.second)->configured_bitrate_); |
| } |
| return configured_bitrates; |
| } |
| @@ -179,13 +194,11 @@ class SkipEncodingUnusedStreamsTest { |
| return layers_->EncodeFlags(timestamp); |
| } |
| - bool ConfigureBitrates(int bitrate_kbit, |
| - int max_bitrate_kbit, |
| - int framerate, |
| - vpx_codec_enc_cfg_t* cfg) override { |
| + std::vector<uint32_t> OnRatesUpdated(int bitrate_kbit, |
| + int max_bitrate_kbit, |
| + int framerate) override { |
| configured_bitrate_ = bitrate_kbit; |
| - return layers_->ConfigureBitrates(bitrate_kbit, max_bitrate_kbit, |
| - framerate, cfg); |
| + return layers_->OnRatesUpdated(bitrate_kbit, max_bitrate_kbit, framerate); |
| } |
| void PopulateCodecSpecific(bool base_layer_sync, |
| @@ -210,17 +223,18 @@ class SkipEncodingUnusedStreamsTest { |
| class SpyingTemporalLayersFactory : public TemporalLayersFactory { |
| public: |
| + SpyingTemporalLayersFactory() {} |
| virtual ~SpyingTemporalLayersFactory() {} |
| - TemporalLayers* Create(int temporal_layers, |
| + TemporalLayers* Create(int simulcast_id, |
| + int temporal_layers, |
| uint8_t initial_tl0_pic_idx) const override { |
| SpyingTemporalLayers* layers = |
| new SpyingTemporalLayers(TemporalLayersFactory::Create( |
| - temporal_layers, initial_tl0_pic_idx)); |
| - spying_layers_.push_back(layers); |
| + simulcast_id, temporal_layers, initial_tl0_pic_idx)); |
| + if (listener_) |
| + listener_->OnTemporalLayersCreated(simulcast_id, layers); |
| return layers; |
| } |
| - |
| - mutable std::vector<TemporalLayers*> spying_layers_; |
| }; |
| }; |
| @@ -265,7 +279,7 @@ class TestVp8Simulcast : public ::testing::Test { |
| static void DefaultSettings(VideoCodec* settings, |
| const int* temporal_layer_profile) { |
| - assert(settings); |
| + ASSERT_TRUE(settings); |
|
perkj_webrtc
2016/10/21 08:24:28
DCHECK or CHECK
sprang_webrtc
2016/10/25 10:44:25
Done.
|
| memset(settings, 0, sizeof(VideoCodec)); |
| strncpy(settings->plName, "VP8", 4); |
| settings->codecType = kVideoCodecVP8; |
| @@ -321,6 +335,7 @@ class TestVp8Simulcast : public ::testing::Test { |
| encoder_->RegisterEncodeCompleteCallback(&encoder_callback_); |
| decoder_->RegisterDecodeCompleteCallback(&decoder_callback_); |
| DefaultSettings(&settings_, temporal_layer_profile); |
| + settings_.codecSpecific.VP8.tl_factory = &tl_factory_; |
| EXPECT_EQ(0, encoder_->InitEncode(&settings_, 1, 1200)); |
| EXPECT_EQ(0, decoder_->InitDecode(&settings_, 1)); |
| int half_width = (kDefaultWidth + 1) / 2; |
| @@ -609,6 +624,7 @@ class TestVp8Simulcast : public ::testing::Test { |
| // Switch back. |
| DefaultSettings(&settings_, kDefaultTemporalLayerProfile); |
| + settings_.codecSpecific.VP8.tl_factory = &tl_factory_; |
| // Start at the lowest bitrate for enabling base stream. |
| settings_.startBitrate = kMinBitrates[0]; |
| EXPECT_EQ(0, encoder_->InitEncode(&settings_, 1, 1200)); |
| @@ -972,6 +988,7 @@ class TestVp8Simulcast : public ::testing::Test { |
| VideoCodec settings_; |
| rtc::scoped_refptr<I420Buffer> input_buffer_; |
| std::unique_ptr<VideoFrame> input_frame_; |
| + TemporalLayersFactory tl_factory_; |
| }; |
| } // namespace testing |