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

Side by Side Diff: webrtc/media/engine/webrtcvoiceengine.cc

Issue 2397573006: Using AudioOption to enable audio network adaptor. (Closed)
Patch Set: fixing a unittest Created 4 years, 1 month 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 unified diff | Download patch
« no previous file with comments | « webrtc/media/base/mediachannel.h ('k') | webrtc/media/engine/webrtcvoiceengine_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 auto it = std::unique(payload_types.begin(), payload_types.end()); 179 auto it = std::unique(payload_types.begin(), payload_types.end());
180 return it == payload_types.end(); 180 return it == payload_types.end();
181 } 181 }
182 182
183 // Return true if codec.params[feature] == "1", false otherwise. 183 // Return true if codec.params[feature] == "1", false otherwise.
184 bool IsCodecFeatureEnabled(const AudioCodec& codec, const char* feature) { 184 bool IsCodecFeatureEnabled(const AudioCodec& codec, const char* feature) {
185 int value; 185 int value;
186 return codec.GetParam(feature, &value) && value == 1; 186 return codec.GetParam(feature, &value) && value == 1;
187 } 187 }
188 188
189 rtc::Optional<std::string> GetAudioNetworkAdaptorConfig(
190 const AudioOptions& options) {
191 if (options.audio_network_adaptor && *options.audio_network_adaptor &&
192 options.audio_network_adaptor_config) {
193 // Turn on audio network adaptor only when |options_.audio_network_adaptor|
194 // equals true and |options_.audio_network_adaptor_config| has a value.
195 return options.audio_network_adaptor_config;
196 }
197 return rtc::Optional<std::string>();
198 }
199
200 // Returns integer parameter params[feature] if it is defined. Returns
201 // |default_value| otherwise.
202 int GetCodecFeatureInt(const AudioCodec& codec,
203 const char* feature,
204 int default_value) {
205 int value = 0;
206 if (codec.GetParam(feature, &value)) {
207 return value;
208 }
209 return default_value;
210 }
211
189 // Use params[kCodecParamMaxAverageBitrate] if it is defined, use codec.bitrate 212 // Use params[kCodecParamMaxAverageBitrate] if it is defined, use codec.bitrate
190 // otherwise. If the value (either from params or codec.bitrate) <=0, use the 213 // otherwise. If the value (either from params or codec.bitrate) <=0, use the
191 // default configuration. If the value is beyond feasible bit rate of Opus, 214 // default configuration. If the value is beyond feasible bit rate of Opus,
192 // clamp it. Returns the Opus bit rate for operation. 215 // clamp it. Returns the Opus bit rate for operation.
193 int GetOpusBitrate(const AudioCodec& codec, int max_playback_rate) { 216 int GetOpusBitrate(const AudioCodec& codec, int max_playback_rate) {
194 int bitrate = 0; 217 int bitrate = 0;
195 bool use_param = true; 218 bool use_param = true;
196 if (!codec.GetParam(kCodecParamMaxAverageBitrate, &bitrate)) { 219 if (!codec.GetParam(kCodecParamMaxAverageBitrate, &bitrate)) {
197 bitrate = codec.bitrate; 220 bitrate = codec.bitrate;
198 use_param = false; 221 use_param = false;
(...skipping 15 matching lines...) Expand all
214 std::string rate_source = 237 std::string rate_source =
215 use_param ? "Codec parameter \"maxaveragebitrate\"" : 238 use_param ? "Codec parameter \"maxaveragebitrate\"" :
216 "Supplied Opus bitrate"; 239 "Supplied Opus bitrate";
217 LOG(LS_WARNING) << rate_source 240 LOG(LS_WARNING) << rate_source
218 << " is invalid and is replaced by: " 241 << " is invalid and is replaced by: "
219 << bitrate; 242 << bitrate;
220 } 243 }
221 return bitrate; 244 return bitrate;
222 } 245 }
223 246
224 // Returns kOpusDefaultPlaybackRate if params[kCodecParamMaxPlaybackRate] is not 247 void GetOpusConfig(const AudioCodec& codec,
225 // defined. Returns the value of params[kCodecParamMaxPlaybackRate] otherwise. 248 webrtc::CodecInst* voe_codec,
226 int GetOpusMaxPlaybackRate(const AudioCodec& codec) { 249 bool* enable_codec_fec,
227 int value; 250 int* max_playback_rate,
228 if (codec.GetParam(kCodecParamMaxPlaybackRate, &value)) { 251 bool* enable_codec_dtx,
229 return value; 252 int* min_ptime_ms,
230 } 253 int* max_ptime_ms) {
231 return kOpusDefaultMaxPlaybackRate;
232 }
233
234 void GetOpusConfig(const AudioCodec& codec, webrtc::CodecInst* voe_codec,
235 bool* enable_codec_fec, int* max_playback_rate,
236 bool* enable_codec_dtx) {
237 *enable_codec_fec = IsCodecFeatureEnabled(codec, kCodecParamUseInbandFec); 254 *enable_codec_fec = IsCodecFeatureEnabled(codec, kCodecParamUseInbandFec);
238 *enable_codec_dtx = IsCodecFeatureEnabled(codec, kCodecParamUseDtx); 255 *enable_codec_dtx = IsCodecFeatureEnabled(codec, kCodecParamUseDtx);
239 *max_playback_rate = GetOpusMaxPlaybackRate(codec); 256 *max_playback_rate = GetCodecFeatureInt(codec, kCodecParamMaxPlaybackRate,
257 kOpusDefaultMaxPlaybackRate);
258 *max_ptime_ms =
259 GetCodecFeatureInt(codec, kCodecParamMaxPTime, kOpusDefaultMaxPTime);
260 *min_ptime_ms =
261 GetCodecFeatureInt(codec, kCodecParamMinPTime, kOpusDefaultMinPTime);
262 if (*max_ptime_ms < *min_ptime_ms) {
263 // If min ptime or max ptime defined by codec parameter is wrong, we use
264 // the default values.
265 *max_ptime_ms = kOpusDefaultMaxPTime;
266 *min_ptime_ms = kOpusDefaultMinPTime;
267 }
240 268
241 // If OPUS, change what we send according to the "stereo" codec 269 // If OPUS, change what we send according to the "stereo" codec
242 // parameter, and not the "channels" parameter. We set 270 // parameter, and not the "channels" parameter. We set
243 // voe_codec.channels to 2 if "stereo=1" and 1 otherwise. If 271 // voe_codec.channels to 2 if "stereo=1" and 1 otherwise. If
244 // the bitrate is not specified, i.e. is <= zero, we set it to the 272 // the bitrate is not specified, i.e. is <= zero, we set it to the
245 // appropriate default value for mono or stereo Opus. 273 // appropriate default value for mono or stereo Opus.
246
247 voe_codec->channels = IsCodecFeatureEnabled(codec, kCodecParamStereo) ? 2 : 1; 274 voe_codec->channels = IsCodecFeatureEnabled(codec, kCodecParamStereo) ? 2 : 1;
248 voe_codec->rate = GetOpusBitrate(codec, *max_playback_rate); 275 voe_codec->rate = GetOpusBitrate(codec, *max_playback_rate);
249 } 276 }
250 277
251 webrtc::AudioState::Config MakeAudioStateConfig(VoEWrapper* voe_wrapper) { 278 webrtc::AudioState::Config MakeAudioStateConfig(VoEWrapper* voe_wrapper) {
252 webrtc::AudioState::Config config; 279 webrtc::AudioState::Config config;
253 config.voice_engine = voe_wrapper->engine(); 280 config.voice_engine = voe_wrapper->engine();
254 return config; 281 return config;
255 } 282 }
256 283
(...skipping 633 matching lines...) Expand 10 before | Expand all | Expand 10 after
890 LOG_RTCERR1(SetRecordingSampleRate, *options.recording_sample_rate); 917 LOG_RTCERR1(SetRecordingSampleRate, *options.recording_sample_rate);
891 } 918 }
892 } 919 }
893 920
894 if (options.playout_sample_rate) { 921 if (options.playout_sample_rate) {
895 LOG(LS_INFO) << "Playout sample rate is " << *options.playout_sample_rate; 922 LOG(LS_INFO) << "Playout sample rate is " << *options.playout_sample_rate;
896 if (adm()->SetPlayoutSampleRate(*options.playout_sample_rate)) { 923 if (adm()->SetPlayoutSampleRate(*options.playout_sample_rate)) {
897 LOG_RTCERR1(SetPlayoutSampleRate, *options.playout_sample_rate); 924 LOG_RTCERR1(SetPlayoutSampleRate, *options.playout_sample_rate);
898 } 925 }
899 } 926 }
900
901 return true; 927 return true;
902 } 928 }
903 929
904 void WebRtcVoiceEngine::SetDefaultDevices() { 930 void WebRtcVoiceEngine::SetDefaultDevices() {
905 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); 931 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
906 #if !defined(WEBRTC_IOS) 932 #if !defined(WEBRTC_IOS)
907 int in_id = kDefaultAudioDeviceId; 933 int in_id = kDefaultAudioDeviceId;
908 int out_id = kDefaultAudioDeviceId; 934 int out_id = kDefaultAudioDeviceId;
909 LOG(LS_INFO) << "Setting microphone to (id=" << in_id 935 LOG(LS_INFO) << "Setting microphone to (id=" << in_id
910 << ") and speaker to (id=" << out_id << ")"; 936 << ") and speaker to (id=" << out_id << ")";
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
1144 : public AudioSource::Sink { 1170 : public AudioSource::Sink {
1145 public: 1171 public:
1146 WebRtcAudioSendStream( 1172 WebRtcAudioSendStream(
1147 int ch, 1173 int ch,
1148 webrtc::AudioTransport* voe_audio_transport, 1174 webrtc::AudioTransport* voe_audio_transport,
1149 uint32_t ssrc, 1175 uint32_t ssrc,
1150 const std::string& c_name, 1176 const std::string& c_name,
1151 const webrtc::AudioSendStream::Config::SendCodecSpec& send_codec_spec, 1177 const webrtc::AudioSendStream::Config::SendCodecSpec& send_codec_spec,
1152 const std::vector<webrtc::RtpExtension>& extensions, 1178 const std::vector<webrtc::RtpExtension>& extensions,
1153 int max_send_bitrate_bps, 1179 int max_send_bitrate_bps,
1180 const rtc::Optional<std::string>& audio_network_adaptor_config,
1154 webrtc::Call* call, 1181 webrtc::Call* call,
1155 webrtc::Transport* send_transport) 1182 webrtc::Transport* send_transport)
1156 : voe_audio_transport_(voe_audio_transport), 1183 : voe_audio_transport_(voe_audio_transport),
1157 call_(call), 1184 call_(call),
1158 config_(send_transport), 1185 config_(send_transport),
1159 max_send_bitrate_bps_(max_send_bitrate_bps), 1186 max_send_bitrate_bps_(max_send_bitrate_bps),
1160 rtp_parameters_(CreateRtpParametersWithOneEncoding()) { 1187 rtp_parameters_(CreateRtpParametersWithOneEncoding()) {
1161 RTC_DCHECK_GE(ch, 0); 1188 RTC_DCHECK_GE(ch, 0);
1162 // TODO(solenberg): Once we're not using FakeWebRtcVoiceEngine anymore: 1189 // TODO(solenberg): Once we're not using FakeWebRtcVoiceEngine anymore:
1163 // RTC_DCHECK(voe_audio_transport); 1190 // RTC_DCHECK(voe_audio_transport);
1164 RTC_DCHECK(call); 1191 RTC_DCHECK(call);
1165 config_.rtp.ssrc = ssrc; 1192 config_.rtp.ssrc = ssrc;
1166 config_.rtp.c_name = c_name; 1193 config_.rtp.c_name = c_name;
1167 config_.voe_channel_id = ch; 1194 config_.voe_channel_id = ch;
1168 config_.rtp.extensions = extensions; 1195 config_.rtp.extensions = extensions;
1196 config_.audio_network_adaptor_config = audio_network_adaptor_config;
1169 RecreateAudioSendStream(send_codec_spec); 1197 RecreateAudioSendStream(send_codec_spec);
1170 } 1198 }
1171 1199
1172 ~WebRtcAudioSendStream() override { 1200 ~WebRtcAudioSendStream() override {
1173 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); 1201 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
1174 ClearSource(); 1202 ClearSource();
1175 call_->DestroyAudioSendStream(stream_); 1203 call_->DestroyAudioSendStream(stream_);
1176 } 1204 }
1177 1205
1178 void RecreateAudioSendStream( 1206 void RecreateAudioSendStream(
1179 const webrtc::AudioSendStream::Config::SendCodecSpec& send_codec_spec) { 1207 const webrtc::AudioSendStream::Config::SendCodecSpec& send_codec_spec) {
1180 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); 1208 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
1181 send_codec_spec_ = send_codec_spec; 1209 send_codec_spec_ = send_codec_spec;
1182 config_.rtp.nack.rtp_history_ms = 1210 config_.rtp.nack.rtp_history_ms =
1183 send_codec_spec_.nack_enabled ? kNackRtpHistoryMs : 0; 1211 send_codec_spec_.nack_enabled ? kNackRtpHistoryMs : 0;
1184 config_.send_codec_spec = send_codec_spec_; 1212 config_.send_codec_spec = send_codec_spec_;
1185
1186 auto send_rate = ComputeSendBitrate( 1213 auto send_rate = ComputeSendBitrate(
1187 max_send_bitrate_bps_, rtp_parameters_.encodings[0].max_bitrate_bps, 1214 max_send_bitrate_bps_, rtp_parameters_.encodings[0].max_bitrate_bps,
1188 send_codec_spec.codec_inst); 1215 send_codec_spec.codec_inst);
1189 if (send_rate) { 1216 if (send_rate) {
1190 // Apply a send rate that abides by |max_send_bitrate_bps_| and 1217 // Apply a send rate that abides by |max_send_bitrate_bps_| and
1191 // |rtp_parameters_| when possible. Otherwise use the codec rate. 1218 // |rtp_parameters_| when possible. Otherwise use the codec rate.
1192 config_.send_codec_spec.codec_inst.rate = *send_rate; 1219 config_.send_codec_spec.codec_inst.rate = *send_rate;
1193 } 1220 }
1194 RecreateAudioSendStream(); 1221 RecreateAudioSendStream();
1195 } 1222 }
1196 1223
1197 void RecreateAudioSendStream( 1224 void RecreateAudioSendStream(
1198 const std::vector<webrtc::RtpExtension>& extensions) { 1225 const std::vector<webrtc::RtpExtension>& extensions) {
1199 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); 1226 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
1200 config_.rtp.extensions = extensions; 1227 config_.rtp.extensions = extensions;
1201 RecreateAudioSendStream(); 1228 RecreateAudioSendStream();
1202 } 1229 }
1203 1230
1231 void RecreateAudioSendStream(
1232 const rtc::Optional<std::string>& audio_network_adaptor_config) {
1233 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
1234 if (config_.audio_network_adaptor_config == audio_network_adaptor_config) {
1235 return;
1236 }
1237 config_.audio_network_adaptor_config = audio_network_adaptor_config;
1238 RecreateAudioSendStream();
1239 }
1240
1204 bool SetMaxSendBitrate(int bps) { 1241 bool SetMaxSendBitrate(int bps) {
1205 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); 1242 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
1206 auto send_rate = 1243 auto send_rate =
1207 ComputeSendBitrate(bps, rtp_parameters_.encodings[0].max_bitrate_bps, 1244 ComputeSendBitrate(bps, rtp_parameters_.encodings[0].max_bitrate_bps,
1208 send_codec_spec_.codec_inst); 1245 send_codec_spec_.codec_inst);
1209 if (!send_rate) { 1246 if (!send_rate) {
1210 return false; 1247 return false;
1211 } 1248 }
1212 1249
1213 max_send_bitrate_bps_ = bps; 1250 max_send_bitrate_bps_ = bps;
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after
1715 1752
1716 // We retain all of the existing options, and apply the given ones 1753 // We retain all of the existing options, and apply the given ones
1717 // on top. This means there is no way to "clear" options such that 1754 // on top. This means there is no way to "clear" options such that
1718 // they go back to the engine default. 1755 // they go back to the engine default.
1719 options_.SetAll(options); 1756 options_.SetAll(options);
1720 if (!engine()->ApplyOptions(options_)) { 1757 if (!engine()->ApplyOptions(options_)) {
1721 LOG(LS_WARNING) << 1758 LOG(LS_WARNING) <<
1722 "Failed to apply engine options during channel SetOptions."; 1759 "Failed to apply engine options during channel SetOptions.";
1723 return false; 1760 return false;
1724 } 1761 }
1762
1763 rtc::Optional<std::string> audio_network_adatptor_config =
1764 GetAudioNetworkAdaptorConfig(options_);
1765 for (auto& it : send_streams_) {
1766 it.second->RecreateAudioSendStream(audio_network_adatptor_config);
1767 }
1768
1725 LOG(LS_INFO) << "Set voice channel options. Current options: " 1769 LOG(LS_INFO) << "Set voice channel options. Current options: "
1726 << options_.ToString(); 1770 << options_.ToString();
1727 return true; 1771 return true;
1728 } 1772 }
1729 1773
1730 bool WebRtcVoiceMediaChannel::SetRecvCodecs( 1774 bool WebRtcVoiceMediaChannel::SetRecvCodecs(
1731 const std::vector<AudioCodec>& codecs) { 1775 const std::vector<AudioCodec>& codecs) {
1732 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); 1776 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
1733 1777
1734 // Set the payload types to be used for incoming media. 1778 // Set the payload types to be used for incoming media.
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
1828 1872
1829 send_codec_spec.transport_cc_enabled = HasTransportCc(*codec); 1873 send_codec_spec.transport_cc_enabled = HasTransportCc(*codec);
1830 send_codec_spec.nack_enabled = HasNack(*codec); 1874 send_codec_spec.nack_enabled = HasNack(*codec);
1831 1875
1832 // For Opus as the send codec, we are to determine inband FEC, maximum 1876 // For Opus as the send codec, we are to determine inband FEC, maximum
1833 // playback rate, and opus internal dtx. 1877 // playback rate, and opus internal dtx.
1834 if (IsCodec(*codec, kOpusCodecName)) { 1878 if (IsCodec(*codec, kOpusCodecName)) {
1835 GetOpusConfig(*codec, &send_codec_spec.codec_inst, 1879 GetOpusConfig(*codec, &send_codec_spec.codec_inst,
1836 &send_codec_spec.enable_codec_fec, 1880 &send_codec_spec.enable_codec_fec,
1837 &send_codec_spec.opus_max_playback_rate, 1881 &send_codec_spec.opus_max_playback_rate,
1838 &send_codec_spec.enable_opus_dtx); 1882 &send_codec_spec.enable_opus_dtx,
1883 &send_codec_spec.min_ptime_ms,
1884 &send_codec_spec.max_ptime_ms);
1839 } 1885 }
1840 1886
1841 // Set packet size if the AudioCodec param kCodecParamPTime is set. 1887 // Set packet size if the AudioCodec param kCodecParamPTime is set.
1842 int ptime_ms = 0; 1888 int ptime_ms = 0;
1843 if (codec->GetParam(kCodecParamPTime, &ptime_ms)) { 1889 if (codec->GetParam(kCodecParamPTime, &ptime_ms)) {
1844 if (!WebRtcVoiceCodecs::SetPTimeAsPacketSize( 1890 if (!WebRtcVoiceCodecs::SetPTimeAsPacketSize(
1845 &send_codec_spec.codec_inst, ptime_ms)) { 1891 &send_codec_spec.codec_inst, ptime_ms)) {
1846 LOG(LS_WARNING) << "Failed to set packet size for codec " 1892 LOG(LS_WARNING) << "Failed to set packet size for codec "
1847 << send_codec_spec.codec_inst.plname; 1893 << send_codec_spec.codec_inst.plname;
1848 return false; 1894 return false;
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
2004 int channel = CreateVoEChannel(); 2050 int channel = CreateVoEChannel();
2005 if (channel == -1) { 2051 if (channel == -1) {
2006 return false; 2052 return false;
2007 } 2053 }
2008 2054
2009 // Save the channel to send_streams_, so that RemoveSendStream() can still 2055 // Save the channel to send_streams_, so that RemoveSendStream() can still
2010 // delete the channel in case failure happens below. 2056 // delete the channel in case failure happens below.
2011 webrtc::AudioTransport* audio_transport = 2057 webrtc::AudioTransport* audio_transport =
2012 engine()->voe()->base()->audio_transport(); 2058 engine()->voe()->base()->audio_transport();
2013 2059
2060 rtc::Optional<std::string> audio_network_adaptor_config =
2061 GetAudioNetworkAdaptorConfig(options_);
2014 WebRtcAudioSendStream* stream = new WebRtcAudioSendStream( 2062 WebRtcAudioSendStream* stream = new WebRtcAudioSendStream(
2015 channel, audio_transport, ssrc, sp.cname, send_codec_spec_, 2063 channel, audio_transport, ssrc, sp.cname, send_codec_spec_,
2016 send_rtp_extensions_, max_send_bitrate_bps_, call_, this); 2064 send_rtp_extensions_, max_send_bitrate_bps_, audio_network_adaptor_config,
2065 call_, this);
2017 send_streams_.insert(std::make_pair(ssrc, stream)); 2066 send_streams_.insert(std::make_pair(ssrc, stream));
2018 2067
2019 // At this point the stream's local SSRC has been updated. If it is the first 2068 // At this point the stream's local SSRC has been updated. If it is the first
2020 // send stream, make sure that all the receive streams are updated with the 2069 // send stream, make sure that all the receive streams are updated with the
2021 // same SSRC in order to send receiver reports. 2070 // same SSRC in order to send receiver reports.
2022 if (send_streams_.size() == 1) { 2071 if (send_streams_.size() == 1) {
2023 receiver_reports_ssrc_ = ssrc; 2072 receiver_reports_ssrc_ = ssrc;
2024 for (const auto& kv : recv_streams_) { 2073 for (const auto& kv : recv_streams_) {
2025 // TODO(solenberg): Allow applications to set the RTCP SSRC of receive 2074 // TODO(solenberg): Allow applications to set the RTCP SSRC of receive
2026 // streams instead, so we can avoid recreating the streams here. 2075 // streams instead, so we can avoid recreating the streams here.
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after
2512 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); 2561 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
2513 const auto it = send_streams_.find(ssrc); 2562 const auto it = send_streams_.find(ssrc);
2514 if (it != send_streams_.end()) { 2563 if (it != send_streams_.end()) {
2515 return it->second->channel(); 2564 return it->second->channel();
2516 } 2565 }
2517 return -1; 2566 return -1;
2518 } 2567 }
2519 } // namespace cricket 2568 } // namespace cricket
2520 2569
2521 #endif // HAVE_WEBRTC_VOICE 2570 #endif // HAVE_WEBRTC_VOICE
OLDNEW
« no previous file with comments | « webrtc/media/base/mediachannel.h ('k') | webrtc/media/engine/webrtcvoiceengine_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698