// 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/dalecurtis/image-decoder-api/blob/master/explainer.md
// An ImageDecoder decodes images.
[
Exposed=(Window,DedicatedWorker),
SecureContext,
ImplementedAs=ImageDecoderExternal,
ActiveScriptWrappable
] interface ImageDecoder {
[CallWith=ScriptState, RaisesException, MeasureAs=WebCodecsImageDecoder] constructor(ImageDecoderInit init);
// Returns true if ImageDecoder supports decoding of the given mime type.
[CallWith=ScriptState]
static Promise<boolean> isTypeSupported(DOMString type);
// Decodes a frame using the given |options| or the first frame if no options
// are provided. If data is still being received, the promise won't be
// resolved or rejected until the given |options.frameIndex| is available,
// all data is received, or a decoding error occurs.
Promise<ImageDecodeResult> decode(optional ImageDecodeOptions options);
// Aborts all pending metadata and decode promises.
void reset();
// Immediately shut down the decoder and free its resources. All pending
// decode requests are aborted.
//
// Not recoverable: make a new ImageDecoder if needed.
void close();
// The mime type for the decoded image. This reflects the value provided
// during construction.
readonly attribute DOMString type;
// True if all available data has been received by the decoder. Always true
// when an ArrayBuffer is provided at construction. False for ReadableStream
// usage
readonly attribute boolean complete;
// Property-based promise for signaling that all data has been received.
[CallWith=ScriptState] readonly attribute Promise<undefined> completed;
// List of tracks available in this image.
//
// When decoding a ReadableStream the array will be empty until enough data to
// decode metadata has been received.
[SameObject] readonly attribute ImageTrackList tracks;
};