Index: webrtc/audio/audio_state.cc |
diff --git a/webrtc/audio/audio_state.cc b/webrtc/audio/audio_state.cc |
index e63f97af2d4fb9fd3123f37532f0553382715984..8d6c84b4997132d0b2b6413f35c68c903ef69f94 100644 |
--- a/webrtc/audio/audio_state.cc |
+++ b/webrtc/audio/audio_state.cc |
@@ -13,16 +13,33 @@ |
#include "webrtc/base/atomicops.h" |
#include "webrtc/base/checks.h" |
#include "webrtc/base/logging.h" |
+#include "webrtc/modules/audio_device/include/audio_device.h" |
+#include "webrtc/modules/audio_mixer/audio_mixer_impl.h" |
#include "webrtc/voice_engine/include/voe_errors.h" |
namespace webrtc { |
namespace internal { |
AudioState::AudioState(const AudioState::Config& config) |
- : config_(config), voe_base_(config.voice_engine) { |
+ : config_(config), |
+ voe_base_(config.voice_engine), |
+ mixer_(AudioMixerImpl::Create()) { |
aleloi
2016/10/24 11:59:14
Alternative: pass a unique_ptr<AudioMixer> and mov
ossu
2016/10/25 14:13:33
I do believe integration testing is supposed to be
the sun
2016/10/27 10:06:45
We want the mixer to be pluggable to allow alterna
aleloi
2016/11/01 15:17:35
Changes: A mixer instance is passed in the config
|
process_thread_checker_.DetachFromThread(); |
// Only one AudioState should be created per VoiceEngine. |
RTC_CHECK(voe_base_->RegisterVoiceEngineObserver(*this) != -1); |
+ |
+ // If mixer construction failed, there is no point to continue. |
+ RTC_CHECK(mixer_); |
the sun
2016/10/27 10:06:46
This should be a DCHECK instead. Program should ha
aleloi
2016/11/01 15:17:35
Done.
|
+ |
+ auto* const device = audio_device(); |
+ if (device) { |
the sun
2016/10/27 10:06:45
DCHECK that instead.
aleloi
2016/11/01 15:17:35
Done.
|
+ audio_transport_proxy_.reset(new AudioTransportProxy( |
+ voe_base_->audio_transport(), voe_base_->audio_processing(), mixer())); |
+ device->RegisterAudioCallback(nullptr); |
the sun
2016/10/27 10:06:45
Doesn't look like this is necessary?
aleloi
2016/11/01 15:17:35
I had a vague memory that it broke something. Webr
aleloi
2016/11/01 15:17:35
It is in Chrome.
WebRtcAudioDeviceImpl::RegisterAu
|
+ device->RegisterAudioCallback(audio_transport_proxy_.get()); |
+ } else { |
+ LOG(LS_ERROR) << "No audio device for sound playout."; |
+ } |
aleloi
2016/10/24 11:59:14
A few details, some of which should maybe be made
ossu
2016/10/25 14:13:33
When will this happen? Only in tests?
the sun
2016/10/27 10:06:46
If possible to avoid these special cases by updati
aleloi
2016/11/01 15:17:35
@ossu, yes only in tests. I've updated all tests t
|
} |
AudioState::~AudioState() { |
@@ -35,6 +52,18 @@ VoiceEngine* AudioState::voice_engine() { |
return config_.voice_engine; |
} |
+AudioDeviceModule* AudioState::audio_device() { |
+ RTC_DCHECK(thread_checker_.CalledOnValidThread()); |
+ if (config_.audio_device_module) { |
the sun
2016/10/27 10:06:45
This field appears unused right now. Just stick to
aleloi
2016/11/01 15:17:35
IIRC, that broke some test. I'll take a look at it
|
+ return config_.audio_device_module; |
+ } |
+ return voe_base_->audio_device_module(); |
+} |
+ |
+rtc::scoped_refptr<AudioMixer> AudioState::mixer() const { |
ossu
2016/10/25 14:13:33
Is the AudioMixer supposed to be able to outlive A
the sun
2016/10/27 10:06:45
Ultimately, it will possibly be supplied by an API
|
+ return mixer_; |
+} |
+ |
bool AudioState::typing_noise_detected() const { |
RTC_DCHECK(thread_checker_.CalledOnValidThread()); |
rtc::CritScope lock(&crit_sect_); |