diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /dom/webidl/VideoFrame.webidl | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/webidl/VideoFrame.webidl')
-rw-r--r-- | dom/webidl/VideoFrame.webidl | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/dom/webidl/VideoFrame.webidl b/dom/webidl/VideoFrame.webidl new file mode 100644 index 0000000000..ebb4496b0a --- /dev/null +++ b/dom/webidl/VideoFrame.webidl @@ -0,0 +1,137 @@ +/* -*- 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 http://mozilla.org/MPL/2.0/. + * + * The origin of this IDL file is + * https://w3c.github.io/webcodecs/#videoframe + */ + +enum AlphaOption { + "keep", + "discard", +}; + +// [Serializable, Transferable] are implemented without adding attributes here. +[Exposed=(Window,DedicatedWorker), Pref="dom.media.webcodecs.enabled"] +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). + [Throws] + constructor(HTMLImageElement imageElement, optional VideoFrameInit init = {}); + [Throws] + constructor(SVGImageElement svgImageElement, optional VideoFrameInit init = {}); + [Throws] + constructor(HTMLCanvasElement canvasElement, optional VideoFrameInit init = {}); + [Throws] + constructor(HTMLVideoElement videoElement, optional VideoFrameInit init = {}); + [Throws] + constructor(OffscreenCanvas offscreenCanvas, optional VideoFrameInit init = {}); + [Throws] + constructor(ImageBitmap imageBitmap, optional VideoFrameInit init = {}); + [Throws] + constructor(VideoFrame videoFrame, optional VideoFrameInit init = {}); + [Throws] + constructor([AllowShared] ArrayBufferView bufferView, VideoFrameBufferInit init); + [Throws] + 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; + + [Throws] + unsigned long allocationSize( + optional VideoFrameCopyToOptions options = {}); + [Throws] + Promise<sequence<PlaneLayout>> copyTo( + // bug 1696216: Should be `copyTo([AllowShared] BufferSource destination, ...)` + ([AllowShared] ArrayBufferView or [AllowShared] ArrayBuffer) destination, + optional VideoFrameCopyToOptions options = {}); + [Throws] + 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 { + // TODO: https://github.com/w3c/webcodecs/pull/488 + required [EnforceRange] unsigned long offset; + required [EnforceRange] unsigned long stride; +}; + +enum VideoPixelFormat { + // 4:2:0 Y, U, V + "I420", + // 4:2:0 Y, U, V, A + "I420A", + // 4:2:2 Y, U, V + "I422", + // 4:4:4 Y, U, V + "I444", + // 4:2:0 Y, UV + "NV12", + // 32bpp RGBA + "RGBA", + // 32bpp RGBX (opaque) + "RGBX", + // 32bpp BGRA + "BGRA", + // 32bpp BGRX (opaque) + "BGRX", +}; |