// Copyright 2019 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
typedef ([AllowShared] ArrayBuffer or [AllowShared] ArrayBufferView) AllowSharedBufferSource;
[
Exposed=(Window,DedicatedWorker),
Serializable
] interface VideoFrame {
[CallWith=ScriptState, RaisesException, MeasureAs=WebCodecsVideoFrameFromImage]
constructor(CanvasImageSource source, optional VideoFrameInit init = {});
[CallWith=ScriptState, RaisesException, MeasureAs=WebCodecsVideoFrameFromBuffer]
constructor(AllowSharedBufferSource data, VideoFrameBufferInit init);
readonly attribute VideoPixelFormat? format;
// Presentation timestamp, in microseconds.
readonly attribute long long timestamp;
// Presentation duration, in microseconds.
readonly attribute unsigned long long? duration;
// Dimensions of this frame's pixel data; typically padded to a macroblock
// multiple.
readonly attribute unsigned long codedWidth;
readonly attribute unsigned long codedHeight;
// Convenience accessor, origin is always (0, 0).
readonly attribute DOMRectReadOnly? codedRect;
// Area of this frame's pixel data that is not padding.
readonly attribute DOMRectReadOnly? visibleRect;
// Display aspect ratio of visible rect.
readonly attribute unsigned long displayWidth;
readonly attribute unsigned long displayHeight;
// Color space of the data produced by copyTo().
readonly attribute VideoColorSpace colorSpace;
// Returns the minimum size (in bytes) of a buffer that copyTo() could
// copy this frame into with the given options.
[RaisesException] unsigned long allocationSize(
optional VideoFrameCopyToOptions options = {});
// Copy the planes of this frame into |destination| according to |options|.
// The format of the data is the same as this frame's |format|.
[CallWith=ScriptState, RaisesException]
Promise<sequence<PlaneLayout>> copyTo(
AllowSharedBufferSource destination,
optional VideoFrameCopyToOptions options = {});
// Creates a copy of this VideoFrame, which needs to be independently closed.
[RaisesException] VideoFrame clone();
void close();
};