@nativescript/canvas-media 3.0.0-alpha.5 → 3.0.0-beta.0

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,80 @@
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
+ /** Without a readback: the frame is drawn on the canvas's (or its render thread's) D3D12 device. */
44
+ private _drawGPUFrame;
45
+ attachAudioContextTap(): any;
46
+ detachAudioContextTap(): void;
47
+ getVideoFrameData(): any;
48
+ private _gpuFrameId;
49
+ /** `device`: the WebGPU device's adapter LUID (`__frameDevice`). */
50
+ supportsGPUFrames(device: number): boolean;
51
+ /** null when no frame was decoded since the last one handed out; `close()` it once the upload is issued. */
52
+ getGPUFrameTexture(device: number): any;
53
+ get readyState(): number;
54
+ get videoWidth(): number;
55
+ get videoHeight(): number;
56
+ canPlayType(type: string): "" | "maybe";
57
+ _addChildFromBuilder(name: string, value: any): void;
58
+ onLoaded(): void;
59
+ _onLoadError(): boolean;
60
+ get duration(): number;
61
+ get currentTime(): number;
62
+ set currentTime(value: number);
63
+ get muted(): boolean;
64
+ set muted(value: boolean);
65
+ get volume(): number;
66
+ set volume(value: number);
67
+ get paused(): boolean;
68
+ get src(): string;
69
+ set src(value: string);
70
+ load(): void;
71
+ play(): Promise<void>;
72
+ pause(): void;
73
+ get controls(): boolean;
74
+ set controls(value: boolean);
75
+ get autoplay(): boolean;
76
+ set autoplay(value: boolean);
77
+ get loop(): boolean | string;
78
+ set loop(value: boolean | string);
79
+ }
80
+ export {};
@@ -0,0 +1,372 @@
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
+ if (this._drawGPUFrame(context2d, args)) {
192
+ return;
193
+ }
194
+ const asset = this._currentAsset();
195
+ if (!asset || !context2d?.context) {
196
+ return;
197
+ }
198
+ if (args.length === 3) {
199
+ context2d.context.drawImage(asset, args[1], args[2]);
200
+ }
201
+ else if (args.length === 5) {
202
+ context2d.context.drawImage(asset, args[1], args[2], args[3], args[4]);
203
+ }
204
+ else if (args.length === 9) {
205
+ context2d.context.drawImage(asset, args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8]);
206
+ }
207
+ }
208
+ /** Without a readback: the frame is drawn on the canvas's (or its render thread's) D3D12 device. */
209
+ _drawGPUFrame(context2d, args) {
210
+ const native = context2d?.context;
211
+ const bridge = this._bridge;
212
+ if (typeof native?.__drawD3DSharedFrame !== 'function' || !bridge.sharesFrames || !bridge.frameId) {
213
+ return false;
214
+ }
215
+ const frame = bridge.gpuFrame();
216
+ if (!frame) {
217
+ return false;
218
+ }
219
+ const { width, height } = frame;
220
+ let rect;
221
+ if (args.length === 3) {
222
+ rect = [0, 0, width, height, args[1], args[2], width, height];
223
+ }
224
+ else if (args.length === 5) {
225
+ rect = [0, 0, width, height, args[1], args[2], args[3], args[4]];
226
+ }
227
+ else if (args.length === 9) {
228
+ rect = args.slice(1, 9);
229
+ }
230
+ else {
231
+ frame.close();
232
+ return false;
233
+ }
234
+ try {
235
+ return native.__drawD3DSharedFrame(frame.address, width, height, ...rect);
236
+ }
237
+ finally {
238
+ frame.close();
239
+ }
240
+ }
241
+ attachAudioContextTap() {
242
+ return this._media.attachAudioTap();
243
+ }
244
+ detachAudioContextTap() {
245
+ this._media.detachAudioTap();
246
+ }
247
+ getVideoFrameData() {
248
+ return this._currentAsset();
249
+ }
250
+ /** `device`: the WebGPU device's adapter LUID (`__frameDevice`). */
251
+ supportsGPUFrames(device) {
252
+ const bridge = this._bridge;
253
+ return !!device && bridge.sharesFrames && bridge.adapterLuid === device;
254
+ }
255
+ /** null when no frame was decoded since the last one handed out; `close()` it once the upload is issued. */
256
+ getGPUFrameTexture(device) {
257
+ const bridge = this._bridge;
258
+ const id = bridge.frameId;
259
+ if (!id || id === this._gpuFrameId || !this.supportsGPUFrames(device)) {
260
+ return null;
261
+ }
262
+ const frame = bridge.gpuFrame();
263
+ if (!frame) {
264
+ return null;
265
+ }
266
+ this._gpuFrameId = id;
267
+ return {
268
+ texturePointer: frame.address,
269
+ width: frame.width,
270
+ height: frame.height,
271
+ close: () => frame.close(),
272
+ };
273
+ }
274
+ //@ts-ignore
275
+ get readyState() {
276
+ return this._media.readyState;
277
+ }
278
+ get videoWidth() {
279
+ return this._bridge.videoWidth;
280
+ }
281
+ get videoHeight() {
282
+ return this._bridge.videoHeight;
283
+ }
284
+ canPlayType(type) {
285
+ return canPlayType(type);
286
+ }
287
+ _addChildFromBuilder(name, value) {
288
+ if (value instanceof Source) {
289
+ this._sourceView.push(value);
290
+ }
291
+ }
292
+ onLoaded() {
293
+ super.onLoaded();
294
+ if (!this._media.src) {
295
+ this._sources = this._sourceView.filter((item) => item.src && (!item.type || canPlayType(item.type) !== '')).map((item) => item.src);
296
+ this._onLoadError();
297
+ }
298
+ }
299
+ _onLoadError() {
300
+ const next = this._sources.shift();
301
+ if (next === undefined) {
302
+ return false;
303
+ }
304
+ this._media.src = next;
305
+ return true;
306
+ }
307
+ get duration() {
308
+ return this._media.duration;
309
+ }
310
+ get currentTime() {
311
+ return this._media.currentTime;
312
+ }
313
+ set currentTime(value) {
314
+ this._media.currentTime = value;
315
+ }
316
+ get muted() {
317
+ return this._media.muted;
318
+ }
319
+ set muted(value) {
320
+ this._media.muted = booleanConverter(value);
321
+ }
322
+ get volume() {
323
+ return this._media.volume;
324
+ }
325
+ set volume(value) {
326
+ this._media.volume = value;
327
+ }
328
+ get paused() {
329
+ return this._media.paused;
330
+ }
331
+ get src() {
332
+ return this._media.src;
333
+ }
334
+ set src(value) {
335
+ this._sources = [];
336
+ this._frame = null;
337
+ this._assetFrameId = 0;
338
+ this._media.src = value;
339
+ }
340
+ load() {
341
+ this._media.load();
342
+ }
343
+ play() {
344
+ return this._media.play();
345
+ }
346
+ pause() {
347
+ this._media.pause();
348
+ }
349
+ get controls() {
350
+ return this._controls;
351
+ }
352
+ set controls(value) {
353
+ this._controls = booleanConverter(value);
354
+ this._syncControls();
355
+ }
356
+ //@ts-ignore
357
+ get autoplay() {
358
+ return this._media.autoplay;
359
+ }
360
+ set autoplay(value) {
361
+ this._media.autoplay = booleanConverter(value);
362
+ }
363
+ // @ts-ignore
364
+ get loop() {
365
+ return this._media.loop;
366
+ }
367
+ // @ts-ignore
368
+ set loop(value) {
369
+ this._media.loop = booleanConverter(value);
370
+ }
371
+ }
372
+ //# 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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"}