Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(169)

Unified Diff: talk/media/webrtc/webrtcvoiceengine.cc

Issue 1291343002: Use C++11 loops in WebRtcVoiceMediaEngine/Channel. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: rebase Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « talk/media/webrtc/webrtcvoiceengine.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: talk/media/webrtc/webrtcvoiceengine.cc
diff --git a/talk/media/webrtc/webrtcvoiceengine.cc b/talk/media/webrtc/webrtcvoiceengine.cc
index 80208ba0c7617b5a895ead759b4276c995e8f6cc..391052b8d4d6f0b309586d609ffb97e9ede17438 100644
--- a/talk/media/webrtc/webrtcvoiceengine.cc
+++ b/talk/media/webrtc/webrtcvoiceengine.cc
@@ -214,11 +214,10 @@ static bool IsCodecMultiRate(const webrtc::CodecInst& codec) {
static bool FindCodec(const std::vector<AudioCodec>& codecs,
const AudioCodec& codec,
AudioCodec* found_codec) {
- for (std::vector<AudioCodec>::const_iterator it = codecs.begin();
- it != codecs.end(); ++it) {
- if (it->Matches(codec)) {
+ for (const AudioCodec& c : codecs) {
+ if (c.Matches(codec)) {
if (found_codec != NULL) {
- *found_codec = *it;
+ *found_codec = c;
}
return true;
}
@@ -556,9 +555,8 @@ bool WebRtcVoiceEngine::InitInternal() {
// Print our codec list again for the call diagnostic log
LOG(LS_INFO) << "WebRtc VoiceEngine codecs:";
- for (std::vector<AudioCodec>::const_iterator it = codecs_.begin();
- it != codecs_.end(); ++it) {
- LOG(LS_INFO) << ToString(*it);
+ for (const AudioCodec& codec : codecs_) {
+ LOG(LS_INFO) << ToString(codec);
}
// Disable the DTMF playout when a tone is sent.
@@ -948,9 +946,7 @@ bool WebRtcVoiceEngine::SetDevices(const Device* in_device,
}
// Must also pause all audio playback and capture.
- for (ChannelList::const_iterator i = channels_.begin();
- i != channels_.end(); ++i) {
- WebRtcVoiceMediaChannel *channel = *i;
+ for (WebRtcVoiceMediaChannel* channel : channels_) {
if (!channel->PausePlayout()) {
LOG(LS_WARNING) << "Failed to pause playout";
ret = false;
@@ -988,9 +984,7 @@ bool WebRtcVoiceEngine::SetDevices(const Device* in_device,
}
// Resume all audio playback and capture.
- for (ChannelList::const_iterator i = channels_.begin();
- i != channels_.end(); ++i) {
- WebRtcVoiceMediaChannel *channel = *i;
+ for (WebRtcVoiceMediaChannel* channel : channels_) {
if (!channel->ResumePlayout()) {
LOG(LS_WARNING) << "Failed to resume playout";
ret = false;
@@ -1328,11 +1322,10 @@ bool WebRtcVoiceEngine::FindChannelAndSsrc(
*channel = NULL;
*ssrc = 0;
// Find corresponding channel and ssrc
- for (ChannelList::const_iterator it = channels_.begin();
- it != channels_.end(); ++it) {
- DCHECK(*it != NULL);
- if ((*it)->FindSsrc(channel_num, ssrc)) {
- *channel = *it;
+ for (WebRtcVoiceMediaChannel* ch : channels_) {
+ DCHECK(ch != NULL);
+ if (ch->FindSsrc(channel_num, ssrc)) {
+ *channel = ch;
return true;
}
}
@@ -1349,14 +1342,13 @@ bool WebRtcVoiceEngine::FindChannelNumFromSsrc(
*channel_num = -1;
// Find corresponding channel for ssrc.
- for (ChannelList::const_iterator it = channels_.begin();
- it != channels_.end(); ++it) {
- DCHECK(*it != NULL);
+ for (const WebRtcVoiceMediaChannel* ch : channels_) {
+ DCHECK(ch != NULL);
if (direction & MPD_RX) {
- *channel_num = (*it)->GetReceiveChannelNum(ssrc);
+ *channel_num = ch->GetReceiveChannelNum(ssrc);
}
if (*channel_num == -1 && (direction & MPD_TX)) {
- *channel_num = (*it)->GetSendChannelNum(ssrc);
+ *channel_num = ch->GetSendChannelNum(ssrc);
}
if (*channel_num != -1) {
return true;
@@ -1860,16 +1852,15 @@ bool WebRtcVoiceMediaChannel::SetRecvCodecs(
// Find all new codecs. We allow adding new codecs but don't allow changing
// the payload type of codecs that is already configured since we might
// already be receiving packets with that payload type.
- for (std::vector<AudioCodec>::const_iterator it = codecs.begin();
- it != codecs.end(); ++it) {
+ for (const AudioCodec& codec : codecs) {
AudioCodec old_codec;
- if (FindCodec(recv_codecs_, *it, &old_codec)) {
- if (old_codec.id != it->id) {
- LOG(LS_ERROR) << it->name << " payload type changed.";
+ if (FindCodec(recv_codecs_, codec, &old_codec)) {
+ if (old_codec.id != codec.id) {
+ LOG(LS_ERROR) << codec.name << " payload type changed.";
return false;
}
} else {
- new_codecs.push_back(*it);
+ new_codecs.push_back(codec);
}
}
if (new_codecs.empty()) {
@@ -1884,50 +1875,15 @@ bool WebRtcVoiceMediaChannel::SetRecvCodecs(
PausePlayout();
}
- bool ret = true;
- for (std::vector<AudioCodec>::const_iterator it = new_codecs.begin();
- it != new_codecs.end() && ret; ++it) {
- webrtc::CodecInst voe_codec;
- if (engine()->FindWebRtcCodec(*it, &voe_codec)) {
- LOG(LS_INFO) << ToString(*it);
- voe_codec.pltype = it->id;
- if (default_receive_ssrc_ == 0) {
- // Set the receive codecs on the default channel explicitly if the
- // default channel is not used by |receive_channels_|, this happens in
- // conference mode or in non-conference mode when there is no playout
- // channel.
- // TODO(xians): Figure out how we use the default channel in conference
- // mode.
- if (engine()->voe()->codec()->SetRecPayloadType(
- voe_channel(), voe_codec) == -1) {
- LOG_RTCERR2(SetRecPayloadType, voe_channel(), ToString(voe_codec));
- ret = false;
- }
- }
-
- // Set the receive codecs on all receiving channels.
- for (ChannelMap::iterator it = receive_channels_.begin();
- it != receive_channels_.end() && ret; ++it) {
- if (engine()->voe()->codec()->SetRecPayloadType(
- it->second->channel(), voe_codec) == -1) {
- LOG_RTCERR2(SetRecPayloadType, it->second->channel(),
- ToString(voe_codec));
- ret = false;
- }
- }
- } else {
- LOG(LS_WARNING) << "Unknown codec " << ToString(*it);
- ret = false;
- }
- }
- if (ret) {
+ bool result = SetRecvCodecsInternal(new_codecs);
+ if (result) {
recv_codecs_ = codecs;
}
if (desired_playout_ && !playout_) {
ResumePlayout();
}
- return ret;
+ return result;
}
bool WebRtcVoiceMediaChannel::SetSendCodecs(
@@ -1950,17 +1906,16 @@ bool WebRtcVoiceMediaChannel::SetSendCodecs(
int opus_max_playback_rate = 0;
// Set send codec (the first non-telephone-event/CN codec)
- for (std::vector<AudioCodec>::const_iterator it = codecs.begin();
- it != codecs.end(); ++it) {
+ for (const AudioCodec& codec : codecs) {
// Ignore codecs we don't know about. The negotiation step should prevent
// this, but double-check to be sure.
webrtc::CodecInst voe_codec;
- if (!engine()->FindWebRtcCodec(*it, &voe_codec)) {
- LOG(LS_WARNING) << "Unknown codec " << ToString(*it);
+ if (!engine()->FindWebRtcCodec(codec, &voe_codec)) {
+ LOG(LS_WARNING) << "Unknown codec " << ToString(codec);
continue;
}
- if (IsCodec(*it, kDtmfCodecName) || IsCodec(*it, kCnCodecName)) {
+ if (IsCodec(codec, kDtmfCodecName) || IsCodec(codec, kCnCodecName)) {
// Skip telephone-event/CN codec, which will be handled later.
continue;
}
@@ -1969,33 +1924,33 @@ bool WebRtcVoiceMediaChannel::SetSendCodecs(
// Be sure to use the payload type requested by the remote side.
// "red", for RED audio, is a special case where the actual codec to be
// used is specified in params.
- if (IsCodec(*it, kRedCodecName)) {
+ if (IsCodec(codec, kRedCodecName)) {
// Parse out the RED parameters. If we fail, just ignore RED;
// we don't support all possible params/usage scenarios.
- if (!GetRedSendCodec(*it, codecs, &send_codec)) {
+ if (!GetRedSendCodec(codec, codecs, &send_codec)) {
continue;
}
// Enable redundant encoding of the specified codec. Treat any
// failure as a fatal internal error.
LOG(LS_INFO) << "Enabling RED on channel " << channel;
- if (engine()->voe()->rtp()->SetREDStatus(channel, true, it->id) == -1) {
- LOG_RTCERR3(SetREDStatus, channel, true, it->id);
+ if (engine()->voe()->rtp()->SetREDStatus(channel, true, codec.id) == -1) {
+ LOG_RTCERR3(SetREDStatus, channel, true, codec.id);
return false;
}
} else {
send_codec = voe_codec;
- nack_enabled = IsNackEnabled(*it);
+ nack_enabled = IsNackEnabled(codec);
// For Opus as the send codec, we are to determine inband FEC, maximum
// playback rate, and opus internal dtx.
- if (IsCodec(*it, kOpusCodecName)) {
- GetOpusConfig(*it, &send_codec, &enable_codec_fec,
+ if (IsCodec(codec, kOpusCodecName)) {
+ GetOpusConfig(codec, &send_codec, &enable_codec_fec,
&opus_max_playback_rate, &enable_opus_dtx);
}
// Set packet size if the AudioCodec param kCodecParamPTime is set.
int ptime_ms = 0;
- if (it->GetParam(kCodecParamPTime, &ptime_ms)) {
+ if (codec.GetParam(kCodecParamPTime, &ptime_ms)) {
if (!SetPTimeAsPacketSize(&send_codec, ptime_ms)) {
LOG(LS_WARNING) << "Failed to set packet size for codec "
<< send_codec.plname;
@@ -2070,30 +2025,29 @@ bool WebRtcVoiceMediaChannel::SetSendCodecs(
}
// Loop through the codecs list again to config the telephone-event/CN codec.
- for (std::vector<AudioCodec>::const_iterator it = codecs.begin();
- it != codecs.end(); ++it) {
+ for (const AudioCodec& codec : codecs) {
// Ignore codecs we don't know about. The negotiation step should prevent
// this, but double-check to be sure.
webrtc::CodecInst voe_codec;
- if (!engine()->FindWebRtcCodec(*it, &voe_codec)) {
- LOG(LS_WARNING) << "Unknown codec " << ToString(*it);
+ if (!engine()->FindWebRtcCodec(codec, &voe_codec)) {
+ LOG(LS_WARNING) << "Unknown codec " << ToString(codec);
continue;
}
// Find the DTMF telephone event "codec" and tell VoiceEngine channels
// about it.
- if (IsCodec(*it, kDtmfCodecName)) {
+ if (IsCodec(codec, kDtmfCodecName)) {
if (engine()->voe()->dtmf()->SetSendTelephoneEventPayloadType(
- channel, it->id) == -1) {
- LOG_RTCERR2(SetSendTelephoneEventPayloadType, channel, it->id);
+ channel, codec.id) == -1) {
+ LOG_RTCERR2(SetSendTelephoneEventPayloadType, channel, codec.id);
return false;
}
- } else if (IsCodec(*it, kCnCodecName)) {
+ } else if (IsCodec(codec, kCnCodecName)) {
// Turn voice activity detection/comfort noise on if supported.
// Set the wideband CN payload type appropriately.
// (narrowband always uses the static payload type 13).
webrtc::PayloadFrequencies cn_freq;
- switch (it->clockrate) {
+ switch (codec.clockrate) {
case 8000:
cn_freq = webrtc::kFreq8000Hz;
break;
@@ -2104,7 +2058,7 @@ bool WebRtcVoiceMediaChannel::SetSendCodecs(
cn_freq = webrtc::kFreq32000Hz;
break;
default:
- LOG(LS_WARNING) << "CN frequency " << it->clockrate
+ LOG(LS_WARNING) << "CN frequency " << codec.clockrate
<< " not supported.";
continue;
}
@@ -2112,8 +2066,8 @@ bool WebRtcVoiceMediaChannel::SetSendCodecs(
// The CN payload type for 8000 Hz clockrate is fixed at 13.
if (cn_freq != webrtc::kFreq8000Hz) {
if (engine()->voe()->codec()->SetSendCNPayloadType(
- channel, it->id, cn_freq) == -1) {
- LOG_RTCERR3(SetSendCNPayloadType, channel, it->id, cn_freq);
+ channel, codec.id, cn_freq) == -1) {
+ LOG_RTCERR3(SetSendCNPayloadType, channel, codec.id, cn_freq);
// TODO(ajm): This failure condition will be removed from VoE.
// Restore the return here when we update to a new enough webrtc.
//
@@ -2126,7 +2080,7 @@ bool WebRtcVoiceMediaChannel::SetSendCodecs(
}
// Only turn on VAD if we have a CN payload type that matches the
// clockrate for the codec we are going to use.
- if (it->clockrate == send_codec.plfreq && send_codec.channels != 2) {
+ if (codec.clockrate == send_codec.plfreq && send_codec.channels != 2) {
// TODO(minyue): If CN frequency == 48000 Hz is allowed, consider the
// interaction between VAD and Opus FEC.
LOG(LS_INFO) << "Enabling VAD";
@@ -2143,19 +2097,17 @@ bool WebRtcVoiceMediaChannel::SetSendCodecs(
bool WebRtcVoiceMediaChannel::SetSendCodecs(
const std::vector<AudioCodec>& codecs) {
dtmf_allowed_ = false;
- for (std::vector<AudioCodec>::const_iterator it = codecs.begin();
- it != codecs.end(); ++it) {
+ for (const AudioCodec& codec : codecs) {
// Find the DTMF telephone event "codec".
- if (IsCodec(*it, kDtmfCodecName)) {
+ if (IsCodec(codec, kDtmfCodecName)) {
dtmf_allowed_ = true;
}
}
// Cache the codecs in order to configure the channel created later.
send_codecs_ = codecs;
- for (ChannelMap::iterator iter = send_channels_.begin();
- iter != send_channels_.end(); ++iter) {
- if (!SetSendCodecs(iter->second->channel(), codecs)) {
+ for (const auto& ch : send_channels_) {
+ if (!SetSendCodecs(ch.second->channel(), codecs)) {
return false;
}
}
@@ -2167,9 +2119,8 @@ bool WebRtcVoiceMediaChannel::SetSendCodecs(
void WebRtcVoiceMediaChannel::SetNack(const ChannelMap& channels,
bool nack_enabled) {
- for (ChannelMap::const_iterator it = channels.begin();
- it != channels.end(); ++it) {
- SetNack(it->second->channel(), nack_enabled);
+ for (const auto& ch : channels) {
+ SetNack(ch.second->channel(), nack_enabled);
}
}
@@ -2187,9 +2138,8 @@ bool WebRtcVoiceMediaChannel::SetSendCodec(
const webrtc::CodecInst& send_codec) {
LOG(LS_INFO) << "Selected voice codec " << ToString(send_codec)
<< ", bitrate=" << send_codec.rate;
- for (ChannelMap::iterator iter = send_channels_.begin();
- iter != send_channels_.end(); ++iter) {
- if (!SetSendCodec(iter->second->channel(), send_codec))
+ for (const auto& ch : send_channels_) {
+ if (!SetSendCodec(ch.second->channel(), send_codec))
return false;
}
@@ -2228,10 +2178,8 @@ bool WebRtcVoiceMediaChannel::SetRecvRtpHeaderExtensions(
}
// Loop through all receive channels and enable/disable the extensions.
- for (ChannelMap::const_iterator channel_it = receive_channels_.begin();
- channel_it != receive_channels_.end(); ++channel_it) {
- if (!SetChannelRecvRtpHeaderExtensions(channel_it->second->channel(),
- extensions)) {
+ for (const auto& ch : receive_channels_) {
+ if (!SetChannelRecvRtpHeaderExtensions(ch.second->channel(), extensions)) {
return false;
}
}
@@ -2298,10 +2246,8 @@ bool WebRtcVoiceMediaChannel::SetSendRtpHeaderExtensions(
}
// Loop through all send channels and enable/disable the extensions.
- for (ChannelMap::const_iterator channel_it = send_channels_.begin();
- channel_it != send_channels_.end(); ++channel_it) {
- if (!SetChannelSendRtpHeaderExtensions(channel_it->second->channel(),
- extensions)) {
+ for (const auto& ch : send_channels_) {
+ if (!SetChannelSendRtpHeaderExtensions(ch.second->channel(), extensions)) {
return false;
}
}
@@ -2356,12 +2302,12 @@ bool WebRtcVoiceMediaChannel::ChangePlayout(bool playout) {
// Only toggle the default channel if we don't have any other channels.
result = SetPlayout(voe_channel(), playout);
}
- for (ChannelMap::iterator it = receive_channels_.begin();
- it != receive_channels_.end() && result; ++it) {
- if (!SetPlayout(it->second->channel(), playout)) {
+ for (const auto& ch : receive_channels_) {
+ if (!SetPlayout(ch.second->channel(), playout)) {
LOG(LS_ERROR) << "SetPlayout " << playout << " on channel "
- << it->second->channel() << " failed";
+ << ch.second->channel() << " failed";
result = false;
+ break;
}
}
@@ -2396,9 +2342,8 @@ bool WebRtcVoiceMediaChannel::ChangeSend(SendFlags send) {
engine()->SetOptionOverrides(options_);
// Change the settings on each send channel.
- for (ChannelMap::iterator iter = send_channels_.begin();
- iter != send_channels_.end(); ++iter) {
- if (!ChangeSend(iter->second->channel(), send))
+ for (const auto& ch : send_channels_) {
+ if (!ChangeSend(ch.second->channel(), send))
return false;
}
@@ -2472,9 +2417,8 @@ bool WebRtcVoiceMediaChannel::AddSendStream(const StreamParams& sp) {
}
bool default_channel_is_available = true;
- for (ChannelMap::const_iterator iter = send_channels_.begin();
- iter != send_channels_.end(); ++iter) {
- if (IsDefaultChannel(iter->second->channel())) {
+ for (const auto& ch : send_channels_) {
+ if (IsDefaultChannel(ch.second->channel())) {
default_channel_is_available = false;
break;
}
@@ -2514,13 +2458,12 @@ bool WebRtcVoiceMediaChannel::AddSendStream(const StreamParams& sp) {
// well. Receive channels have to have the same SSRC as the default channel in
// order to send receiver reports with this SSRC.
if (IsDefaultChannel(channel)) {
- for (ChannelMap::const_iterator it = receive_channels_.begin();
- it != receive_channels_.end(); ++it) {
+ for (const auto& ch : receive_channels_) {
// Only update the SSRC for non-default channels.
- if (!IsDefaultChannel(it->second->channel())) {
- if (engine()->voe()->rtp()->SetLocalSSRC(it->second->channel(),
+ if (!IsDefaultChannel(ch.second->channel())) {
+ if (engine()->voe()->rtp()->SetLocalSSRC(ch.second->channel(),
sp.first_ssrc()) != 0) {
- LOG_RTCERR2(SetLocalSSRC, it->second->channel(), sp.first_ssrc());
+ LOG_RTCERR2(SetLocalSSRC, ch.second->channel(), sp.first_ssrc());
return false;
}
}
@@ -2662,11 +2605,10 @@ bool WebRtcVoiceMediaChannel::ConfigureRecvChannel(int channel) {
// Use the same recv payload types as our default channel.
ResetRecvCodecs(channel);
if (!recv_codecs_.empty()) {
- for (std::vector<AudioCodec>::const_iterator it = recv_codecs_.begin();
- it != recv_codecs_.end(); ++it) {
+ for (const auto& codec : recv_codecs_) {
webrtc::CodecInst voe_codec;
- if (engine()->FindWebRtcCodec(*it, &voe_codec)) {
- voe_codec.pltype = it->id;
+ if (engine()->FindWebRtcCodec(codec, &voe_codec)) {
+ voe_codec.pltype = codec.id;
voe_codec.rate = 0; // Needed to make GetRecPayloadType work for ISAC
if (engine()->voe()->codec()->GetRecPayloadType(
voe_channel(), voe_codec) != -1) {
@@ -2811,11 +2753,10 @@ bool WebRtcVoiceMediaChannel::GetActiveStreams(
// In conference mode, the default channel should not be in
// |receive_channels_|.
actives->clear();
- for (ChannelMap::iterator it = receive_channels_.begin();
- it != receive_channels_.end(); ++it) {
- int level = GetOutputLevel(it->second->channel());
+ for (const auto& ch : receive_channels_) {
+ int level = GetOutputLevel(ch.second->channel());
if (level > 0) {
- actives->push_back(std::make_pair(it->first, level));
+ actives->push_back(std::make_pair(ch.first, level));
}
}
return true;
@@ -2824,9 +2765,8 @@ bool WebRtcVoiceMediaChannel::GetActiveStreams(
int WebRtcVoiceMediaChannel::GetOutputLevel() {
// return the highest output level of all streams
int highest = GetOutputLevel(voe_channel());
- for (ChannelMap::iterator it = receive_channels_.begin();
- it != receive_channels_.end(); ++it) {
- int level = GetOutputLevel(it->second->channel());
+ for (const auto& ch : receive_channels_) {
+ int level = GetOutputLevel(ch.second->channel());
highest = std::max(level, highest);
}
return highest;
@@ -2867,9 +2807,8 @@ bool WebRtcVoiceMediaChannel::SetOutputScaling(
// playout.
if (default_receive_ssrc_ == 0)
channels.push_back(voe_channel());
- for (ChannelMap::const_iterator it = receive_channels_.begin();
- it != receive_channels_.end(); ++it) {
- channels.push_back(it->second->channel());
+ for (const auto& ch : receive_channels_) {
+ channels.push_back(ch.second->channel());
}
} else { // Collect only the channel of the specified ssrc.
int channel = GetReceiveChannelNum(ssrc);
@@ -2887,22 +2826,21 @@ bool WebRtcVoiceMediaChannel::SetOutputScaling(
left /= scale;
right /= scale;
}
- for (std::vector<int>::const_iterator it = channels.begin();
- it != channels.end(); ++it) {
+ for (int ch_id : channels) {
if (-1 == engine()->voe()->volume()->SetChannelOutputVolumeScaling(
- *it, scale)) {
- LOG_RTCERR2(SetChannelOutputVolumeScaling, *it, scale);
+ ch_id, scale)) {
+ LOG_RTCERR2(SetChannelOutputVolumeScaling, ch_id, scale);
return false;
}
if (-1 == engine()->voe()->volume()->SetOutputVolumePan(
- *it, static_cast<float>(left), static_cast<float>(right))) {
- LOG_RTCERR3(SetOutputVolumePan, *it, left, right);
+ ch_id, static_cast<float>(left), static_cast<float>(right))) {
+ LOG_RTCERR3(SetOutputVolumePan, ch_id, left, right);
// Do not return if fails. SetOutputVolumePan is not available for all
// pltforms.
}
LOG(LS_INFO) << "SetOutputScaling to left=" << left * scale
<< " right=" << right * scale
- << " for channel " << *it << " and ssrc " << ssrc;
+ << " for channel " << ch_id << " and ssrc " << ssrc;
}
return true;
}
@@ -3003,9 +2941,8 @@ bool WebRtcVoiceMediaChannel::InsertDtmf(uint32 ssrc, int event,
int channel = -1;
if (ssrc == 0) {
bool default_channel_is_inuse = false;
- for (ChannelMap::const_iterator iter = send_channels_.begin();
- iter != send_channels_.end(); ++iter) {
- if (IsDefaultChannel(iter->second->channel())) {
+ for (const auto& ch : send_channels_) {
+ if (IsDefaultChannel(ch.second->channel())) {
default_channel_is_inuse = true;
break;
}
@@ -3121,15 +3058,14 @@ void WebRtcVoiceMediaChannel::OnRtcpReceived(
// SR may continue RR and any RR entry may correspond to any one of the send
// channels. So all RTCP packets must be forwarded all send channels. VoE
// will filter out RR internally.
- for (ChannelMap::iterator iter = send_channels_.begin();
- iter != send_channels_.end(); ++iter) {
+ for (const auto& ch : send_channels_) {
// Make sure not sending the same packet to default channel more than once.
- if (IsDefaultChannel(iter->second->channel()) &&
+ if (IsDefaultChannel(ch.second->channel()) &&
has_sent_to_default_channel)
continue;
engine()->voe()->network()->ReceivedRTCPPacket(
- iter->second->channel(), packet->data(), packet->size());
+ ch.second->channel(), packet->data(), packet->size());
}
}
@@ -3148,11 +3084,13 @@ bool WebRtcVoiceMediaChannel::MuteStream(uint32 ssrc, bool muted) {
// the mic channel is muted/unmuted. We can't do it today because there
// is no good way to know which stream is mapping to the mic channel.
bool all_muted = muted;
- for (ChannelMap::const_iterator iter = send_channels_.begin();
- iter != send_channels_.end() && all_muted; ++iter) {
- if (engine()->voe()->volume()->GetInputMute(iter->second->channel(),
+ for (const auto& ch : send_channels_) {
+ if (!all_muted) {
+ break;
+ }
+ if (engine()->voe()->volume()->GetInputMute(ch.second->channel(),
all_muted)) {
- LOG_RTCERR1(GetInputMute, iter->second->channel());
+ LOG_RTCERR1(GetInputMute, ch.second->channel());
return false;
}
}
@@ -3251,9 +3189,8 @@ bool WebRtcVoiceMediaChannel::GetStats(VoiceMediaInfo* info) {
webrtc::CodecInst codec;
unsigned int level;
- for (ChannelMap::const_iterator channel_iter = send_channels_.begin();
- channel_iter != send_channels_.end(); ++channel_iter) {
- const int channel = channel_iter->second->channel();
+ for (const auto& ch : send_channels_) {
+ const int channel = ch.second->channel();
// Fill in the sender info, based on what we know, and what the
// remote side told us it got from its RTCP report.
@@ -3282,19 +3219,17 @@ bool WebRtcVoiceMediaChannel::GetStats(VoiceMediaInfo* info) {
if (engine()->voe()->rtp()->GetRemoteRTCPReportBlocks(
channel, &receive_blocks) != -1 &&
engine()->voe()->codec()->GetSendCodec(channel, codec) != -1) {
- std::vector<webrtc::ReportBlock>::iterator iter;
- for (iter = receive_blocks.begin(); iter != receive_blocks.end();
- ++iter) {
+ for (const webrtc::ReportBlock& block : receive_blocks) {
// Lookup report for send ssrc only.
- if (iter->source_SSRC == sinfo.ssrc()) {
+ if (block.source_SSRC == sinfo.ssrc()) {
// Convert Q8 to floating point.
- sinfo.fraction_lost = static_cast<float>(iter->fraction_lost) / 256;
+ sinfo.fraction_lost = static_cast<float>(block.fraction_lost) / 256;
// Convert samples to milliseconds.
if (codec.plfreq / 1000 > 0) {
- sinfo.jitter_ms = iter->interarrival_jitter / (codec.plfreq / 1000);
+ sinfo.jitter_ms = block.interarrival_jitter / (codec.plfreq / 1000);
}
- sinfo.packets_lost = iter->cumulative_num_packets_lost;
- sinfo.ext_seqnum = iter->extended_highest_sequence_number;
+ sinfo.packets_lost = block.cumulative_num_packets_lost;
+ sinfo.ext_seqnum = block.extended_highest_sequence_number;
break;
}
}
@@ -3323,21 +3258,19 @@ bool WebRtcVoiceMediaChannel::GetStats(VoiceMediaInfo* info) {
// Build the list of receivers, one for each receiving channel, or 1 in
// a 1:1 call.
std::vector<int> channels;
- for (ChannelMap::const_iterator it = receive_channels_.begin();
- it != receive_channels_.end(); ++it) {
- channels.push_back(it->second->channel());
+ for (const auto& ch : receive_channels_) {
+ channels.push_back(ch.second->channel());
}
if (channels.empty()) {
channels.push_back(voe_channel());
}
// Get the SSRC and stats for each receiver, based on our own calculations.
- for (std::vector<int>::const_iterator it = channels.begin();
- it != channels.end(); ++it) {
+ for (int ch_id : channels) {
memset(&cs, 0, sizeof(cs));
- if (engine()->voe()->rtp()->GetRemoteSSRC(*it, ssrc) != -1 &&
- engine()->voe()->rtp()->GetRTCPStatistics(*it, cs) != -1 &&
- engine()->voe()->codec()->GetRecCodec(*it, codec) != -1) {
+ if (engine()->voe()->rtp()->GetRemoteSSRC(ch_id, ssrc) != -1 &&
+ engine()->voe()->rtp()->GetRTCPStatistics(ch_id, cs) != -1 &&
+ engine()->voe()->codec()->GetRecCodec(ch_id, codec) != -1) {
VoiceReceiverInfo rinfo;
rinfo.add_ssrc(ssrc);
rinfo.bytes_rcvd = cs.bytesReceived;
@@ -3360,7 +3293,7 @@ bool WebRtcVoiceMediaChannel::GetStats(VoiceMediaInfo* info) {
webrtc::NetworkStatistics ns;
if (engine()->voe()->neteq() &&
engine()->voe()->neteq()->GetNetworkStatistics(
- *it, ns) != -1) {
+ ch_id, ns) != -1) {
rinfo.jitter_buffer_ms = ns.currentBufferSize;
rinfo.jitter_buffer_preferred_ms = ns.preferredBufferSize;
rinfo.expand_rate =
@@ -3378,7 +3311,7 @@ bool WebRtcVoiceMediaChannel::GetStats(VoiceMediaInfo* info) {
webrtc::AudioDecodingCallStats ds;
if (engine()->voe()->neteq() &&
engine()->voe()->neteq()->GetDecodingCallStatistics(
- *it, &ds) != -1) {
+ ch_id, &ds) != -1) {
rinfo.decoding_calls_to_silence_generator =
ds.calls_to_silence_generator;
rinfo.decoding_calls_to_neteq = ds.calls_to_neteq;
@@ -3392,14 +3325,14 @@ bool WebRtcVoiceMediaChannel::GetStats(VoiceMediaInfo* info) {
int jitter_buffer_delay_ms = 0;
int playout_buffer_delay_ms = 0;
engine()->voe()->sync()->GetDelayEstimate(
- *it, &jitter_buffer_delay_ms, &playout_buffer_delay_ms);
+ ch_id, &jitter_buffer_delay_ms, &playout_buffer_delay_ms);
rinfo.delay_estimate_ms = jitter_buffer_delay_ms +
playout_buffer_delay_ms;
}
// Get speech level.
rinfo.audio_level = (engine()->voe()->volume()->
- GetSpeechOutputLevelFullRange(*it, level) != -1) ? level : -1;
+ GetSpeechOutputLevelFullRange(ch_id, level) != -1) ? level : -1;
info->receivers.push_back(rinfo);
}
}
@@ -3427,9 +3360,8 @@ bool WebRtcVoiceMediaChannel::FindSsrc(int channel_num, uint32* ssrc) {
return true;
} else {
// Check whether this is a sending channel.
- for (ChannelMap::const_iterator it = send_channels_.begin();
- it != send_channels_.end(); ++it) {
- if (it->second->channel() == channel_num) {
+ for (const auto& ch : send_channels_) {
+ if (ch.second->channel() == channel_num) {
// This is a sending channel.
uint32 local_ssrc = 0;
if (engine()->voe()->rtp()->GetLocalSSRC(
@@ -3441,10 +3373,9 @@ bool WebRtcVoiceMediaChannel::FindSsrc(int channel_num, uint32* ssrc) {
}
// Check whether this is a receiving channel.
- for (ChannelMap::const_iterator it = receive_channels_.begin();
- it != receive_channels_.end(); ++it) {
- if (it->second->channel() == channel_num) {
- *ssrc = it->first;
+ for (const auto& ch : receive_channels_) {
+ if (ch.second->channel() == channel_num) {
+ *ssrc = ch.first;
return true;
}
}
@@ -3468,15 +3399,15 @@ int WebRtcVoiceMediaChannel::GetOutputLevel(int channel) {
return (ret == 0) ? static_cast<int>(ulevel) : -1;
}
-int WebRtcVoiceMediaChannel::GetReceiveChannelNum(uint32 ssrc) {
- ChannelMap::iterator it = receive_channels_.find(ssrc);
+int WebRtcVoiceMediaChannel::GetReceiveChannelNum(uint32 ssrc) const {
+ ChannelMap::const_iterator it = receive_channels_.find(ssrc);
if (it != receive_channels_.end())
return it->second->channel();
return (ssrc == default_receive_ssrc_) ? voe_channel() : -1;
}
-int WebRtcVoiceMediaChannel::GetSendChannelNum(uint32 ssrc) {
- ChannelMap::iterator it = send_channels_.find(ssrc);
+int WebRtcVoiceMediaChannel::GetSendChannelNum(uint32 ssrc) const {
+ ChannelMap::const_iterator it = send_channels_.find(ssrc);
if (it != send_channels_.end())
return it->second->channel();
@@ -3523,22 +3454,19 @@ bool WebRtcVoiceMediaChannel::GetRedSendCodec(const AudioCodec& red_codec,
}
// Try to find red_pt in |codecs|.
- std::vector<AudioCodec>::const_iterator codec;
- for (codec = all_codecs.begin(); codec != all_codecs.end(); ++codec) {
- if (codec->id == red_pt)
- break;
- }
-
- // If we find the right codec, that will be the codec we pass to
- // SetSendCodec, with the desired payload type.
- if (codec != all_codecs.end() &&
- engine()->FindWebRtcCodec(*codec, send_codec)) {
- } else {
- LOG(LS_WARNING) << "RED params " << red_params << " are invalid.";
- return false;
+ for (const AudioCodec& codec : all_codecs) {
+ if (codec.id == red_pt) {
+ // If we find the right codec, that will be the codec we pass to
+ // SetSendCodec, with the desired payload type.
+ if (engine()->FindWebRtcCodec(codec, send_codec)) {
+ return true;
+ } else {
+ break;
+ }
+ }
}
-
- return true;
+ LOG(LS_WARNING) << "RED params " << red_params << " are invalid.";
+ return false;
}
bool WebRtcVoiceMediaChannel::EnableRtcp(int channel) {
@@ -3677,6 +3605,44 @@ void WebRtcVoiceMediaChannel::TryRemoveAudioRecvStream(uint32 ssrc) {
}
}
+bool WebRtcVoiceMediaChannel::SetRecvCodecsInternal(
+ const std::vector<AudioCodec>& new_codecs) {
+ for (const AudioCodec& codec : new_codecs) {
+ webrtc::CodecInst voe_codec;
+ if (engine()->FindWebRtcCodec(codec, &voe_codec)) {
+ LOG(LS_INFO) << ToString(codec);
+ voe_codec.pltype = codec.id;
+ if (default_receive_ssrc_ == 0) {
+ // Set the receive codecs on the default channel explicitly if the
+ // default channel is not used by |receive_channels_|, this happens in
+ // conference mode or in non-conference mode when there is no playout
+ // channel.
+ // TODO(xians): Figure out how we use the default channel in conference
+ // mode.
+ if (engine()->voe()->codec()->SetRecPayloadType(
+ voe_channel(), voe_codec) == -1) {
+ LOG_RTCERR2(SetRecPayloadType, voe_channel(), ToString(voe_codec));
+ return false;
+ }
+ }
+
+ // Set the receive codecs on all receiving channels.
+ for (const auto& ch : receive_channels_) {
+ if (engine()->voe()->codec()->SetRecPayloadType(
+ ch.second->channel(), voe_codec) == -1) {
+ LOG_RTCERR2(SetRecPayloadType, ch.second->channel(),
+ ToString(voe_codec));
+ return false;
+ }
+ }
+ } else {
+ LOG(LS_WARNING) << "Unknown codec " << ToString(codec);
+ return false;
+ }
+ }
+ return true;
+}
+
int WebRtcSoundclipStream::Read(void *buf, size_t len) {
size_t res = 0;
mem_.Read(buf, len, &res, NULL);
« no previous file with comments | « talk/media/webrtc/webrtcvoiceengine.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698