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

Side by Side Diff: content/renderer/media/audio_renderer_mixer_manager.cc

Issue 1666363005: Switching audio clients to using RestartableAudioRendererSink interface as a sink. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nit fixes Created 4 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
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 "content/renderer/media/audio_renderer_mixer_manager.h" 5 #include "content/renderer/media/audio_renderer_mixer_manager.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 17 matching lines...) Expand all
28 28
29 media::AudioRendererMixerInput* AudioRendererMixerManager::CreateInput( 29 media::AudioRendererMixerInput* AudioRendererMixerManager::CreateInput(
30 int source_render_frame_id, 30 int source_render_frame_id,
31 const std::string& device_id, 31 const std::string& device_id,
32 const url::Origin& security_origin) { 32 const url::Origin& security_origin) {
33 return new media::AudioRendererMixerInput( 33 return new media::AudioRendererMixerInput(
34 base::Bind(&AudioRendererMixerManager::GetMixer, base::Unretained(this), 34 base::Bind(&AudioRendererMixerManager::GetMixer, base::Unretained(this),
35 source_render_frame_id), 35 source_render_frame_id),
36 base::Bind(&AudioRendererMixerManager::RemoveMixer, 36 base::Bind(&AudioRendererMixerManager::RemoveMixer,
37 base::Unretained(this), source_render_frame_id), 37 base::Unretained(this), source_render_frame_id),
38 device_id, security_origin); 38 base::Bind(&AudioRendererMixerManager::GetHardwareOutputParams,
39 source_render_frame_id, 0), // Session id is 0.
40 device_id,
41 security_origin);
39 } 42 }
40 43
41 void AudioRendererMixerManager::SetAudioRendererSinkForTesting( 44 void AudioRendererMixerManager::SetAudioRendererSinkForTesting(
42 media::AudioRendererSink* sink) { 45 media::AudioRendererSink* sink) {
43 sink_for_testing_ = sink; 46 sink_for_testing_ = sink;
44 } 47 }
45 48
46 media::AudioRendererMixer* AudioRendererMixerManager::GetMixer( 49 media::AudioRendererMixer* AudioRendererMixerManager::GetMixer(
47 int source_render_frame_id, 50 int source_render_frame_id,
48 const media::AudioParameters& params, 51 const media::AudioParameters& params,
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 DCHECK(it != mixers_.end()); 133 DCHECK(it != mixers_.end());
131 134
132 // Only remove the mixer if AudioRendererMixerManager is the last owner. 135 // Only remove the mixer if AudioRendererMixerManager is the last owner.
133 it->second.ref_count--; 136 it->second.ref_count--;
134 if (it->second.ref_count == 0) { 137 if (it->second.ref_count == 0) {
135 delete it->second.mixer; 138 delete it->second.mixer;
136 mixers_.erase(it); 139 mixers_.erase(it);
137 } 140 }
138 } 141 }
139 142
143 // static
144 media::AudioParameters AudioRendererMixerManager::GetHardwareOutputParams(
145 int render_frame_id,
146 int session_id,
147 const std::string& device_id,
148 const url::Origin& security_origin) {
149 media::AudioParameters params; // Invalid parameters to return by default.
150
151 // TODO(olka): First try to lookup an existing device (cached or belonging
152 // to some mixer) and reuse it. http://crbug.com/586161
153
154 // AudioOutputDevice is the only interface we have to communicate with output
155 // device via IPC. So, that's how we get the parameters when there is no
156 // AudioOutputDevice:
157 scoped_refptr<media::AudioOutputDevice> device =
158 AudioDeviceFactory::NewOutputDevice(render_frame_id, session_id,
159 device_id, security_origin);
160
161 if (device->GetDeviceStatus() == media::OUTPUT_DEVICE_STATUS_OK)
162 params = device->GetOutputParameters();
163
164 device->Stop(); // TODO(olka): temporary cash for future reuse.
165 return params;
166 }
167
140 AudioRendererMixerManager::MixerKey::MixerKey( 168 AudioRendererMixerManager::MixerKey::MixerKey(
141 int source_render_frame_id, 169 int source_render_frame_id,
142 const media::AudioParameters& params, 170 const media::AudioParameters& params,
143 const std::string& device_id, 171 const std::string& device_id,
144 const url::Origin& security_origin) 172 const url::Origin& security_origin)
145 : source_render_frame_id(source_render_frame_id), 173 : source_render_frame_id(source_render_frame_id),
146 params(params), 174 params(params),
147 device_id(device_id), 175 device_id(device_id),
148 security_origin(security_origin) {} 176 security_origin(security_origin) {}
149 177
150 } // namespace content 178 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/audio_renderer_mixer_manager.h ('k') | content/renderer/media/renderer_webaudiodevice_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698