react-native-webgpu 0.10.5 → 0.11.1
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.
- package/android/cpp/AndroidPlatformContext.h +100 -9
- package/android/cpp/AndroidVideoPlayer.h +307 -0
- package/android/cpp/cpp-adapter.cpp +66 -6
- package/android/src/main/java/com/webgpu/ViewSnapshot.java +162 -0
- package/android/src/main/java/com/webgpu/WebGPUModule.java +78 -0
- package/android/src/main/java/com/webgpu/WebGPUVideoPlayer.java +420 -0
- package/apple/ApplePlatformContext.h +14 -1
- package/apple/ApplePlatformContext.mm +176 -1
- package/apple/AppleVideoPlayer.mm +157 -47
- package/apple/WebGPUModule.mm +20 -1
- package/cpp/rnwgpu/PlatformContext.h +76 -1
- package/cpp/rnwgpu/RNWebGPUManager.cpp +7 -0
- package/cpp/rnwgpu/api/GPUDevice.cpp +2 -1
- package/cpp/rnwgpu/api/GPUDevice.h +6 -0
- package/cpp/rnwgpu/api/GPUQueue.cpp +261 -4
- package/cpp/rnwgpu/api/GPUQueue.h +29 -2
- package/cpp/rnwgpu/api/VideoFrameBlit.h +355 -0
- package/cpp/rnwgpu/api/VideoPlayer.h +50 -3
- package/cpp/rnwgpu/api/descriptors/GPUDrawElementImageDestination.h +60 -0
- package/cpp/rnwgpu/api/descriptors/GPUDrawElementImageSource.h +106 -0
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyExternalImage.h +30 -3
- package/lib/commonjs/importDevice.js +2 -2
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/main/index.js +45 -0
- package/lib/commonjs/main/index.js.map +1 -1
- package/lib/commonjs/main/index.web.js +11 -0
- package/lib/commonjs/main/index.web.js.map +1 -1
- package/lib/commonjs/video.js +58 -0
- package/lib/commonjs/video.js.map +1 -0
- package/lib/module/importDevice.js +2 -2
- package/lib/module/index.js.map +1 -1
- package/lib/module/main/index.js +34 -0
- package/lib/module/main/index.js.map +1 -1
- package/lib/module/main/index.web.js +1 -0
- package/lib/module/main/index.web.js.map +1 -1
- package/lib/module/video.js +49 -0
- package/lib/module/video.js.map +1 -0
- package/lib/typescript/lib/commonjs/video.d.ts +30 -0
- package/lib/typescript/lib/commonjs/video.d.ts.map +1 -0
- package/lib/typescript/lib/module/main/index.d.ts +1 -0
- package/lib/typescript/lib/module/main/index.web.d.ts +1 -0
- package/lib/typescript/lib/module/video.d.ts +4 -0
- package/lib/typescript/lib/module/video.d.ts.map +1 -0
- package/lib/typescript/src/importDevice.d.ts +2 -2
- package/lib/typescript/src/index.d.ts +8 -3
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/main/index.d.ts +1 -0
- package/lib/typescript/src/main/index.d.ts.map +1 -1
- package/lib/typescript/src/main/index.web.d.ts +1 -0
- package/lib/typescript/src/main/index.web.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +32 -0
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/lib/typescript/src/video.d.ts +41 -0
- package/lib/typescript/src/video.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/importDevice.ts +2 -2
- package/src/index.tsx +57 -3
- package/src/main/index.tsx +50 -0
- package/src/main/index.web.tsx +1 -0
- package/src/types.ts +89 -7
- package/src/video.ts +69 -0
|
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "WebGPUModule", {
|
|
|
12
12
|
return _NativeWebGPUModule.default;
|
|
13
13
|
}
|
|
14
14
|
});
|
|
15
|
+
var _reactNative = require("react-native");
|
|
15
16
|
var _external = require("../external");
|
|
16
17
|
var _install = require("../install");
|
|
17
18
|
var _NativeWebGPUModule = _interopRequireDefault(require("../NativeWebGPUModule"));
|
|
@@ -87,6 +88,18 @@ Object.keys(_importDevice).forEach(function (key) {
|
|
|
87
88
|
}
|
|
88
89
|
});
|
|
89
90
|
});
|
|
91
|
+
var _video = require("../video");
|
|
92
|
+
Object.keys(_video).forEach(function (key) {
|
|
93
|
+
if (key === "default" || key === "__esModule") return;
|
|
94
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
95
|
+
if (key in exports && exports[key] === _video[key]) return;
|
|
96
|
+
Object.defineProperty(exports, key, {
|
|
97
|
+
enumerable: true,
|
|
98
|
+
get: function () {
|
|
99
|
+
return _video[key];
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
});
|
|
90
103
|
var _formats = require("../formats");
|
|
91
104
|
Object.keys(_formats).forEach(function (key) {
|
|
92
105
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -100,6 +113,37 @@ Object.keys(_formats).forEach(function (key) {
|
|
|
100
113
|
});
|
|
101
114
|
});
|
|
102
115
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
116
|
+
// Resolve the `source` of drawElementImageToTexture to a React tag on the
|
|
117
|
+
// main JS runtime, where findNodeHandle is available: it handles class
|
|
118
|
+
// components and legacy host instances that the native fallback (a number or
|
|
119
|
+
// an instance carrying `__nativeTag`) does not.
|
|
120
|
+
const resolveElementSource = source => {
|
|
121
|
+
if (typeof source === "number") {
|
|
122
|
+
return source;
|
|
123
|
+
}
|
|
124
|
+
const instance = source !== null && typeof source === "object" && "current" in source ? source.current : source;
|
|
125
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
126
|
+
const tag = instance == null ? null : (0, _reactNative.findNodeHandle)(instance);
|
|
127
|
+
if (tag === null || tag === undefined) {
|
|
128
|
+
throw new Error("[WebGPU] drawElementImageToTexture: `source` does not resolve to a " + "mounted native view (pass a host component ref rendered with " + "collapsable={false})");
|
|
129
|
+
}
|
|
130
|
+
return tag;
|
|
131
|
+
};
|
|
132
|
+
const installDrawElementImageToTexture = () => {
|
|
133
|
+
if (typeof GPUQueue === "undefined") {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
const native = GPUQueue.prototype.drawElementImageToTexture;
|
|
137
|
+
if (typeof native !== "function") {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
GPUQueue.prototype.drawElementImageToTexture = function (source, destination) {
|
|
141
|
+
return native.call(this, {
|
|
142
|
+
...source,
|
|
143
|
+
source: resolveElementSource(source.source)
|
|
144
|
+
}, destination);
|
|
145
|
+
};
|
|
146
|
+
};
|
|
103
147
|
const _installOk = _NativeWebGPUModule.default.install();
|
|
104
148
|
(0, _external.registerWebGPUForReanimated)();
|
|
105
149
|
if (typeof RNWebGPU !== "undefined") {
|
|
@@ -122,6 +166,7 @@ if (typeof RNWebGPU !== "undefined") {
|
|
|
122
166
|
}
|
|
123
167
|
}
|
|
124
168
|
global.createImageBitmap = global.createImageBitmap ?? RNWebGPU.createImageBitmap.bind(RNWebGPU);
|
|
169
|
+
installDrawElementImageToTexture();
|
|
125
170
|
// Let installWebGPU() put navigator.gpu on other runtimes (see install.ts).
|
|
126
171
|
(0, _install.provideGPUForInstall)(RNWebGPU.gpu);
|
|
127
172
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_external","_install","_NativeWebGPUModule","_interopRequireDefault","_Canvas","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_Offscreen","_WebGPUViewNativeComponent","_hooks","_GPUDeviceProvider","_importDevice","_video","_formats","e","__esModule","default","resolveElementSource","source","instance","current","tag","findNodeHandle","undefined","Error","installDrawElementImageToTexture","GPUQueue","native","drawElementImageToTexture","destination","_installOk","WebGPUModule","install","registerWebGPUForReanimated","RNWebGPU","navigator","gpu","userAgent","global","createImageBitmap","bind","provideGPUForInstall","console","warn"],"sourceRoot":"../../../src","sources":["main/index.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -70,4 +70,15 @@ Object.keys(_formats).forEach(function (key) {
|
|
|
70
70
|
}
|
|
71
71
|
});
|
|
72
72
|
});
|
|
73
|
+
var _video = require("../video");
|
|
74
|
+
Object.keys(_video).forEach(function (key) {
|
|
75
|
+
if (key === "default" || key === "__esModule") return;
|
|
76
|
+
if (key in exports && exports[key] === _video[key]) return;
|
|
77
|
+
Object.defineProperty(exports, key, {
|
|
78
|
+
enumerable: true,
|
|
79
|
+
get: function () {
|
|
80
|
+
return _video[key];
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
});
|
|
73
84
|
//# sourceMappingURL=index.web.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["require","_Canvas","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_Offscreen","_WebGPUViewNativeComponent","_hooks","_GPUDeviceProvider","_formats"],"sourceRoot":"../../../src","sources":["main/index.web.tsx"],"mappings":";;;;;AAAAA,OAAA;AAEA,IAAAC,OAAA,GAAAD,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAF,OAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAJ,OAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAR,OAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,UAAA,GAAAV,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAO,UAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,UAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,UAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AACA,IAAAM,0BAAA,GAAAX,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAQ,0BAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,0BAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,0BAAA,CAAAN,GAAA;IAAA;EAAA;AAAA;AACA,IAAAO,MAAA,GAAAZ,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAS,MAAA,EAAAR,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAO,MAAA,CAAAP,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAG,MAAA,CAAAP,GAAA;IAAA;EAAA;AAAA;AACA,IAAAQ,kBAAA,GAAAb,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAU,kBAAA,EAAAT,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAQ,kBAAA,CAAAR,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAI,kBAAA,CAAAR,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,QAAA,GAAAd,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAW,QAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAS,QAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAK,QAAA,CAAAT,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["require","_Canvas","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_Offscreen","_WebGPUViewNativeComponent","_hooks","_GPUDeviceProvider","_formats","_video"],"sourceRoot":"../../../src","sources":["main/index.web.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createVideoPlayer = exports.createVideoFrameFromNativeBuffer = exports.createTestVideoFrame = void 0;
|
|
7
|
+
const native = name => {
|
|
8
|
+
if (typeof RNWebGPU === "undefined") {
|
|
9
|
+
throw new Error(`react-native-webgpu is not installed natively; ${name} is unavailable`);
|
|
10
|
+
}
|
|
11
|
+
return RNWebGPU;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Decodes a video into native frames the GPU samples without any copy.
|
|
16
|
+
*
|
|
17
|
+
* `source` is a URL (`http`, `https`, `file`) or a file path. Playback is
|
|
18
|
+
* controlled like an HTMLMediaElement (`play()`, `pause()`, `currentTime`,
|
|
19
|
+
* `loop`, `volume`); frames are pulled with `copyLatestFrame()` on every
|
|
20
|
+
* render tick and sampled through `importExternalTexture()` or
|
|
21
|
+
* `importSharedTextureMemory()`:
|
|
22
|
+
*
|
|
23
|
+
* ```ts
|
|
24
|
+
* const player = createVideoPlayer(url);
|
|
25
|
+
* player.play();
|
|
26
|
+
* const render = () => {
|
|
27
|
+
* const frame = player.copyLatestFrame();
|
|
28
|
+
* if (frame) {
|
|
29
|
+
* // import, draw, then release once the frame is no longer sampled
|
|
30
|
+
* }
|
|
31
|
+
* requestAnimationFrame(render);
|
|
32
|
+
* };
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* On Apple platforms the frames are BGRA by default, or NV12 with
|
|
36
|
+
* `{ pixelFormat: "nv12" }`. On Android they are always in the decoder's
|
|
37
|
+
* native YUV layout, for `importExternalTexture()`.
|
|
38
|
+
*/
|
|
39
|
+
const createVideoPlayer = (source, options) => native("createVideoPlayer").createVideoPlayer(source, options?.pixelFormat);
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Wraps a native buffer produced by another library (a `CVPixelBufferRef` on
|
|
43
|
+
* Apple platforms, an `AHardwareBuffer*` on Android, for instance
|
|
44
|
+
* VisionCamera's `frame.getNativeBuffer().pointer`) into a `NativeVideoFrame`
|
|
45
|
+
* that keeps it alive until released.
|
|
46
|
+
*/
|
|
47
|
+
exports.createVideoPlayer = createVideoPlayer;
|
|
48
|
+
const createVideoFrameFromNativeBuffer = pointer => native("createVideoFrameFromNativeBuffer").createVideoFrameFromNativeBuffer(pointer);
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Allocates a native frame of the given size filled with a test pattern (a
|
|
52
|
+
* red/green gradient with diagonal stripes in the blue channel), for examples
|
|
53
|
+
* and tests that need a frame without a camera or a video.
|
|
54
|
+
*/
|
|
55
|
+
exports.createVideoFrameFromNativeBuffer = createVideoFrameFromNativeBuffer;
|
|
56
|
+
const createTestVideoFrame = (width, height) => native("createTestVideoFrame").createTestVideoFrame(width, height);
|
|
57
|
+
exports.createTestVideoFrame = createTestVideoFrame;
|
|
58
|
+
//# sourceMappingURL=video.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["native","name","RNWebGPU","Error","createVideoPlayer","source","options","pixelFormat","exports","createVideoFrameFromNativeBuffer","pointer","createTestVideoFrame","width","height"],"sourceRoot":"../../src","sources":["video.ts"],"mappings":";;;;;;AAMA,MAAMA,MAAM,GAAIC,IAAY,IAAK;EAC/B,IAAI,OAAOC,QAAQ,KAAK,WAAW,EAAE;IACnC,MAAM,IAAIC,KAAK,CACb,kDAAkDF,IAAI,iBACxD,CAAC;EACH;EACA,OAAOC,QAAQ;AACjB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAME,iBAAiB,GAAGA,CAC/BC,MAAc,EACdC,OAAkC,KAElCN,MAAM,CAAC,mBAAmB,CAAC,CAACI,iBAAiB,CAACC,MAAM,EAAEC,OAAO,EAAEC,WAAW,CAAC;;AAE7E;AACA;AACA;AACA;AACA;AACA;AALAC,OAAA,CAAAJ,iBAAA,GAAAA,iBAAA;AAMO,MAAMK,gCAAgC,GAC3CC,OAAe,IAEfV,MAAM,CAAC,kCAAkC,CAAC,CAACS,gCAAgC,CACzEC,OACF,CAAC;;AAEH;AACA;AACA;AACA;AACA;AAJAF,OAAA,CAAAC,gCAAA,GAAAA,gCAAA;AAKO,MAAME,oBAAoB,GAAGA,CAClCC,KAAa,EACbC,MAAc,KAEdb,MAAM,CAAC,sBAAsB,CAAC,CAACW,oBAAoB,CAACC,KAAK,EAAEC,MAAM,CAAC;AAACL,OAAA,CAAAG,oBAAA,GAAAA,oBAAA","ignoreList":[]}
|
|
@@ -24,10 +24,10 @@ export const importDevice = pointer => {
|
|
|
24
24
|
* ownership of one reference: the returned texture releases it when destroyed.
|
|
25
25
|
*
|
|
26
26
|
* Pair with producers that hand out a +1 reference, such as
|
|
27
|
-
* `Skia.Image.
|
|
27
|
+
* `Skia.Image.MakeGPUTextureFromImage()`:
|
|
28
28
|
*
|
|
29
29
|
* ```ts
|
|
30
|
-
* const texture = adoptTexture(Skia.Image.
|
|
30
|
+
* const texture = adoptTexture(Skia.Image.MakeGPUTextureFromImage(image));
|
|
31
31
|
* ```
|
|
32
32
|
*/
|
|
33
33
|
export const adoptTexture = pointer => {
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["installWebGPU"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"AAAA;;
|
|
1
|
+
{"version":3,"names":["installWebGPU"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"AAAA;;AAkBA,cAAc,QAAQ;AACtB,cAAc,aAAa;AAC3B,SAASA,aAAa,QAAQ,WAAW","ignoreList":[]}
|
package/lib/module/main/index.js
CHANGED
|
@@ -1,12 +1,45 @@
|
|
|
1
|
+
import { findNodeHandle } from "react-native";
|
|
1
2
|
import { registerWebGPUForReanimated } from "../external";
|
|
2
3
|
import { provideGPUForInstall } from "../install";
|
|
3
4
|
import WebGPUModule from "../NativeWebGPUModule";
|
|
5
|
+
// Resolve the `source` of drawElementImageToTexture to a React tag on the
|
|
6
|
+
// main JS runtime, where findNodeHandle is available: it handles class
|
|
7
|
+
// components and legacy host instances that the native fallback (a number or
|
|
8
|
+
// an instance carrying `__nativeTag`) does not.
|
|
9
|
+
const resolveElementSource = source => {
|
|
10
|
+
if (typeof source === "number") {
|
|
11
|
+
return source;
|
|
12
|
+
}
|
|
13
|
+
const instance = source !== null && typeof source === "object" && "current" in source ? source.current : source;
|
|
14
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
15
|
+
const tag = instance == null ? null : findNodeHandle(instance);
|
|
16
|
+
if (tag === null || tag === undefined) {
|
|
17
|
+
throw new Error("[WebGPU] drawElementImageToTexture: `source` does not resolve to a " + "mounted native view (pass a host component ref rendered with " + "collapsable={false})");
|
|
18
|
+
}
|
|
19
|
+
return tag;
|
|
20
|
+
};
|
|
21
|
+
const installDrawElementImageToTexture = () => {
|
|
22
|
+
if (typeof GPUQueue === "undefined") {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const native = GPUQueue.prototype.drawElementImageToTexture;
|
|
26
|
+
if (typeof native !== "function") {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
GPUQueue.prototype.drawElementImageToTexture = function (source, destination) {
|
|
30
|
+
return native.call(this, {
|
|
31
|
+
...source,
|
|
32
|
+
source: resolveElementSource(source.source)
|
|
33
|
+
}, destination);
|
|
34
|
+
};
|
|
35
|
+
};
|
|
4
36
|
export * from "../Canvas";
|
|
5
37
|
export * from "../Offscreen";
|
|
6
38
|
export * from "../WebGPUViewNativeComponent";
|
|
7
39
|
export * from "../hooks";
|
|
8
40
|
export * from "../GPUDeviceProvider";
|
|
9
41
|
export * from "../importDevice";
|
|
42
|
+
export * from "../video";
|
|
10
43
|
export * from "../formats";
|
|
11
44
|
export { default as WebGPUModule } from "../NativeWebGPUModule";
|
|
12
45
|
const _installOk = WebGPUModule.install();
|
|
@@ -31,6 +64,7 @@ if (typeof RNWebGPU !== "undefined") {
|
|
|
31
64
|
}
|
|
32
65
|
}
|
|
33
66
|
global.createImageBitmap = global.createImageBitmap ?? RNWebGPU.createImageBitmap.bind(RNWebGPU);
|
|
67
|
+
installDrawElementImageToTexture();
|
|
34
68
|
// Let installWebGPU() put navigator.gpu on other runtimes (see install.ts).
|
|
35
69
|
provideGPUForInstall(RNWebGPU.gpu);
|
|
36
70
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["registerWebGPUForReanimated","provideGPUForInstall","WebGPUModule","default","_installOk","install","RNWebGPU","navigator","gpu","userAgent","global","createImageBitmap","bind","console","warn"],"sourceRoot":"../../../src","sources":["main/index.tsx"],"mappings":"AAAA,SAASA,2BAA2B,QAAQ,aAAa;AACzD,SAASC,oBAAoB,QAAQ,YAAY;AACjD,OAAOC,YAAY,MAAM,uBAAuB;
|
|
1
|
+
{"version":3,"names":["findNodeHandle","registerWebGPUForReanimated","provideGPUForInstall","WebGPUModule","resolveElementSource","source","instance","current","tag","undefined","Error","installDrawElementImageToTexture","GPUQueue","native","prototype","drawElementImageToTexture","destination","call","default","_installOk","install","RNWebGPU","navigator","gpu","userAgent","global","createImageBitmap","bind","console","warn"],"sourceRoot":"../../../src","sources":["main/index.tsx"],"mappings":"AAAA,SAASA,cAAc,QAAQ,cAAc;AAE7C,SAASC,2BAA2B,QAAQ,aAAa;AACzD,SAASC,oBAAoB,QAAQ,YAAY;AACjD,OAAOC,YAAY,MAAM,uBAAuB;AAGhD;AACA;AACA;AACA;AACA,MAAMC,oBAAoB,GAAIC,MAAqC,IAAK;EACtE,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;IAC9B,OAAOA,MAAM;EACf;EACA,MAAMC,QAAQ,GACZD,MAAM,KAAK,IAAI,IAAI,OAAOA,MAAM,KAAK,QAAQ,IAAI,SAAS,IAAIA,MAAM,GAChEA,MAAM,CAACE,OAAO,GACdF,MAAM;EACZ;EACA,MAAMG,GAAG,GAAGF,QAAQ,IAAI,IAAI,GAAG,IAAI,GAAGN,cAAc,CAACM,QAAe,CAAC;EACrE,IAAIE,GAAG,KAAK,IAAI,IAAIA,GAAG,KAAKC,SAAS,EAAE;IACrC,MAAM,IAAIC,KAAK,CACb,qEAAqE,GACnE,+DAA+D,GAC/D,sBACJ,CAAC;EACH;EACA,OAAOF,GAAG;AACZ,CAAC;AAED,MAAMG,gCAAgC,GAAGA,CAAA,KAAM;EAC7C,IAAI,OAAOC,QAAQ,KAAK,WAAW,EAAE;IACnC;EACF;EACA,MAAMC,MAAM,GAAGD,QAAQ,CAACE,SAAS,CAACC,yBAAyB;EAC3D,IAAI,OAAOF,MAAM,KAAK,UAAU,EAAE;IAChC;EACF;EACAD,QAAQ,CAACE,SAAS,CAACC,yBAAyB,GAAG,UAE7CV,MAAM,EACNW,WAAW,EACX;IACA,OAAOH,MAAM,CAACI,IAAI,CAChB,IAAI,EACJ;MAAE,GAAGZ,MAAM;MAAEA,MAAM,EAAED,oBAAoB,CAACC,MAAM,CAACA,MAAM;IAAE,CAAC,EAC1DW,WACF,CAAC;EACH,CAAC;AACH,CAAC;AAED,cAAc,WAAW;AACzB,cAAc,cAAc;AAC5B,cAAc,8BAA8B;AAC5C,cAAc,UAAU;AACxB,cAAc,sBAAsB;AACpC,cAAc,iBAAiB;AAC/B,cAAc,UAAU;AACxB,cAAc,YAAY;AAE1B,SAASE,OAAO,IAAIf,YAAY,QAAQ,uBAAuB;AAE/D,MAAMgB,UAAU,GAAGhB,YAAY,CAACiB,OAAO,CAAC,CAAC;AAEzCnB,2BAA2B,CAAC,CAAC;AAE7B,IAAI,OAAOoB,QAAQ,KAAK,WAAW,EAAE;EACnC,IAAI,CAACC,SAAS,EAAE;IACd;IACAA,SAAS,GAAG;MACVC,GAAG,EAAEF,QAAQ,CAACE,GAAG;MACjBC,SAAS,EAAE;IACb,CAAC;EACH,CAAC,MAAM;IACLF,SAAS,CAACC,GAAG,GAAGF,QAAQ,CAACE,GAAG;IAC5B,IAAI,OAAOD,SAAS,CAACE,SAAS,KAAK,QAAQ,EAAE;MAC3C,IAAI;QACF;QACA;QACAF,SAAS,CAACE,SAAS,GAAG,cAAc;MACtC,CAAC,CAAC,MAAM;QACN;MAAA;IAEJ;EACF;EACAC,MAAM,CAACC,iBAAiB,GACtBD,MAAM,CAACC,iBAAiB,IAAIL,QAAQ,CAACK,iBAAiB,CAACC,IAAI,CAACN,QAAQ,CAAC;EACvEV,gCAAgC,CAAC,CAAC;EAClC;EACAT,oBAAoB,CAACmB,QAAQ,CAACE,GAAG,CAAC;AACpC,CAAC,MAAM;EACLK,OAAO,CAACC,IAAI,CACV,4CAA4CV,UAAU,uCACxD,CAAC;AACH","ignoreList":[]}
|
|
@@ -5,6 +5,7 @@ export * from "../WebGPUViewNativeComponent";
|
|
|
5
5
|
export * from "../hooks";
|
|
6
6
|
export * from "../GPUDeviceProvider";
|
|
7
7
|
export * from "../formats";
|
|
8
|
+
export * from "../video";
|
|
8
9
|
|
|
9
10
|
// We don't need to set all global properties on web, webgpu is already available globally
|
|
10
11
|
//# sourceMappingURL=index.web.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["main/index.web.tsx"],"mappings":"AAAA,OAAO,yBAAyB;AAEhC,cAAc,WAAW;AACzB,cAAc,cAAc;AAC5B,cAAc,8BAA8B;AAC5C,cAAc,UAAU;AACxB,cAAc,sBAAsB;AACpC,cAAc,YAAY;;
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["main/index.web.tsx"],"mappings":"AAAA,OAAO,yBAAyB;AAEhC,cAAc,WAAW;AACzB,cAAc,cAAc;AAC5B,cAAc,8BAA8B;AAC5C,cAAc,UAAU;AACxB,cAAc,sBAAsB;AACpC,cAAc,YAAY;AAC1B,cAAc,UAAU;;AAExB","ignoreList":[]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
const native = name => {
|
|
2
|
+
if (typeof RNWebGPU === "undefined") {
|
|
3
|
+
throw new Error(`react-native-webgpu is not installed natively; ${name} is unavailable`);
|
|
4
|
+
}
|
|
5
|
+
return RNWebGPU;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Decodes a video into native frames the GPU samples without any copy.
|
|
10
|
+
*
|
|
11
|
+
* `source` is a URL (`http`, `https`, `file`) or a file path. Playback is
|
|
12
|
+
* controlled like an HTMLMediaElement (`play()`, `pause()`, `currentTime`,
|
|
13
|
+
* `loop`, `volume`); frames are pulled with `copyLatestFrame()` on every
|
|
14
|
+
* render tick and sampled through `importExternalTexture()` or
|
|
15
|
+
* `importSharedTextureMemory()`:
|
|
16
|
+
*
|
|
17
|
+
* ```ts
|
|
18
|
+
* const player = createVideoPlayer(url);
|
|
19
|
+
* player.play();
|
|
20
|
+
* const render = () => {
|
|
21
|
+
* const frame = player.copyLatestFrame();
|
|
22
|
+
* if (frame) {
|
|
23
|
+
* // import, draw, then release once the frame is no longer sampled
|
|
24
|
+
* }
|
|
25
|
+
* requestAnimationFrame(render);
|
|
26
|
+
* };
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* On Apple platforms the frames are BGRA by default, or NV12 with
|
|
30
|
+
* `{ pixelFormat: "nv12" }`. On Android they are always in the decoder's
|
|
31
|
+
* native YUV layout, for `importExternalTexture()`.
|
|
32
|
+
*/
|
|
33
|
+
export const createVideoPlayer = (source, options) => native("createVideoPlayer").createVideoPlayer(source, options?.pixelFormat);
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Wraps a native buffer produced by another library (a `CVPixelBufferRef` on
|
|
37
|
+
* Apple platforms, an `AHardwareBuffer*` on Android, for instance
|
|
38
|
+
* VisionCamera's `frame.getNativeBuffer().pointer`) into a `NativeVideoFrame`
|
|
39
|
+
* that keeps it alive until released.
|
|
40
|
+
*/
|
|
41
|
+
export const createVideoFrameFromNativeBuffer = pointer => native("createVideoFrameFromNativeBuffer").createVideoFrameFromNativeBuffer(pointer);
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Allocates a native frame of the given size filled with a test pattern (a
|
|
45
|
+
* red/green gradient with diagonal stripes in the blue channel), for examples
|
|
46
|
+
* and tests that need a frame without a camera or a video.
|
|
47
|
+
*/
|
|
48
|
+
export const createTestVideoFrame = (width, height) => native("createTestVideoFrame").createTestVideoFrame(width, height);
|
|
49
|
+
//# sourceMappingURL=video.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["native","name","RNWebGPU","Error","createVideoPlayer","source","options","pixelFormat","createVideoFrameFromNativeBuffer","pointer","createTestVideoFrame","width","height"],"sourceRoot":"../../src","sources":["video.ts"],"mappings":"AAMA,MAAMA,MAAM,GAAIC,IAAY,IAAK;EAC/B,IAAI,OAAOC,QAAQ,KAAK,WAAW,EAAE;IACnC,MAAM,IAAIC,KAAK,CACb,kDAAkDF,IAAI,iBACxD,CAAC;EACH;EACA,OAAOC,QAAQ;AACjB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAME,iBAAiB,GAAGA,CAC/BC,MAAc,EACdC,OAAkC,KAElCN,MAAM,CAAC,mBAAmB,CAAC,CAACI,iBAAiB,CAACC,MAAM,EAAEC,OAAO,EAAEC,WAAW,CAAC;;AAE7E;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,gCAAgC,GAC3CC,OAAe,IAEfT,MAAM,CAAC,kCAAkC,CAAC,CAACQ,gCAAgC,CACzEC,OACF,CAAC;;AAEH;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,oBAAoB,GAAGA,CAClCC,KAAa,EACbC,MAAc,KAEdZ,MAAM,CAAC,sBAAsB,CAAC,CAACU,oBAAoB,CAACC,KAAK,EAAEC,MAAM,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export const __esModule: boolean;
|
|
2
|
+
/**
|
|
3
|
+
* Decodes a video into native frames the GPU samples without any copy.
|
|
4
|
+
*
|
|
5
|
+
* `source` is a URL (`http`, `https`, `file`) or a file path. Playback is
|
|
6
|
+
* controlled like an HTMLMediaElement (`play()`, `pause()`, `currentTime`,
|
|
7
|
+
* `loop`, `volume`); frames are pulled with `copyLatestFrame()` on every
|
|
8
|
+
* render tick and sampled through `importExternalTexture()` or
|
|
9
|
+
* `importSharedTextureMemory()`:
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* const player = createVideoPlayer(url);
|
|
13
|
+
* player.play();
|
|
14
|
+
* const render = () => {
|
|
15
|
+
* const frame = player.copyLatestFrame();
|
|
16
|
+
* if (frame) {
|
|
17
|
+
* // import, draw, then release once the frame is no longer sampled
|
|
18
|
+
* }
|
|
19
|
+
* requestAnimationFrame(render);
|
|
20
|
+
* };
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* On Apple platforms the frames are BGRA by default, or NV12 with
|
|
24
|
+
* `{ pixelFormat: "nv12" }`. On Android they are always in the decoder's
|
|
25
|
+
* native YUV layout, for `importExternalTexture()`.
|
|
26
|
+
*/
|
|
27
|
+
export function createVideoPlayer(source: any, options: any): import("../../src").VideoPlayer;
|
|
28
|
+
export function createVideoFrameFromNativeBuffer(pointer: any): import("../../src").NativeVideoFrame;
|
|
29
|
+
export function createTestVideoFrame(width: any, height: any): import("../../src").NativeVideoFrame;
|
|
30
|
+
//# sourceMappingURL=video.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../../commonjs/video.js"],"names":[],"mappings":";AAaA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,8FAA0H;AAS1H,qGAAwI;AAQxI,oGAAkH"}
|
|
@@ -4,6 +4,7 @@ export * from "../WebGPUViewNativeComponent";
|
|
|
4
4
|
export * from "../hooks";
|
|
5
5
|
export * from "../GPUDeviceProvider";
|
|
6
6
|
export * from "../importDevice";
|
|
7
|
+
export * from "../video";
|
|
7
8
|
export * from "../formats";
|
|
8
9
|
export { default as WebGPUModule } from "../NativeWebGPUModule";
|
|
9
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export function createVideoPlayer(source: any, options: any): import("../../src").VideoPlayer;
|
|
2
|
+
export function createVideoFrameFromNativeBuffer(pointer: any): import("../../src").NativeVideoFrame;
|
|
3
|
+
export function createTestVideoFrame(width: any, height: any): import("../../src").NativeVideoFrame;
|
|
4
|
+
//# sourceMappingURL=video.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../../module/video.js"],"names":[],"mappings":"AAgCO,8FAA0H;AAQ1H,qGAAwI;AAOxI,oGAAkH"}
|
|
@@ -18,10 +18,10 @@ export declare const importDevice: (pointer: bigint) => GPUDevice;
|
|
|
18
18
|
* ownership of one reference: the returned texture releases it when destroyed.
|
|
19
19
|
*
|
|
20
20
|
* Pair with producers that hand out a +1 reference, such as
|
|
21
|
-
* `Skia.Image.
|
|
21
|
+
* `Skia.Image.MakeGPUTextureFromImage()`:
|
|
22
22
|
*
|
|
23
23
|
* ```ts
|
|
24
|
-
* const texture = adoptTexture(Skia.Image.
|
|
24
|
+
* const texture = adoptTexture(Skia.Image.MakeGPUTextureFromImage(image));
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
27
|
export declare const adoptTexture: (pointer: bigint) => GPUTexture;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { GPUSharedFence, GPUSharedFenceDescriptor, GPUDawnTogglesDescriptor, GPUSharedTextureMemory, GPUSharedTextureMemoryDescriptor, NativeCanvas, RNCanvasContext, VideoPlayer, NativeVideoFrame, NativeVideoPixelFormat } from "./types";
|
|
1
|
+
import type { GPUDrawElementImageDestination, GPUDrawElementImageSource, GPUSharedFence, GPUSharedFenceDescriptor, GPUDawnTogglesDescriptor, GPUNativeExternalTextureDescriptor, GPUSharedTextureMemory, GPUSharedTextureMemoryDescriptor, GPUCopyExternalNativeFrameSourceInfo, NativeCanvas, RNCanvasContext, VideoPlayer, NativeVideoFrame, NativeVideoPixelFormat } from "./types";
|
|
2
2
|
export * from "./main";
|
|
3
3
|
export * from "./constants";
|
|
4
4
|
export { installWebGPU } from "./install";
|
|
5
|
-
export type { NativeVideoFrame, VideoPlayer, GPUSharedFence, GPUSharedFenceDescriptor, GPUSharedFenceExportInfo, GPUSharedFenceState, GPUSharedFenceType, GPUSharedTextureMemory, GPUSharedTextureMemoryDescriptor, GPUSharedTextureMemoryEndAccessState, NativeVideoPixelFormat, CreateVideoPlayerOptions, GPUDawnTogglesDescriptor, } from "./types";
|
|
5
|
+
export type { NativeVideoFrame, VideoPlayer, GPUSharedFence, GPUSharedFenceDescriptor, GPUSharedFenceExportInfo, GPUSharedFenceState, GPUSharedFenceType, GPUSharedTextureMemory, GPUSharedTextureMemoryDescriptor, GPUSharedTextureMemoryEndAccessState, NativeVideoPixelFormat, CreateVideoPlayerOptions, GPUCopyExternalNativeFrameSourceInfo, GPUDawnTogglesDescriptor, GPUNativeExternalTextureDescriptor, GPUDrawElementImageDestination, GPUDrawElementImageSource, GPUDrawElementImageSourceView, } from "./types";
|
|
6
6
|
declare global {
|
|
7
7
|
interface Navigator {
|
|
8
8
|
gpu: GPU;
|
|
@@ -21,16 +21,21 @@ declare global {
|
|
|
21
21
|
createVideoFrameFromNativeBuffer: (pointer: bigint) => NativeVideoFrame;
|
|
22
22
|
importDevice: (pointer: bigint) => GPUDevice;
|
|
23
23
|
adoptTexture: (pointer: bigint) => GPUTexture;
|
|
24
|
-
createVideoPlayer: (
|
|
24
|
+
createVideoPlayer: (source: string, pixelFormat?: NativeVideoPixelFormat) => VideoPlayer;
|
|
25
25
|
writeTestVideoFile: () => string;
|
|
26
26
|
};
|
|
27
27
|
interface GPUTexture {
|
|
28
28
|
readonly nativePointer: bigint;
|
|
29
29
|
}
|
|
30
30
|
interface GPUDevice {
|
|
31
|
+
importExternalTexture(descriptor: GPUNativeExternalTextureDescriptor): GPUExternalTexture;
|
|
31
32
|
importSharedTextureMemory(descriptor: GPUSharedTextureMemoryDescriptor): GPUSharedTextureMemory;
|
|
32
33
|
importSharedFence(descriptor: GPUSharedFenceDescriptor): GPUSharedFence;
|
|
33
34
|
}
|
|
35
|
+
interface GPUQueue {
|
|
36
|
+
drawElementImageToTexture(source: GPUDrawElementImageSource, destination: GPUDrawElementImageDestination): Promise<void>;
|
|
37
|
+
copyExternalImageToTexture(source: GPUCopyExternalNativeFrameSourceInfo, destination: GPUCopyExternalImageDestInfo, copySize: GPUExtent3DStrict): undefined;
|
|
38
|
+
}
|
|
34
39
|
interface GPUDeviceDescriptor {
|
|
35
40
|
dawnToggles?: GPUDawnTogglesDescriptor;
|
|
36
41
|
implicitDeviceSynchronization?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,gCAAgC,EAChC,YAAY,EACZ,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAEjB,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,wBAAwB,EACxB,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,gCAAgC,EAChC,oCAAoC,EACpC,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ export * from "../WebGPUViewNativeComponent";
|
|
|
4
4
|
export * from "../hooks";
|
|
5
5
|
export * from "../GPUDeviceProvider";
|
|
6
6
|
export * from "../importDevice";
|
|
7
|
+
export * from "../video";
|
|
7
8
|
export * from "../formats";
|
|
8
9
|
export { default as WebGPUModule } from "../NativeWebGPUModule";
|
|
9
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/main/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/main/index.tsx"],"names":[],"mappings":"AAoDA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAE3B,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../../../src/main/index.web.tsx"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAC;AAEjC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../../../src/main/index.web.tsx"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAC;AAEjC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC"}
|
|
@@ -36,15 +36,47 @@ export interface NativeVideoFrame {
|
|
|
36
36
|
readonly pixelFormat: NativeVideoPixelFormat;
|
|
37
37
|
release(): void;
|
|
38
38
|
}
|
|
39
|
+
export interface GPUNativeExternalTextureDescriptor extends Omit<GPUExternalTextureDescriptor, "source"> {
|
|
40
|
+
source: NativeVideoFrame;
|
|
41
|
+
}
|
|
39
42
|
export interface VideoPlayer {
|
|
40
43
|
copyLatestFrame(): NativeVideoFrame | null;
|
|
41
44
|
play(): void;
|
|
42
45
|
pause(): void;
|
|
43
46
|
release(): void;
|
|
47
|
+
readonly paused: boolean;
|
|
48
|
+
currentTime: number;
|
|
49
|
+
readonly duration: number;
|
|
50
|
+
volume: number;
|
|
51
|
+
loop: boolean;
|
|
52
|
+
readonly videoWidth: number;
|
|
53
|
+
readonly videoHeight: number;
|
|
54
|
+
readonly rotation: 0 | 90 | 180 | 270;
|
|
55
|
+
readonly frameRate: number;
|
|
56
|
+
}
|
|
57
|
+
export interface GPUCopyExternalNativeFrameSourceInfo {
|
|
58
|
+
source: NativeVideoFrame;
|
|
59
|
+
origin?: GPUOrigin2D;
|
|
60
|
+
flipY?: boolean;
|
|
61
|
+
rotation?: 0 | 90 | 180 | 270;
|
|
62
|
+
mirrored?: boolean;
|
|
44
63
|
}
|
|
45
64
|
export interface CreateVideoPlayerOptions {
|
|
46
65
|
pixelFormat?: NativeVideoPixelFormat;
|
|
47
66
|
}
|
|
67
|
+
export type GPUDrawElementImageSourceView = number | {
|
|
68
|
+
current: unknown;
|
|
69
|
+
} | React.Component | object;
|
|
70
|
+
export interface GPUDrawElementImageSource {
|
|
71
|
+
source: GPUDrawElementImageSourceView;
|
|
72
|
+
sourceX?: number;
|
|
73
|
+
sourceY?: number;
|
|
74
|
+
sourceWidth?: number;
|
|
75
|
+
sourceHeight?: number;
|
|
76
|
+
}
|
|
77
|
+
export interface GPUDrawElementImageDestination extends GPUCopyExternalImageDestInfo {
|
|
78
|
+
size?: GPUExtent3DStrict;
|
|
79
|
+
}
|
|
48
80
|
export interface GPUSharedTextureMemoryDescriptor {
|
|
49
81
|
handle: bigint;
|
|
50
82
|
label?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAAA,KAAK,cAAc,GAAG,MAAM,CAAC;AAE7B,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IAGrB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9D,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IACjE,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAClC,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAChD;AAED,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG;IAC/C;;;;;;;;OAQG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,UAAU,CAAC,WAAW,EAAE,QAAQ,GAAG,eAAe,GAAG,IAAI,CAAC;IAC1D,gBAAgB,EAAE,MAAM,YAAY,CAAC;CACtC;AAKD,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,MAAM,CAAC;AAkBtD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,sBAAsB,CAAC;IAC7C,OAAO,IAAI,IAAI,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { CreateVideoPlayerOptions, NativeVideoFrame, VideoPlayer } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Decodes a video into native frames the GPU samples without any copy.
|
|
4
|
+
*
|
|
5
|
+
* `source` is a URL (`http`, `https`, `file`) or a file path. Playback is
|
|
6
|
+
* controlled like an HTMLMediaElement (`play()`, `pause()`, `currentTime`,
|
|
7
|
+
* `loop`, `volume`); frames are pulled with `copyLatestFrame()` on every
|
|
8
|
+
* render tick and sampled through `importExternalTexture()` or
|
|
9
|
+
* `importSharedTextureMemory()`:
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* const player = createVideoPlayer(url);
|
|
13
|
+
* player.play();
|
|
14
|
+
* const render = () => {
|
|
15
|
+
* const frame = player.copyLatestFrame();
|
|
16
|
+
* if (frame) {
|
|
17
|
+
* // import, draw, then release once the frame is no longer sampled
|
|
18
|
+
* }
|
|
19
|
+
* requestAnimationFrame(render);
|
|
20
|
+
* };
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* On Apple platforms the frames are BGRA by default, or NV12 with
|
|
24
|
+
* `{ pixelFormat: "nv12" }`. On Android they are always in the decoder's
|
|
25
|
+
* native YUV layout, for `importExternalTexture()`.
|
|
26
|
+
*/
|
|
27
|
+
export declare const createVideoPlayer: (source: string, options?: CreateVideoPlayerOptions) => VideoPlayer;
|
|
28
|
+
/**
|
|
29
|
+
* Wraps a native buffer produced by another library (a `CVPixelBufferRef` on
|
|
30
|
+
* Apple platforms, an `AHardwareBuffer*` on Android, for instance
|
|
31
|
+
* VisionCamera's `frame.getNativeBuffer().pointer`) into a `NativeVideoFrame`
|
|
32
|
+
* that keeps it alive until released.
|
|
33
|
+
*/
|
|
34
|
+
export declare const createVideoFrameFromNativeBuffer: (pointer: bigint) => NativeVideoFrame;
|
|
35
|
+
/**
|
|
36
|
+
* Allocates a native frame of the given size filled with a test pattern (a
|
|
37
|
+
* red/green gradient with diagonal stripes in the blue channel), for examples
|
|
38
|
+
* and tests that need a frame without a camera or a video.
|
|
39
|
+
*/
|
|
40
|
+
export declare const createTestVideoFrame: (width: number, height: number) => NativeVideoFrame;
|
|
41
|
+
//# sourceMappingURL=video.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../../src/video.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,gBAAgB,EAChB,WAAW,EACZ,MAAM,SAAS,CAAC;AAWjB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,MAAM,EACd,UAAU,wBAAwB,KACjC,WAC0E,CAAC;AAE9E;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,GAC3C,SAAS,MAAM,KACd,gBAGA,CAAC;AAEJ;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC/B,OAAO,MAAM,EACb,QAAQ,MAAM,KACb,gBACiE,CAAC"}
|