| Index: webrtc/call/call.cc
|
| diff --git a/webrtc/call/call.cc b/webrtc/call/call.cc
|
| index 39357d57df70ef3b3303ba37b093c4f476b376e2..11445067271071fb367d270a028354af0e7e6755 100644
|
| --- a/webrtc/call/call.cc
|
| +++ b/webrtc/call/call.cc
|
| @@ -15,6 +15,8 @@
|
|
|
| #include "webrtc/audio/audio_receive_stream.h"
|
| #include "webrtc/audio/audio_send_stream.h"
|
| +#include "webrtc/audio/audio_state.h"
|
| +#include "webrtc/audio/scoped_voe_interface.h"
|
| #include "webrtc/base/checks.h"
|
| #include "webrtc/base/scoped_ptr.h"
|
| #include "webrtc/base/thread_annotations.h"
|
| @@ -94,6 +96,15 @@ class Call : public webrtc::Call, public PacketReceiver {
|
| void ConfigureSync(const std::string& sync_group)
|
| EXCLUSIVE_LOCKS_REQUIRED(receive_crit_);
|
|
|
| + VoiceEngine* voice_engine() {
|
| + internal::AudioState* audio_state =
|
| + static_cast<internal::AudioState*>(config_.audio_state.get());
|
| + if (audio_state)
|
| + return audio_state->voice_engine();
|
| + else
|
| + return nullptr;
|
| + }
|
| +
|
| const int num_cpu_cores_;
|
| const rtc::scoped_ptr<ProcessThread> module_process_thread_;
|
| const rtc::scoped_ptr<CallStats> call_stats_;
|
| @@ -123,7 +134,6 @@ class Call : public webrtc::Call, public PacketReceiver {
|
| VideoSendStream::RtpStateMap suspended_video_send_ssrcs_;
|
|
|
| RtcEventLog* event_log_ = nullptr;
|
| - VoECodec* voe_codec_ = nullptr;
|
|
|
| RTC_DISALLOW_COPY_AND_ASSIGN(Call);
|
| };
|
| @@ -152,12 +162,9 @@ Call::Call(const Call::Config& config)
|
| RTC_DCHECK_GE(config.bitrate_config.max_bitrate_bps,
|
| config.bitrate_config.start_bitrate_bps);
|
| }
|
| - if (config.voice_engine) {
|
| - // Keep a reference to VoECodec, so we're sure the VoiceEngine lives for the
|
| - // duration of the call.
|
| - voe_codec_ = VoECodec::GetInterface(config.voice_engine);
|
| - if (voe_codec_)
|
| - event_log_ = voe_codec_->GetEventLog();
|
| + if (config.audio_state.get()) {
|
| + ScopedVoEInterface<VoECodec> voe_codec(voice_engine());
|
| + event_log_ = voe_codec->GetEventLog();
|
| }
|
|
|
| Trace::CreateTrace();
|
| @@ -184,9 +191,6 @@ Call::~Call() {
|
| module_process_thread_->DeRegisterModule(call_stats_.get());
|
| module_process_thread_->Stop();
|
| Trace::ReturnTrace();
|
| -
|
| - if (voe_codec_)
|
| - voe_codec_->Release();
|
| }
|
|
|
| PacketReceiver* Call::Receiver() {
|
| @@ -201,7 +205,7 @@ webrtc::AudioSendStream* Call::CreateAudioSendStream(
|
| TRACE_EVENT0("webrtc", "Call::CreateAudioSendStream");
|
| RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
|
| AudioSendStream* send_stream =
|
| - new AudioSendStream(config, config_.voice_engine);
|
| + new AudioSendStream(config, config_.audio_state);
|
| if (!network_enabled_)
|
| send_stream->SignalNetworkState(kNetworkDown);
|
| {
|
| @@ -237,7 +241,7 @@ webrtc::AudioReceiveStream* Call::CreateAudioReceiveStream(
|
| RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
|
| AudioReceiveStream* receive_stream = new AudioReceiveStream(
|
| congestion_controller_->GetRemoteBitrateEstimator(false), config,
|
| - config_.voice_engine);
|
| + config_.audio_state);
|
| {
|
| WriteLockScoped write_lock(*receive_crit_);
|
| RTC_DCHECK(audio_receive_ssrcs_.find(config.rtp.remote_ssrc) ==
|
| @@ -340,7 +344,7 @@ webrtc::VideoReceiveStream* Call::CreateVideoReceiveStream(
|
| RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
|
| VideoReceiveStream* receive_stream = new VideoReceiveStream(
|
| num_cpu_cores_, congestion_controller_.get(), config,
|
| - config_.voice_engine, module_process_thread_.get(), call_stats_.get());
|
| + voice_engine(), module_process_thread_.get(), call_stats_.get());
|
|
|
| WriteLockScoped write_lock(*receive_crit_);
|
| RTC_DCHECK(video_receive_ssrcs_.find(config.rtp.remote_ssrc) ==
|
| @@ -470,7 +474,7 @@ void Call::OnSentPacket(const rtc::SentPacket& sent_packet) {
|
|
|
| void Call::ConfigureSync(const std::string& sync_group) {
|
| // Set sync only if there was no previous one.
|
| - if (config_.voice_engine == nullptr || sync_group.empty())
|
| + if (voice_engine() == nullptr || sync_group.empty())
|
| return;
|
|
|
| AudioReceiveStream* sync_audio_stream = nullptr;
|
| @@ -508,10 +512,10 @@ void Call::ConfigureSync(const std::string& sync_group) {
|
| }
|
| // Only sync the first A/V pair within this sync group.
|
| if (sync_audio_stream != nullptr && num_synced_streams == 1) {
|
| - video_stream->SetSyncChannel(config_.voice_engine,
|
| + video_stream->SetSyncChannel(voice_engine(),
|
| sync_audio_stream->config().voe_channel_id);
|
| } else {
|
| - video_stream->SetSyncChannel(config_.voice_engine, -1);
|
| + video_stream->SetSyncChannel(voice_engine(), -1);
|
| }
|
| }
|
| }
|
|
|