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

Side by Side Diff: media/base/audio_renderer_mixer_input.cc

Issue 12102004: Renderer side audio device change wip... Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 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 | Annotate | Revision Log
« no previous file with comments | « media/base/audio_renderer_mixer_input.h ('k') | media/base/audio_renderer_sink.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "media/base/audio_renderer_mixer_input.h" 5 #include "media/base/audio_renderer_mixer_input.h"
6 6
7 #include "base/bind.h"
7 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/message_loop.h"
8 #include "media/base/audio_renderer_mixer.h" 10 #include "media/base/audio_renderer_mixer.h"
9 11
10 namespace media { 12 namespace media {
11 13
12 AudioRendererMixerInput::AudioRendererMixerInput( 14 AudioRendererMixerInput::AudioRendererMixerInput(
13 const GetMixerCB& get_mixer_cb, const RemoveMixerCB& remove_mixer_cb) 15 const GetMixerCB& get_mixer_cb, const RemoveMixerCB& remove_mixer_cb)
14 : playing_(false), 16 : playing_(false),
15 initialized_(false), 17 initialized_(false),
16 volume_(1.0f), 18 volume_(1.0f),
17 get_mixer_cb_(get_mixer_cb), 19 get_mixer_cb_(get_mixer_cb),
18 remove_mixer_cb_(remove_mixer_cb), 20 remove_mixer_cb_(remove_mixer_cb),
19 mixer_(NULL), 21 mixer_(NULL),
20 callback_(NULL), 22 callback_(NULL),
21 current_audio_delay_milliseconds_(0) { 23 current_audio_delay_milliseconds_(0) {
22 } 24 }
23 25
24 AudioRendererMixerInput::~AudioRendererMixerInput() { 26 AudioRendererMixerInput::~AudioRendererMixerInput() {
25 // Mixer is no longer safe to use after |remove_mixer_cb_| has been called. 27 // |mixer_| is no longer safe to use after |remove_mixer_cb_| has been called.
26 if (initialized_) 28 if (initialized_) {
27 remove_mixer_cb_.Run(params_); 29 remove_mixer_cb_.Run(mixer_);
30 mixer_ = NULL;
31 }
28 } 32 }
29 33
30 void AudioRendererMixerInput::Initialize( 34 void AudioRendererMixerInput::Initialize(
31 const AudioParameters& params, 35 const AudioParameters& params,
32 AudioRendererSink::RenderCallback* callback) { 36 AudioRendererSink::RenderCallback* callback) {
33 DCHECK(!initialized_); 37 DCHECK(!initialized_);
34 params_ = params; 38 params_ = params;
35 mixer_ = get_mixer_cb_.Run(params_); 39 mixer_ = get_mixer_cb_.Run(params_);
36 callback_ = callback; 40 callback_ = callback;
37 initialized_ = true; 41 initialized_ = true;
42
43 started_on_message_loop_ = base::MessageLoopProxy::current();
38 } 44 }
39 45
40 void AudioRendererMixerInput::Start() { 46 void AudioRendererMixerInput::Start() {
41 DCHECK(initialized_); 47 DCHECK(initialized_);
42 DCHECK(!playing_); 48 DCHECK(!playing_);
43 } 49 }
44 50
45 void AudioRendererMixerInput::Stop() { 51 void AudioRendererMixerInput::Stop() {
46 // Stop() may be called at any time, if Pause() hasn't been called we need to 52 // Stop() may be called at any time, if Pause() hasn't been called we need to
47 // remove our mixer input before shutdown. 53 // remove our mixer input before shutdown.
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 frames_filled, audio_bus->frames() - frames_filled); 95 frames_filled, audio_bus->frames() - frames_filled);
90 } 96 }
91 97
92 return frames_filled > 0 ? volume_ : 0; 98 return frames_filled > 0 ? volume_ : 0;
93 } 99 }
94 100
95 void AudioRendererMixerInput::OnRenderError() { 101 void AudioRendererMixerInput::OnRenderError() {
96 callback_->OnRenderError(); 102 callback_->OnRenderError();
97 } 103 }
98 104
105 void AudioRendererMixerInput::OnDeviceChange() {
106 LOG(ERROR) << "DEVICE CHANGE SENT";
107 started_on_message_loop_->PostTask(FROM_HERE, base::Bind(
108 &AudioRendererMixerInput::UpdateMixer, this));
109 }
110
111 void AudioRendererMixerInput::UpdateMixer() {
112 DCHECK(mixer_);
113 LOG(ERROR) << "AudioRendererMixerInput::kDeviceChange";
114
115 // First see if a new mixer is actually necessary.
116 AudioRendererMixer* new_mixer = get_mixer_cb_.Run(params_);
117 if (new_mixer == mixer_) {
118 remove_mixer_cb_.Run(new_mixer);
119 return;
120 }
121
122 LOG(ERROR) << "new mixer time!";
123 if (playing_)
124 mixer_->RemoveMixerInput(this);
125 remove_mixer_cb_.Run(mixer_);
126 mixer_ = new_mixer;
127 if (playing_)
128 mixer_->AddMixerInput(this);
129 }
130
99 } // namespace media 131 } // namespace media
OLDNEW
« no previous file with comments | « media/base/audio_renderer_mixer_input.h ('k') | media/base/audio_renderer_sink.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698