// 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; // Rotation to apply when rendering, in degrees clockwise. readonly attribute unsigned long rotation; // Whether the rendering is flipped horizontally after rotation. readonly attribute boolean flip; // Display aspect ratio of visible rect, after accounting for rotation. readonly attribute unsigned long displayWidth; readonly attribute unsigned long displayHeight; // Color space of the data produced by copyTo(). readonly attribute VideoColorSpace colorSpace; // The VideoFrameMetadata associated with this frame. Possible members are // recorded in https://www.w3.org/TR/webcodecs-video-frame-metadata-registry/. // By design, all VideoFrameMetadata properties are serializable. [RaisesException, RuntimeEnabled="VideoFrameMetadataRtpTimestamp"] VideoFrameMetadata metadata(); // 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> copyTo( AllowSharedBufferSource destination, optional VideoFrameCopyToOptions options = {}); // Creates a copy of this VideoFrame, which needs to be independently closed. [RaisesException] VideoFrame clone(); void close(); };