// Generated from WebIDL - DO NOT EDIT
// Source: @webref/idl/video-rvfc
///|
/// VideoFrameRequestCallback callback interface
pub type VideoFrameRequestCallback
///|
/// Create VideoFrameRequestCallback from a MoonBit function
pub extern "js" fn VideoFrameRequestCallback::from_fn(
handler : (DOMHighResTimeStamp, VideoFrameCallbackMetadata) -> Unit,
) -> VideoFrameRequestCallback =
#| (handler) => (a0, a1) => handler(a0, a1)
///|
/// VideoFrameCallbackMetadata dictionary
pub(all) struct VideoFrameCallbackMetadata {
presentationTime : DOMHighResTimeStamp
expectedDisplayTime : DOMHighResTimeStamp
width : Int
height : Int
mediaTime : Double
presentedFrames : Int
processingDuration : Double?
captureTime : DOMHighResTimeStamp?
receiveTime : DOMHighResTimeStamp?
rtpTimestamp : Int?
}
///|
/// Create a new VideoFrameCallbackMetadata
pub fn VideoFrameCallbackMetadata::new(
presentationTime~ : DOMHighResTimeStamp,
expectedDisplayTime~ : DOMHighResTimeStamp,
) -> VideoFrameCallbackMetadata {
VideoFrameCallbackMetadata::{
presentationTime,
expectedDisplayTime,
width: 0,
height: 0,
mediaTime: 0,
presentedFrames: 0,
processingDuration: None,
captureTime: None,
receiveTime: None,
rtpTimestamp: None,
}
}
///|
extern "js" fn VideoFrameCallbackMetadata::to_js_ffi(
self : VideoFrameCallbackMetadata,
) -> JsValue =
#| (self) => ({
#| presentationTime: self.presentationTime,
#| expectedDisplayTime: self.expectedDisplayTime,
#| width: self.width,
#| height: self.height,
#| mediaTime: self.mediaTime,
#| presentedFrames: self.presentedFrames,
#| processingDuration: ((() => { const v = self.processingDuration; if (v === undefined || v.$tag !== 1) return undefined; return v._0; })()),
#| captureTime: ((() => { const v = self.captureTime; if (v === undefined || v.$tag !== 1) return undefined; return v._0; })()),
#| receiveTime: ((() => { const v = self.receiveTime; if (v === undefined || v.$tag !== 1) return undefined; return v._0; })()),
#| rtpTimestamp: self.rtpTimestamp
#| })
///|
/// Convert to JsValue
pub fn VideoFrameCallbackMetadata::to_js(
self : VideoFrameCallbackMetadata,
) -> JsValue {
VideoFrameCallbackMetadata::to_js_ffi(self)
}
///|
extern "js" fn VideoFrameCallbackMetadata::from_js_ffi(
value : JsValue,
) -> VideoFrameCallbackMetadata =
#| (v) => ({
#| presentationTime: v.presentationTime,
#| expectedDisplayTime: v.expectedDisplayTime,
#| width: v.width,
#| height: v.height,
#| mediaTime: v.mediaTime,
#| presentedFrames: v.presentedFrames,
#| processingDuration: (v.processingDuration === undefined ? { $tag: 0 } : { $tag: 1, _0: v.processingDuration }),
#| captureTime: (v.captureTime === undefined ? { $tag: 0 } : { $tag: 1, _0: v.captureTime }),
#| receiveTime: (v.receiveTime === undefined ? { $tag: 0 } : { $tag: 1, _0: v.receiveTime }),
#| rtpTimestamp: v.rtpTimestamp
#| })
///|
/// Convert from JsValue
pub fn VideoFrameCallbackMetadata::from_js(
value : JsValue,
) -> VideoFrameCallbackMetadata {
VideoFrameCallbackMetadata::from_js_ffi(value)
}