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

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

Issue 1769933002: Looking up device id by session id for AudioRendererMixerInput (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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"
11 #include "build/build_config.h" 11 #include "build/build_config.h"
12 #include "content/renderer/media/audio_device_factory.h" 12 #include "content/renderer/media/audio_device_factory.h"
13 #include "media/audio/audio_output_device.h" 13 #include "media/audio/audio_manager_base.h"
14 #include "media/base/audio_hardware_config.h" 14 #include "media/base/audio_hardware_config.h"
15 #include "media/base/audio_renderer_mixer.h" 15 #include "media/base/audio_renderer_mixer.h"
16 #include "media/base/audio_renderer_mixer_input.h" 16 #include "media/base/audio_renderer_mixer_input.h"
17 #include "media/base/audio_renderer_mixer_sink.h"
17 18
18 namespace content { 19 namespace content {
19 20
20 AudioRendererMixerManager::AudioRendererMixerManager() 21 AudioRendererMixerManager::AudioRendererMixerManager(){};
o1ka 2016/03/07 15:25:49 nit: I'll add a space before {}
o1ka 2016/04/05 15:13:38 Done.
21 : sink_for_testing_(nullptr) {}
22 22
23 AudioRendererMixerManager::~AudioRendererMixerManager() { 23 AudioRendererMixerManager::~AudioRendererMixerManager() {
24 // References to AudioRendererMixers may be owned by garbage collected 24 // References to AudioRendererMixers may be owned by garbage collected
25 // objects. During process shutdown they may be leaked, so, transitively, 25 // objects. During process shutdown they may be leaked, so, transitively,
26 // |mixers_| may leak (i.e., may be non-empty at this time) as well. 26 // |mixers_| may leak (i.e., may be non-empty at this time) as well.
27 } 27 }
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 int session_id,
31 const std::string& device_id, 32 const std::string& device_id,
32 const url::Origin& security_origin) { 33 const url::Origin& security_origin) {
34 std::string new_device_id(device_id);
35
36 if (session_id && device_id.empty()) {
37 // Output sink should be selected basing on |session_id|
38 scoped_refptr<media::AudioRendererMixerSink> sink_from_session_id =
Henrik Grunell 2016/03/08 21:09:56 I know we have been discussing this offline before
o1ka 2016/04/05 15:13:37 No, not for now.
39 AudioDeviceFactory::NewAudioRendererMixerSink(
40 source_render_frame_id, session_id, device_id, security_origin);
41 new_device_id = sink_from_session_id->GetDeviceId();
42
43 // TODO(olka): Cache it and reuse, http://crbug.com/586161
44 sink_from_session_id->Stop();
45 }
46
47 // At this point the output device is represented by |new_device_id| and
48 // |sesson_id| can (and should) be safely ignored.
Henrik Grunell 2016/03/08 21:09:57 Typo: session_id
o1ka 2016/04/05 15:13:38 Done.
33 return new media::AudioRendererMixerInput( 49 return new media::AudioRendererMixerInput(
34 base::Bind(&AudioRendererMixerManager::GetMixer, base::Unretained(this), 50 base::Bind(&AudioRendererMixerManager::GetMixer, base::Unretained(this),
35 source_render_frame_id), 51 source_render_frame_id),
36 base::Bind(&AudioRendererMixerManager::RemoveMixer, 52 base::Bind(&AudioRendererMixerManager::RemoveMixer,
37 base::Unretained(this), source_render_frame_id), 53 base::Unretained(this), source_render_frame_id),
38 base::Bind(&AudioRendererMixerManager::GetHardwareOutputParams, 54 base::Bind(&AudioRendererMixerManager::GetHardwareOutputParams,
39 source_render_frame_id, 0), // Session id is 0. 55 source_render_frame_id, 0), // Session id is 0
40 device_id, 56 new_device_id,
41 security_origin); 57 security_origin);
42 } 58 }
43 59
44 void AudioRendererMixerManager::SetAudioRendererSinkForTesting(
45 media::AudioRendererSink* sink) {
46 sink_for_testing_ = sink;
47 }
48
49 media::AudioRendererMixer* AudioRendererMixerManager::GetMixer( 60 media::AudioRendererMixer* AudioRendererMixerManager::GetMixer(
50 int source_render_frame_id, 61 int source_render_frame_id,
51 const media::AudioParameters& params, 62 const media::AudioParameters& params,
52 const std::string& device_id, 63 const std::string& device_id,
53 const url::Origin& security_origin, 64 const url::Origin& security_origin,
54 media::OutputDeviceStatus* device_status) { 65 media::OutputDeviceStatus* device_status) {
55 // Effects are not passed through to output creation, so ensure none are set. 66 // Effects are not passed through to output creation, so ensure none are set.
56 DCHECK_EQ(params.effects(), media::AudioParameters::NO_EFFECTS); 67 DCHECK_EQ(params.effects(), media::AudioParameters::NO_EFFECTS);
57 68
58 const MixerKey key(source_render_frame_id, params, device_id, 69 const MixerKey key(source_render_frame_id, params, device_id,
59 security_origin); 70 security_origin);
60 base::AutoLock auto_lock(mixers_lock_); 71 base::AutoLock auto_lock(mixers_lock_);
61 72
62 AudioRendererMixerMap::iterator it = mixers_.find(key); 73 AudioRendererMixerMap::iterator it = mixers_.find(key);
63 if (it != mixers_.end()) { 74 if (it != mixers_.end()) {
64 if (device_status) 75 if (device_status)
65 *device_status = media::OUTPUT_DEVICE_STATUS_OK; 76 *device_status = media::OUTPUT_DEVICE_STATUS_OK;
66 77
67 it->second.ref_count++; 78 it->second.ref_count++;
68 return it->second.mixer; 79 return it->second.mixer;
69 } 80 }
70 81
71 scoped_refptr<media::AudioRendererSink> sink = 82 scoped_refptr<media::AudioRendererSink> sink =
72 sink_for_testing_ 83 AudioDeviceFactory::NewAudioRendererMixerSink(source_render_frame_id, 0,
73 ? sink_for_testing_ 84 device_id, security_origin);
74 : AudioDeviceFactory::NewOutputDevice(source_render_frame_id, 0,
75 device_id, security_origin)
76 .get();
77 85
78 media::OutputDeviceStatus new_device_status = 86 media::OutputDeviceStatus new_device_status =
79 sink->GetOutputDevice()->GetDeviceStatus(); 87 sink->GetOutputDevice()->GetDeviceStatus();
80 if (device_status) 88 if (device_status)
81 *device_status = new_device_status; 89 *device_status = new_device_status;
82 if (new_device_status != media::OUTPUT_DEVICE_STATUS_OK) { 90 if (new_device_status != media::OUTPUT_DEVICE_STATUS_OK) {
83 sink->Stop(); 91 sink->Stop();
84 return nullptr; 92 return nullptr;
85 } 93 }
86 94
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 media::AudioParameters AudioRendererMixerManager::GetHardwareOutputParams( 151 media::AudioParameters AudioRendererMixerManager::GetHardwareOutputParams(
144 int render_frame_id, 152 int render_frame_id,
145 int session_id, 153 int session_id,
146 const std::string& device_id, 154 const std::string& device_id,
147 const url::Origin& security_origin) { 155 const url::Origin& security_origin) {
148 media::AudioParameters params; // Invalid parameters to return by default. 156 media::AudioParameters params; // Invalid parameters to return by default.
149 157
150 // TODO(olka): First try to lookup an existing device (cached or belonging 158 // TODO(olka): First try to lookup an existing device (cached or belonging
151 // to some mixer) and reuse it. http://crbug.com/586161 159 // to some mixer) and reuse it. http://crbug.com/586161
152 160
153 // AudioOutputDevice is the only interface we have to communicate with output 161 // AudioOutputDevice is the only interface we have to communicate with output
Guido Urdaneta 2016/03/08 14:53:09 Comment no longer matches code. However, I think y
o1ka 2016/04/05 15:13:38 The method does not exist any more
154 // device via IPC. So, that's how we get the parameters when there is no 162 // device via IPC. So, that's how we get the parameters when there is no
155 // AudioOutputDevice: 163 // AudioOutputDevice:
156 scoped_refptr<media::AudioOutputDevice> device = 164 scoped_refptr<media::AudioRendererMixerSink> sink =
157 AudioDeviceFactory::NewOutputDevice(render_frame_id, session_id, 165 AudioDeviceFactory::NewAudioRendererMixerSink(render_frame_id, session_id,
158 device_id, security_origin); 166 device_id, security_origin);
159 167
160 if (device->GetDeviceStatus() == media::OUTPUT_DEVICE_STATUS_OK) 168 if (sink->GetOutputDevice()->GetDeviceStatus() ==
161 params = device->GetOutputParameters(); 169 media::OUTPUT_DEVICE_STATUS_OK)
170 params = sink->GetOutputDevice()->GetOutputParameters();
162 171
163 device->Stop(); // TODO(olka): temporary cash for future reuse. 172 // TODO(olka): temporary cash for future reuse. http://crbug.com/586161
Guido Urdaneta 2016/03/08 14:53:09 typo: s/cash/cache I think, although this doesn't
Henrik Grunell 2016/03/08 21:09:56 Yeah it's a typo. The todo is for adding caching,
173 sink->Stop();
164 return params; 174 return params;
165 } 175 }
166 176
167 AudioRendererMixerManager::MixerKey::MixerKey( 177 AudioRendererMixerManager::MixerKey::MixerKey(
168 int source_render_frame_id, 178 int source_render_frame_id,
169 const media::AudioParameters& params, 179 const media::AudioParameters& params,
170 const std::string& device_id, 180 const std::string& device_id,
171 const url::Origin& security_origin) 181 const url::Origin& security_origin)
172 : source_render_frame_id(source_render_frame_id), 182 : source_render_frame_id(source_render_frame_id),
173 params(params), 183 params(params),
174 device_id(device_id), 184 device_id(device_id),
175 security_origin(security_origin) {} 185 security_origin(security_origin) {}
176 186
177 AudioRendererMixerManager::MixerKey::MixerKey(const MixerKey& other) = default; 187 AudioRendererMixerManager::MixerKey::MixerKey(const MixerKey& other) = default;
178 188
179 } // namespace content 189 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698