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

Side by Side Diff: talk/media/webrtc/webrtcvoiceengine.h

Issue 1315903004: ABANDONED: Remove the default receive channel in WVoE. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@mediacontroller
Patch Set: test Created 5 years, 2 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * libjingle 2 * libjingle
3 * Copyright 2004 Google Inc. 3 * Copyright 2004 Google Inc.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met: 6 * modification, are permitted provided that the following conditions are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright notice, 8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice, 10 * 2. Redistributions in binary form must reproduce the above copyright notice,
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 // WebRtcVoiceMediaChannel is an implementation of VoiceMediaChannel that uses 176 // WebRtcVoiceMediaChannel is an implementation of VoiceMediaChannel that uses
177 // WebRtc Voice Engine. 177 // WebRtc Voice Engine.
178 class WebRtcVoiceMediaChannel : public VoiceMediaChannel, 178 class WebRtcVoiceMediaChannel : public VoiceMediaChannel,
179 public webrtc::Transport { 179 public webrtc::Transport {
180 public: 180 public:
181 WebRtcVoiceMediaChannel(WebRtcVoiceEngine* engine, 181 WebRtcVoiceMediaChannel(WebRtcVoiceEngine* engine,
182 const AudioOptions& options, 182 const AudioOptions& options,
183 webrtc::Call* call); 183 webrtc::Call* call);
184 ~WebRtcVoiceMediaChannel() override; 184 ~WebRtcVoiceMediaChannel() override;
185 185
186 int voe_channel() const { return voe_channel_; } 186 int voe_channel() const { return voe_channel_; }
pthatcher1 2015/10/02 02:33:31 Can you rename this default_channel_id() or defaul
the sun 2015/10/02 11:34:20 Done.
187 bool valid() const { return voe_channel_ != -1; } 187 bool valid() const { return voe_channel_ != -1; }
188 const AudioOptions& options() const { return options_; } 188 const AudioOptions& options() const { return options_; }
189 189
190 bool SetSendParameters(const AudioSendParameters& params) override; 190 bool SetSendParameters(const AudioSendParameters& params) override;
191 bool SetRecvParameters(const AudioRecvParameters& params) override; 191 bool SetRecvParameters(const AudioRecvParameters& params) override;
192 bool SetPlayout(bool playout) override; 192 bool SetPlayout(bool playout) override;
193 bool PausePlayout(); 193 bool PausePlayout();
194 bool ResumePlayout(); 194 bool ResumePlayout();
195 bool SetSend(SendFlags send) override; 195 bool SetSend(SendFlags send) override;
196 bool PauseSend(); 196 bool PauseSend();
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 void OnError(uint32 ssrc, int error); 239 void OnError(uint32 ssrc, int error);
240 240
241 int GetReceiveChannelNum(uint32 ssrc) const; 241 int GetReceiveChannelNum(uint32 ssrc) const;
242 int GetSendChannelNum(uint32 ssrc) const; 242 int GetSendChannelNum(uint32 ssrc) const;
243 243
244 private: 244 private:
245 bool SetSendCodecs(const std::vector<AudioCodec>& codecs); 245 bool SetSendCodecs(const std::vector<AudioCodec>& codecs);
246 bool SetSendRtpHeaderExtensions( 246 bool SetSendRtpHeaderExtensions(
247 const std::vector<RtpHeaderExtension>& extensions); 247 const std::vector<RtpHeaderExtension>& extensions);
248 bool SetOptions(const AudioOptions& options); 248 bool SetOptions(const AudioOptions& options);
249 bool SetRecvOptions(int channel_id);
249 bool SetMaxSendBandwidth(int bps); 250 bool SetMaxSendBandwidth(int bps);
250 bool SetRecvCodecs(const std::vector<AudioCodec>& codecs); 251 bool SetRecvCodecs(const std::vector<AudioCodec>& codecs);
251 bool SetRecvRtpHeaderExtensions( 252 bool SetRecvRtpHeaderExtensions(
252 const std::vector<RtpHeaderExtension>& extensions); 253 const std::vector<RtpHeaderExtension>& extensions);
253 bool SetLocalRenderer(uint32 ssrc, AudioRenderer* renderer); 254 bool SetLocalRenderer(uint32 ssrc, AudioRenderer* renderer);
254 bool MuteStream(uint32 ssrc, bool mute); 255 bool MuteStream(uint32 ssrc, bool mute);
255 256
256 WebRtcVoiceEngine* engine() { return engine_; } 257 WebRtcVoiceEngine* engine() { return engine_; }
257 int GetLastEngineError() { return engine()->GetLastEngineError(); } 258 int GetLastEngineError() { return engine()->GetLastEngineError(); }
258 int GetOutputLevel(int channel); 259 int GetOutputLevel(int channel);
259 bool GetRedSendCodec(const AudioCodec& red_codec, 260 bool GetRedSendCodec(const AudioCodec& red_codec,
260 const std::vector<AudioCodec>& all_codecs, 261 const std::vector<AudioCodec>& all_codecs,
261 webrtc::CodecInst* send_codec); 262 webrtc::CodecInst* send_codec);
262 bool EnableRtcp(int channel); 263 bool EnableRtcp(int channel);
263 bool ResetRecvCodecs(int channel);
264 bool SetPlayout(int channel, bool playout); 264 bool SetPlayout(int channel, bool playout);
265 static uint32 ParseSsrc(const void* data, size_t len, bool rtcp);
266 static Error WebRtcErrorToChannelError(int err_code); 265 static Error WebRtcErrorToChannelError(int err_code);
267 266
268 class WebRtcVoiceChannelRenderer; 267 class WebRtcVoiceChannelRenderer;
269 // Map of ssrc to WebRtcVoiceChannelRenderer object. A new object of 268 // Map of ssrc to WebRtcVoiceChannelRenderer object. A new object of
270 // WebRtcVoiceChannelRenderer will be created for every new stream and 269 // WebRtcVoiceChannelRenderer will be created for every new stream and
271 // will be destroyed when the stream goes away. 270 // will be destroyed when the stream goes away.
272 typedef std::map<uint32, WebRtcVoiceChannelRenderer*> ChannelMap; 271 typedef std::map<uint32, WebRtcVoiceChannelRenderer*> ChannelMap;
273 typedef int (webrtc::VoERTP_RTCP::* ExtensionSetterFunction)(int, bool, 272 typedef int (webrtc::VoERTP_RTCP::* ExtensionSetterFunction)(int, bool,
274 unsigned char); 273 unsigned char);
275 274
276 void SetNack(int channel, bool nack_enabled); 275 void SetNack(int channel, bool nack_enabled);
277 void SetNack(const ChannelMap& channels, bool nack_enabled); 276 void SetNack(const ChannelMap& channels, bool nack_enabled);
278 bool SetSendCodec(const webrtc::CodecInst& send_codec); 277 bool SetSendCodec(const webrtc::CodecInst& send_codec);
279 bool SetSendCodec(int channel, const webrtc::CodecInst& send_codec); 278 bool SetSendCodec(int channel, const webrtc::CodecInst& send_codec);
280 bool ChangePlayout(bool playout); 279 bool ChangePlayout(bool playout);
281 bool ChangeSend(SendFlags send); 280 bool ChangeSend(SendFlags send);
282 bool ChangeSend(int channel, SendFlags send); 281 bool ChangeSend(int channel, SendFlags send);
283 void ConfigureSendChannel(int channel); 282 void ConfigureSendChannel(int channel);
284 bool ConfigureRecvChannel(int channel); 283 bool ConfigureRecvChannel(int channel);
285 bool DeleteChannel(int channel); 284 bool DeleteChannel(int channel);
286 bool InConferenceMode() const {
287 return options_.conference_mode.GetWithDefaultIfUnset(false);
288 }
289 bool IsDefaultChannel(int channel_id) const { 285 bool IsDefaultChannel(int channel_id) const {
290 return channel_id == voe_channel(); 286 return channel_id == voe_channel();
291 } 287 }
292 bool SetSendCodecs(int channel, const std::vector<AudioCodec>& codecs); 288 bool SetSendCodecs(int channel, const std::vector<AudioCodec>& codecs);
293 bool SetSendBitrateInternal(int bps); 289 bool SetSendBitrateInternal(int bps);
294 290
295 bool SetHeaderExtension(ExtensionSetterFunction setter, int channel_id, 291 bool SetHeaderExtension(ExtensionSetterFunction setter, int channel_id,
296 const RtpHeaderExtension* extension); 292 const RtpHeaderExtension* extension);
297 void RecreateAudioReceiveStreams(); 293 void RecreateAudioReceiveStreams();
298 void AddAudioReceiveStream(uint32 ssrc); 294 void AddAudioReceiveStream(uint32 ssrc);
299 void RemoveAudioReceiveStream(uint32 ssrc); 295 void RemoveAudioReceiveStream(uint32 ssrc);
300 bool SetRecvCodecsInternal(const std::vector<AudioCodec>& new_codecs); 296 bool SetRecvCodecsInternal(const std::vector<AudioCodec>& new_codecs);
301 297
302 bool SetChannelRecvRtpHeaderExtensions( 298 bool SetChannelRecvRtpHeaderExtensions(
303 int channel_id, 299 int channel_id,
304 const std::vector<RtpHeaderExtension>& extensions); 300 const std::vector<RtpHeaderExtension>& extensions);
305 bool SetChannelSendRtpHeaderExtensions( 301 bool SetChannelSendRtpHeaderExtensions(
306 int channel_id, 302 int channel_id,
307 const std::vector<RtpHeaderExtension>& extensions); 303 const std::vector<RtpHeaderExtension>& extensions);
308 304
309 rtc::ThreadChecker thread_checker_; 305 rtc::ThreadChecker thread_checker_;
310 306
311 WebRtcVoiceEngine* const engine_; 307 WebRtcVoiceEngine* const engine_;
312 const int voe_channel_; 308 const int voe_channel_;
pthatcher1 2015/10/02 02:33:31 Can you rename this default_channel_id_ or default
the sun 2015/10/02 11:34:20 Done.
313 std::vector<AudioCodec> recv_codecs_; 309 std::vector<AudioCodec> recv_codecs_;
314 std::vector<AudioCodec> send_codecs_; 310 std::vector<AudioCodec> send_codecs_;
315 rtc::scoped_ptr<webrtc::CodecInst> send_codec_; 311 rtc::scoped_ptr<webrtc::CodecInst> send_codec_;
316 bool send_bitrate_setting_; 312 bool send_bitrate_setting_;
317 int send_bitrate_bps_; 313 int send_bitrate_bps_;
318 AudioOptions options_; 314 AudioOptions options_;
319 bool dtmf_allowed_; 315 bool dtmf_allowed_;
320 bool desired_playout_; 316 bool desired_playout_;
321 bool nack_enabled_; 317 bool nack_enabled_;
322 bool playout_; 318 bool playout_;
323 bool typing_noise_detected_; 319 bool typing_noise_detected_;
324 SendFlags desired_send_; 320 SendFlags desired_send_;
325 SendFlags send_; 321 SendFlags send_;
326 webrtc::Call* const call_; 322 webrtc::Call* const call_;
327 323
324 uint32_t default_recv_ssrc_;
325 int default_recv_channel_id_;
pthatcher1 2015/10/02 02:33:31 Why do we store the default_recv_channel_id_ when
the sun 2015/10/02 11:34:20 You're right; I was using it as a flag anyway.
326
328 // send_channels_ contains the channels which are being used for sending. 327 // send_channels_ contains the channels which are being used for sending.
329 // When the default channel (voe_channel) is used for sending, it is 328 // When the default channel (voe_channel) is used for sending, it is
330 // contained in send_channels_, otherwise not. 329 // contained in send_channels_, otherwise not.
331 ChannelMap send_channels_; 330 ChannelMap send_channels_;
332 std::vector<RtpHeaderExtension> send_extensions_; 331 std::vector<RtpHeaderExtension> send_extensions_;
333 uint32 default_receive_ssrc_; 332 ChannelMap receive_channels_;
334 // Note the default channel (voe_channel()) can reside in both
335 // receive_channels_ and send_channels_ in non-conference mode and in that
336 // case it will only be there if a non-zero default_receive_ssrc_ is set.
337 ChannelMap receive_channels_; // for multiple sources
338 std::map<uint32, webrtc::AudioReceiveStream*> receive_streams_; 333 std::map<uint32, webrtc::AudioReceiveStream*> receive_streams_;
339 std::map<uint32, StreamParams> receive_stream_params_; 334 std::map<uint32, StreamParams> receive_stream_params_;
340 // receive_channels_ can be read from WebRtc callback thread. Access from 335 // receive_channels_ can be read from WebRtc callback thread. Access from
341 // the WebRtc thread must be synchronized with edits on the worker thread. 336 // the WebRtc thread must be synchronized with edits on the worker thread.
342 // Reads on the worker thread are ok. 337 // Reads on the worker thread are ok.
343 std::vector<RtpHeaderExtension> receive_extensions_; 338 std::vector<RtpHeaderExtension> receive_extensions_;
344 std::vector<webrtc::RtpExtension> recv_rtp_extensions_; 339 std::vector<webrtc::RtpExtension> recv_rtp_extensions_;
345
346 // Do not lock this on the VoE media processor thread; potential for deadlock
347 // exists.
348 mutable rtc::CriticalSection receive_channels_cs_;
349 }; 340 };
350 341
351 } // namespace cricket 342 } // namespace cricket
352 343
353 #endif // TALK_MEDIA_WEBRTCVOICEENGINE_H_ 344 #endif // TALK_MEDIA_WEBRTCVOICEENGINE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698