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

Side by Side Diff: media/audio/audio_system_impl.cc

Issue 2675713002: Switch Speech Recognition to asynchronous callback-based AudioManager interactions. (Closed)
Patch Set: Created 3 years, 10 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
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/memory/ptr_util.h"
6 #include "base/single_thread_task_runner.h"
7 #include "base/task_runner_util.h"
8 #include "media/audio/audio_manager.h"
9 #include "media/audio/audio_system_impl.h"
10
11 // Using base::Unretained for |audio_manager_| is safe since it is deleted after
12 // its task runner, and AudioSystemImpl is deleted on the UI thread after the IO
13 // thread has been stopped and before |audio_manager_| deletion is scheduled.
14 namespace media {
15
16 namespace {
17
18 AudioParameters GetInputParametersOnDeviceThread(AudioManager* audio_manager,
19 const std::string& device_id) {
20 DCHECK(audio_manager->GetTaskRunner()->BelongsToCurrentThread());
21
22 // TODO(olka) : remove this when AudioManager::GetInputStreamParameters()
23 // works this way on all the platforms.
24 if (!audio_manager->HasAudioInputDevices())
25 return AudioParameters();
26
27 return audio_manager->GetInputStreamParameters(device_id);
28 }
29
30 } // namespace
31
32 AudioSystemImpl::AudioSystemImpl(AudioManager* audio_manager)
33 : audio_manager_(audio_manager) {
34 DCHECK(audio_manager_);
35 }
36
37 AudioSystemImpl::~AudioSystemImpl() {}
38
39 // static
40 std::unique_ptr<AudioSystem> AudioSystemImpl::Create(
41 AudioManager* audio_manager) {
42 return base::WrapUnique(new AudioSystemImpl(audio_manager));
43 }
44
45 base::SingleThreadTaskRunner* AudioSystemImpl::GetTaskRunner() const {
46 return audio_manager_->GetTaskRunner();
47 }
48
49 void AudioSystemImpl::GetInputStreamParameters(
50 const std::string& device_id,
51 OnAudioParamsCallback on_params_cb) {
52 if (GetTaskRunner()->BelongsToCurrentThread()) {
53 GetTaskRunner()->PostTask(
54 FROM_HERE, base::Bind(on_params_cb, GetInputParametersOnDeviceThread(
55 audio_manager_, device_id)));
56 return;
57 }
58 base::PostTaskAndReplyWithResult(
59 GetTaskRunner(), FROM_HERE,
60 base::Bind(&GetInputParametersOnDeviceThread,
61 base::Unretained(audio_manager_), device_id),
62 std::move(on_params_cb));
63 }
64
65 AudioManager* AudioSystemImpl::GetAudioManager() {
66 return audio_manager_;
67 }
68
69 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698