chromium/third_party/blink/renderer/modules/webcodecs/video_frame.idl

// 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();
};