Set number of temporal layers for VideoSendStream.
Introduces a mapping between EncoderConfig and VideoCodec. More
specifically it also removes an assert that there should be no set
temporal layers in the new API, which is wrong and was temporary.
R=stefan@webrtc.org
BUG=1788
Review URL: https://webrtc-codereview.appspot.com/25619004
git-svn-id: http://webrtc.googlecode.com/svn/trunk/webrtc@7256 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/video/video_send_stream.cc b/video/video_send_stream.cc
index beaa037..6e8f238 100644
--- a/video/video_send_stream.cc
+++ b/video/video_send_stream.cc
@@ -330,6 +330,8 @@
video_codec.codecSpecific.VP8 = *reinterpret_cast<const VideoCodecVP8*>(
config.encoder_specific_settings);
}
+ video_codec.codecSpecific.VP8.numberOfTemporalLayers =
+ static_cast<unsigned char>(streams.back().temporal_layers.size());
} else {
// TODO(pbos): Support encoder_settings codec-agnostically.
assert(config.encoder_specific_settings == NULL);
@@ -362,8 +364,8 @@
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<unsigned char>(streams[i].temporal_layers.size());
video_codec.width = std::max(video_codec.width,
static_cast<unsigned short>(streams[i].width));
diff --git a/video/video_send_stream_tests.cc b/video/video_send_stream_tests.cc
index 888e47b..6c2fa39 100644
--- a/video/video_send_stream_tests.cc
+++ b/video/video_send_stream_tests.cc
@@ -1420,6 +1420,7 @@
}
TEST_F(VideoSendStreamTest, EncoderSetupPropagatesVp8Config) {
+ static const size_t kNumberOfTemporalLayers = 4;
class VideoCodecConfigObserver : public test::SendTest,
public test::FakeEncoder {
public:
@@ -1438,6 +1439,11 @@
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 @@
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_,