| Index: third_party/WebKit/Source/modules/webaudio/AudioBuffer.cpp
|
| diff --git a/third_party/WebKit/Source/modules/webaudio/AudioBuffer.cpp b/third_party/WebKit/Source/modules/webaudio/AudioBuffer.cpp
|
| index 294a59f0536253049358697418b8dfca28c54bce..8849f4e9b4008659dd158034cf58f6f90015b7ba 100644
|
| --- a/third_party/WebKit/Source/modules/webaudio/AudioBuffer.cpp
|
| +++ b/third_party/WebKit/Source/modules/webaudio/AudioBuffer.cpp
|
| @@ -203,16 +203,18 @@ DOMFloat32Array* AudioBuffer::getChannelData(unsigned channelIndex) {
|
| return m_channels[channelIndex].get();
|
| }
|
|
|
| -void AudioBuffer::copyFromChannel(DOMFloat32Array* destination,
|
| - long channelNumber,
|
| - ExceptionState& exceptionState) {
|
| +void AudioBuffer::copyFromChannel(
|
| + const MaybeShared<DOMFloat32Array>& destination,
|
| + long channelNumber,
|
| + ExceptionState& exceptionState) {
|
| return copyFromChannel(destination, channelNumber, 0, exceptionState);
|
| }
|
|
|
| -void AudioBuffer::copyFromChannel(DOMFloat32Array* destination,
|
| - long channelNumber,
|
| - unsigned long startInChannel,
|
| - ExceptionState& exceptionState) {
|
| +void AudioBuffer::copyFromChannel(
|
| + const MaybeShared<DOMFloat32Array>& destination,
|
| + long channelNumber,
|
| + unsigned long startInChannel,
|
| + ExceptionState& exceptionState) {
|
| if (channelNumber < 0 ||
|
| channelNumber >= static_cast<long>(m_channels.size())) {
|
| exceptionState.throwDOMException(
|
| @@ -237,11 +239,17 @@ void AudioBuffer::copyFromChannel(DOMFloat32Array* destination,
|
| return;
|
| }
|
|
|
| + if (destination.isShared()) {
|
| + exceptionState.throwTypeError(
|
| + "destination can not be backed by a SharedArrayBuffer.");
|
| + return;
|
| + }
|
| +
|
| unsigned count = channelData->length() - startInChannel;
|
| - count = std::min(destination->length(), count);
|
| + count = std::min(destination.viewNotShared()->length(), count);
|
|
|
| const float* src = channelData->data();
|
| - float* dst = destination->data();
|
| + float* dst = destination.viewNotShared()->data();
|
|
|
| DCHECK(src);
|
| DCHECK(dst);
|
| @@ -249,13 +257,13 @@ void AudioBuffer::copyFromChannel(DOMFloat32Array* destination,
|
| memcpy(dst, src + startInChannel, count * sizeof(*src));
|
| }
|
|
|
| -void AudioBuffer::copyToChannel(DOMFloat32Array* source,
|
| +void AudioBuffer::copyToChannel(const MaybeShared<DOMFloat32Array>& source,
|
| long channelNumber,
|
| ExceptionState& exceptionState) {
|
| return copyToChannel(source, channelNumber, 0, exceptionState);
|
| }
|
|
|
| -void AudioBuffer::copyToChannel(DOMFloat32Array* source,
|
| +void AudioBuffer::copyToChannel(const MaybeShared<DOMFloat32Array>& source,
|
| long channelNumber,
|
| unsigned long startInChannel,
|
| ExceptionState& exceptionState) {
|
| @@ -283,10 +291,16 @@ void AudioBuffer::copyToChannel(DOMFloat32Array* source,
|
| return;
|
| }
|
|
|
| + if (source.isShared()) {
|
| + exceptionState.throwTypeError(
|
| + "source can not be backed by a SharedArrayBuffer.");
|
| + return;
|
| + }
|
| +
|
| unsigned count = channelData->length() - startInChannel;
|
| - count = std::min(source->length(), count);
|
| + count = std::min(source.viewNotShared()->length(), count);
|
|
|
| - const float* src = source->data();
|
| + const float* src = source.viewNotShared()->data();
|
| float* dst = channelData->data();
|
|
|
| DCHECK(src);
|
|
|