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_;