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

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

Issue 14358049: Refactor AudioRendererMixer to be more generic. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 7 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 (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"
8 #include "media/base/audio_renderer_mixer.h" 9 #include "media/base/audio_renderer_mixer.h"
9 10
10 namespace media { 11 namespace media {
11 12
12 AudioRendererMixerInput::AudioRendererMixerInput( 13 AudioRendererMixerInput::AudioRendererMixerInput(
13 const GetMixerCB& get_mixer_cb, const RemoveMixerCB& remove_mixer_cb) 14 const GetMixerCB& get_mixer_cb, const RemoveMixerCB& remove_mixer_cb)
14 : playing_(false), 15 : playing_(false),
15 initialized_(false), 16 initialized_(false),
16 volume_(1.0f), 17 volume_(1.0f),
17 get_mixer_cb_(get_mixer_cb), 18 get_mixer_cb_(get_mixer_cb),
18 remove_mixer_cb_(remove_mixer_cb), 19 remove_mixer_cb_(remove_mixer_cb),
19 mixer_(NULL), 20 mixer_(NULL),
20 callback_(NULL), 21 callback_(NULL),
21 current_audio_delay_milliseconds_(0) { 22 error_cb_(base::Bind(
23 &AudioRendererMixerInput::OnRenderError, base::Unretained(this))) {
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(params_);
28 } 30 }
29 31
30 void AudioRendererMixerInput::Initialize( 32 void AudioRendererMixerInput::Initialize(
31 const AudioParameters& params, 33 const AudioParameters& params,
(...skipping 19 matching lines...) Expand all
51 mixer_->RemoveMixerInput(this); 53 mixer_->RemoveMixerInput(this);
52 playing_ = false; 54 playing_ = false;
53 } 55 }
54 56
55 void AudioRendererMixerInput::Play() { 57 void AudioRendererMixerInput::Play() {
56 DCHECK(initialized_); 58 DCHECK(initialized_);
57 59
58 if (playing_) 60 if (playing_)
59 return; 61 return;
60 62
61 mixer_->AddMixerInput(this); 63 mixer_->AddMixerInput(this, error_cb_);
62 playing_ = true; 64 playing_ = true;
63 } 65 }
64 66
65 void AudioRendererMixerInput::Pause() { 67 void AudioRendererMixerInput::Pause() {
66 DCHECK(initialized_); 68 DCHECK(initialized_);
67 69
68 if (!playing_) 70 if (!playing_)
69 return; 71 return;
70 72
71 mixer_->RemoveMixerInput(this); 73 mixer_->RemoveMixerInput(this);
72 playing_ = false; 74 playing_ = false;
73 } 75 }
74 76
75 bool AudioRendererMixerInput::SetVolume(double volume) { 77 bool AudioRendererMixerInput::SetVolume(double volume) {
76 volume_ = volume; 78 volume_ = volume;
77 return true; 79 return true;
78 } 80 }
79 81
80 double AudioRendererMixerInput::ProvideInput(AudioBus* audio_bus, 82 double AudioRendererMixerInput::ProvideInput(AudioBus* audio_bus,
81 base::TimeDelta buffer_delay) { 83 base::TimeDelta buffer_delay) {
82 int frames_filled = callback_->Render( 84 int frames_filled = callback_->Render(
83 audio_bus, 85 audio_bus, buffer_delay.InMillisecondsF() + 0.5);
no longer working on chromium 2013/04/30 08:42:23 nit, this might trigger compiling warning, explici
84 current_audio_delay_milliseconds_ + buffer_delay.InMilliseconds());
85 86
86 // AudioConverter expects unfilled frames to be zeroed. 87 // AudioConverter expects unfilled frames to be zeroed.
87 if (frames_filled < audio_bus->frames()) { 88 if (frames_filled < audio_bus->frames()) {
88 audio_bus->ZeroFramesPartial( 89 audio_bus->ZeroFramesPartial(
89 frames_filled, audio_bus->frames() - frames_filled); 90 frames_filled, audio_bus->frames() - frames_filled);
90 } 91 }
91 92
92 return frames_filled > 0 ? volume_ : 0; 93 return frames_filled > 0 ? volume_ : 0;
93 } 94 }
94 95
95 void AudioRendererMixerInput::OnRenderError() { 96 void AudioRendererMixerInput::OnRenderError() {
96 callback_->OnRenderError(); 97 callback_->OnRenderError();
97 } 98 }
98 99
99 } // namespace media 100 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698