From 070376697a4eea6d0c7f030b4553bcb9e2948474 Mon Sep 17 00:00:00 2001 From: Stefan Holmer Date: Wed, 13 May 2015 14:01:38 +0200 Subject: [PATCH] Fix issue where receive-side encoders are included in the padding bitrate. BUG=chromium:487528 R=mflodman@webrtc.org Review URL: https://webrtc-codereview.appspot.com/49959004 Cr-Commit-Position: refs/heads/master@{#9185} --- webrtc/video_engine/vie_channel_group.cc | 17 ++++++++++++----- webrtc/video_engine/vie_channel_group.h | 1 + 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/webrtc/video_engine/vie_channel_group.cc b/webrtc/video_engine/vie_channel_group.cc index db61a84729..9330c44631 100644 --- a/webrtc/video_engine/vie_channel_group.cc +++ b/webrtc/video_engine/vie_channel_group.cc @@ -195,6 +195,7 @@ ChannelGroup::~ChannelGroup() { 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 @@ bool ChannelGroup::CreateChannel(int channel_id, { 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 @@ ViEChannel* ChannelGroup::PopChannel(int channel_id) { 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; } @@ -472,7 +479,7 @@ void ChannelGroup::OnNetworkChanged(uint32_t target_bitrate_bps, 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 a20a541d6e..36bf683a9d 100644 --- a/webrtc/video_engine/vie_channel_group.h +++ b/webrtc/video_engine/vie_channel_group.h @@ -102,6 +102,7 @@ class ChannelGroup : public BitrateObserver { ChannelMap channel_map_; // Maps Channel id -> ViEEncoder. EncoderMap vie_encoder_map_; + EncoderMap send_encoders_; rtc::scoped_ptr encoder_map_cs_; const Config* config_;