// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// https://github.com/WICG/web-codecs
[
Exposed=(Window,DedicatedWorker),
SecureContext,
ActiveScriptWrappable
] interface AudioEncoder : EventTarget {
[CallWith=ScriptState, RaisesException, MeasureAs=WebCodecsAudioEncoder]
constructor(AudioEncoderInit init);
// The number of pending encode requests. This does not include requests
// that have been sent to the underlying codec.
readonly attribute unsigned long encodeQueueSize;
// Fires to signal a decrease in encodeQueueSize. Will fire at most once
// for a given turn of the event loop.
attribute EventHandler ondequeue;
// Enqueues a control message to configure the audio encoder for encoding
// audio data as described by config.
[RaisesException]
void configure(AudioEncoderConfig config);
// Enqueues a request to encode data.
// Results of the encoding (EncodedAudioChunk) are returned via
// the output callback provided in configure().
[RaisesException]
void encode(AudioData data);
// Enqueues a request to produce outputs for all already encoded data.
// Resolved after emitting outputs for all previously encoded data.
[RaisesException]
Promise<undefined> flush();
// Discard all pending work and current encoder configuration.
//
// Output for earlier encoding requests will not be emitted.
// Requires configure() to be call to set configuration once again.
[RaisesException]
void reset();
// Enqueues a request to shut down the encoder and free its resources.
[RaisesException]
void close();
// Which state the encoder is in, indicating which methods can be called.
readonly attribute CodecState state;
// Call prior to configure() to determine whether config will be supported.
[CallWith=ScriptState, RaisesException]
static Promise<AudioEncoderSupport> isConfigSupported(AudioEncoderConfig config);
};