| Index: webrtc/common_types.h
 | 
| diff --git a/webrtc/common_types.h b/webrtc/common_types.h
 | 
| index d4f2f908304be732a9f492cd3234fe24139e88ed..a9b472c5b725ee95af555ecc2d5499723d5c09dc 100644
 | 
| --- a/webrtc/common_types.h
 | 
| +++ b/webrtc/common_types.h
 | 
| @@ -18,6 +18,7 @@
 | 
|  #include <string>
 | 
|  #include <vector>
 | 
|  
 | 
| +#include "webrtc/base/optional.h"
 | 
|  #include "webrtc/common_video/rotation.h"
 | 
|  #include "webrtc/typedefs.h"
 | 
|  
 | 
| @@ -522,7 +523,7 @@ struct VideoCodecVP8 {
 | 
|    bool automaticResizeOn;
 | 
|    bool frameDroppingOn;
 | 
|    int keyFrameInterval;
 | 
| -  const TemporalLayersFactory* tl_factory;
 | 
| +  TemporalLayersFactory* tl_factory;
 | 
|  };
 | 
|  
 | 
|  // VP9 specific.
 | 
| @@ -563,6 +564,10 @@ enum VideoCodecType {
 | 
|    kVideoCodecUnknown
 | 
|  };
 | 
|  
 | 
| +// Translates from name of codec to codec type and vice versa.
 | 
| +rtc::Optional<std::string> CodecTypeToPayloadName(VideoCodecType type);
 | 
| +rtc::Optional<VideoCodecType> PayloadNameToCodecType(const std::string& name);
 | 
| +
 | 
|  union VideoCodecUnion {
 | 
|    VideoCodecVP8 VP8;
 | 
|    VideoCodecVP9 VP9;
 | 
| @@ -638,6 +643,35 @@ class VideoCodec {
 | 
|    VideoCodecUnion codec_specific_;
 | 
|  };
 | 
|  
 | 
| +class BitrateAllocation {
 | 
| + public:
 | 
| +  static const size_t kMaxBitrateBps;
 | 
| +  BitrateAllocation();
 | 
| +
 | 
| +  bool SetBitrate(size_t spatial_index,
 | 
| +                  size_t temporal_index,
 | 
| +                  uint32_t bitrate_bps);
 | 
| +
 | 
| +  uint32_t GetBitrate(size_t spatial_index, size_t temporal_index) const;
 | 
| +
 | 
| +  // Get the sum of all the temporal layer for a specific spatial layer.
 | 
| +  uint32_t GetSpatialLayerSum(size_t spatial_index) const;
 | 
| +
 | 
| +  uint32_t get_sum_bps() const { return sum_; }  // Sum of all bitrates.
 | 
| +  uint32_t get_sum_kbps() const { return (sum_ + 500) / 1000; }
 | 
| +
 | 
| +  inline bool operator==(const BitrateAllocation& other) const {
 | 
| +    return memcmp(bitrates_, other.bitrates_, sizeof(bitrates_)) == 0;
 | 
| +  }
 | 
| +  inline bool operator!=(const BitrateAllocation& other) const {
 | 
| +    return !(*this == other);
 | 
| +  }
 | 
| +
 | 
| + private:
 | 
| +  uint32_t sum_;
 | 
| +  uint32_t bitrates_[kMaxSpatialLayers][kMaxTemporalStreams];
 | 
| +};
 | 
| +
 | 
|  // Bandwidth over-use detector options.  These are used to drive
 | 
|  // experimentation with bandwidth estimation parameters.
 | 
|  // See modules/remote_bitrate_estimator/overuse_detector.h
 | 
| 
 |