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

Side by Side Diff: components/copresence/mediums/audio/audio_player.cc

Issue 461803003: Stop playing/recording when not needed. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/copresence/mediums/audio/audio_player.h" 5 #include "components/copresence/mediums/audio/audio_player.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <string>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/bind_helpers.h" 11 #include "base/bind_helpers.h"
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/run_loop.h" 13 #include "base/run_loop.h"
14 #include "components/copresence/public/copresence_constants.h" 14 #include "components/copresence/public/copresence_constants.h"
15 #include "content/public/browser/browser_thread.h" 15 #include "content/public/browser/browser_thread.h"
16 #include "media/audio/audio_manager.h" 16 #include "media/audio/audio_manager.h"
17 #include "media/audio/audio_parameters.h" 17 #include "media/audio/audio_parameters.h"
18 #include "media/base/audio_bus.h" 18 #include "media/base/audio_bus.h"
19 19
20 namespace { 20 namespace {
21 21
22 const int kDefaultFrameCount = 1024; 22 const int kDefaultFrameCount = 1024;
23 const double kOutputVolumePercent = 1.0f; 23 const double kOutputVolumePercent = 1.0f;
24 24
25 } // namespace 25 } // namespace
26 26
27 namespace copresence { 27 namespace copresence {
28 28
29 // Public methods. 29 // Public methods.
30 30
31 AudioPlayer::AudioPlayer() 31 AudioPlayer::AudioPlayer()
32 : stream_(NULL), is_playing_(false), frame_index_(0) { 32 : is_playing_(false), stream_(NULL), frame_index_(0) {
33 } 33 }
34 34
35 AudioPlayer::~AudioPlayer() { 35 AudioPlayer::~AudioPlayer() {
36 } 36 }
37 37
38 void AudioPlayer::Initialize() { 38 void AudioPlayer::Initialize() {
39 media::AudioManager::Get()->GetTaskRunner()->PostTask( 39 media::AudioManager::Get()->GetTaskRunner()->PostTask(
40 FROM_HERE, 40 FROM_HERE,
41 base::Bind(&AudioPlayer::InitializeOnAudioThread, 41 base::Bind(&AudioPlayer::InitializeOnAudioThread,
42 base::Unretained(this))); 42 base::Unretained(this)));
43 } 43 }
44 44
45 void AudioPlayer::Play( 45 void AudioPlayer::Play(
46 const scoped_refptr<media::AudioBusRefCounted>& samples) { 46 const scoped_refptr<media::AudioBusRefCounted>& samples) {
47 media::AudioManager::Get()->GetTaskRunner()->PostTask( 47 media::AudioManager::Get()->GetTaskRunner()->PostTask(
48 FROM_HERE, 48 FROM_HERE,
49 base::Bind( 49 base::Bind(
50 &AudioPlayer::PlayOnAudioThread, base::Unretained(this), samples)); 50 &AudioPlayer::PlayOnAudioThread, base::Unretained(this), samples));
51 } 51 }
52 52
53 void AudioPlayer::Stop() { 53 void AudioPlayer::Stop() {
54 media::AudioManager::Get()->GetTaskRunner()->PostTask( 54 media::AudioManager::Get()->GetTaskRunner()->PostTask(
55 FROM_HERE, 55 FROM_HERE,
56 base::Bind(&AudioPlayer::StopOnAudioThread, base::Unretained(this))); 56 base::Bind(&AudioPlayer::StopOnAudioThread, base::Unretained(this)));
57 } 57 }
58 58
59 bool AudioPlayer::IsPlaying() {
60 return is_playing_;
61 }
62
59 void AudioPlayer::Finalize() { 63 void AudioPlayer::Finalize() {
60 media::AudioManager::Get()->GetTaskRunner()->PostTask( 64 media::AudioManager::Get()->GetTaskRunner()->PostTask(
61 FROM_HERE, 65 FROM_HERE,
62 base::Bind(&AudioPlayer::FinalizeOnAudioThread, base::Unretained(this))); 66 base::Bind(&AudioPlayer::FinalizeOnAudioThread, base::Unretained(this)));
63 } 67 }
64 68
65 // Private methods. 69 // Private methods.
66 70
67 void AudioPlayer::InitializeOnAudioThread() { 71 void AudioPlayer::InitializeOnAudioThread() {
68 DCHECK(media::AudioManager::Get()->GetTaskRunner()->BelongsToCurrentThread()); 72 DCHECK(media::AudioManager::Get()->GetTaskRunner()->BelongsToCurrentThread());
(...skipping 28 matching lines...) Expand all
97 { 101 {
98 base::AutoLock al(state_lock_); 102 base::AutoLock al(state_lock_);
99 103
100 samples_ = samples; 104 samples_ = samples;
101 frame_index_ = 0; 105 frame_index_ = 0;
102 106
103 if (is_playing_) 107 if (is_playing_)
104 return; 108 return;
105 } 109 }
106 110
107 DVLOG(2) << "Playing Audio.";
108 is_playing_ = true; 111 is_playing_ = true;
109 stream_->Start(this); 112 stream_->Start(this);
110 } 113 }
111 114
112 void AudioPlayer::StopOnAudioThread() { 115 void AudioPlayer::StopOnAudioThread() {
113 DCHECK(media::AudioManager::Get()->GetTaskRunner()->BelongsToCurrentThread()); 116 DCHECK(media::AudioManager::Get()->GetTaskRunner()->BelongsToCurrentThread());
114 if (!stream_) 117 if (!stream_)
115 return; 118 return;
116 119
117 stream_->Stop(); 120 stream_->Stop();
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 base::RunLoop rl; 177 base::RunLoop rl;
175 media::AudioManager::Get()->GetTaskRunner()->PostTaskAndReply( 178 media::AudioManager::Get()->GetTaskRunner()->PostTaskAndReply(
176 FROM_HERE, 179 FROM_HERE,
177 base::Bind(base::IgnoreResult(&AudioPlayer::FlushAudioLoopForTesting), 180 base::Bind(base::IgnoreResult(&AudioPlayer::FlushAudioLoopForTesting),
178 base::Unretained(this)), 181 base::Unretained(this)),
179 rl.QuitClosure()); 182 rl.QuitClosure());
180 rl.Run(); 183 rl.Run();
181 } 184 }
182 185
183 } // namespace copresence 186 } // namespace copresence
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698