| Index: content/browser/renderer_host/media/audio_renderer_host.cc
|
| diff --git a/content/browser/renderer_host/media/audio_renderer_host.cc b/content/browser/renderer_host/media/audio_renderer_host.cc
|
| index 6c3aa3b3f128f3e6317c7a983e60e4899d3198da..bf87d062d10e6b7f1d0395e1676e3003b41497f5 100644
|
| --- a/content/browser/renderer_host/media/audio_renderer_host.cc
|
| +++ b/content/browser/renderer_host/media/audio_renderer_host.cc
|
| @@ -63,7 +63,7 @@ class AudioRendererHost::AudioEntry
|
| // media::AudioOutputController::EventHandler implementation.
|
| virtual void OnCreated() OVERRIDE;
|
| virtual void OnPlaying() OVERRIDE;
|
| - virtual void OnAudible(bool is_audible) OVERRIDE;
|
| + virtual void OnPowerMeasured(float power_dbfs, bool clipped) OVERRIDE;
|
| virtual void OnPaused() OVERRIDE;
|
| virtual void OnError() OVERRIDE;
|
| virtual void OnDeviceChange(int new_buffer_size, int new_sample_rate)
|
| @@ -144,7 +144,7 @@ void AudioRendererHost::AudioEntry::OnCreated() {
|
| BrowserThread::PostTask(
|
| BrowserThread::IO,
|
| FROM_HERE,
|
| - base::Bind(&AudioRendererHost::DoCompleteCreation, host_, this));
|
| + base::Bind(&AudioRendererHost::DoCompleteCreation, host_, stream_id_));
|
| }
|
|
|
| void AudioRendererHost::AudioEntry::OnPlaying() {
|
| @@ -157,12 +157,13 @@ void AudioRendererHost::AudioEntry::OnPlaying() {
|
| stream_id_, media::AudioOutputIPCDelegate::kPlaying)));
|
| }
|
|
|
| -void AudioRendererHost::AudioEntry::OnAudible(bool is_audible) {
|
| +void AudioRendererHost::AudioEntry::OnPowerMeasured(float power_dbfs,
|
| + bool clipped) {
|
| BrowserThread::PostTask(
|
| BrowserThread::IO,
|
| FROM_HERE,
|
| - base::Bind(&AudioRendererHost::DoNotifyAudibleState, host_,
|
| - this, is_audible));
|
| + base::Bind(&AudioRendererHost::DoNotifyAudioPowerLevel, host_,
|
| + stream_id_, power_dbfs, clipped));
|
| }
|
|
|
| void AudioRendererHost::AudioEntry::OnPaused() {
|
| @@ -192,12 +193,18 @@ void AudioRendererHost::AudioEntry::OnDeviceChange(int new_buffer_size,
|
| stream_id_, new_buffer_size, new_sample_rate)));
|
| }
|
|
|
| -void AudioRendererHost::DoCompleteCreation(AudioEntry* entry) {
|
| +void AudioRendererHost::DoCompleteCreation(int stream_id) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
|
|
| if (!PeerHandle()) {
|
| NOTREACHED() << "Renderer process handle is invalid.";
|
| - ReportErrorAndClose(entry->stream_id());
|
| + ReportErrorAndClose(stream_id);
|
| + return;
|
| + }
|
| +
|
| + AudioEntry* const entry = LookupById(stream_id);
|
| + if (!entry) {
|
| + ReportErrorAndClose(stream_id);
|
| return;
|
| }
|
|
|
| @@ -235,22 +242,22 @@ void AudioRendererHost::DoCompleteCreation(AudioEntry* entry) {
|
| media::PacketSizeInBytes(entry->shared_memory()->requested_size())));
|
| }
|
|
|
| -void AudioRendererHost::DoNotifyAudibleState(AudioEntry* entry,
|
| - bool is_audible) {
|
| +void AudioRendererHost::DoNotifyAudioPowerLevel(int stream_id,
|
| + float power_dbfs,
|
| + bool clipped) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
|
|
| MediaObserver* const media_observer =
|
| GetContentClient()->browser()->GetMediaObserver();
|
| if (media_observer) {
|
| - DVLOG(1) << "AudioRendererHost@" << this
|
| - << "::DoNotifyAudibleState(is_audible=" << is_audible
|
| - << ") for stream_id=" << entry->stream_id();
|
| -
|
| if (CommandLine::ForCurrentProcess()->HasSwitch(
|
| switches::kEnableAudibleNotifications)) {
|
| - media_observer->OnAudioStreamPlayingChanged(
|
| - render_process_id_, entry->render_view_id(), entry->stream_id(),
|
| - is_audible);
|
| + AudioEntry* const entry = LookupById(stream_id);
|
| + if (entry) {
|
| + media_observer->OnAudioStreamPlayingChanged(
|
| + render_process_id_, entry->render_view_id(), entry->stream_id(),
|
| + true, power_dbfs, clipped);
|
| + }
|
| }
|
| }
|
| }
|
| @@ -432,7 +439,8 @@ void AudioRendererHost::DeleteEntry(scoped_ptr<AudioEntry> entry) {
|
| GetContentClient()->browser()->GetMediaObserver();
|
| if (media_observer) {
|
| media_observer->OnAudioStreamPlayingChanged(
|
| - render_process_id_, entry->render_view_id(), entry->stream_id(), false);
|
| + render_process_id_, entry->render_view_id(), entry->stream_id(),
|
| + false, -std::numeric_limits<float>::infinity(), false);
|
| }
|
|
|
| // Notify the media observer.
|
|
|