/* * Copyright (C) 2010, Google Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. */ #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_WEBAUDIO_AUDIO_NODE_H_ #define THIRD_PARTY_BLINK_RENDERER_MODULES_WEBAUDIO_AUDIO_NODE_H_ #include "base/memory/scoped_refptr.h" #include "third_party/blink/renderer/modules/event_target_modules.h" #include "third_party/blink/renderer/modules/modules_export.h" #include "third_party/blink/renderer/modules/webaudio/audio_handler.h" #include "third_party/blink/renderer/modules/webaudio/inspector_helper_mixin.h" #include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_set.h" #include "third_party/blink/renderer/platform/heap/prefinalizer.h" namespace blink { class BaseAudioContext; class AudioHandler; class AudioNodeOptions; class AudioParam; class DeferredTaskHandler; class ExceptionState; // An AudioNode is the basic building block for handling audio within an // BaseAudioContext. It may be an audio source, an intermediate processing // module, or an audio destination. Each AudioNode can have inputs and/or // outputs. An AudioSourceNode has no inputs and a single output. // An AudioDestinationNode has one input and no outputs and represents the final // destination to the audio hardware. Most processing nodes such as filters // will have one input and one output, although multiple inputs and outputs are // possible. // Each of AudioNode objects owns its dedicated AudioHandler object. AudioNode // is responsible to provide IDL-accessible interface and its lifetime is // managed by Oilpan GC. AudioHandler is responsible for anything else. We must // not touch AudioNode objects in an audio rendering thread. // AudioHandler is created and owned by an AudioNode almost all the time. When // the AudioNode is about to die, the ownership of its AudioHandler is // transferred to DeferredTaskHandler, and it does deref the AudioHandler on the // main thread. // // Be careful to avoid reference cycles. If an AudioHandler has a reference // cycle including the owner AudioNode, objects in the cycle are never // collected. class MODULES_EXPORT AudioNode : public EventTarget, public InspectorHelperMixin { … }; } // namespace blink #endif // THIRD_PARTY_BLINK_RENDERER_MODULES_WEBAUDIO_AUDIO_NODE_H_