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

Side by Side Diff: content/browser/renderer_host/media/audio_renderer_host.cc

Issue 14600025: Replace AudioSilenceDetector with an AudioPowerMonitor. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Better handling of bad AudioBus data. Minor tweaks. 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 "content/browser/renderer_host/media/audio_renderer_host.h" 5 #include "content/browser/renderer_host/media/audio_renderer_host.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 } 54 }
55 55
56 media::AudioOutputController::SyncReader* reader() const { 56 media::AudioOutputController::SyncReader* reader() const {
57 return reader_.get(); 57 return reader_.get();
58 } 58 }
59 59
60 private: 60 private:
61 // media::AudioOutputController::EventHandler implementation. 61 // media::AudioOutputController::EventHandler implementation.
62 virtual void OnCreated() OVERRIDE; 62 virtual void OnCreated() OVERRIDE;
63 virtual void OnPlaying() OVERRIDE; 63 virtual void OnPlaying() OVERRIDE;
64 virtual void OnAudible(bool is_audible) OVERRIDE; 64 virtual void OnPowerMeasured(float power_in_dbfs) OVERRIDE;
65 virtual void OnPaused() OVERRIDE; 65 virtual void OnPaused() OVERRIDE;
66 virtual void OnError() OVERRIDE; 66 virtual void OnError() OVERRIDE;
67 virtual void OnDeviceChange(int new_buffer_size, int new_sample_rate) 67 virtual void OnDeviceChange(int new_buffer_size, int new_sample_rate)
68 OVERRIDE; 68 OVERRIDE;
69 69
70 AudioRendererHost* const host_; 70 AudioRendererHost* const host_;
71 const int stream_id_; 71 const int stream_id_;
72 72
73 // The routing ID of the source render view. 73 // The routing ID of the source render view.
74 const int render_view_id_; 74 const int render_view_id_;
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 void AudioRendererHost::AudioEntry::OnPlaying() { 144 void AudioRendererHost::AudioEntry::OnPlaying() {
145 BrowserThread::PostTask( 145 BrowserThread::PostTask(
146 BrowserThread::IO, 146 BrowserThread::IO,
147 FROM_HERE, 147 FROM_HERE,
148 base::Bind( 148 base::Bind(
149 base::IgnoreResult(&AudioRendererHost::Send), host_, 149 base::IgnoreResult(&AudioRendererHost::Send), host_,
150 new AudioMsg_NotifyStreamStateChanged( 150 new AudioMsg_NotifyStreamStateChanged(
151 stream_id_, media::AudioOutputIPCDelegate::kPlaying))); 151 stream_id_, media::AudioOutputIPCDelegate::kPlaying)));
152 } 152 }
153 153
154 void AudioRendererHost::AudioEntry::OnAudible(bool is_audible) { 154 void AudioRendererHost::AudioEntry::OnPowerMeasured(float power_in_dbfs) {
155 BrowserThread::PostTask( 155 BrowserThread::PostTask(
156 BrowserThread::IO, 156 BrowserThread::IO,
157 FROM_HERE, 157 FROM_HERE,
158 base::Bind(&AudioRendererHost::DoNotifyAudibleState, host_, 158 base::Bind(&AudioRendererHost::DoNotifyAudioPowerLevel, host_,
159 this, is_audible)); 159 this, power_in_dbfs));
160 } 160 }
161 161
162 void AudioRendererHost::AudioEntry::OnPaused() { 162 void AudioRendererHost::AudioEntry::OnPaused() {
163 BrowserThread::PostTask( 163 BrowserThread::PostTask(
164 BrowserThread::IO, 164 BrowserThread::IO,
165 FROM_HERE, 165 FROM_HERE,
166 base::Bind( 166 base::Bind(
167 base::IgnoreResult(&AudioRendererHost::Send), host_, 167 base::IgnoreResult(&AudioRendererHost::Send), host_,
168 new AudioMsg_NotifyStreamStateChanged( 168 new AudioMsg_NotifyStreamStateChanged(
169 stream_id_, media::AudioOutputIPCDelegate::kPaused))); 169 stream_id_, media::AudioOutputIPCDelegate::kPaused)));
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 return; 222 return;
223 } 223 }
224 224
225 Send(new AudioMsg_NotifyStreamCreated( 225 Send(new AudioMsg_NotifyStreamCreated(
226 entry->stream_id(), 226 entry->stream_id(),
227 foreign_memory_handle, 227 foreign_memory_handle,
228 foreign_socket_handle, 228 foreign_socket_handle,
229 media::PacketSizeInBytes(entry->shared_memory()->requested_size()))); 229 media::PacketSizeInBytes(entry->shared_memory()->requested_size())));
230 } 230 }
231 231
232 void AudioRendererHost::DoNotifyAudibleState(AudioEntry* entry, 232 void AudioRendererHost::DoNotifyAudioPowerLevel(AudioEntry* entry,
233 bool is_audible) { 233 float power_in_dbfs) {
234 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 234 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
235 235
236 MediaObserver* const media_observer = 236 MediaObserver* const media_observer =
237 GetContentClient()->browser()->GetMediaObserver(); 237 GetContentClient()->browser()->GetMediaObserver();
238 if (media_observer) { 238 if (media_observer) {
239 DVLOG(1) << "AudioRendererHost@" << this 239 DVLOG(2) << "AudioRendererHost@" << this
240 << "::DoNotifyAudibleState(is_audible=" << is_audible 240 << "::DoNotifyAudioPowerLevel(power_in_dbfs=" << power_in_dbfs
241 << ") for stream_id=" << entry->stream_id(); 241 << ") for stream_id=" << entry->stream_id();
242 242
243 if (CommandLine::ForCurrentProcess()->HasSwitch( 243 if (CommandLine::ForCurrentProcess()->HasSwitch(
244 switches::kEnableAudibleNotifications)) { 244 switches::kEnableAudibleNotifications)) {
245 media_observer->OnAudioStreamPlayingChanged( 245 media_observer->OnAudioStreamPlayingChanged(
246 render_process_id_, entry->render_view_id(), entry->stream_id(), 246 render_process_id_, entry->render_view_id(), entry->stream_id(),
247 is_audible); 247 true, power_in_dbfs);
248 } 248 }
249 } 249 }
250 } 250 }
251 251
252 /////////////////////////////////////////////////////////////////////////////// 252 ///////////////////////////////////////////////////////////////////////////////
253 // IPC Messages handler 253 // IPC Messages handler
254 bool AudioRendererHost::OnMessageReceived(const IPC::Message& message, 254 bool AudioRendererHost::OnMessageReceived(const IPC::Message& message,
255 bool* message_was_ok) { 255 bool* message_was_ok) {
256 bool handled = true; 256 bool handled = true;
257 IPC_BEGIN_MESSAGE_MAP_EX(AudioRendererHost, message, *message_was_ok) 257 IPC_BEGIN_MESSAGE_MAP_EX(AudioRendererHost, message, *message_was_ok)
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 } 395 }
396 396
397 void AudioRendererHost::DeleteEntry(scoped_ptr<AudioEntry> entry) { 397 void AudioRendererHost::DeleteEntry(scoped_ptr<AudioEntry> entry) {
398 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 398 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
399 399
400 // At this point, make the final "say" in audio playback state. 400 // At this point, make the final "say" in audio playback state.
401 MediaObserver* const media_observer = 401 MediaObserver* const media_observer =
402 GetContentClient()->browser()->GetMediaObserver(); 402 GetContentClient()->browser()->GetMediaObserver();
403 if (media_observer) { 403 if (media_observer) {
404 media_observer->OnAudioStreamPlayingChanged( 404 media_observer->OnAudioStreamPlayingChanged(
405 render_process_id_, entry->render_view_id(), entry->stream_id(), false); 405 render_process_id_, entry->render_view_id(), entry->stream_id(),
406 false, -std::numeric_limits<float>::infinity());
406 } 407 }
407 408
408 // Notify the media observer. 409 // Notify the media observer.
409 if (media_internals_) 410 if (media_internals_)
410 media_internals_->OnDeleteAudioStream(this, entry->stream_id()); 411 media_internals_->OnDeleteAudioStream(this, entry->stream_id());
411 412
412 // Note: |entry| will be deleted upon leaving this scope. 413 // Note: |entry| will be deleted upon leaving this scope.
413 } 414 }
414 415
415 void AudioRendererHost::ReportErrorAndClose(int stream_id) { 416 void AudioRendererHost::ReportErrorAndClose(int stream_id) {
(...skipping 14 matching lines...) Expand all
430 } 431 }
431 432
432 AudioRendererHost::AudioEntry* AudioRendererHost::LookupById(int stream_id) { 433 AudioRendererHost::AudioEntry* AudioRendererHost::LookupById(int stream_id) {
433 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 434 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
434 435
435 AudioEntryMap::const_iterator i = audio_entries_.find(stream_id); 436 AudioEntryMap::const_iterator i = audio_entries_.find(stream_id);
436 return i != audio_entries_.end() ? i->second : NULL; 437 return i != audio_entries_.end() ? i->second : NULL;
437 } 438 }
438 439
439 } // namespace content 440 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698