| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| 11 * notice, this list of conditions and the following disclaimer in the | 11 * notice, this list of conditions and the following disclaimer in the |
| 12 * documentation and/or other materials provided with the distribution. | 12 * documentation and/or other materials provided with the distribution. |
| 13 * | 13 * |
| 14 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY | 14 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY |
| 15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | 15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| 16 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | 16 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| 17 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY | 17 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY |
| 18 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | 18 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
| 19 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | 19 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| 20 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | 20 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
| 21 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 21 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
| 23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 24 */ | 24 */ |
| 25 | 25 |
| 26 #include "modules/webaudio/AudioParam.h" | 26 #include "modules/webaudio/AudioParam.h" |
| 27 | 27 |
| 28 #include "core/dom/ExceptionCode.h" |
| 28 #include "core/inspector/ConsoleMessage.h" | 29 #include "core/inspector/ConsoleMessage.h" |
| 29 #include "modules/webaudio/AudioNode.h" | 30 #include "modules/webaudio/AudioNode.h" |
| 30 #include "modules/webaudio/AudioNodeOutput.h" | 31 #include "modules/webaudio/AudioNodeOutput.h" |
| 31 #include "platform/FloatConversion.h" | 32 #include "platform/FloatConversion.h" |
| 32 #include "platform/Histogram.h" | 33 #include "platform/Histogram.h" |
| 33 #include "platform/audio/AudioUtilities.h" | 34 #include "platform/audio/AudioUtilities.h" |
| 34 #include "platform/v8_inspector/public/ConsoleTypes.h" | 35 #include "platform/v8_inspector/public/ConsoleTypes.h" |
| 35 #include "wtf/MathExtras.h" | 36 #include "wtf/MathExtras.h" |
| 36 | 37 |
| 37 namespace blink { | 38 namespace blink { |
| (...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 447 warnIfOutsideRange("setTargetAtTime value", target); | 448 warnIfOutsideRange("setTargetAtTime value", target); |
| 448 handler().timeline().setTargetAtTime(target, time, timeConstant, exceptionSt
ate); | 449 handler().timeline().setTargetAtTime(target, time, timeConstant, exceptionSt
ate); |
| 449 | 450 |
| 450 // Don't update the histogram here. It's not clear in normal usage if the p
arameter value will | 451 // Don't update the histogram here. It's not clear in normal usage if the p
arameter value will |
| 451 // actually reach |target|. | 452 // actually reach |target|. |
| 452 return this; | 453 return this; |
| 453 } | 454 } |
| 454 | 455 |
| 455 AudioParam* AudioParam::setValueCurveAtTime(DOMFloat32Array* curve, double time,
double duration, ExceptionState& exceptionState) | 456 AudioParam* AudioParam::setValueCurveAtTime(DOMFloat32Array* curve, double time,
double duration, ExceptionState& exceptionState) |
| 456 { | 457 { |
| 457 // Just find the first value in the curve (if any) that is outside the nomin
al range. It's | |
| 458 // probably not necessary to produce a warning on every value outside the no
minal range. | |
| 459 float* curveData = curve->data(); | 458 float* curveData = curve->data(); |
| 460 float min = minValue(); | 459 float min = minValue(); |
| 461 float max = maxValue(); | 460 float max = maxValue(); |
| 462 | 461 |
| 462 // First, find any non-finite value in the curve and throw an exception if |
| 463 // there are any. |
| 463 for (unsigned k = 0; k < curve->length(); ++k) { | 464 for (unsigned k = 0; k < curve->length(); ++k) { |
| 464 if (curveData[k] < min || curveData[k] > max) { | 465 float value = curveData[k]; |
| 465 warnIfOutsideRange("setValueCurveAtTime value", curveData[k]); | 466 |
| 467 if (!std::isfinite(value)) { |
| 468 exceptionState.throwDOMException( |
| 469 V8TypeError, |
| 470 "The provided float value for the curve at element " |
| 471 + String::number(k) |
| 472 + " is non-finite: " |
| 473 + String::number(value)); |
| 474 return nullptr; |
| 475 } |
| 476 } |
| 477 |
| 478 // Second, find the first value in the curve (if any) that is outside the |
| 479 // nominal range. It's probably not necessary to produce a warning on every |
| 480 // value outside the nominal range. |
| 481 for (unsigned k = 0; k < curve->length(); ++k) { |
| 482 float value = curveData[k]; |
| 483 |
| 484 if (value < min || value > max) { |
| 485 warnIfOutsideRange("setValueCurveAtTime value", value); |
| 466 break; | 486 break; |
| 467 } | 487 } |
| 468 } | 488 } |
| 469 | 489 |
| 470 handler().timeline().setValueCurveAtTime(curve, time, duration, exceptionSta
te); | 490 handler().timeline().setValueCurveAtTime(curve, time, duration, exceptionSta
te); |
| 471 | 491 |
| 472 // We could update the histogram with every value in the curve, due to inter
polation, we'll | 492 // We could update the histogram with every value in the curve, due to inter
polation, we'll |
| 473 // probably be missing many values. So we don't update the histogram. setV
alueCurveAtTime is | 493 // probably be missing many values. So we don't update the histogram. setV
alueCurveAtTime is |
| 474 // probably a fairly rare method anyway. | 494 // probably a fairly rare method anyway. |
| 475 return this; | 495 return this; |
| 476 } | 496 } |
| 477 | 497 |
| 478 AudioParam* AudioParam::cancelScheduledValues(double startTime, ExceptionState&
exceptionState) | 498 AudioParam* AudioParam::cancelScheduledValues(double startTime, ExceptionState&
exceptionState) |
| 479 { | 499 { |
| 480 handler().timeline().cancelScheduledValues(startTime, exceptionState); | 500 handler().timeline().cancelScheduledValues(startTime, exceptionState); |
| 481 return this; | 501 return this; |
| 482 } | 502 } |
| 483 | 503 |
| 484 } // namespace blink | 504 } // namespace blink |
| 485 | 505 |
| OLD | NEW |