Chromium Code Reviews| Index: third_party/WebKit/Source/modules/webaudio/AudioParam.cpp |
| diff --git a/third_party/WebKit/Source/modules/webaudio/AudioParam.cpp b/third_party/WebKit/Source/modules/webaudio/AudioParam.cpp |
| index c36bee42e9a534d50fe987adcd0c6aa22df81e6f..f524c7c15493021894939d5bc0ee6ee211df8600 100644 |
| --- a/third_party/WebKit/Source/modules/webaudio/AudioParam.cpp |
| +++ b/third_party/WebKit/Source/modules/webaudio/AudioParam.cpp |
| @@ -24,10 +24,13 @@ |
| */ |
| #include "modules/webaudio/AudioParam.h" |
| + |
| +#include "core/inspector/ConsoleMessage.h" |
| #include "modules/webaudio/AudioNode.h" |
| #include "modules/webaudio/AudioNodeOutput.h" |
| #include "platform/FloatConversion.h" |
| #include "platform/audio/AudioUtilities.h" |
| +#include "platform/v8_inspector/public/ConsoleTypes.h" |
| #include "wtf/MathExtras.h" |
| namespace blink { |
| @@ -35,11 +38,13 @@ namespace blink { |
| const double AudioParamHandler::DefaultSmoothingConstant = 0.05; |
| const double AudioParamHandler::SnapThreshold = 0.001; |
| -AudioParamHandler::AudioParamHandler(AbstractAudioContext& context, AudioParamType paramType, double defaultValue) |
| +AudioParamHandler::AudioParamHandler(AbstractAudioContext& context, AudioParamType paramType, double defaultValue, float minValue, float maxValue) |
| : AudioSummingJunction(context.deferredTaskHandler()) |
| , m_paramType(paramType) |
| , m_intrinsicValue(defaultValue) |
| , m_defaultValue(defaultValue) |
| + , m_minValue(minValue) |
| + , m_maxValue(maxValue) |
| , m_smoothedValue(defaultValue) |
| { |
| // The destination MUST exist because we need the destination handler for the AudioParam. |
| @@ -112,6 +117,12 @@ float AudioParamHandler::value() |
| return v; |
| } |
| +void AudioParamHandler::setIntrinsicValue(float newValue) |
| +{ |
| + newValue = clampTo(newValue, m_minValue, m_maxValue); |
| + noBarrierStore(&m_intrinsicValue, newValue); |
| +} |
| + |
| void AudioParamHandler::setValue(float value) |
| { |
| setIntrinsicValue(value); |
| @@ -249,15 +260,25 @@ void AudioParamHandler::disconnect(AudioNodeOutput& output) |
| // ---------------------------------------------------------------- |
| -AudioParam::AudioParam(AbstractAudioContext& context, AudioParamType paramType, double defaultValue) |
| - : m_handler(AudioParamHandler::create(context, paramType, defaultValue)) |
| +AudioParam::AudioParam(AbstractAudioContext& context, AudioParamType paramType, double defaultValue, float minValue, float maxValue) |
| + : m_handler(AudioParamHandler::create(context, paramType, defaultValue, minValue, maxValue)) |
| , m_context(context) |
| { |
| } |
| AudioParam* AudioParam::create(AbstractAudioContext& context, AudioParamType paramType, double defaultValue) |
| { |
| - return new AudioParam(context, paramType, defaultValue); |
| + // Default nominal range is most negative float to most positive. This basically means any |
| + // value is valid, except that floating-point infinities are excluded. |
| + float limit = std::numeric_limits<float>::max(); |
| + return new AudioParam(context, paramType, defaultValue, -limit, limit); |
| +} |
| + |
| +AudioParam* AudioParam::create(AbstractAudioContext& context, AudioParamType paramType, double defaultValue, |
| + float min, float max) |
|
hongchan
2016/05/13 01:30:15
Here as well.
Raymond Toy
2016/05/13 18:40:32
Done.
|
| +{ |
| + DCHECK(min <= max); |
| + return new AudioParam(context, paramType, defaultValue, min, max); |
| } |
| DEFINE_TRACE(AudioParam) |
| @@ -270,8 +291,25 @@ float AudioParam::value() const |
| return handler().value(); |
| } |
| +void AudioParam::warnIfOutsideRange(float value, float minValue, float maxValue) |
| +{ |
| + if (value < minValue || value > maxValue) { |
| + context()->getExecutionContext()->addConsoleMessage( |
| + ConsoleMessage::create( |
| + JSMessageSource, |
| + WarningMessageLevel, |
| + handler().getParamName() |
| + + " value " |
| + + String::number(value) |
| + + " outside nominal range [" |
| + + String::number(minValue) + ", " + String::number(maxValue) |
| + + "]; value will be clamped.")); |
| + } |
| +} |
| + |
| void AudioParam::setValue(float value) |
| { |
| + warnIfOutsideRange(value, minValue(), maxValue()); |
| handler().setValue(value); |
| } |
| @@ -280,6 +318,16 @@ float AudioParam::defaultValue() const |
| return handler().defaultValue(); |
| } |
| +float AudioParam::minValue() const |
| +{ |
| + return handler().minValue(); |
| +} |
| + |
| +float AudioParam::maxValue() const |
| +{ |
| + return handler().maxValue(); |
| +} |
| + |
| AudioParam* AudioParam::setValueAtTime(float value, double time, ExceptionState& exceptionState) |
| { |
| handler().timeline().setValueAtTime(value, time, exceptionState); |