Reserve RTP/RTCP modules in SetSSRC.

Allows setting SSRCs for future simulcast layers even though no set send
codec uses them.

Also re-enabling CanSwitchToUseAllSsrcs as an end-to-end test, required
for bitrate ramp-up, instead of send-side only (resolving issue 3078).
This test was used to verify reserved modules' SSRCs are preserved
correctly.

To enable a multiple-stream end-to-end test test::CallTest was modified
to work on a vector of receive streams instead of just one.

BUG=3078
R=kjellander@webrtc.org, stefan@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/15859005

git-svn-id: http://webrtc.googlecode.com/svn/trunk@6565 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/test/call_test.cc b/webrtc/test/call_test.cc
index ad2416f..5d8b8e6 100644
--- a/webrtc/test/call_test.cc
+++ b/webrtc/test/call_test.cc
@@ -16,7 +16,6 @@
 
 CallTest::CallTest()
     : send_stream_(NULL),
-      receive_stream_(NULL),
       fake_encoder_(Clock::GetRealTimeClock()) {
 }
 CallTest::~CallTest() {
@@ -39,9 +38,9 @@
   if (test->ShouldCreateReceivers()) {
     CreateMatchingReceiveConfigs();
   }
-  test->ModifyConfigs(&send_config_, &receive_config_, &video_streams_);
+  test->ModifyConfigs(&send_config_, &receive_configs_, &video_streams_);
   CreateStreams();
-  test->OnStreamsCreated(send_stream_, receive_stream_);
+  test->OnStreamsCreated(send_stream_, receive_streams_);
 
   CreateFrameGeneratorCapturer();
   test->OnFrameGeneratorCapturerCreated(frame_generator_capturer_.get());
@@ -56,15 +55,17 @@
 
 void CallTest::Start() {
   send_stream_->Start();
-  if (receive_stream_ != NULL)
-    receive_stream_->Start();
-  frame_generator_capturer_->Start();
+  for (size_t i = 0; i < receive_streams_.size(); ++i)
+    receive_streams_[i]->Start();
+  if (frame_generator_capturer_.get() != NULL)
+    frame_generator_capturer_->Start();
 }
 
 void CallTest::Stop() {
-  frame_generator_capturer_->Stop();
-  if (receive_stream_ != NULL)
-    receive_stream_->Stop();
+  if (frame_generator_capturer_.get() != NULL)
+    frame_generator_capturer_->Stop();
+  for (size_t i = 0; i < receive_streams_.size(); ++i)
+    receive_streams_[i]->Stop();
   send_stream_->Stop();
 }
 
@@ -93,21 +94,24 @@
     send_config_.rtp.ssrcs.push_back(kSendSsrcs[i]);
 }
 
-// TODO(pbos): Make receive configs into a vector.
 void CallTest::CreateMatchingReceiveConfigs() {
-  assert(send_config_.rtp.ssrcs.size() == 1);
-  receive_config_ = receiver_call_->GetDefaultReceiveConfig();
+  assert(!send_config_.rtp.ssrcs.empty());
+  assert(receive_configs_.empty());
+  VideoReceiveStream::Config config = receiver_call_->GetDefaultReceiveConfig();
   VideoCodec codec =
       test::CreateDecoderVideoCodec(send_config_.encoder_settings);
-  receive_config_.codecs.push_back(codec);
+  config.codecs.push_back(codec);
   if (send_config_.encoder_settings.encoder == &fake_encoder_) {
     ExternalVideoDecoder decoder;
     decoder.decoder = &fake_decoder_;
     decoder.payload_type = send_config_.encoder_settings.payload_type;
-    receive_config_.external_decoders.push_back(decoder);
+    config.external_decoders.push_back(decoder);
   }
-  receive_config_.rtp.remote_ssrc = send_config_.rtp.ssrcs[0];
-  receive_config_.rtp.local_ssrc = kReceiverLocalSsrc;
+  config.rtp.local_ssrc = kReceiverLocalSsrc;
+  for (size_t i = 0; i < send_config_.rtp.ssrcs.size(); ++i) {
+    config.rtp.remote_ssrc = send_config_.rtp.ssrcs[i];
+    receive_configs_.push_back(config);
+  }
 }
 
 void CallTest::CreateFrameGeneratorCapturer() {
@@ -121,22 +125,24 @@
 }
 void CallTest::CreateStreams() {
   assert(send_stream_ == NULL);
-  assert(receive_stream_ == NULL);
+  assert(receive_streams_.empty());
 
   send_stream_ =
       sender_call_->CreateVideoSendStream(send_config_, video_streams_, NULL);
 
-  if (receiver_call_.get() != NULL)
-    receive_stream_ = receiver_call_->CreateVideoReceiveStream(receive_config_);
+  for (size_t i = 0; i < receive_configs_.size(); ++i) {
+    receive_streams_.push_back(
+        receiver_call_->CreateVideoReceiveStream(receive_configs_[i]));
+  }
 }
 
 void CallTest::DestroyStreams() {
   if (send_stream_ != NULL)
     sender_call_->DestroyVideoSendStream(send_stream_);
-  if (receive_stream_ != NULL)
-    receiver_call_->DestroyVideoReceiveStream(receive_stream_);
   send_stream_ = NULL;
-  receive_stream_ = NULL;
+  for (size_t i = 0; i < receive_streams_.size(); ++i)
+    receiver_call_->DestroyVideoReceiveStream(receive_streams_[i]);
+  receive_streams_.clear();
 }
 
 const unsigned int CallTest::kDefaultTimeoutMs = 30 * 1000;
@@ -175,13 +181,15 @@
   return 1;
 }
 
-void BaseTest::ModifyConfigs(VideoSendStream::Config* send_config,
-                             VideoReceiveStream::Config* receive_config,
-                             std::vector<VideoStream>* video_streams) {
+void BaseTest::ModifyConfigs(
+    VideoSendStream::Config* send_config,
+    std::vector<VideoReceiveStream::Config>* receive_configs,
+    std::vector<VideoStream>* video_streams) {
 }
 
-void BaseTest::OnStreamsCreated(VideoSendStream* send_stream,
-                                VideoReceiveStream* receive_stream) {
+void BaseTest::OnStreamsCreated(
+    VideoSendStream* send_stream,
+    const std::vector<VideoReceiveStream*>& receive_streams) {
 }
 
 void BaseTest::OnFrameGeneratorCapturerCreated(