diff --git a/webrtc/video/video_send_stream.cc b/webrtc/video/video_send_stream.cc index beaa03702b..6e8f238165 100644 --- a/webrtc/video/video_send_stream.cc +++ b/webrtc/video/video_send_stream.cc @@ -330,6 +330,8 @@ bool VideoSendStream::ReconfigureVideoEncoder( video_codec.codecSpecific.VP8 = *reinterpret_cast( config.encoder_specific_settings); } + video_codec.codecSpecific.VP8.numberOfTemporalLayers = + static_cast(streams.back().temporal_layers.size()); } else { // TODO(pbos): Support encoder_settings codec-agnostically. assert(config.encoder_specific_settings == NULL); @@ -362,8 +364,8 @@ bool VideoSendStream::ReconfigureVideoEncoder( sim_stream->targetBitrate = streams[i].target_bitrate_bps / 1000; sim_stream->maxBitrate = streams[i].max_bitrate_bps / 1000; sim_stream->qpMax = streams[i].max_qp; - // TODO(pbos): Implement mapping for temporal layers. - assert(streams[i].temporal_layers.empty()); + sim_stream->numberOfTemporalLayers = + static_cast(streams[i].temporal_layers.size()); video_codec.width = std::max(video_codec.width, static_cast(streams[i].width)); diff --git a/webrtc/video/video_send_stream_tests.cc b/webrtc/video/video_send_stream_tests.cc index 888e47b892..6c2fa39f4d 100644 --- a/webrtc/video/video_send_stream_tests.cc +++ b/webrtc/video/video_send_stream_tests.cc @@ -1420,6 +1420,7 @@ TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) { } TEST_F(VideoSendStreamTest, EncoderSetupPropagatesVp8Config) { + static const size_t kNumberOfTemporalLayers = 4; class VideoCodecConfigObserver : public test::SendTest, public test::FakeEncoder { public: @@ -1438,6 +1439,11 @@ TEST_F(VideoSendStreamTest, EncoderSetupPropagatesVp8Config) { send_config->encoder_settings.encoder = this; send_config->encoder_settings.payload_name = "VP8"; + for (size_t i = 0; i < encoder_config->streams.size(); ++i) { + encoder_config->streams[i].temporal_layers.resize( + kNumberOfTemporalLayers); + } + encoder_config->encoder_specific_settings = &vp8_settings_; encoder_config_ = *encoder_config; } @@ -1452,6 +1458,20 @@ TEST_F(VideoSendStreamTest, EncoderSetupPropagatesVp8Config) { int32_t number_of_cores, uint32_t max_payload_size) OVERRIDE { EXPECT_EQ(kVideoCodecVP8, config->codecType); + + // Check that the number of temporal layers has propagated properly to + // VideoCodec. + EXPECT_EQ(kNumberOfTemporalLayers, + config->codecSpecific.VP8.numberOfTemporalLayers); + + for (unsigned char i = 0; i < config->numberOfSimulcastStreams; ++i) { + EXPECT_EQ(kNumberOfTemporalLayers, + config->simulcastStream[i].numberOfTemporalLayers); + } + + // Set expected temporal layers as they should have been set when + // reconfiguring the encoder and not match the set config. + vp8_settings_.numberOfTemporalLayers = kNumberOfTemporalLayers; EXPECT_EQ(0, memcmp(&config->codecSpecific.VP8, &vp8_settings_,