Commit 68e948e5 authored by Marina Ciocea's avatar Marina Ciocea Committed by Commit Bot

Switch speech recognition to using audio service input streams.

Use audio service IPC instead of AudioInputController for creating input stream.

This change is part of the effort of moving audio out of browser process [1]. By moving audio
into a separate process, speech recognition can no longer use AudioInputController directly,
and needs to use IPC to create and use input streams provided by audio service.

[1] Chrome audio process design doc: http://doc/12vz7UZBQIp1195V-xAYvHIoQ1r536BCmMKcPN7Si-OI

Bug: 834706
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
Change-Id: I1dc98ad670e1e9880320ae4bf054ae0d94f5b48f
Reviewed-on: https://chromium-review.googlesource.com/1049685
Commit-Queue: Marina Ciocea <marinaciocea@chromium.org>
Reviewed-by: default avatarNasko Oskov <nasko@chromium.org>
Reviewed-by: default avatarOlga Sharonova <olka@chromium.org>
Cr-Commit-Position: refs/heads/master@{#557701}
parent 7745e347
...@@ -1333,8 +1333,7 @@ int BrowserMainLoop::BrowserThreadsStarted() { ...@@ -1333,8 +1333,7 @@ int BrowserMainLoop::BrowserThreadsStarted() {
TRACE_EVENT0("startup", TRACE_EVENT0("startup",
"BrowserMainLoop::BrowserThreadsStarted:InitSpeechRecognition"); "BrowserMainLoop::BrowserThreadsStarted:InitSpeechRecognition");
speech_recognition_manager_.reset(new SpeechRecognitionManagerImpl( speech_recognition_manager_.reset(new SpeechRecognitionManagerImpl(
audio_system_.get(), audio_manager_.get(), audio_system_.get(), media_stream_manager_.get()));
media_stream_manager_.get()));
} }
{ {
......
...@@ -218,10 +218,8 @@ SpeechRecognitionManagerImpl* SpeechRecognitionManagerImpl::GetInstance() { ...@@ -218,10 +218,8 @@ SpeechRecognitionManagerImpl* SpeechRecognitionManagerImpl::GetInstance() {
SpeechRecognitionManagerImpl::SpeechRecognitionManagerImpl( SpeechRecognitionManagerImpl::SpeechRecognitionManagerImpl(
media::AudioSystem* audio_system, media::AudioSystem* audio_system,
media::AudioManager* audio_manager,
MediaStreamManager* media_stream_manager) MediaStreamManager* media_stream_manager)
: audio_system_(audio_system), : audio_system_(audio_system),
audio_manager_(audio_manager),
media_stream_manager_(media_stream_manager), media_stream_manager_(media_stream_manager),
primary_session_id_(kSessionIDInvalid), primary_session_id_(kSessionIDInvalid),
last_session_id_(kSessionIDInvalid), last_session_id_(kSessionIDInvalid),
...@@ -287,7 +285,7 @@ int SpeechRecognitionManagerImpl::CreateSession( ...@@ -287,7 +285,7 @@ int SpeechRecognitionManagerImpl::CreateSession(
google_remote_engine->SetConfig(remote_engine_config); google_remote_engine->SetConfig(remote_engine_config);
session->recognizer = new SpeechRecognizerImpl( session->recognizer = new SpeechRecognizerImpl(
this, audio_system_, audio_manager_, session_id, config.continuous, this, audio_system_, session_id, config.continuous,
config.interim_results, google_remote_engine); config.interim_results, google_remote_engine);
#else #else
session->recognizer = new SpeechRecognizerImplAndroid(this, session_id); session->recognizer = new SpeechRecognizerImplAndroid(this, session_id);
......
...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
namespace media { namespace media {
class AudioSystem; class AudioSystem;
class AudioManager;
} }
namespace content { namespace content {
...@@ -99,7 +98,6 @@ class CONTENT_EXPORT SpeechRecognitionManagerImpl ...@@ -99,7 +98,6 @@ class CONTENT_EXPORT SpeechRecognitionManagerImpl
friend class base::DeleteHelper<content::SpeechRecognitionManagerImpl>; friend class base::DeleteHelper<content::SpeechRecognitionManagerImpl>;
SpeechRecognitionManagerImpl(media::AudioSystem* audio_system, SpeechRecognitionManagerImpl(media::AudioSystem* audio_system,
media::AudioManager* audio_manager,
MediaStreamManager* media_stream_manager); MediaStreamManager* media_stream_manager);
~SpeechRecognitionManagerImpl() override; ~SpeechRecognitionManagerImpl() override;
...@@ -183,7 +181,6 @@ class CONTENT_EXPORT SpeechRecognitionManagerImpl ...@@ -183,7 +181,6 @@ class CONTENT_EXPORT SpeechRecognitionManagerImpl
frame_deletion_observer_; frame_deletion_observer_;
media::AudioSystem* audio_system_; media::AudioSystem* audio_system_;
media::AudioManager* audio_manager_;
MediaStreamManager* media_stream_manager_; MediaStreamManager* media_stream_manager_;
base::flat_map<int, std::unique_ptr<Session>> sessions_; base::flat_map<int, std::unique_ptr<Session>> sessions_;
int primary_session_id_; int primary_session_id_;
......
...@@ -16,8 +16,7 @@ ...@@ -16,8 +16,7 @@
#include "content/browser/speech/speech_recognizer.h" #include "content/browser/speech/speech_recognizer.h"
#include "content/public/common/speech_recognition_error.h" #include "content/public/common/speech_recognition_error.h"
#include "content/public/common/speech_recognition_result.h" #include "content/public/common/speech_recognition_result.h"
#include "media/audio/audio_input_controller.h" #include "media/base/audio_capturer_source.h"
#include "media/mojo/interfaces/audio_logging.mojom.h"
#include "net/url_request/url_request_context_getter.h" #include "net/url_request/url_request_context_getter.h"
namespace media { namespace media {
...@@ -34,8 +33,7 @@ class SpeechRecognitionEventListener; ...@@ -34,8 +33,7 @@ class SpeechRecognitionEventListener;
// SpeechRecognitionEngine. // SpeechRecognitionEngine.
class CONTENT_EXPORT SpeechRecognizerImpl class CONTENT_EXPORT SpeechRecognizerImpl
: public SpeechRecognizer, : public SpeechRecognizer,
public media::AudioInputController::EventHandler, public media::AudioCapturerSource::CaptureCallback,
public media::AudioInputController::SyncWriter,
public SpeechRecognitionEngine::Delegate { public SpeechRecognitionEngine::Delegate {
public: public:
static const int kAudioSampleRate; static const int kAudioSampleRate;
...@@ -44,22 +42,24 @@ class CONTENT_EXPORT SpeechRecognizerImpl ...@@ -44,22 +42,24 @@ class CONTENT_EXPORT SpeechRecognizerImpl
static const int kNoSpeechTimeoutMs; static const int kNoSpeechTimeoutMs;
static const int kEndpointerEstimationTimeMs; static const int kEndpointerEstimationTimeMs;
static void SetAudioEnvironmentForTesting(media::AudioSystem* audio_system, static void SetAudioEnvironmentForTesting(
media::AudioManager* audio_manager); media::AudioSystem* audio_system,
media::AudioCapturerSource* capturer_source);
SpeechRecognizerImpl(SpeechRecognitionEventListener* listener, SpeechRecognizerImpl(SpeechRecognitionEventListener* listener,
media::AudioSystem* audio_system, media::AudioSystem* audio_system,
media::AudioManager* audio_manager,
int session_id, int session_id,
bool continuous, bool continuous,
bool provisional_results, bool provisional_results,
SpeechRecognitionEngine* engine); SpeechRecognitionEngine* engine);
// SpeechRecognizer methods.
void StartRecognition(const std::string& device_id) override; void StartRecognition(const std::string& device_id) override;
void AbortRecognition() override; void AbortRecognition() override;
void StopAudioCapture() override; void StopAudioCapture() override;
bool IsActive() const override; bool IsActive() const override;
bool IsCapturingAudio() const override; bool IsCapturingAudio() const override;
const SpeechRecognitionEngine& recognition_engine() const; const SpeechRecognitionEngine& recognition_engine() const;
private: private:
...@@ -138,23 +138,16 @@ class CONTENT_EXPORT SpeechRecognizerImpl ...@@ -138,23 +138,16 @@ class CONTENT_EXPORT SpeechRecognizerImpl
// OnAudioLevelsChange event accordingly. // OnAudioLevelsChange event accordingly.
void UpdateSignalAndNoiseLevels(const float& rms, bool clip_detected); void UpdateSignalAndNoiseLevels(const float& rms, bool clip_detected);
void CloseAudioControllerAsynchronously(); void CloseAudioCapturerSource();
// Callback called on IO thread by audio_controller->Close().
void OnAudioClosed(media::AudioInputController*);
// AudioInputController::EventHandler methods. // media::AudioCapturerSource::CaptureCallback methods.
void OnCreated(bool initially_muted) override {} void OnCaptureStarted() final {}
void OnError(media::AudioInputController::ErrorCode error_code) override; void Capture(const media::AudioBus* audio_bus,
void OnLog(base::StringPiece) override {} int audio_delay_milliseconds,
void OnMuted(bool is_muted) override {} double volume,
bool key_pressed) final;
// AudioInputController::SyncWriter methods. void OnCaptureError(const std::string& message) final;
void Write(const media::AudioBus* data, void OnCaptureMuted(bool is_muted) final {}
double volume,
bool key_pressed,
base::TimeTicks capture_time) override;
void Close() override;
// SpeechRecognitionEngineDelegate methods. // SpeechRecognitionEngineDelegate methods.
void OnSpeechRecognitionEngineResults( void OnSpeechRecognitionEngineResults(
...@@ -164,17 +157,17 @@ class CONTENT_EXPORT SpeechRecognizerImpl ...@@ -164,17 +157,17 @@ class CONTENT_EXPORT SpeechRecognizerImpl
const SpeechRecognitionError& error) override; const SpeechRecognitionError& error) override;
media::AudioSystem* GetAudioSystem(); media::AudioSystem* GetAudioSystem();
media::AudioManager* GetAudioManager(); void CreateAudioCapturerSource();
media::AudioCapturerSource* GetAudioCapturerSource();
// Substitutes the real audio system in browser tests. // Substitute the real audio system and capturer source in browser tests.
static media::AudioSystem* audio_system_for_tests_; static media::AudioSystem* audio_system_for_tests_;
static media::AudioManager* audio_manager_for_tests_; static media::AudioCapturerSource* audio_capturer_source_for_tests_;
media::AudioSystem* audio_system_; media::AudioSystem* audio_system_;
media::AudioManager* audio_manager_;
std::unique_ptr<SpeechRecognitionEngine> recognition_engine_; std::unique_ptr<SpeechRecognitionEngine> recognition_engine_;
Endpointer endpointer_; Endpointer endpointer_;
scoped_refptr<media::AudioInputController> audio_controller_; scoped_refptr<media::AudioCapturerSource> audio_capturer_source_;
media::mojom::AudioLogPtr audio_log_;
int num_samples_recorded_; int num_samples_recorded_;
float audio_level_; float audio_level_;
bool is_dispatching_event_; bool is_dispatching_event_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment