Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 93 | 93 |
| 94 public: | 94 public: |
| 95 WebRtcVoiceEngine(); | 95 WebRtcVoiceEngine(); |
| 96 // Dependency injection for testing. | 96 // Dependency injection for testing. |
| 97 WebRtcVoiceEngine(VoEWrapper* voe_wrapper, VoETraceWrapper* tracing); | 97 WebRtcVoiceEngine(VoEWrapper* voe_wrapper, VoETraceWrapper* tracing); |
| 98 ~WebRtcVoiceEngine(); | 98 ~WebRtcVoiceEngine(); |
| 99 bool Init(rtc::Thread* worker_thread); | 99 bool Init(rtc::Thread* worker_thread); |
| 100 void Terminate(); | 100 void Terminate(); |
| 101 | 101 |
| 102 int GetCapabilities(); | 102 int GetCapabilities(); |
| 103 VoiceMediaChannel* CreateChannel(const AudioOptions& options); | 103 webrtc::VoiceEngine* GetVoE() { return voe()->engine(); } |
| 104 VoiceMediaChannel* CreateChannel(webrtc::Call* call, | |
| 105 const AudioOptions& options); | |
| 104 | 106 |
| 105 AudioOptions GetOptions() const { return options_; } | 107 AudioOptions GetOptions() const { return options_; } |
| 106 bool SetOptions(const AudioOptions& options); | 108 bool SetOptions(const AudioOptions& options); |
| 107 bool SetDelayOffset(int offset); | 109 bool SetDelayOffset(int offset); |
| 108 bool SetDevices(const Device* in_device, const Device* out_device); | 110 bool SetDevices(const Device* in_device, const Device* out_device); |
| 109 bool GetOutputVolume(int* level); | 111 bool GetOutputVolume(int* level); |
| 110 bool SetOutputVolume(int level); | 112 bool SetOutputVolume(int level); |
| 111 int GetInputLevel(); | 113 int GetInputLevel(); |
| 112 bool SetLocalMonitor(bool enable); | 114 bool SetLocalMonitor(bool enable); |
| 113 | 115 |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 273 Settable<bool> extended_filter_aec_; | 275 Settable<bool> extended_filter_aec_; |
| 274 Settable<bool> delay_agnostic_aec_; | 276 Settable<bool> delay_agnostic_aec_; |
| 275 Settable<bool> experimental_ns_; | 277 Settable<bool> experimental_ns_; |
| 276 }; | 278 }; |
| 277 | 279 |
| 278 // WebRtcVoiceMediaChannel is an implementation of VoiceMediaChannel that uses | 280 // WebRtcVoiceMediaChannel is an implementation of VoiceMediaChannel that uses |
| 279 // WebRtc Voice Engine. | 281 // WebRtc Voice Engine. |
| 280 class WebRtcVoiceMediaChannel : public VoiceMediaChannel, | 282 class WebRtcVoiceMediaChannel : public VoiceMediaChannel, |
| 281 public webrtc::Transport { | 283 public webrtc::Transport { |
| 282 public: | 284 public: |
| 283 explicit WebRtcVoiceMediaChannel(WebRtcVoiceEngine *engine); | 285 explicit WebRtcVoiceMediaChannel(WebRtcVoiceEngine* engine, |
| 286 webrtc::Call* call); | |
| 284 ~WebRtcVoiceMediaChannel() override; | 287 ~WebRtcVoiceMediaChannel() override; |
| 285 | 288 |
| 286 int voe_channel() const { return voe_channel_; } | 289 int voe_channel() const { return voe_channel_; } |
| 287 bool valid() const { return voe_channel_ != -1; } | 290 bool valid() const { return voe_channel_ != -1; } |
| 288 | 291 |
| 289 bool SetSendParameters(const AudioSendParameters& params) override; | 292 bool SetSendParameters(const AudioSendParameters& params) override; |
| 290 bool SetRecvParameters(const AudioRecvParameters& params) override; | 293 bool SetRecvParameters(const AudioRecvParameters& params) override; |
| 291 bool SetOptions(const AudioOptions& options) override; | 294 bool SetOptions(const AudioOptions& options) override; |
| 292 bool GetOptions(AudioOptions* options) const override { | 295 bool GetOptions(AudioOptions* options) const override { |
| 293 *options = options_; | 296 *options = options_; |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 352 return VoiceMediaChannel::SendRtcp(&packet) ? static_cast<int>(len) : -1; | 355 return VoiceMediaChannel::SendRtcp(&packet) ? static_cast<int>(len) : -1; |
| 353 } | 356 } |
| 354 | 357 |
| 355 bool FindSsrc(int channel_num, uint32* ssrc); | 358 bool FindSsrc(int channel_num, uint32* ssrc); |
| 356 void OnError(uint32 ssrc, int error); | 359 void OnError(uint32 ssrc, int error); |
| 357 | 360 |
| 358 bool sending() const { return send_ != SEND_NOTHING; } | 361 bool sending() const { return send_ != SEND_NOTHING; } |
| 359 int GetReceiveChannelNum(uint32 ssrc) const; | 362 int GetReceiveChannelNum(uint32 ssrc) const; |
| 360 int GetSendChannelNum(uint32 ssrc) const; | 363 int GetSendChannelNum(uint32 ssrc) const; |
| 361 | 364 |
| 362 void SetCall(webrtc::Call* call); | |
| 363 | |
| 364 private: | 365 private: |
| 365 WebRtcVoiceEngine* engine() { return engine_; } | 366 WebRtcVoiceEngine* engine() { return engine_; } |
| 366 int GetLastEngineError() { return engine()->GetLastEngineError(); } | 367 int GetLastEngineError() { return engine()->GetLastEngineError(); } |
| 367 int GetOutputLevel(int channel); | 368 int GetOutputLevel(int channel); |
| 368 bool GetRedSendCodec(const AudioCodec& red_codec, | 369 bool GetRedSendCodec(const AudioCodec& red_codec, |
| 369 const std::vector<AudioCodec>& all_codecs, | 370 const std::vector<AudioCodec>& all_codecs, |
| 370 webrtc::CodecInst* send_codec); | 371 webrtc::CodecInst* send_codec); |
| 371 bool EnableRtcp(int channel); | 372 bool EnableRtcp(int channel); |
| 372 bool ResetRecvCodecs(int channel); | 373 bool ResetRecvCodecs(int channel); |
| 373 bool SetPlayout(int channel, bool playout); | 374 bool SetPlayout(int channel, bool playout); |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 396 return options_.conference_mode.GetWithDefaultIfUnset(false); | 397 return options_.conference_mode.GetWithDefaultIfUnset(false); |
| 397 } | 398 } |
| 398 bool IsDefaultChannel(int channel_id) const { | 399 bool IsDefaultChannel(int channel_id) const { |
| 399 return channel_id == voe_channel(); | 400 return channel_id == voe_channel(); |
| 400 } | 401 } |
| 401 bool SetSendCodecs(int channel, const std::vector<AudioCodec>& codecs); | 402 bool SetSendCodecs(int channel, const std::vector<AudioCodec>& codecs); |
| 402 bool SetSendBitrateInternal(int bps); | 403 bool SetSendBitrateInternal(int bps); |
| 403 | 404 |
| 404 bool SetHeaderExtension(ExtensionSetterFunction setter, int channel_id, | 405 bool SetHeaderExtension(ExtensionSetterFunction setter, int channel_id, |
| 405 const RtpHeaderExtension* extension); | 406 const RtpHeaderExtension* extension); |
| 406 void TryAddAudioRecvStream(uint32 ssrc); | 407 void RecreateAudioReceiveStreams(); |
| 407 void TryRemoveAudioRecvStream(uint32 ssrc); | 408 void AddAudioReceiveStream(uint32 ssrc); |
| 409 void RemoveAudioReceiveStream(uint32 ssrc); | |
| 408 bool SetRecvCodecsInternal(const std::vector<AudioCodec>& new_codecs); | 410 bool SetRecvCodecsInternal(const std::vector<AudioCodec>& new_codecs); |
| 409 | 411 |
| 410 bool SetChannelRecvRtpHeaderExtensions( | 412 bool SetChannelRecvRtpHeaderExtensions( |
| 411 int channel_id, | 413 int channel_id, |
| 412 const std::vector<RtpHeaderExtension>& extensions); | 414 const std::vector<RtpHeaderExtension>& extensions); |
| 413 bool SetChannelSendRtpHeaderExtensions( | 415 bool SetChannelSendRtpHeaderExtensions( |
| 414 int channel_id, | 416 int channel_id, |
| 415 const std::vector<RtpHeaderExtension>& extensions); | 417 const std::vector<RtpHeaderExtension>& extensions); |
| 416 | 418 |
| 417 rtc::ThreadChecker thread_checker_; | 419 rtc::ThreadChecker thread_checker_; |
| 418 | 420 |
| 419 WebRtcVoiceEngine* engine_; | 421 WebRtcVoiceEngine* const engine_; |
|
pthatcher1
2015/09/09 07:27:43
Why
WebRtcVoiceEngine const engine_;
Instead of
pbos-webrtc
2015/09/09 07:58:46
Pointer is const and doesn't change, but the objec
the sun
2015/09/09 08:24:51
The first one declares that the *pointer* is const
| |
| 420 const int voe_channel_; | 422 const int voe_channel_; |
| 421 rtc::scoped_ptr<WebRtcSoundclipStream> ringback_tone_; | 423 rtc::scoped_ptr<WebRtcSoundclipStream> ringback_tone_; |
| 422 std::set<int> ringback_channels_; // channels playing ringback | 424 std::set<int> ringback_channels_; // channels playing ringback |
| 423 std::vector<AudioCodec> recv_codecs_; | 425 std::vector<AudioCodec> recv_codecs_; |
| 424 std::vector<AudioCodec> send_codecs_; | 426 std::vector<AudioCodec> send_codecs_; |
| 425 rtc::scoped_ptr<webrtc::CodecInst> send_codec_; | 427 rtc::scoped_ptr<webrtc::CodecInst> send_codec_; |
| 426 bool send_bitrate_setting_; | 428 bool send_bitrate_setting_; |
| 427 int send_bitrate_bps_; | 429 int send_bitrate_bps_; |
| 428 AudioOptions options_; | 430 AudioOptions options_; |
| 429 bool dtmf_allowed_; | 431 bool dtmf_allowed_; |
| 430 bool desired_playout_; | 432 bool desired_playout_; |
| 431 bool nack_enabled_; | 433 bool nack_enabled_; |
| 432 bool playout_; | 434 bool playout_; |
| 433 bool typing_noise_detected_; | 435 bool typing_noise_detected_; |
| 434 SendFlags desired_send_; | 436 SendFlags desired_send_; |
| 435 SendFlags send_; | 437 SendFlags send_; |
| 436 webrtc::Call* call_; | 438 webrtc::Call* const call_; |
| 437 | 439 |
| 438 // send_channels_ contains the channels which are being used for sending. | 440 // send_channels_ contains the channels which are being used for sending. |
| 439 // When the default channel (voe_channel) is used for sending, it is | 441 // When the default channel (voe_channel) is used for sending, it is |
| 440 // contained in send_channels_, otherwise not. | 442 // contained in send_channels_, otherwise not. |
| 441 ChannelMap send_channels_; | 443 ChannelMap send_channels_; |
| 442 std::vector<RtpHeaderExtension> send_extensions_; | 444 std::vector<RtpHeaderExtension> send_extensions_; |
| 443 uint32 default_receive_ssrc_; | 445 uint32 default_receive_ssrc_; |
| 444 // Note the default channel (voe_channel()) can reside in both | 446 // Note the default channel (voe_channel()) can reside in both |
| 445 // receive_channels_ and send_channels_ in non-conference mode and in that | 447 // receive_channels_ and send_channels_ in non-conference mode and in that |
| 446 // case it will only be there if a non-zero default_receive_ssrc_ is set. | 448 // case it will only be there if a non-zero default_receive_ssrc_ is set. |
| 447 ChannelMap receive_channels_; // for multiple sources | 449 ChannelMap receive_channels_; // for multiple sources |
| 448 std::map<uint32, webrtc::AudioReceiveStream*> receive_streams_; | 450 std::map<uint32, webrtc::AudioReceiveStream*> receive_streams_; |
| 449 std::map<uint32, StreamParams> receive_stream_params_; | 451 std::map<uint32, StreamParams> receive_stream_params_; |
| 450 // receive_channels_ can be read from WebRtc callback thread. Access from | 452 // receive_channels_ can be read from WebRtc callback thread. Access from |
| 451 // the WebRtc thread must be synchronized with edits on the worker thread. | 453 // the WebRtc thread must be synchronized with edits on the worker thread. |
| 452 // Reads on the worker thread are ok. | 454 // Reads on the worker thread are ok. |
| 453 std::vector<RtpHeaderExtension> receive_extensions_; | 455 std::vector<RtpHeaderExtension> receive_extensions_; |
| 454 std::vector<webrtc::RtpExtension> recv_rtp_extensions_; | 456 std::vector<webrtc::RtpExtension> recv_rtp_extensions_; |
| 455 | 457 |
| 456 // Do not lock this on the VoE media processor thread; potential for deadlock | 458 // Do not lock this on the VoE media processor thread; potential for deadlock |
| 457 // exists. | 459 // exists. |
| 458 mutable rtc::CriticalSection receive_channels_cs_; | 460 mutable rtc::CriticalSection receive_channels_cs_; |
| 459 }; | 461 }; |
| 460 | 462 |
| 461 } // namespace cricket | 463 } // namespace cricket |
| 462 | 464 |
| 463 #endif // TALK_MEDIA_WEBRTCVOICEENGINE_H_ | 465 #endif // TALK_MEDIA_WEBRTCVOICEENGINE_H_ |
| OLD | NEW |