| Index: content/renderer/media/renderer_webaudiodevice_impl.cc
|
| diff --git a/content/renderer/media/renderer_webaudiodevice_impl.cc b/content/renderer/media/renderer_webaudiodevice_impl.cc
|
| index 2c4f81b185d74fe96ab0a25d677a67fd0d3d9296..b3c13c89faa4441517a184628296fce403ce8564 100644
|
| --- a/content/renderer/media/renderer_webaudiodevice_impl.cc
|
| +++ b/content/renderer/media/renderer_webaudiodevice_impl.cc
|
| @@ -41,13 +41,40 @@ AudioDeviceFactory::SourceType GetLatencyHintSourceType(
|
| case WebAudioLatencyHint::kCategoryPlayback:
|
| return AudioDeviceFactory::kSourceWebAudioPlayback;
|
| case WebAudioLatencyHint::kCategoryExact:
|
| - // TODO implement CategoryExact
|
| - return AudioDeviceFactory::kSourceWebAudioInteractive;
|
| + return AudioDeviceFactory::kSourceWebAudioExact;
|
| }
|
| NOTREACHED();
|
| return AudioDeviceFactory::kSourceWebAudioInteractive;
|
| }
|
|
|
| +int GetOutputBufferSize(const blink::WebAudioLatencyHint& latency_hint,
|
| + const media::AudioLatency::LatencyType latency,
|
| + const media::AudioParameters& hardware_params) {
|
| + // Adjust output buffer size according to the latency requirement.
|
| + switch (latency) {
|
| + case media::AudioLatency::LATENCY_INTERACTIVE:
|
| + return media::AudioLatency::GetInteractiveBufferSize(
|
| + hardware_params.frames_per_buffer());
|
| + break;
|
| + case media::AudioLatency::LATENCY_RTC:
|
| + return media::AudioLatency::GetRtcBufferSize(
|
| + hardware_params.sample_rate(), hardware_params.frames_per_buffer());
|
| + break;
|
| + case media::AudioLatency::LATENCY_PLAYBACK:
|
| + return media::AudioLatency::GetHighLatencyBufferSize(
|
| + hardware_params.sample_rate(), 0);
|
| + break;
|
| + case media::AudioLatency::LATENCY_EXACT_MS:
|
| + return media::AudioLatency::GetExactBufferSize(
|
| + base::TimeDelta::FromSecondsD(latency_hint.seconds()),
|
| + hardware_params);
|
| + break;
|
| + default:
|
| + NOTREACHED();
|
| + }
|
| + return 0;
|
| +}
|
| +
|
| int FrameIdFromCurrentContext() {
|
| // Assumption: This method is being invoked within a V8 call stack. CHECKs
|
| // will fail in the call to frameForCurrentContext() otherwise.
|
| @@ -107,32 +134,11 @@ RendererWebAudioDeviceImpl::RendererWebAudioDeviceImpl(
|
| media::AudioParameters hardware_params(device_params_cb.Run(
|
| frame_id_, session_id_, std::string(), security_origin_));
|
|
|
| - int output_buffer_size = 0;
|
| -
|
| media::AudioLatency::LatencyType latency =
|
| AudioDeviceFactory::GetSourceLatencyType(
|
| - GetLatencyHintSourceType(latency_hint_.category()));
|
| -
|
| - // Adjust output buffer size according to the latency requirement.
|
| - switch (latency) {
|
| - case media::AudioLatency::LATENCY_INTERACTIVE:
|
| - output_buffer_size = media::AudioLatency::GetInteractiveBufferSize(
|
| - hardware_params.frames_per_buffer());
|
| - break;
|
| - case media::AudioLatency::LATENCY_RTC:
|
| - output_buffer_size = media::AudioLatency::GetRtcBufferSize(
|
| - hardware_params.sample_rate(), hardware_params.frames_per_buffer());
|
| - break;
|
| - case media::AudioLatency::LATENCY_PLAYBACK:
|
| - output_buffer_size = media::AudioLatency::GetHighLatencyBufferSize(
|
| - hardware_params.sample_rate(), 0);
|
| - break;
|
| - case media::AudioLatency::LATENCY_EXACT_MS:
|
| - // TODO(olka): add support when WebAudio requires it.
|
| - default:
|
| - NOTREACHED();
|
| - }
|
| -
|
| + GetLatencyHintSourceType(latency_hint.category()));
|
| + int output_buffer_size =
|
| + GetOutputBufferSize(latency_hint_, latency, hardware_params);
|
| DCHECK_NE(output_buffer_size, 0);
|
|
|
| sink_params_.Reset(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, layout,
|
|
|