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 |