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

Unified Diff: content/browser/renderer_host/media/audio_renderer_host.cc

Issue 1542103002: Handle invalid hardware output parameters in AudioRendererHost. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Handle AUDIO_FAKE in ARI and ARMM Created 4 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | content/renderer/media/audio_renderer_mixer_manager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 29c9d7f81866734f5ed6580c90facbee4464fb2c..84ebe5b60b9e45c246a8775c6562544066949921 100644
--- a/content/browser/renderer_host/media/audio_renderer_host.cc
+++ b/content/browser/renderer_host/media/audio_renderer_host.cc
@@ -70,9 +70,10 @@ void NotifyResourceDispatcherOfAudioStateChange(int render_process_id,
}
media::AudioParameters DummyParams() {
- return media::AudioParameters(media::AudioParameters::AUDIO_PCM_LINEAR,
- media::CHANNEL_LAYOUT_STEREO,
- media::limits::kMinSampleRate, 1, 1);
+ return media::AudioParameters(
+ media::AudioParameters::AUDIO_FAKE, media::CHANNEL_LAYOUT_STEREO,
+ media::AudioParameters::kAudioCDSampleRate, 16,
+ media::AudioParameters::kAudioCDSampleRate / 10);
}
std::pair<int, std::pair<bool, std::string>> MakeAuthorizationData(
@@ -133,6 +134,24 @@ void NotifyRenderProcessHostThatAudioStateChanged(int render_process_id) {
render_process_host->AudioStateChanged();
}
+void MaybeFixAudioParameters(media::AudioParameters* params) {
+ // If the number of output channels is greater than the maximum, change
+ // to the maximum allowed value. Hardware channels are ignored upstream,
+ // so it is better to report status OK if the only problem is that the number
+ // of hardware channels is too large.
+ if (!params->IsValid() &&
DaleCurtis 2016/01/07 19:14:51 Seems these first two conditions aren't necessary?
Guido Urdaneta 2016/01/08 11:20:34 Done.
+ params->channel_layout() == media::CHANNEL_LAYOUT_DISCRETE &&
+ params->channels() > media::limits::kMaxChannels) {
+ params->set_channels_for_discrete(media::limits::kMaxChannels);
+ }
+
+ // If hardware parameters are still invalid, use dummy parameters with
+ // fake audio path.
+ if (!params->IsValid()) {
+ *params = DummyParams();
+ }
+}
+
} // namespace
class AudioRendererHost::AudioEntry
@@ -457,6 +476,7 @@ void AudioRendererHost::OnRequestDeviceAuthorization(
output_params.set_effects(info->device.matched_output.effects);
authorizations_.insert(MakeAuthorizationData(
stream_id, true, info->device.matched_output_device_id));
+ MaybeFixAudioParameters(&output_params);
Send(new AudioMsg_NotifyDeviceAuthorized(
stream_id, media::OUTPUT_DEVICE_STATUS_OK, output_params));
return;
@@ -532,8 +552,11 @@ void AudioRendererHost::OnDeviceIDTranslated(
auth_data->second.first = true;
auth_data->second.second = device_info.unique_id;
+
+ media::AudioParameters output_params = device_info.output_params;
+ MaybeFixAudioParameters(&output_params);
Send(new AudioMsg_NotifyDeviceAuthorized(
- stream_id, media::OUTPUT_DEVICE_STATUS_OK, device_info.output_params));
+ stream_id, media::OUTPUT_DEVICE_STATUS_OK, output_params));
}
void AudioRendererHost::OnCreateStream(int stream_id,
« no previous file with comments | « no previous file | content/renderer/media/audio_renderer_mixer_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698