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