// Copyright 2020 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 VideoEncoder : EventTarget {
[CallWith=ScriptState, RaisesException, MeasureAs=WebCodecsVideoEncoder]
constructor(VideoEncoderInit 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 video encoder for encoding
// frames as described by config.
[RaisesException]
void configure(VideoEncoderConfig config);
// Enqueues a request to encode a frame.
// Results of the encoding (EncodedVideoChunk) are returned via
// the output callback provided in configure().
[RaisesException]
void encode(VideoFrame frame,
optional VideoEncoderEncodeOptions options = {});
// Enqueues a request to produce outputs for all already encoded frames.
// Resolved after emitting outputs for all previously encoded frames.
[RaisesException]
Promise<undefined> flush();
// Discard all pending work and current encoder configuration.
//
// Output for earlier encoding requests will not be emitted.
// The next encoded frame will be a keyframe.
// 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<VideoEncoderSupport> isConfigSupported(VideoEncoderConfig config);
// Returns a list of all buffers that can be used while encoding
[CallWith=ScriptState, RaisesException, RuntimeEnabled=WebCodecsVideoEncoderBuffers]
sequence<VideoEncoderBuffer> getAllFrameBuffers();
};