(Auto)update libjingle 79200114-> 79205306

git-svn-id: http://webrtc.googlecode.com/svn/trunk@7627 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/talk/media/webrtc/webrtcvideoengine.cc b/talk/media/webrtc/webrtcvideoengine.cc
index 04092f3..d0ed46d 100644
--- a/talk/media/webrtc/webrtcvideoengine.cc
+++ b/talk/media/webrtc/webrtcvideoengine.cc
@@ -1987,14 +1987,21 @@
     SetReceiverReportSsrc(sp.first_ssrc());
   }
 
-  send_channel->set_stream_params(sp);
-
-  // Reset send codec after stream parameters changed.
   if (send_codec_) {
-    if (!SetSendCodec(send_channel, *send_codec_)) {
+    send_channel->SetAdaptFormat(
+        VideoFormatFromVieCodec(*send_codec_),
+        WebRtcVideoChannelSendInfo::kAdaptFormatTypeCodec);
+
+    VideoSendParams send_params;
+    send_params.codec = *send_codec_;
+    send_params.stream = sp;
+    if (!SetSendParams(send_channel, send_params)) {
       return false;
     }
-    LogSendCodecChange("SetSendStreamFormat()");
+    LogSendCodecChange("AddStream()");
+  } else {
+    // Save the stream params for later, when we have a codec.
+    send_channel->set_stream_params(sp);
   }
 
   if (sending_) {
@@ -2990,39 +2997,40 @@
   VideoOptions original = options_;
   options_.SetAll(options);
 
-  // Set CPU options for all send channels.
+  // Set CPU options and codec options for all send channels.
   for (SendChannelMap::iterator iter = send_channels_.begin();
        iter != send_channels_.end(); ++iter) {
     WebRtcVideoChannelSendInfo* send_channel = iter->second;
     send_channel->ApplyCpuOptions(options_);
+
+    if (send_codec_) {
+      VideoSendParams send_params = send_channel->send_params();
+
+      bool conference_mode_turned_off = (
+          original.conference_mode.IsSet() &&
+          options.conference_mode.IsSet() &&
+          original.conference_mode.GetWithDefaultIfUnset(false) &&
+          !options.conference_mode.GetWithDefaultIfUnset(false));
+      if (conference_mode_turned_off) {
+        // This is a special case for turning conference mode off.
+        // Max bitrate should go back to the default maximum value instead
+        // of the current maximum.
+        send_params.codec.maxBitrate = kAutoBandwidth;
+      }
+
+      // TODO(pthatcher): Remove this.  We don't need 4 ways to set bitrates.
+      int new_start_bitrate;
+      if (options.video_start_bitrate.Get(&new_start_bitrate)) {
+        send_params.codec.startBitrate = new_start_bitrate;
+      }
+
+      if (!SetSendParams(send_channel, send_params)) {
+        return false;
+      }
+      LogSendCodecChange("SetOptions()");
+    }
   }
 
-  if (send_codec_) {
-    webrtc::VideoCodec new_codec = *send_codec_;
-
-    bool conference_mode_turned_off = (
-        original.conference_mode.IsSet() &&
-        options.conference_mode.IsSet() &&
-        original.conference_mode.GetWithDefaultIfUnset(false) &&
-        !options.conference_mode.GetWithDefaultIfUnset(false));
-    if (conference_mode_turned_off) {
-      // This is a special case for turning conference mode off.
-      // Max bitrate should go back to the default maximum value instead
-      // of the current maximum.
-      new_codec.maxBitrate = kAutoBandwidth;
-    }
-
-    // TODO(pthatcher): Remove this.  We don't need 4 ways to set bitrates.
-    int new_start_bitrate;
-    if (options.video_start_bitrate.Get(&new_start_bitrate)) {
-      new_codec.startBitrate = new_start_bitrate;
-    }
-
-    if (!SetSendCodec(new_codec)) {
-      return false;
-    }
-    LogSendCodecChange("SetOptions()");
-  }
 
   int buffer_latency;
   if (Changed(options.buffered_mode_latency,
@@ -3676,26 +3684,9 @@
       VideoFormatFromVieCodec(codec),
       WebRtcVideoChannelSendInfo::kAdaptFormatTypeCodec);
 
-  MaybeRegisterExternalEncoder(send_channel, codec);
-
   VideoSendParams send_params = send_channel->send_params();
   send_params.codec = codec;
-  if (!SetSendParams(send_channel, send_params)) {
-    return false;
-  }
-
-  // NOTE: SetRtxSendPayloadType must be called after all simulcast SSRCs
-  // are configured. Otherwise ssrc's configured after this point will use
-  // the primary PT for RTX.
-  const int channel_id = send_channel->channel_id();
-  if (send_rtx_type_ != -1 &&
-      engine()->vie()->rtp()->SetRtxSendPayloadType(channel_id,
-                                                    send_rtx_type_) != 0) {
-    LOG_RTCERR2(SetRtxSendPayloadType, channel_id, send_rtx_type_);
-    return false;
-  }
-
-  return true;
+  return SetSendParams(send_channel, send_params);
 }
 
 static std::string ToString(webrtc::VideoCodecComplexity complexity) {
@@ -3872,6 +3863,8 @@
     const VideoSendParams& send_params) {
   const int channel_id = send_channel->channel_id();
 
+  MaybeRegisterExternalEncoder(send_channel, send_params.codec);
+
   CapturedFrameInfo frame;
   send_channel->last_captured_frame_info().Get(&frame);
 
@@ -3923,10 +3916,18 @@
   }
   engine()->vie()->rtp()->SetTransmissionSmoothingStatus(channel_id, true);
 
-  if (send_channel->IsActive()) {
-    if (!SetSendSsrcs(channel_id, send_params.stream, codec)) {
-      return false;
-    }
+  if (!SetSendSsrcs(channel_id, send_params.stream, codec)) {
+    return false;
+  }
+
+  // NOTE: SetRtxSendPayloadType must be called after all SSRCs are
+  // configured. Otherwise ssrc's configured after this point will use
+  // the primary PT for RTX.
+  if (send_rtx_type_ != -1 &&
+      engine()->vie()->rtp()->SetRtxSendPayloadType(channel_id,
+                                                    send_rtx_type_) != 0) {
+    LOG_RTCERR2(SetRtxSendPayloadType, channel_id, send_rtx_type_);
+    return false;
   }
 
   send_channel->set_send_params(send_params);