| Index: webrtc/modules/video_coding/video_coding_impl.cc
 | 
| diff --git a/webrtc/modules/video_coding/video_coding_impl.cc b/webrtc/modules/video_coding/video_coding_impl.cc
 | 
| index 2f709b610c1453a6e8fc9415042189a9f03ddae2..021281bffa07a5d81b8f2a7e479a1bb62543073e 100644
 | 
| --- a/webrtc/modules/video_coding/video_coding_impl.cc
 | 
| +++ b/webrtc/modules/video_coding/video_coding_impl.cc
 | 
| @@ -11,10 +11,14 @@
 | 
|  #include "webrtc/modules/video_coding/video_coding_impl.h"
 | 
|  
 | 
|  #include <algorithm>
 | 
| +#include <utility>
 | 
|  
 | 
|  #include "webrtc/common_types.h"
 | 
| +#include "webrtc/common_video/include/video_bitrate_allocator.h"
 | 
|  #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
 | 
|  #include "webrtc/base/criticalsection.h"
 | 
| +#include "webrtc/modules/video_coding/codecs/vp8/temporal_layers.h"
 | 
| +#include "webrtc/modules/video_coding/include/video_codec_initializer.h"
 | 
|  #include "webrtc/modules/video_coding/include/video_codec_interface.h"
 | 
|  #include "webrtc/modules/video_coding/encoded_frame.h"
 | 
|  #include "webrtc/modules/video_coding/jitter_buffer.h"
 | 
| @@ -104,6 +108,21 @@ class VideoCodingModuleImpl : public VideoCodingModule {
 | 
|    int32_t RegisterSendCodec(const VideoCodec* sendCodec,
 | 
|                              uint32_t numberOfCores,
 | 
|                              uint32_t maxPayloadSize) override {
 | 
| +    if (sendCodec != nullptr && sendCodec->codecType == kVideoCodecVP8) {
 | 
| +      // Set up a rate allocator and temporal layers factory for this vp8
 | 
| +      // instance. The codec impl will have a raw pointer to the TL factory,
 | 
| +      // and will call it when initializing. Since this can happen
 | 
| +      // asynchronously keep the instance alive until destruction or until a
 | 
| +      // new send codec is registered.
 | 
| +      VideoCodec vp8_codec = *sendCodec;
 | 
| +      std::unique_ptr<TemporalLayersFactory> tl_factory(
 | 
| +          new TemporalLayersFactory());
 | 
| +      vp8_codec.VP8()->tl_factory = tl_factory.get();
 | 
| +      rate_allocator_ = VideoCodecInitializer::CreateBitrateAllocator(
 | 
| +          vp8_codec, std::move(tl_factory));
 | 
| +      return sender_.RegisterSendCodec(&vp8_codec, numberOfCores,
 | 
| +                                       maxPayloadSize);
 | 
| +    }
 | 
|      return sender_.RegisterSendCodec(sendCodec, numberOfCores, maxPayloadSize);
 | 
|    }
 | 
|  
 | 
| @@ -126,7 +145,8 @@ class VideoCodingModuleImpl : public VideoCodingModule {
 | 
|    int32_t SetChannelParameters(uint32_t target_bitrate,  // bits/s.
 | 
|                                 uint8_t lossRate,
 | 
|                                 int64_t rtt) override {
 | 
| -    return sender_.SetChannelParameters(target_bitrate, lossRate, rtt);
 | 
| +    return sender_.SetChannelParameters(target_bitrate, lossRate, rtt,
 | 
| +                                        rate_allocator_.get());
 | 
|    }
 | 
|  
 | 
|    int32_t RegisterProtectionCallback(
 | 
| @@ -256,6 +276,7 @@ class VideoCodingModuleImpl : public VideoCodingModule {
 | 
|   private:
 | 
|    EncodedImageCallbackWrapper post_encode_callback_;
 | 
|    vcm::VideoSender sender_;
 | 
| +  std::unique_ptr<VideoBitrateAllocator> rate_allocator_;
 | 
|    vcm::VideoReceiver receiver_;
 | 
|  };
 | 
|  }  // namespace
 | 
| 
 |