gecko-dev/dom/webidl/HTMLVideoElement.webidl
Andrew Osmond f9137675d2 Bug 1908245 - Add support for missing requestVideoFrameCallback parameters. r=media-playback-reviewers,webidl,padenot,saschanaz
This patch adds support for exposing the capture time, receive time,
processing duration and RTP timestamp parameters on the callback for
rVFC for WebRTC related elements.

It also improves the accuracy of the media time paramater for normal
playback.

Differential Revision: https://phabricator.services.mozilla.com/D221671
2024-09-13 18:19:57 +00:00

115 lines
4.3 KiB
Plaintext

/* -*- 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://html.spec.whatwg.org/multipage/media.html#the-video-element
* https://wicg.github.io/video-rvfc/
*
* © Copyright 2004-2011 Apple Computer, Inc., Mozilla Foundation, and
* Opera Software ASA. You are granted a license to use, reproduce
* and create derivative works of this document.
*/
dictionary VideoFrameCallbackMetadata {
required DOMHighResTimeStamp presentationTime;
required DOMHighResTimeStamp expectedDisplayTime;
required unsigned long width;
required unsigned long height;
required double mediaTime;
required unsigned long presentedFrames;
double processingDuration;
DOMHighResTimeStamp captureTime;
DOMHighResTimeStamp receiveTime;
unsigned long rtpTimestamp;
};
callback VideoFrameRequestCallback =
undefined(DOMHighResTimeStamp now, VideoFrameCallbackMetadata metadata);
[Exposed=Window,
InstrumentedProps=(onenterpictureinpicture,
onleavepictureinpicture,
playsInline,
requestPictureInPicture)]
interface HTMLVideoElement : HTMLMediaElement {
[HTMLConstructor] constructor();
[CEReactions, SetterThrows]
attribute unsigned long width;
[CEReactions, SetterThrows]
attribute unsigned long height;
readonly attribute unsigned long videoWidth;
readonly attribute unsigned long videoHeight;
[CEReactions, SetterThrows]
attribute DOMString poster;
};
partial interface HTMLVideoElement {
// A count of the number of video frames that have demuxed from the media
// resource. If we were playing perfectly, we'd be able to paint this many
// frames.
readonly attribute unsigned long mozParsedFrames;
// A count of the number of frames that have been decoded. We may drop
// frames if the decode is taking too much time.
readonly attribute unsigned long mozDecodedFrames;
// A count of the number of frames that have been presented to the rendering
// pipeline. We may drop frames if they arrive late at the renderer.
readonly attribute unsigned long mozPresentedFrames;
// Number of presented frames which were painted on screen.
readonly attribute unsigned long mozPaintedFrames;
// Time which the last painted video frame was late by, in seconds.
readonly attribute double mozFrameDelay;
// True if the video has an audio track available.
readonly attribute boolean mozHasAudio;
// Clones the frames playing in this <video> to the target. Cloning ends
// when either node is removed from their DOM trees. Throws if one or
// both <video> elements are not attached to a DOM tree.
// Returns a promise that resolves when the target's ImageContainer has been
// installed in this <video>'s MediaDecoder, or selected video
// MediaStreamTrack, whichever is available first. Note that it might never
// resolve.
[NewObject, Func="IsChromeOrUAWidget"]
Promise<undefined> cloneElementVisually(HTMLVideoElement target);
// Stops a <video> from cloning visually. Does nothing if the <video>
// wasn't cloning in the first place.
[Func="IsChromeOrUAWidget"]
undefined stopCloningElementVisually();
// Returns true if the <video> is being cloned visually to another
// <video> element (see cloneElementVisually).
[Func="IsChromeOrUAWidget"]
readonly attribute boolean isCloningElementVisually;
};
// https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#idl-def-HTMLVideoElement
partial interface HTMLVideoElement {
[Pref="media.mediasource.enabled", NewObject]
VideoPlaybackQuality getVideoPlaybackQuality();
};
// https://w3c.github.io/picture-in-picture/#htmlvideoelement-extensions
partial interface HTMLVideoElement {
[CEReactions, SetterThrows] attribute boolean disablePictureInPicture;
};
// https://wicg.github.io/video-rvfc
partial interface HTMLVideoElement {
[Pref="media.rvfc.enabled", Throws]
unsigned long requestVideoFrameCallback(VideoFrameRequestCallback callback);
[Pref="media.rvfc.enabled"]
undefined cancelVideoFrameCallback(unsigned long handle);
};