Source code

Revision control

Copy as Markdown

Other Tools

/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at
* The origin of this IDL file is
enum AlphaOption {
// [Serializable, Transferable] are implemented without adding attributes here.
[Exposed=(Window,DedicatedWorker), Pref=""]
interface VideoFrame {
// The constructors should be shorten to:
// ```
// constructor([AllowShared] BufferSource data, VideoFrameBufferInit init);
// constructor(CanvasImageSource image, optional VideoFrameInit init = {});
// ```
// However, `[AllowShared] BufferSource` doesn't work for now (bug 1696216), and
// `No support for unions as distinguishing arguments yet` error occurs when using
// `constructor(CanvasImageSource image, optional VideoFrameInit init = {})` and
// `constructor(([AllowShared] ArrayBufferView or [AllowShared] ArrayBuffer) data, VideoFrameBufferInit init)`
// at the same time (bug 1786410).
constructor(HTMLImageElement imageElement, optional VideoFrameInit init = {});
constructor(SVGImageElement svgImageElement, optional VideoFrameInit init = {});
constructor(HTMLCanvasElement canvasElement, optional VideoFrameInit init = {});
constructor(HTMLVideoElement videoElement, optional VideoFrameInit init = {});
constructor(OffscreenCanvas offscreenCanvas, optional VideoFrameInit init = {});
constructor(ImageBitmap imageBitmap, optional VideoFrameInit init = {});
constructor(VideoFrame videoFrame, optional VideoFrameInit init = {});
constructor([AllowShared] ArrayBufferView bufferView, VideoFrameBufferInit init);
constructor([AllowShared] ArrayBuffer buffer, VideoFrameBufferInit init);
readonly attribute VideoPixelFormat? format;
readonly attribute unsigned long codedWidth;
readonly attribute unsigned long codedHeight;
readonly attribute DOMRectReadOnly? codedRect;
readonly attribute DOMRectReadOnly? visibleRect;
readonly attribute unsigned long displayWidth;
readonly attribute unsigned long displayHeight;
readonly attribute unsigned long long? duration; // microseconds
readonly attribute long long timestamp; // microseconds
readonly attribute VideoColorSpace colorSpace;
unsigned long allocationSize(
optional VideoFrameCopyToOptions options = {});
Promise<sequence<PlaneLayout>> copyTo(
// bug 1696216: Should be `copyTo([AllowShared] BufferSource destination, ...)`
([AllowShared] ArrayBufferView or [AllowShared] ArrayBuffer) destination,
optional VideoFrameCopyToOptions options = {});
VideoFrame clone();
undefined close();
dictionary VideoFrameInit {
unsigned long long duration; // microseconds
long long timestamp; // microseconds
AlphaOption alpha = "keep";
// Default matches image. May be used to efficiently crop. Will trigger
// new computation of displayWidth and displayHeight using image’s pixel
// aspect ratio unless an explicit displayWidth and displayHeight are given.
DOMRectInit visibleRect;
// Default matches image unless visibleRect is provided.
[EnforceRange] unsigned long displayWidth;
[EnforceRange] unsigned long displayHeight;
dictionary VideoFrameBufferInit {
required VideoPixelFormat format;
required [EnforceRange] unsigned long codedWidth;
required [EnforceRange] unsigned long codedHeight;
required [EnforceRange] long long timestamp; // microseconds
[EnforceRange] unsigned long long duration; // microseconds
// Default layout is tightly-packed.
sequence<PlaneLayout> layout;
// Default visible rect is coded size positioned at (0,0)
DOMRectInit visibleRect;
// Default display dimensions match visibleRect.
[EnforceRange] unsigned long displayWidth;
[EnforceRange] unsigned long displayHeight;
VideoColorSpaceInit colorSpace;
dictionary VideoFrameCopyToOptions {
DOMRectInit rect;
sequence<PlaneLayout> layout;
dictionary PlaneLayout {
required [EnforceRange] unsigned long offset;
required [EnforceRange] unsigned long stride;
enum VideoPixelFormat {
// 4:2:0 Y, U, V
// 4:2:0 Y, U, V, A
// 4:2:2 Y, U, V
// 4:4:4 Y, U, V
// 4:2:0 Y, UV
// 32bpp RGBA
// 32bpp RGBX (opaque)
// 32bpp BGRA
// 32bpp BGRX (opaque)