Fix issue where receive-side encoders are included in the padding bitrate.

BUG=chromium:487528
R=tnakamura@webrtc.org, mflodman@webrtc.org
TBR=mflodman@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9185}
(cherry picked from commit 070376697a4eea6d0c7f030b4553bcb9e2948474)

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

Cr-Commit-Position: refs/branch-heads/43@{#11}
Cr-Branched-From: 7351f4689caae2e53b3ee54874546e8aab769d22-refs/heads/master@{#8926}
diff --git a/webrtc/video_engine/vie_channel_group.cc b/webrtc/video_engine/vie_channel_group.cc
index 3508d6a..f951d7f 100644
--- a/webrtc/video_engine/vie_channel_group.cc
+++ b/webrtc/video_engine/vie_channel_group.cc
@@ -195,6 +195,7 @@
   DCHECK(channel_map_.empty());
   DCHECK(!remb_->InUse());
   DCHECK(vie_encoder_map_.empty());
+  DCHECK(send_encoders_.empty());
 }
 
 bool ChannelGroup::CreateSendChannel(int channel_id,
@@ -273,6 +274,8 @@
   {
     CriticalSectionScoped lock(encoder_map_cs_.get());
     vie_encoder_map_[channel_id] = vie_encoder;
+    if (sender)
+      send_encoders_[channel_id] = vie_encoder;
   }
 
   return true;
@@ -368,10 +371,14 @@
 
 ViEEncoder* ChannelGroup::PopEncoder(int channel_id) {
   CriticalSectionScoped lock(encoder_map_cs_.get());
-  EncoderMap::iterator e_it = vie_encoder_map_.find(channel_id);
-  DCHECK(e_it != vie_encoder_map_.end());
-  ViEEncoder* encoder = e_it->second;
-  vie_encoder_map_.erase(e_it);
+  auto it = vie_encoder_map_.find(channel_id);
+  DCHECK(it != vie_encoder_map_.end());
+  ViEEncoder* encoder = it->second;
+  vie_encoder_map_.erase(it);
+
+  it = send_encoders_.find(channel_id);
+  if (it != send_encoders_.end())
+    send_encoders_.erase(it);
 
   return encoder;
 }
@@ -473,7 +480,7 @@
   int pad_up_to_bitrate_bps = 0;
   {
     CriticalSectionScoped lock(encoder_map_cs_.get());
-    for (const auto& encoder : vie_encoder_map_) {
+    for (const auto& encoder : send_encoders_) {
       pad_up_to_bitrate_bps +=
           encoder.second->GetPaddingNeededBps(target_bitrate_bps);
     }
diff --git a/webrtc/video_engine/vie_channel_group.h b/webrtc/video_engine/vie_channel_group.h
index 546da69..ea1c345 100644
--- a/webrtc/video_engine/vie_channel_group.h
+++ b/webrtc/video_engine/vie_channel_group.h
@@ -105,6 +105,7 @@
   ChannelMap channel_map_;
   // Maps Channel id -> ViEEncoder.
   EncoderMap vie_encoder_map_;
+  EncoderMap send_encoders_;
   rtc::scoped_ptr<CriticalSectionWrapper> encoder_map_cs_;
 
   const Config* config_;