blob: cff1e23852544694654a81d838d0bc594072e6bb [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_WEBAUDIO_AUDIO_NODE_WIRING_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_WEBAUDIO_AUDIO_NODE_WIRING_H_
#include "third_party/blink/renderer/modules/modules_export.h"
#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
namespace blink {
class AudioNodeInput;
class AudioNodeOutput;
class AudioParamHandler;
// Utilities for connecting AudioHandlers to one another, via AudioNodeInput and
// AudioNodeOutput. Gathered into one place that can see the internals of both,
// to avoid both needing to call one another back and forth.
//
// An AudioNodeOutput can also be connected to an AudioParamHandler.
//
// All functions require the graph lock.
class MODULES_EXPORT AudioNodeWiring {
STATIC_ONLY(AudioNodeWiring);
public:
// Make or break a connection from an output of one audio node to an input of
// another.
static void Connect(AudioNodeOutput&, AudioNodeInput&);
static void Connect(AudioNodeOutput&, AudioParamHandler&);
static void Disconnect(AudioNodeOutput&, AudioNodeInput&);
static void Disconnect(AudioNodeOutput&, AudioParamHandler&);
// Disable the connection from an output to an input, setting it aside in
// a separate list of disabled connections. Enabling does the reverse.
// Should be called only from AudioNodeOutput, when its state has changed.
static void Disable(AudioNodeOutput&, AudioNodeInput&);
static void Enable(AudioNodeOutput&, AudioNodeInput&);
// Queries whether a connection exists, disabled or not.
static bool IsConnected(AudioNodeOutput&, AudioNodeInput&);
static bool IsConnected(AudioNodeOutput&, AudioParamHandler&);
// Called before complete destruction to remove any remaining connections.
static void WillBeDestroyed(AudioNodeInput&);
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_WEBAUDIO_AUDIO_NODE_WIRING_H_