@nativescript/canvas-media 3.0.0-alpha.14 → 3.0.0-alpha.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,12 @@
1
+ import { VideoFrameBase, VideoColorSpace, DOMRectReadOnly, VideoFrameInit, VideoFrameBufferInit, VideoFrameCopyToOptions, PlaneLayout, RectInit, VideoPixelFormat, VideoColorSpaceInit, _INTERNAL } from './common';
2
+ export { VideoColorSpace, DOMRectReadOnly, _INTERNAL };
3
+ export type { VideoPixelFormat, VideoFrameInit, VideoFrameBufferInit, VideoFrameCopyToOptions, PlaneLayout, RectInit, VideoColorSpaceInit };
4
+ export declare class VideoFrame extends VideoFrameBase {
5
+ constructor(source: ArrayBuffer | ArrayBufferView, init: VideoFrameBufferInit);
6
+ constructor(source: object, init?: VideoFrameInit);
7
+ static fromVideo(source: any, init?: VideoFrameInit): VideoFrame | null;
8
+ private static _dataFromBuffer;
9
+ private static _dataFromVideoSource;
10
+ private static _assertBufferInit;
11
+ protected _doClone(): VideoFrame;
12
+ }
@@ -0,0 +1,98 @@
1
+ import { VideoFrameBase, VideoColorSpace, DOMRectReadOnly, _INTERNAL, bgraToRgba } from './common';
2
+ export { VideoColorSpace, DOMRectReadOnly, _INTERNAL };
3
+ export class VideoFrame extends VideoFrameBase {
4
+ constructor(source, init) {
5
+ if (source === _INTERNAL) {
6
+ super(init);
7
+ return;
8
+ }
9
+ if (source instanceof ArrayBuffer || ArrayBuffer.isView(source)) {
10
+ super(VideoFrame._dataFromBuffer(source, init));
11
+ return;
12
+ }
13
+ super(VideoFrame._dataFromVideoSource(source, init));
14
+ }
15
+ static fromVideo(source, init) {
16
+ try {
17
+ const data = VideoFrame._dataFromVideoSource(source, init);
18
+ // Return null when no pixel data is available yet (no frame decoded).
19
+ // Callers can treat null as "not ready" and fall back to drawImage.
20
+ if (!data.pixelData)
21
+ return null;
22
+ return new VideoFrame(_INTERNAL, data);
23
+ }
24
+ catch (err) {
25
+ console.error('[VideoFrame] fromVideo:', err?.message ?? err);
26
+ return null;
27
+ }
28
+ }
29
+ static _dataFromBuffer(source, init) {
30
+ VideoFrame._assertBufferInit(init);
31
+ const buf = ArrayBuffer.isView(source) ? new Uint8Array(source.buffer, source.byteOffset, source.byteLength) : new Uint8Array(source);
32
+ const pixelData = init.format === 'BGRA' || init.format === 'BGRX' ? bgraToRgba(buf) : new Uint8Array(buf);
33
+ return {
34
+ pixelData,
35
+ codedWidth: init.codedWidth,
36
+ codedHeight: init.codedHeight,
37
+ displayWidth: init.displayWidth ?? init.codedWidth,
38
+ displayHeight: init.displayHeight ?? init.codedHeight,
39
+ timestamp: init.timestamp,
40
+ duration: init.duration ?? null,
41
+ format: 'RGBA',
42
+ colorSpace: init.colorSpace,
43
+ };
44
+ }
45
+ static _dataFromVideoSource(source, init) {
46
+ const video = source?._video ?? source;
47
+ if (typeof video?._currentFrame !== 'function') {
48
+ throw new TypeError('[VideoFrame] Source must be an HTMLVideoElement or a canvas-media Video instance');
49
+ }
50
+ const timestampUs = typeof init?.timestamp === 'number' ? init.timestamp : Math.round(video.currentTime * 1000000);
51
+ // A copy: the video hands the same buffer to every reader until its next frame.
52
+ const frame = video._currentFrame();
53
+ const pixelData = frame ? new Uint8Array(frame.pixels) : null;
54
+ const codedWidth = frame?.width ?? video.videoWidth ?? 0;
55
+ const codedHeight = frame?.height ?? video.videoHeight ?? 0;
56
+ return {
57
+ pixelData,
58
+ codedWidth,
59
+ codedHeight,
60
+ displayWidth: init?.displayWidth ?? codedWidth,
61
+ displayHeight: init?.displayHeight ?? codedHeight,
62
+ timestamp: timestampUs,
63
+ duration: init?.duration ?? null,
64
+ format: 'RGBA',
65
+ colorSpace: init?.colorSpace,
66
+ };
67
+ }
68
+ static _assertBufferInit(init) {
69
+ if (!init?.format) {
70
+ throw new TypeError('VideoFrame: init.format is required for the buffer constructor');
71
+ }
72
+ if (!init?.codedWidth || init.codedWidth <= 0) {
73
+ throw new TypeError('VideoFrame: init.codedWidth must be a positive integer');
74
+ }
75
+ if (!init?.codedHeight || init.codedHeight <= 0) {
76
+ throw new TypeError('VideoFrame: init.codedHeight must be a positive integer');
77
+ }
78
+ if (typeof init?.timestamp !== 'number' || !isFinite(init.timestamp)) {
79
+ throw new TypeError('VideoFrame: init.timestamp must be a finite number (microseconds)');
80
+ }
81
+ }
82
+ _doClone() {
83
+ const pixelCopy = this._pixelData ? new Uint8Array(this._pixelData) : null;
84
+ const data = {
85
+ pixelData: pixelCopy,
86
+ codedWidth: this.codedWidth,
87
+ codedHeight: this.codedHeight,
88
+ displayWidth: this.displayWidth,
89
+ displayHeight: this.displayHeight,
90
+ timestamp: this.timestamp,
91
+ duration: this.duration,
92
+ format: this.format,
93
+ colorSpace: this.colorSpace.toJSON(),
94
+ };
95
+ return new VideoFrame(_INTERNAL, data);
96
+ }
97
+ }
98
+ //# sourceMappingURL=index.windows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.windows.js","sourceRoot":"","sources":["../../../../packages/canvas-media/VideoFrame/index.windows.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { AudioBase } from './common';
2
+ import { Source } from '../source';
3
+ import { WindowsMediaPlayer } from '../player-windows';
4
+ export declare class Audio extends AudioBase {
5
+ _media: WindowsMediaPlayer;
6
+ _sourceView: Source[];
7
+ private _sources;
8
+ _isCustom: boolean;
9
+ private _controls;
10
+ private _grid;
11
+ private _element;
12
+ constructor();
13
+ static createCustomView(): Audio;
14
+ get _player(): any;
15
+ createNativeView(): any;
16
+ disposeNativeView(): void;
17
+ private _syncControls;
18
+ get readyState(): number;
19
+ canPlayType(type: string): "" | "maybe";
20
+ _addChildFromBuilder(name: string, value: any): void;
21
+ onLoaded(): void;
22
+ _onLoadError(): boolean;
23
+ get duration(): number;
24
+ get currentTime(): number;
25
+ set currentTime(value: number);
26
+ get muted(): boolean;
27
+ set muted(value: boolean);
28
+ get volume(): number;
29
+ set volume(value: number);
30
+ get paused(): boolean;
31
+ get src(): string;
32
+ set src(value: string);
33
+ load(): void;
34
+ play(): Promise<void>;
35
+ pause(): void;
36
+ get controls(): boolean;
37
+ set controls(value: boolean);
38
+ get autoplay(): boolean;
39
+ set autoplay(value: boolean);
40
+ get loop(): boolean;
41
+ set loop(value: boolean);
42
+ attachAudioContextTap(): any;
43
+ detachAudioContextTap(): void;
44
+ }
@@ -0,0 +1,158 @@
1
+ import { booleanConverter } from '@nativescript/core';
2
+ import { AudioBase } from './common';
3
+ import { Source } from '../source';
4
+ import { WindowsMediaPlayer, canPlayType } from '../player-windows';
5
+ export class Audio extends AudioBase {
6
+ constructor() {
7
+ super();
8
+ this._sourceView = [];
9
+ this._sources = [];
10
+ this._isCustom = false;
11
+ this._controls = false;
12
+ this._media = new WindowsMediaPlayer(this, false);
13
+ }
14
+ static createCustomView() {
15
+ const audio = new Audio();
16
+ audio._isCustom = true;
17
+ audio.width = 300;
18
+ audio.height = 40;
19
+ return audio;
20
+ }
21
+ get _player() {
22
+ return this._media.player;
23
+ }
24
+ createNativeView() {
25
+ this._grid = new Microsoft.UI.Xaml.Controls.Grid();
26
+ this._syncControls();
27
+ return this._grid;
28
+ }
29
+ disposeNativeView() {
30
+ try {
31
+ this._element?.SetMediaPlayer(null);
32
+ }
33
+ catch (e) { }
34
+ this._grid = this._element = null;
35
+ super.disposeNativeView();
36
+ }
37
+ _syncControls() {
38
+ const grid = this._grid;
39
+ if (!grid) {
40
+ return;
41
+ }
42
+ if (this._controls && !this._element) {
43
+ const element = new Microsoft.UI.Xaml.Controls.MediaPlayerElement();
44
+ element.SetMediaPlayer(this._player);
45
+ element.AreTransportControlsEnabled = true;
46
+ try {
47
+ const controls = element.TransportControls;
48
+ controls.IsCompact = true;
49
+ controls.IsFullWindowButtonVisible = false;
50
+ controls.IsZoomButtonVisible = false;
51
+ }
52
+ catch (e) { }
53
+ grid.Children.Append(element);
54
+ this._element = element;
55
+ }
56
+ else if (!this._controls && this._element) {
57
+ const element = this._element;
58
+ this._element = null;
59
+ try {
60
+ element.SetMediaPlayer(null);
61
+ grid.Children.Clear();
62
+ }
63
+ catch (e) { }
64
+ }
65
+ }
66
+ get readyState() {
67
+ return this._media.readyState;
68
+ }
69
+ canPlayType(type) {
70
+ return canPlayType(type);
71
+ }
72
+ _addChildFromBuilder(name, value) {
73
+ if (value instanceof Source) {
74
+ this._sourceView.push(value);
75
+ }
76
+ }
77
+ onLoaded() {
78
+ super.onLoaded();
79
+ if (!this._media.src) {
80
+ this._sources = this._sourceView.filter((item) => item.src && (!item.type || canPlayType(item.type) !== '')).map((item) => item.src);
81
+ this._onLoadError();
82
+ }
83
+ }
84
+ _onLoadError() {
85
+ const next = this._sources.shift();
86
+ if (next === undefined) {
87
+ return false;
88
+ }
89
+ this._media.src = next;
90
+ return true;
91
+ }
92
+ get duration() {
93
+ return this._media.duration;
94
+ }
95
+ get currentTime() {
96
+ return this._media.currentTime;
97
+ }
98
+ set currentTime(value) {
99
+ this._media.currentTime = value;
100
+ }
101
+ get muted() {
102
+ return this._media.muted;
103
+ }
104
+ set muted(value) {
105
+ this._media.muted = booleanConverter(value);
106
+ }
107
+ get volume() {
108
+ return this._media.volume;
109
+ }
110
+ set volume(value) {
111
+ this._media.volume = value;
112
+ }
113
+ get paused() {
114
+ return this._media.paused;
115
+ }
116
+ get src() {
117
+ return this._media.src;
118
+ }
119
+ set src(value) {
120
+ this._sources = [];
121
+ this._media.src = value;
122
+ }
123
+ load() {
124
+ this._media.load();
125
+ }
126
+ play() {
127
+ return this._media.play();
128
+ }
129
+ pause() {
130
+ this._media.pause();
131
+ }
132
+ get controls() {
133
+ return this._controls;
134
+ }
135
+ set controls(value) {
136
+ this._controls = booleanConverter(value);
137
+ this._syncControls();
138
+ }
139
+ get autoplay() {
140
+ return this._media.autoplay;
141
+ }
142
+ set autoplay(value) {
143
+ this._media.autoplay = booleanConverter(value);
144
+ }
145
+ get loop() {
146
+ return this._media.loop;
147
+ }
148
+ set loop(value) {
149
+ this._media.loop = booleanConverter(value);
150
+ }
151
+ attachAudioContextTap() {
152
+ return this._media.attachAudioTap();
153
+ }
154
+ detachAudioContextTap() {
155
+ this._media.detachAudioTap();
156
+ }
157
+ }
158
+ //# sourceMappingURL=index.windows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.windows.js","sourceRoot":"","sources":["../../../../packages/canvas-media/audio/index.windows.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "@nativescript/canvas-media",
3
- "version": "3.0.0-alpha.14",
3
+ "version": "3.0.0-alpha.16",
4
4
  "description": "Canvas media",
5
5
  "main": "index",
6
6
  "typings": "index.d.ts",
7
7
  "nativescript": {
8
8
  "platforms": {
9
9
  "ios": "6.0.0",
10
- "android": "6.0.0"
10
+ "android": "6.0.0",
11
+ "windows": "9.1.0"
11
12
  }
12
13
  },
13
14
  "repository": {
@@ -19,7 +20,8 @@
19
20
  "JavaScript",
20
21
  "TypeScript",
21
22
  "iOS",
22
- "Android"
23
+ "Android",
24
+ "Windows"
23
25
  ],
24
26
  "author": {
25
27
  "name": "NativeScript",
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <Project />
@@ -0,0 +1,33 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <Project>
3
+ <PropertyGroup>
4
+ <_NSCanvasMediaArch Condition="'$(NSLibPlatform)' != ''">$(NSLibPlatform)</_NSCanvasMediaArch>
5
+ <_NSCanvasMediaArch Condition="'$(_NSCanvasMediaArch)' == '' and ('$(Platform)' == 'ARM64' or '$(Platform)' == 'arm64')">arm64</_NSCanvasMediaArch>
6
+ <!-- x64 when $(Platform) is unset/AnyCPU during evaluation. -->
7
+ <_NSCanvasMediaArch Condition="'$(_NSCanvasMediaArch)' == '' or '$(_NSCanvasMediaArch)' == 'x86_64'">x64</_NSCanvasMediaArch>
8
+ <_NSCanvasMediaDir>$(MSBuildThisFileDirectory)$(_NSCanvasMediaArch)\</_NSCanvasMediaDir>
9
+ </PropertyGroup>
10
+
11
+ <!-- An explicit Copy: with EnableMsixTooling, Content items do not reliably reach $(OutDir). -->
12
+ <Target Name="CopyNativeScriptCanvasMedia" AfterTargets="Build">
13
+ <ItemGroup>
14
+ <_NSCanvasMediaFiles Include="$(_NSCanvasMediaDir)*.node" />
15
+ </ItemGroup>
16
+ <Warning Text="[@nativescript/canvas-media] No native module for $(_NSCanvasMediaArch) in $(_NSCanvasMediaDir); build it with `make windows-media`." Condition="!Exists('$(_NSCanvasMediaDir)canvasmedia.node')" />
17
+ <Copy SourceFiles="@(_NSCanvasMediaFiles)" DestinationFolder="$(OutDir)" SkipUnchangedFiles="true" />
18
+ </Target>
19
+
20
+ <!-- canvasmedia.node also serves the audio-tap effect class, which Media Foundation activates by name. -->
21
+ <ItemGroup>
22
+ <!-- Keep in sync with tap::TAP_CLASS in crates/canvas-media-napi. -->
23
+ <NSCanvasMediaActivatableClass Include="NativeScript.CanvasMedia.AudioTap" />
24
+ </ItemGroup>
25
+
26
+ <Target Name="NSRegisterCanvasMediaActivatableClasses"
27
+ AfterTargets="ApplyManifestOverrides;MergeAppResourcesManifest"
28
+ BeforeTargets="Build"
29
+ Condition="Exists('$(MSBuildProjectDirectory)\Package.appxmanifest')">
30
+ <Message Text="[@nativescript/canvas-media] Registering NativeScript.CanvasMedia activatable classes in Package.appxmanifest" Importance="normal" />
31
+ <Exec Command="powershell -NoProfile -ExecutionPolicy Bypass -Command &quot;$ErrorActionPreference='Stop'; $p='$(MSBuildProjectDirectory)\Package.appxmanifest'; if(-not (Test-Path $p)){exit 0}; $dll='canvasmedia.node'; $ids='@(NSCanvasMediaActivatableClass)'.Split(';'); [xml]$d=Get-Content -LiteralPath $p; $ns='http://schemas.microsoft.com/appx/manifest/foundation/windows10'; $m=New-Object System.Xml.XmlNamespaceManager($d.NameTable); $m.AddNamespace('a',$ns); $pkg=$d.DocumentElement; $ext=$pkg.SelectSingleNode('a:Extensions',$m); if(-not $ext){$ext=$d.CreateElement('Extensions',$ns);[void]$pkg.AppendChild($ext)}; $srv=$ext.SelectSingleNode('a:Extension[@Category=''windows.activatableClass.inProcessServer'']/a:InProcessServer[a:Path=''' + $dll + ''']',$m); if(-not $srv){$e=$d.CreateElement('Extension',$ns);$e.SetAttribute('Category','windows.activatableClass.inProcessServer');$srv=$d.CreateElement('InProcessServer',$ns);$pa=$d.CreateElement('Path',$ns);$pa.InnerText=$dll;[void]$srv.AppendChild($pa);[void]$e.AppendChild($srv);[void]$ext.AppendChild($e)}; $have=@($srv.SelectNodes('a:ActivatableClass',$m)|ForEach-Object{$_.GetAttribute('ActivatableClassId')}); $chg=$false; foreach($id in $ids){if($id -and ($have -notcontains $id)){$c=$d.CreateElement('ActivatableClass',$ns);$c.SetAttribute('ActivatableClassId',$id);$c.SetAttribute('ThreadingModel','both');[void]$srv.AppendChild($c);$chg=$true}}; if($chg){$d.Save($p)}&quot;" />
32
+ </Target>
33
+ </Project>
@@ -0,0 +1,79 @@
1
+ import { MediaBase } from './common';
2
+ export interface SharedFrame {
3
+ /** A `CanvasD3DSharedFrame` for WebGPU's `nativeTexture`. */
4
+ readonly address: number;
5
+ readonly width: number;
6
+ readonly height: number;
7
+ close(): void;
8
+ }
9
+ export interface AudioTap {
10
+ /** An `AudioTapSource` for audiocontext.node's `createMediaElementSourceFromTap`. */
11
+ readonly address: number;
12
+ readonly framesTapped: number;
13
+ setGain(gain: number): void;
14
+ setRouted(routed: boolean): void;
15
+ }
16
+ export interface MediaPlayerBridge {
17
+ readonly videoWidth: number;
18
+ readonly videoHeight: number;
19
+ readonly frameId: number;
20
+ readonly adapterLuid: number;
21
+ readonly sharesFrames: boolean;
22
+ gpuFrame(): SharedFrame | null;
23
+ createAudioTap(): AudioTap;
24
+ close(): void;
25
+ attachSurfaceImageSource(key: string, width: number, height: number): boolean;
26
+ detachSurfaceImageSource(): void;
27
+ present(): boolean;
28
+ readPixels(): Uint8Array | null;
29
+ }
30
+ /** Media Foundation's containers and codecs, plus WebM/Ogg (the Web Media Extensions Windows ships with). */
31
+ export declare function canPlayType(type: string): '' | 'maybe';
32
+ export declare function resolveSrc(src: string): string;
33
+ type MediaOwner = MediaBase & {
34
+ _notifyListener(type: string): void;
35
+ _onFrame?(): void;
36
+ /** `true` when the owner loads another source instead (its next `<Source>`). */
37
+ _onLoadError?(): boolean;
38
+ };
39
+ export declare class WindowsMediaPlayer {
40
+ readonly player: any;
41
+ readonly bridge: MediaPlayerBridge;
42
+ readyState: number;
43
+ private _src;
44
+ private _playing;
45
+ private _play;
46
+ private _timeupdate;
47
+ private _owner;
48
+ private _tap;
49
+ constructor(owner: MediaOwner, frames: boolean);
50
+ private get _session();
51
+ private _notify;
52
+ private _onEvent;
53
+ private _onState;
54
+ private _setPlaying;
55
+ private _rejectPlay;
56
+ get src(): string;
57
+ set src(value: string);
58
+ load(): void;
59
+ play(): Promise<void>;
60
+ pause(): void;
61
+ get paused(): boolean;
62
+ /** null where the audio effect is unavailable. */
63
+ attachAudioTap(): AudioTap | null;
64
+ detachAudioTap(): void;
65
+ /** As on the web, the graph gets the element's volume (silence when muted). */
66
+ private _syncTapGain;
67
+ get currentTime(): number;
68
+ set currentTime(value: number);
69
+ get duration(): number;
70
+ get muted(): boolean;
71
+ set muted(value: boolean);
72
+ get volume(): number;
73
+ set volume(value: number);
74
+ get loop(): boolean;
75
+ set loop(value: boolean);
76
+ get autoplay(): boolean;
77
+ set autoplay(value: boolean);
78
+ }
79
+ export {};
@@ -0,0 +1,302 @@
1
+ import { knownFolders, path } from '@nativescript/core';
2
+ import { currentTimeProperty, durationProperty } from './common';
3
+ // Loaded on import, so a missing module makes canvas-polyfill's probes fall back.
4
+ const Native = __non_webpack_require__('system_lib://canvasmedia.node');
5
+ const HAVE_NOTHING = 0;
6
+ const HAVE_METADATA = 1;
7
+ const HAVE_ENOUGH_DATA = 4;
8
+ const PLAYABLE = /^(video\/(mp4|x-m4v|quicktime|3gpp|3gpp2|mp2t|webm|x-ms-wmv|x-ms-asf)|audio\/(mpeg|mp3|mp4|x-m4a|aac|aacp|3gpp|3gpp2|wav|wave|x-wav|vnd\.wave|flac|x-flac|ogg|opus|webm|x-ms-wma|amr))$/;
9
+ /** Media Foundation's containers and codecs, plus WebM/Ogg (the Web Media Extensions Windows ships with). */
10
+ export function canPlayType(type) {
11
+ const mime = String(type ?? '')
12
+ .split(';')[0]
13
+ .trim()
14
+ .toLowerCase();
15
+ return PLAYABLE.test(mime) ? 'maybe' : '';
16
+ }
17
+ /** A WinRT TimeSpan (`{ Duration }` in 100 ns ticks) in seconds. */
18
+ function seconds(timeSpan) {
19
+ const value = Number(timeSpan?.Duration ?? timeSpan);
20
+ return Number.isFinite(value) ? value / 1e7 : NaN;
21
+ }
22
+ export function resolveSrc(src) {
23
+ if (typeof src === 'string' && src.startsWith('~/')) {
24
+ return path.join(knownFolders.currentApp().path, src.replace('~', ''));
25
+ }
26
+ return src;
27
+ }
28
+ function mediaSource(src) {
29
+ // A scheme (http:, ms-appx:, file:, ...), not a drive letter.
30
+ const uri = /^[a-z][a-z0-9+.-]+:/i.test(src) ? src : 'file:///' + encodeURI(src.replace(/\\/g, '/').replace(/^\/+/, '')).replace(/#/g, '%23').replace(/\?/g, '%3F');
31
+ return Windows.Media.Core.MediaSource.CreateFromUri(new Windows.Foundation.Uri(uri));
32
+ }
33
+ export class WindowsMediaPlayer {
34
+ constructor(owner, frames) {
35
+ this.readyState = HAVE_NOTHING;
36
+ this._src = '';
37
+ this._playing = false;
38
+ this._play = null;
39
+ this._timeupdate = null;
40
+ this._tap = null;
41
+ this._owner = new WeakRef(owner);
42
+ const player = new Windows.Media.Playback.MediaPlayer();
43
+ player.AutoPlay = false;
44
+ if (frames) {
45
+ player.IsVideoFrameServerEnabled = true;
46
+ }
47
+ this.player = player;
48
+ const ref = new WeakRef(this);
49
+ this.bridge = new Native.NSCMediaPlayerBridge(NSWinRT.interop.pointerKey(player), (type, detail) => ref.deref()?._onEvent(type, detail), frames);
50
+ // Before any source: an effect only applies to the sources set after it. It passes the audio
51
+ // through until an AudioContext takes it.
52
+ try {
53
+ this._tap = this.bridge.createAudioTap();
54
+ }
55
+ catch (e) { }
56
+ }
57
+ get _session() {
58
+ return this.player.PlaybackSession;
59
+ }
60
+ _notify(type) {
61
+ this._owner.deref()?._notifyListener(type);
62
+ }
63
+ _onEvent(type, detail) {
64
+ const owner = this._owner.deref();
65
+ if (!owner) {
66
+ return;
67
+ }
68
+ switch (type) {
69
+ case 'opened':
70
+ this.readyState = HAVE_METADATA;
71
+ durationProperty.nativeValueChange(owner, this.duration);
72
+ this._notify('durationchange');
73
+ this._notify('loadedmetadata');
74
+ this.readyState = HAVE_ENOUGH_DATA;
75
+ this._notify('loadeddata');
76
+ this._notify('canplay');
77
+ this._notify('canplaythrough');
78
+ break;
79
+ case 'state':
80
+ this._onState(Number(detail));
81
+ break;
82
+ case 'frame':
83
+ owner._onFrame?.();
84
+ break;
85
+ case 'seeked':
86
+ currentTimeProperty.nativeValueChange(owner, this.currentTime);
87
+ this._notify('seeked');
88
+ this._notify('timeupdate');
89
+ break;
90
+ case 'durationchange':
91
+ if (this.readyState >= HAVE_METADATA) {
92
+ durationProperty.nativeValueChange(owner, this.duration);
93
+ this._notify('durationchange');
94
+ }
95
+ break;
96
+ case 'ended':
97
+ this._setPlaying(false);
98
+ currentTimeProperty.nativeValueChange(owner, this.currentTime);
99
+ this._notify('timeupdate');
100
+ this._notify('pause');
101
+ this._notify('ended');
102
+ break;
103
+ case 'error': {
104
+ if (this.readyState === HAVE_NOTHING && owner._onLoadError?.()) {
105
+ break;
106
+ }
107
+ this._setPlaying(false);
108
+ this._rejectPlay(Object.assign(new Error(detail || 'Media playback failed'), { name: 'NotSupportedError' }));
109
+ this._notify('error');
110
+ break;
111
+ }
112
+ case 'resize':
113
+ case 'waiting':
114
+ this._notify(type);
115
+ break;
116
+ }
117
+ }
118
+ _onState(state) {
119
+ if (state === 3 /* PlaybackState.Playing */) {
120
+ if (this._playing) {
121
+ return;
122
+ }
123
+ this._setPlaying(true);
124
+ const play = this._play;
125
+ this._play = null;
126
+ if (play) {
127
+ play.resolve();
128
+ }
129
+ else {
130
+ // Started by autoplay.
131
+ this._notify('play');
132
+ }
133
+ this._notify('playing');
134
+ }
135
+ else if (state === 4 /* PlaybackState.Paused */ || state === 0 /* PlaybackState.None */) {
136
+ this._setPlaying(false);
137
+ }
138
+ }
139
+ _setPlaying(playing) {
140
+ this._playing = playing;
141
+ if (playing && !this._timeupdate) {
142
+ // The web fires timeupdate every 15-250 ms while playing.
143
+ this._timeupdate = setInterval(() => {
144
+ const owner = this._owner.deref();
145
+ if (owner) {
146
+ currentTimeProperty.nativeValueChange(owner, this.currentTime);
147
+ this._notify('timeupdate');
148
+ }
149
+ }, 250);
150
+ }
151
+ else if (!playing && this._timeupdate) {
152
+ clearInterval(this._timeupdate);
153
+ this._timeupdate = null;
154
+ }
155
+ }
156
+ _rejectPlay(error) {
157
+ const play = this._play;
158
+ this._play = null;
159
+ play?.reject(error);
160
+ }
161
+ get src() {
162
+ return this._src;
163
+ }
164
+ set src(value) {
165
+ this._src = value ?? '';
166
+ this.load();
167
+ }
168
+ load() {
169
+ this._setPlaying(false);
170
+ this._rejectPlay(Object.assign(new Error('The play() request was interrupted by a new load request.'), { name: 'AbortError' }));
171
+ this.readyState = HAVE_NOTHING;
172
+ const src = resolveSrc(this._src);
173
+ try {
174
+ this.player.Source = src ? mediaSource(src) : null;
175
+ }
176
+ catch (error) {
177
+ console.warn(`canvas-media: cannot load ${src}:`, error);
178
+ this._notify('error');
179
+ }
180
+ }
181
+ play() {
182
+ if (this._playing) {
183
+ return Promise.resolve();
184
+ }
185
+ if (this._play) {
186
+ return this._play.promise;
187
+ }
188
+ if (!this._src) {
189
+ return Promise.reject(Object.assign(new Error('The element has no supported sources.'), { name: 'NotSupportedError' }));
190
+ }
191
+ let resolve, reject;
192
+ const promise = new Promise((res, rej) => {
193
+ resolve = res;
194
+ reject = rej;
195
+ });
196
+ this._play = { promise, resolve, reject };
197
+ this._notify('play');
198
+ try {
199
+ this.player.Play();
200
+ }
201
+ catch (error) {
202
+ this._rejectPlay(error);
203
+ }
204
+ return promise;
205
+ }
206
+ pause() {
207
+ const wasPlaying = this._playing || !!this._play;
208
+ try {
209
+ this.player.Pause();
210
+ }
211
+ catch (e) { }
212
+ this._setPlaying(false);
213
+ this._rejectPlay(Object.assign(new Error('The play() request was interrupted by a call to pause().'), { name: 'AbortError' }));
214
+ if (wasPlaying) {
215
+ this._notify('pause');
216
+ }
217
+ }
218
+ get paused() {
219
+ return !this._playing && !this._play;
220
+ }
221
+ /** null where the audio effect is unavailable. */
222
+ attachAudioTap() {
223
+ if (!this._tap) {
224
+ return null;
225
+ }
226
+ this._tap.setRouted(true);
227
+ this._syncTapGain();
228
+ return this._tap;
229
+ }
230
+ detachAudioTap() {
231
+ this._tap?.setRouted(false);
232
+ }
233
+ /** As on the web, the graph gets the element's volume (silence when muted). */
234
+ _syncTapGain() {
235
+ this._tap?.setGain(this.muted ? 0 : this.volume);
236
+ }
237
+ get currentTime() {
238
+ try {
239
+ return seconds(this._session.Position) || 0;
240
+ }
241
+ catch (e) {
242
+ return 0;
243
+ }
244
+ }
245
+ set currentTime(value) {
246
+ value = Number(value);
247
+ if (!Number.isFinite(value) || value < 0) {
248
+ return;
249
+ }
250
+ try {
251
+ this._session.Position = { Duration: Math.round(value * 1e7) };
252
+ this._notify('seeking');
253
+ }
254
+ catch (e) { }
255
+ }
256
+ get duration() {
257
+ if (this.readyState < HAVE_METADATA) {
258
+ return NaN;
259
+ }
260
+ try {
261
+ return seconds(this._session.NaturalDuration) || NaN;
262
+ }
263
+ catch (e) {
264
+ return NaN;
265
+ }
266
+ }
267
+ get muted() {
268
+ return !!this.player.IsMuted;
269
+ }
270
+ set muted(value) {
271
+ value = !!value;
272
+ if (value !== this.muted) {
273
+ this.player.IsMuted = value;
274
+ this._syncTapGain();
275
+ this._notify('volumechange');
276
+ }
277
+ }
278
+ get volume() {
279
+ return this.player.Volume;
280
+ }
281
+ set volume(value) {
282
+ value = Math.min(1, Math.max(0, Number(value) || 0));
283
+ if (value !== this.volume) {
284
+ this.player.Volume = value;
285
+ this._syncTapGain();
286
+ this._notify('volumechange');
287
+ }
288
+ }
289
+ get loop() {
290
+ return !!this.player.IsLoopingEnabled;
291
+ }
292
+ set loop(value) {
293
+ this.player.IsLoopingEnabled = !!value;
294
+ }
295
+ get autoplay() {
296
+ return !!this.player.AutoPlay;
297
+ }
298
+ set autoplay(value) {
299
+ this.player.AutoPlay = !!value;
300
+ }
301
+ }
302
+ //# sourceMappingURL=player-windows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"player-windows.js","sourceRoot":"","sources":["../../../packages/canvas-media/player-windows.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import { VideoBase } from './common';
2
+ import { Source } from '../source';
3
+ import { WindowsMediaPlayer } from '../player-windows';
4
+ interface Frame {
5
+ id: number;
6
+ pixels: Uint8Array;
7
+ width: number;
8
+ height: number;
9
+ }
10
+ export declare class Video extends VideoBase {
11
+ _media: WindowsMediaPlayer;
12
+ _sourceView: Source[];
13
+ private _sources;
14
+ _isCustom: boolean;
15
+ private _controls;
16
+ private _grid;
17
+ private _image;
18
+ /** Only for its transport controls: the frames are the Image's. */
19
+ private _element;
20
+ private _surface;
21
+ private _surfaceWidth;
22
+ private _surfaceHeight;
23
+ private _frame;
24
+ private _asset;
25
+ private _assetFrameId;
26
+ constructor();
27
+ static createCustomView(): Video;
28
+ get _player(): any;
29
+ get _bridge(): import("../player-windows").MediaPlayerBridge;
30
+ createNativeView(): any;
31
+ disposeNativeView(): void;
32
+ private _syncControls;
33
+ _onFrame(): void;
34
+ private _present;
35
+ _currentFrame(): Frame | null;
36
+ private _currentAsset;
37
+ /** WebGL `texImage2D` / `texSubImage2D` with this video: `(native, context, target, level, internalformat, ...)`. */
38
+ getCurrentFrame(context?: any): void;
39
+ getFrameForTexImage3D(nativeCtx: any, ctx: any, target: number, level: number, internalformat: number, width: number, height: number, depth: number, border: number, format: number, type: number): void;
40
+ getFrameForTexSubImage3D(nativeCtx: any, ctx: any, target: number, level: number, xoffset: number, yoffset: number, zoffset: number, width: number, height: number, depth: number, format: number, type: number): void;
41
+ /** 2D `drawImage(video, ...)`; `args` are drawImage's arguments. */
42
+ drawImageFrame(context2d: any, args: any[]): void;
43
+ attachAudioContextTap(): any;
44
+ detachAudioContextTap(): void;
45
+ getVideoFrameData(): any;
46
+ private _gpuFrameId;
47
+ /** `device`: the WebGPU device's adapter LUID (`__frameDevice`). */
48
+ supportsGPUFrames(device: number): boolean;
49
+ /** null when no frame was decoded since the last one handed out; `close()` it once the upload is issued. */
50
+ getGPUFrameTexture(device: number): any;
51
+ get readyState(): number;
52
+ get videoWidth(): number;
53
+ get videoHeight(): number;
54
+ canPlayType(type: string): "" | "maybe";
55
+ _addChildFromBuilder(name: string, value: any): void;
56
+ onLoaded(): void;
57
+ _onLoadError(): boolean;
58
+ get duration(): number;
59
+ get currentTime(): number;
60
+ set currentTime(value: number);
61
+ get muted(): boolean;
62
+ set muted(value: boolean);
63
+ get volume(): number;
64
+ set volume(value: number);
65
+ get paused(): boolean;
66
+ get src(): string;
67
+ set src(value: string);
68
+ load(): void;
69
+ play(): Promise<void>;
70
+ pause(): void;
71
+ get controls(): boolean;
72
+ set controls(value: boolean);
73
+ get autoplay(): boolean;
74
+ set autoplay(value: boolean);
75
+ get loop(): boolean | string;
76
+ set loop(value: boolean | string);
77
+ }
78
+ export {};
@@ -0,0 +1,336 @@
1
+ import { booleanConverter } from '@nativescript/core';
2
+ import { VideoBase } from './common';
3
+ import { Source } from '../source';
4
+ import { WindowsMediaPlayer, canPlayType } from '../player-windows';
5
+ const GL_RGBA = 0x1908;
6
+ const GL_UNSIGNED_BYTE = 0x1401;
7
+ const GL_RGBA8 = 0x8058;
8
+ const GL_SRGB8_ALPHA8 = 0x8c43;
9
+ /** Frames are RGBA8: sized RGBA formats (WebGL 2) are kept, anything else uploads as RGBA. */
10
+ function rgbaInternalFormat(internalformat) {
11
+ return internalformat === GL_RGBA8 || internalformat === GL_SRGB8_ALPHA8 ? internalformat : GL_RGBA;
12
+ }
13
+ /**
14
+ * The stock MediaPlayerElement template (Windows App SDK 1.6) with its presenter kept for layout (the
15
+ * element measures itself from it) but invisible: in frame-server mode it only paints black.
16
+ */
17
+ const CONTROLS_TEMPLATE = `<ControlTemplate xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" TargetType="MediaPlayerElement">
18
+ <Grid x:Name="LayoutRoot">
19
+ <Border Background="Transparent" />
20
+ <Image x:Name="PosterImage" Visibility="Collapsed" Source="{TemplateBinding PosterSource}" Stretch="{TemplateBinding Stretch}" />
21
+ <MediaPlayerPresenter x:Name="MediaPlayerPresenter" Opacity="0" Stretch="{TemplateBinding Stretch}" MediaPlayer="{TemplateBinding MediaPlayer}" />
22
+ <ContentPresenter x:Name="TransportControlsPresenter" Visibility="{TemplateBinding AreTransportControlsEnabled}" />
23
+ <Grid x:Name="TimedTextSourcePresenter" />
24
+ </Grid>
25
+ </ControlTemplate>`;
26
+ let controlsTemplate;
27
+ export class Video extends VideoBase {
28
+ constructor() {
29
+ super();
30
+ this._sourceView = [];
31
+ this._sources = [];
32
+ this._isCustom = false;
33
+ this._controls = false;
34
+ this._surfaceWidth = 0;
35
+ this._surfaceHeight = 0;
36
+ this._frame = null;
37
+ this._assetFrameId = 0;
38
+ this._gpuFrameId = 0;
39
+ this._media = new WindowsMediaPlayer(this, true);
40
+ }
41
+ static createCustomView() {
42
+ const video = new Video();
43
+ video._isCustom = true;
44
+ video.width = 300;
45
+ video.height = 150;
46
+ return video;
47
+ }
48
+ get _player() {
49
+ return this._media.player;
50
+ }
51
+ get _bridge() {
52
+ return this._media.bridge;
53
+ }
54
+ createNativeView() {
55
+ const { Controls, Media } = Microsoft.UI.Xaml;
56
+ const grid = new Controls.Grid();
57
+ const image = new Controls.Image();
58
+ image.Stretch = Media.Stretch.Uniform;
59
+ grid.Children.Append(image);
60
+ this._grid = grid;
61
+ this._image = image;
62
+ this._surfaceWidth = this._surfaceHeight = 0;
63
+ this._syncControls();
64
+ return grid;
65
+ }
66
+ disposeNativeView() {
67
+ try {
68
+ this._element?.SetMediaPlayer(null);
69
+ }
70
+ catch (e) { }
71
+ this._bridge.detachSurfaceImageSource();
72
+ this._grid = this._image = this._element = this._surface = null;
73
+ super.disposeNativeView();
74
+ }
75
+ _syncControls() {
76
+ const grid = this._grid;
77
+ if (!grid) {
78
+ return;
79
+ }
80
+ if (this._controls && !this._element) {
81
+ const element = new Microsoft.UI.Xaml.Controls.MediaPlayerElement();
82
+ controlsTemplate ?? (controlsTemplate = Microsoft.UI.Xaml.Markup.XamlReader.Load(CONTROLS_TEMPLATE));
83
+ element.Template = controlsTemplate;
84
+ element.SetMediaPlayer(this._player);
85
+ element.AreTransportControlsEnabled = true;
86
+ try {
87
+ // Full window and zoom act on the invisible presenter.
88
+ element.TransportControls.IsFullWindowButtonVisible = false;
89
+ element.TransportControls.IsZoomButtonVisible = false;
90
+ }
91
+ catch (e) { }
92
+ grid.Children.Append(element);
93
+ this._element = element;
94
+ }
95
+ else if (!this._controls && this._element) {
96
+ const element = this._element;
97
+ this._element = null;
98
+ try {
99
+ element.SetMediaPlayer(null);
100
+ // Always the last child, over the image.
101
+ grid.Children.RemoveAtEnd();
102
+ }
103
+ catch (e) { }
104
+ }
105
+ }
106
+ _onFrame() {
107
+ this._present();
108
+ this._notifyVideoFrameCallbacks();
109
+ }
110
+ _present() {
111
+ const image = this._image;
112
+ if (!image) {
113
+ return;
114
+ }
115
+ const bridge = this._bridge;
116
+ const width = bridge.videoWidth;
117
+ const height = bridge.videoHeight;
118
+ if (!width || !height) {
119
+ return;
120
+ }
121
+ if (width !== this._surfaceWidth || height !== this._surfaceHeight) {
122
+ const surface = new Microsoft.UI.Xaml.Media.Imaging.SurfaceImageSource(width, height, true);
123
+ if (!bridge.attachSurfaceImageSource(NSWinRT.interop.pointerKey(surface), width, height)) {
124
+ return;
125
+ }
126
+ image.Source = surface;
127
+ this._surface = surface;
128
+ this._surfaceWidth = width;
129
+ this._surfaceHeight = height;
130
+ }
131
+ bridge.present();
132
+ }
133
+ _currentFrame() {
134
+ const bridge = this._bridge;
135
+ const id = bridge.frameId;
136
+ if (!id) {
137
+ return null;
138
+ }
139
+ if (this._frame?.id !== id) {
140
+ const width = bridge.videoWidth;
141
+ const height = bridge.videoHeight;
142
+ const pixels = bridge.readPixels();
143
+ if (!pixels || pixels.length !== width * height * 4) {
144
+ return null;
145
+ }
146
+ this._frame = { id, pixels, width, height };
147
+ }
148
+ return this._frame;
149
+ }
150
+ _currentAsset() {
151
+ const frame = this._currentFrame();
152
+ if (!frame) {
153
+ return null;
154
+ }
155
+ if (this._assetFrameId !== frame.id) {
156
+ this._asset ?? (this._asset = new global.CanvasModule.ImageAsset());
157
+ // Video frames are opaque: premultiplied as they are.
158
+ if (!this._asset.fromBytesSync(frame.width, frame.height, frame.pixels, true)) {
159
+ return null;
160
+ }
161
+ this._assetFrameId = frame.id;
162
+ }
163
+ return this._asset;
164
+ }
165
+ /** WebGL `texImage2D` / `texSubImage2D` with this video: `(native, context, target, level, internalformat, ...)`. */
166
+ getCurrentFrame(context) {
167
+ const native = arguments[0];
168
+ const frame = this._currentFrame();
169
+ if (!frame || typeof native?.texImage2D !== 'function') {
170
+ return;
171
+ }
172
+ native.texImage2D(arguments[2], arguments[3], rgbaInternalFormat(arguments[4]), frame.width, frame.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, frame.pixels);
173
+ }
174
+ getFrameForTexImage3D(nativeCtx, ctx, target, level, internalformat, width, height, depth, border, format, type) {
175
+ const frame = this._currentFrame();
176
+ // One frame is one slice.
177
+ if (!frame || depth !== 1) {
178
+ return;
179
+ }
180
+ nativeCtx.texImage3D(target, level, rgbaInternalFormat(internalformat), frame.width, frame.height, 1, border, GL_RGBA, GL_UNSIGNED_BYTE, frame.pixels);
181
+ }
182
+ getFrameForTexSubImage3D(nativeCtx, ctx, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type) {
183
+ const frame = this._currentFrame();
184
+ if (!frame || depth !== 1) {
185
+ return;
186
+ }
187
+ nativeCtx.texSubImage3D(target, level, xoffset, yoffset, zoffset, frame.width, frame.height, 1, GL_RGBA, GL_UNSIGNED_BYTE, frame.pixels);
188
+ }
189
+ /** 2D `drawImage(video, ...)`; `args` are drawImage's arguments. */
190
+ drawImageFrame(context2d, args) {
191
+ const asset = this._currentAsset();
192
+ if (!asset || !context2d?.context) {
193
+ return;
194
+ }
195
+ if (args.length === 3) {
196
+ context2d.context.drawImage(asset, args[1], args[2]);
197
+ }
198
+ else if (args.length === 5) {
199
+ context2d.context.drawImage(asset, args[1], args[2], args[3], args[4]);
200
+ }
201
+ else if (args.length === 9) {
202
+ context2d.context.drawImage(asset, args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8]);
203
+ }
204
+ }
205
+ attachAudioContextTap() {
206
+ return this._media.attachAudioTap();
207
+ }
208
+ detachAudioContextTap() {
209
+ this._media.detachAudioTap();
210
+ }
211
+ getVideoFrameData() {
212
+ return this._currentAsset();
213
+ }
214
+ /** `device`: the WebGPU device's adapter LUID (`__frameDevice`). */
215
+ supportsGPUFrames(device) {
216
+ const bridge = this._bridge;
217
+ return !!device && bridge.sharesFrames && bridge.adapterLuid === device;
218
+ }
219
+ /** null when no frame was decoded since the last one handed out; `close()` it once the upload is issued. */
220
+ getGPUFrameTexture(device) {
221
+ const bridge = this._bridge;
222
+ const id = bridge.frameId;
223
+ if (!id || id === this._gpuFrameId || !this.supportsGPUFrames(device)) {
224
+ return null;
225
+ }
226
+ const frame = bridge.gpuFrame();
227
+ if (!frame) {
228
+ return null;
229
+ }
230
+ this._gpuFrameId = id;
231
+ return {
232
+ texturePointer: frame.address,
233
+ width: frame.width,
234
+ height: frame.height,
235
+ close: () => frame.close(),
236
+ };
237
+ }
238
+ //@ts-ignore
239
+ get readyState() {
240
+ return this._media.readyState;
241
+ }
242
+ get videoWidth() {
243
+ return this._bridge.videoWidth;
244
+ }
245
+ get videoHeight() {
246
+ return this._bridge.videoHeight;
247
+ }
248
+ canPlayType(type) {
249
+ return canPlayType(type);
250
+ }
251
+ _addChildFromBuilder(name, value) {
252
+ if (value instanceof Source) {
253
+ this._sourceView.push(value);
254
+ }
255
+ }
256
+ onLoaded() {
257
+ super.onLoaded();
258
+ if (!this._media.src) {
259
+ this._sources = this._sourceView.filter((item) => item.src && (!item.type || canPlayType(item.type) !== '')).map((item) => item.src);
260
+ this._onLoadError();
261
+ }
262
+ }
263
+ _onLoadError() {
264
+ const next = this._sources.shift();
265
+ if (next === undefined) {
266
+ return false;
267
+ }
268
+ this._media.src = next;
269
+ return true;
270
+ }
271
+ get duration() {
272
+ return this._media.duration;
273
+ }
274
+ get currentTime() {
275
+ return this._media.currentTime;
276
+ }
277
+ set currentTime(value) {
278
+ this._media.currentTime = value;
279
+ }
280
+ get muted() {
281
+ return this._media.muted;
282
+ }
283
+ set muted(value) {
284
+ this._media.muted = booleanConverter(value);
285
+ }
286
+ get volume() {
287
+ return this._media.volume;
288
+ }
289
+ set volume(value) {
290
+ this._media.volume = value;
291
+ }
292
+ get paused() {
293
+ return this._media.paused;
294
+ }
295
+ get src() {
296
+ return this._media.src;
297
+ }
298
+ set src(value) {
299
+ this._sources = [];
300
+ this._frame = null;
301
+ this._assetFrameId = 0;
302
+ this._media.src = value;
303
+ }
304
+ load() {
305
+ this._media.load();
306
+ }
307
+ play() {
308
+ return this._media.play();
309
+ }
310
+ pause() {
311
+ this._media.pause();
312
+ }
313
+ get controls() {
314
+ return this._controls;
315
+ }
316
+ set controls(value) {
317
+ this._controls = booleanConverter(value);
318
+ this._syncControls();
319
+ }
320
+ //@ts-ignore
321
+ get autoplay() {
322
+ return this._media.autoplay;
323
+ }
324
+ set autoplay(value) {
325
+ this._media.autoplay = booleanConverter(value);
326
+ }
327
+ // @ts-ignore
328
+ get loop() {
329
+ return this._media.loop;
330
+ }
331
+ // @ts-ignore
332
+ set loop(value) {
333
+ this._media.loop = booleanConverter(value);
334
+ }
335
+ }
336
+ //# sourceMappingURL=index.windows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.windows.js","sourceRoot":"","sources":["../../../../packages/canvas-media/video/index.windows.ts"],"names":[],"mappings":"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"}