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

Side by Side Diff: Source/modules/webaudio/AudioContext.cpp

Issue 606653006: bindings: Adds DOMArrayBuffer, etc. as thin wrappers for ArrayBuffer, etc. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Synced. Created 6 years, 2 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/modules/webaudio/AudioContext.h ('k') | Source/modules/webaudio/AudioContext.idl » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 16 matching lines...) Expand all
27 #if ENABLE(WEB_AUDIO) 27 #if ENABLE(WEB_AUDIO)
28 28
29 #include "modules/webaudio/AudioContext.h" 29 #include "modules/webaudio/AudioContext.h"
30 30
31 #include "bindings/core/v8/ExceptionMessages.h" 31 #include "bindings/core/v8/ExceptionMessages.h"
32 #include "bindings/core/v8/ExceptionState.h" 32 #include "bindings/core/v8/ExceptionState.h"
33 #include "core/dom/Document.h" 33 #include "core/dom/Document.h"
34 #include "core/dom/ExceptionCode.h" 34 #include "core/dom/ExceptionCode.h"
35 #include "core/html/HTMLMediaElement.h" 35 #include "core/html/HTMLMediaElement.h"
36 #include "core/inspector/ScriptCallStack.h" 36 #include "core/inspector/ScriptCallStack.h"
37 #include "platform/audio/FFTFrame.h"
38 #include "platform/audio/HRTFPanner.h"
39 #include "modules/mediastream/MediaStream.h" 37 #include "modules/mediastream/MediaStream.h"
40 #include "modules/webaudio/AnalyserNode.h" 38 #include "modules/webaudio/AnalyserNode.h"
41 #include "modules/webaudio/AudioBuffer.h" 39 #include "modules/webaudio/AudioBuffer.h"
42 #include "modules/webaudio/AudioBufferCallback.h" 40 #include "modules/webaudio/AudioBufferCallback.h"
43 #include "modules/webaudio/AudioBufferSourceNode.h" 41 #include "modules/webaudio/AudioBufferSourceNode.h"
44 #include "modules/webaudio/AudioListener.h" 42 #include "modules/webaudio/AudioListener.h"
45 #include "modules/webaudio/AudioNodeInput.h" 43 #include "modules/webaudio/AudioNodeInput.h"
46 #include "modules/webaudio/AudioNodeOutput.h" 44 #include "modules/webaudio/AudioNodeOutput.h"
47 #include "modules/webaudio/BiquadFilterNode.h" 45 #include "modules/webaudio/BiquadFilterNode.h"
48 #include "modules/webaudio/ChannelMergerNode.h" 46 #include "modules/webaudio/ChannelMergerNode.h"
49 #include "modules/webaudio/ChannelSplitterNode.h" 47 #include "modules/webaudio/ChannelSplitterNode.h"
50 #include "modules/webaudio/ConvolverNode.h" 48 #include "modules/webaudio/ConvolverNode.h"
51 #include "modules/webaudio/DefaultAudioDestinationNode.h" 49 #include "modules/webaudio/DefaultAudioDestinationNode.h"
52 #include "modules/webaudio/DelayNode.h" 50 #include "modules/webaudio/DelayNode.h"
53 #include "modules/webaudio/DynamicsCompressorNode.h" 51 #include "modules/webaudio/DynamicsCompressorNode.h"
54 #include "modules/webaudio/GainNode.h" 52 #include "modules/webaudio/GainNode.h"
55 #include "modules/webaudio/MediaElementAudioSourceNode.h" 53 #include "modules/webaudio/MediaElementAudioSourceNode.h"
56 #include "modules/webaudio/MediaStreamAudioDestinationNode.h" 54 #include "modules/webaudio/MediaStreamAudioDestinationNode.h"
57 #include "modules/webaudio/MediaStreamAudioSourceNode.h" 55 #include "modules/webaudio/MediaStreamAudioSourceNode.h"
58 #include "modules/webaudio/OfflineAudioCompletionEvent.h" 56 #include "modules/webaudio/OfflineAudioCompletionEvent.h"
59 #include "modules/webaudio/OfflineAudioContext.h" 57 #include "modules/webaudio/OfflineAudioContext.h"
60 #include "modules/webaudio/OfflineAudioDestinationNode.h" 58 #include "modules/webaudio/OfflineAudioDestinationNode.h"
61 #include "modules/webaudio/OscillatorNode.h" 59 #include "modules/webaudio/OscillatorNode.h"
62 #include "modules/webaudio/PannerNode.h" 60 #include "modules/webaudio/PannerNode.h"
63 #include "modules/webaudio/PeriodicWave.h" 61 #include "modules/webaudio/PeriodicWave.h"
64 #include "modules/webaudio/ScriptProcessorNode.h" 62 #include "modules/webaudio/ScriptProcessorNode.h"
65 #include "modules/webaudio/WaveShaperNode.h" 63 #include "modules/webaudio/WaveShaperNode.h"
64 #include "platform/audio/FFTFrame.h"
65 #include "platform/audio/HRTFPanner.h"
66 #include "wtf/Atomics.h"
67 #include "wtf/PassOwnPtr.h"
68 #include "wtf/text/WTFString.h"
66 69
67 #if DEBUG_AUDIONODE_REFERENCES 70 #if DEBUG_AUDIONODE_REFERENCES
68 #include <stdio.h> 71 #include <stdio.h>
69 #endif 72 #endif
70 73
71 #include "wtf/ArrayBuffer.h"
72 #include "wtf/Atomics.h"
73 #include "wtf/PassOwnPtr.h"
74 #include "wtf/text/WTFString.h"
75
76 namespace blink { 74 namespace blink {
77 75
78 // Don't allow more than this number of simultaneous AudioContexts talking to ha rdware. 76 // Don't allow more than this number of simultaneous AudioContexts talking to ha rdware.
79 const unsigned MaxHardwareContexts = 6; 77 const unsigned MaxHardwareContexts = 6;
80 unsigned AudioContext::s_hardwareContextCount = 0; 78 unsigned AudioContext::s_hardwareContextCount = 0;
81 79
82 AudioContext* AudioContext::create(Document& document, ExceptionState& exception State) 80 AudioContext* AudioContext::create(Document& document, ExceptionState& exception State)
83 { 81 {
84 ASSERT(isMainThread()); 82 ASSERT(isMainThread());
85 if (s_hardwareContextCount >= MaxHardwareContexts) { 83 if (s_hardwareContextCount >= MaxHardwareContexts) {
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 { 220 {
223 // According to spec AudioContext must die only after page navigates. 221 // According to spec AudioContext must die only after page navigates.
224 return !m_isCleared; 222 return !m_isCleared;
225 } 223 }
226 224
227 AudioBuffer* AudioContext::createBuffer(unsigned numberOfChannels, size_t number OfFrames, float sampleRate, ExceptionState& exceptionState) 225 AudioBuffer* AudioContext::createBuffer(unsigned numberOfChannels, size_t number OfFrames, float sampleRate, ExceptionState& exceptionState)
228 { 226 {
229 return AudioBuffer::create(numberOfChannels, numberOfFrames, sampleRate, exc eptionState); 227 return AudioBuffer::create(numberOfChannels, numberOfFrames, sampleRate, exc eptionState);
230 } 228 }
231 229
232 void AudioContext::decodeAudioData(ArrayBuffer* audioData, AudioBufferCallback* successCallback, AudioBufferCallback* errorCallback, ExceptionState& exceptionSt ate) 230 void AudioContext::decodeAudioData(DOMArrayBuffer* audioData, AudioBufferCallbac k* successCallback, AudioBufferCallback* errorCallback, ExceptionState& exceptio nState)
233 { 231 {
234 if (!audioData) { 232 if (!audioData) {
235 exceptionState.throwDOMException( 233 exceptionState.throwDOMException(
236 SyntaxError, 234 SyntaxError,
237 "invalid ArrayBuffer for audioData."); 235 "invalid ArrayBuffer for audioData.");
238 return; 236 return;
239 } 237 }
240 m_audioDecoder.decodeAsync(audioData, sampleRate(), successCallback, errorCa llback); 238 m_audioDecoder.decodeAsync(audioData->buffer(), sampleRate(), successCallbac k, errorCallback);
241 } 239 }
242 240
243 AudioBufferSourceNode* AudioContext::createBufferSource() 241 AudioBufferSourceNode* AudioContext::createBufferSource()
244 { 242 {
245 ASSERT(isMainThread()); 243 ASSERT(isMainThread());
246 AudioBufferSourceNode* node = AudioBufferSourceNode::create(this, m_destinat ionNode->sampleRate()); 244 AudioBufferSourceNode* node = AudioBufferSourceNode::create(this, m_destinat ionNode->sampleRate());
247 245
248 // Because this is an AudioScheduledSourceNode, the context keeps a referenc e until it has finished playing. 246 // Because this is an AudioScheduledSourceNode, the context keeps a referenc e until it has finished playing.
249 // When this happens, AudioScheduledSourceNode::finish() calls AudioContext: :notifyNodeFinishedProcessing(). 247 // When this happens, AudioScheduledSourceNode::finish() calls AudioContext: :notifyNodeFinishedProcessing().
250 refNode(node); 248 refNode(node);
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 476
479 OscillatorNode* node = OscillatorNode::create(this, m_destinationNode->sampl eRate()); 477 OscillatorNode* node = OscillatorNode::create(this, m_destinationNode->sampl eRate());
480 478
481 // Because this is an AudioScheduledSourceNode, the context keeps a referenc e until it has finished playing. 479 // Because this is an AudioScheduledSourceNode, the context keeps a referenc e until it has finished playing.
482 // When this happens, AudioScheduledSourceNode::finish() calls AudioContext: :notifyNodeFinishedProcessing(). 480 // When this happens, AudioScheduledSourceNode::finish() calls AudioContext: :notifyNodeFinishedProcessing().
483 refNode(node); 481 refNode(node);
484 482
485 return node; 483 return node;
486 } 484 }
487 485
488 PeriodicWave* AudioContext::createPeriodicWave(Float32Array* real, Float32Array* imag, ExceptionState& exceptionState) 486 PeriodicWave* AudioContext::createPeriodicWave(DOMFloat32Array* real, DOMFloat32 Array* imag, ExceptionState& exceptionState)
489 { 487 {
490 ASSERT(isMainThread()); 488 ASSERT(isMainThread());
491 489
492 if (!real) { 490 if (!real) {
493 exceptionState.throwDOMException( 491 exceptionState.throwDOMException(
494 SyntaxError, 492 SyntaxError,
495 "invalid real array"); 493 "invalid real array");
496 return 0; 494 return 0;
497 } 495 }
498 496
(...skipping 22 matching lines...) Expand all
521 } 519 }
522 520
523 if (imag->length() > 4096) { 521 if (imag->length() > 4096) {
524 exceptionState.throwDOMException( 522 exceptionState.throwDOMException(
525 IndexSizeError, 523 IndexSizeError,
526 "length of imaginary array (" + String::number(imag->length()) 524 "length of imaginary array (" + String::number(imag->length())
527 + ") exceeds allowed maximum of 4096"); 525 + ") exceeds allowed maximum of 4096");
528 return 0; 526 return 0;
529 } 527 }
530 528
531 return PeriodicWave::create(sampleRate(), real, imag); 529 return PeriodicWave::create(sampleRate(), real->view(), imag->view());
532 } 530 }
533 531
534 void AudioContext::notifyNodeFinishedProcessing(AudioNode* node) 532 void AudioContext::notifyNodeFinishedProcessing(AudioNode* node)
535 { 533 {
536 ASSERT(isAudioThread()); 534 ASSERT(isAudioThread());
537 m_finishedNodes.append(node); 535 m_finishedNodes.append(node);
538 } 536 }
539 537
540 void AudioContext::derefFinishedSourceNodes() 538 void AudioContext::derefFinishedSourceNodes()
541 { 539 {
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
867 865
868 for (HashSet<AudioNode*>::iterator k = m_deferredCountModeChange.begin(); k != m_deferredCountModeChange.end(); ++k) 866 for (HashSet<AudioNode*>::iterator k = m_deferredCountModeChange.begin(); k != m_deferredCountModeChange.end(); ++k)
869 (*k)->updateChannelCountMode(); 867 (*k)->updateChannelCountMode();
870 868
871 m_deferredCountModeChange.clear(); 869 m_deferredCountModeChange.clear();
872 } 870 }
873 871
874 } // namespace blink 872 } // namespace blink
875 873
876 #endif // ENABLE(WEB_AUDIO) 874 #endif // ENABLE(WEB_AUDIO)
OLDNEW
« no previous file with comments | « Source/modules/webaudio/AudioContext.h ('k') | Source/modules/webaudio/AudioContext.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698