alpha-video-gpu-web 0.0.0-stage → 1.0.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/LICENSE +21 -0
- package/README.md +129 -2
- package/THIRD_PARTY_NOTICES.md +12 -0
- package/dist/chunk-P3MJ6UC3.mjs +1770 -0
- package/dist/index.d.mts +268 -0
- package/dist/index.d.ts +268 -0
- package/dist/index.js +1895 -0
- package/dist/index.mjs +43 -0
- package/dist/react.d.mts +75 -0
- package/dist/react.d.ts +75 -0
- package/dist/react.js +1994 -0
- package/dist/react.mjs +133 -0
- package/dist/software-astc-G42RTJ34.mjs +57 -0
- package/dist/types-C6J2fa98.d.mts +96 -0
- package/dist/types-C6J2fa98.d.ts +96 -0
- package/licenses/Apache-2.0.txt +208 -0
- package/licenses/zstddec-LICENSE.txt +54 -0
- package/package.json +82 -4
package/dist/react.mjs
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import {
|
|
2
|
+
KTX2PlayerCore,
|
|
3
|
+
ZSTDDecoder
|
|
4
|
+
} from "./chunk-P3MJ6UC3.mjs";
|
|
5
|
+
|
|
6
|
+
// src/react.tsx
|
|
7
|
+
import React, { forwardRef, useImperativeHandle, useRef, useEffect, useMemo } from "react";
|
|
8
|
+
var AlphaVideoGpuPlayer = forwardRef(({
|
|
9
|
+
src,
|
|
10
|
+
cacheKey,
|
|
11
|
+
headers,
|
|
12
|
+
storage,
|
|
13
|
+
maxStorageBytes,
|
|
14
|
+
width = 300,
|
|
15
|
+
height = 300,
|
|
16
|
+
className,
|
|
17
|
+
style,
|
|
18
|
+
autoPlay = true,
|
|
19
|
+
loop = true,
|
|
20
|
+
playbackSpeed = 1,
|
|
21
|
+
paused = false,
|
|
22
|
+
stream = true,
|
|
23
|
+
streamingPrefetchAhead,
|
|
24
|
+
memoryStrategy,
|
|
25
|
+
verbose = false,
|
|
26
|
+
onLoad,
|
|
27
|
+
onStateChange,
|
|
28
|
+
onFrameUpdate,
|
|
29
|
+
onFinished,
|
|
30
|
+
onError
|
|
31
|
+
}, ref) => {
|
|
32
|
+
const canvasRef = useRef(null);
|
|
33
|
+
const coreRef = useRef(null);
|
|
34
|
+
const loadedSrcRef = useRef(null);
|
|
35
|
+
const headersRef = useRef(headers);
|
|
36
|
+
headersRef.current = headers;
|
|
37
|
+
useImperativeHandle(ref, () => ({
|
|
38
|
+
play: () => {
|
|
39
|
+
var _a;
|
|
40
|
+
return (_a = coreRef.current) == null ? void 0 : _a.play();
|
|
41
|
+
},
|
|
42
|
+
pause: () => {
|
|
43
|
+
var _a;
|
|
44
|
+
return (_a = coreRef.current) == null ? void 0 : _a.pause();
|
|
45
|
+
},
|
|
46
|
+
stop: () => {
|
|
47
|
+
var _a;
|
|
48
|
+
return (_a = coreRef.current) == null ? void 0 : _a.stop();
|
|
49
|
+
},
|
|
50
|
+
seekToFrame: (frame) => {
|
|
51
|
+
var _a;
|
|
52
|
+
return (_a = coreRef.current) == null ? void 0 : _a.seekToFrame(frame);
|
|
53
|
+
},
|
|
54
|
+
seekToTime: (seconds) => {
|
|
55
|
+
var _a;
|
|
56
|
+
return (_a = coreRef.current) == null ? void 0 : _a.seekToTime(seconds);
|
|
57
|
+
}
|
|
58
|
+
}), []);
|
|
59
|
+
useEffect(() => {
|
|
60
|
+
const canvas = canvasRef.current;
|
|
61
|
+
if (!canvas || coreRef.current) return;
|
|
62
|
+
coreRef.current = new KTX2PlayerCore(canvas, {
|
|
63
|
+
autoPlay,
|
|
64
|
+
loop,
|
|
65
|
+
playbackSpeed,
|
|
66
|
+
stream,
|
|
67
|
+
streamingPrefetchAhead,
|
|
68
|
+
memoryStrategy,
|
|
69
|
+
verbose,
|
|
70
|
+
storage,
|
|
71
|
+
maxStorageBytes,
|
|
72
|
+
ZSTDDecoderClass: ZSTDDecoder,
|
|
73
|
+
onStateChange,
|
|
74
|
+
onLoad,
|
|
75
|
+
onFrameUpdate,
|
|
76
|
+
onFinished,
|
|
77
|
+
onError
|
|
78
|
+
});
|
|
79
|
+
return () => {
|
|
80
|
+
var _a;
|
|
81
|
+
(_a = coreRef.current) == null ? void 0 : _a.destroy();
|
|
82
|
+
coreRef.current = null;
|
|
83
|
+
loadedSrcRef.current = null;
|
|
84
|
+
};
|
|
85
|
+
}, []);
|
|
86
|
+
useEffect(() => {
|
|
87
|
+
var _a;
|
|
88
|
+
(_a = coreRef.current) == null ? void 0 : _a.updateCallbacks({ onStateChange, onLoad, onFrameUpdate, onFinished, onError });
|
|
89
|
+
}, [onStateChange, onLoad, onFrameUpdate, onFinished, onError]);
|
|
90
|
+
useEffect(() => {
|
|
91
|
+
const core = coreRef.current;
|
|
92
|
+
if (!core || !src) return;
|
|
93
|
+
const identity = typeof src === "string" && cacheKey || src;
|
|
94
|
+
if (loadedSrcRef.current === identity) return;
|
|
95
|
+
loadedSrcRef.current = identity;
|
|
96
|
+
core.setSource(src, { cacheKey, headers: headersRef.current });
|
|
97
|
+
return () => {
|
|
98
|
+
loadedSrcRef.current = null;
|
|
99
|
+
core.resetSource();
|
|
100
|
+
};
|
|
101
|
+
}, [typeof src === "string" && cacheKey || src]);
|
|
102
|
+
useEffect(() => {
|
|
103
|
+
if (coreRef.current) coreRef.current.verbose = verbose;
|
|
104
|
+
}, [verbose]);
|
|
105
|
+
useEffect(() => {
|
|
106
|
+
if (coreRef.current) coreRef.current.playbackSpeed = playbackSpeed;
|
|
107
|
+
}, [playbackSpeed]);
|
|
108
|
+
useEffect(() => {
|
|
109
|
+
if (coreRef.current) coreRef.current.loop = loop;
|
|
110
|
+
}, [loop]);
|
|
111
|
+
useEffect(() => {
|
|
112
|
+
var _a;
|
|
113
|
+
(_a = coreRef.current) == null ? void 0 : _a.setPaused(paused);
|
|
114
|
+
}, [paused]);
|
|
115
|
+
const canvasStyle = useMemo(() => ({
|
|
116
|
+
display: "block",
|
|
117
|
+
...style
|
|
118
|
+
}), [style]);
|
|
119
|
+
return /* @__PURE__ */ React.createElement(
|
|
120
|
+
"canvas",
|
|
121
|
+
{
|
|
122
|
+
ref: canvasRef,
|
|
123
|
+
width,
|
|
124
|
+
height,
|
|
125
|
+
className,
|
|
126
|
+
style: canvasStyle
|
|
127
|
+
}
|
|
128
|
+
);
|
|
129
|
+
});
|
|
130
|
+
AlphaVideoGpuPlayer.displayName = "AlphaVideoGpuPlayer";
|
|
131
|
+
export {
|
|
132
|
+
AlphaVideoGpuPlayer
|
|
133
|
+
};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// src/astc-wasm.ts
|
|
2
|
+
var ASTC_WASM_BASE64 = "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AQAAAAIAAAACAAAAAQAAAAAAAAACAAAAAgAAAAIAAAABAAAAAAAAAAIAAAAAAAAAAgAAAAEAQcgPCy0BAAAAAQAAAAAAAAABAAAAAAAAAAEAAAABAAAAAAAAAAIAAAAAAAAAAQAAAAEAQYAQCwkBAAAAAgAAAAEAQZQQC0UBAAAAAQAAAAEAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAAAAAACAAAAAQAAAAEAAAABAAAAAAAAAAEAAAABAAAAAgAAAAEAQeQQC0UCAAAAAQAAAAEAAAAAAAAAAQAAAAIAAAABAAAAAQAAAAAAAAACAAAAAgAAAAEAAAABAAAAAAAAAAIAAAABAAAAAgAAAAEAQbQRC0kBAAAAAAAAAAIAAAACAAAAAQAAAAEAAAAAAAAAAgAAAAIAAAACAAAAAQAAAAAAAAACAAAAAgAAAAEAAAAAAAAAAgAAAAIAAAACAEGMEgsJAgAAAAAAAAABAEGgEgsJAgAAAAAAAAACAEG0EgsBAgBBxBILBQIAAAACAEHUEgtFAQAAAAAAAAACAAAAAAAAAAEAAAABAAAAAAAAAAIAAAAAAAAAAgAAAAEAAAAAAAAAAgAAAAAAAAABAAAAAAAAAAIAAAACAEGkEwtFAgAAAAAAAAACAAAAAAAAAAEAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAACAEH0EwtFAgAAAAIAAAACAAAAAAAAAAEAAAACAAAAAgAAAAIAAAAAAAAAAgAAAAIAAAACAAAAAgAAAAAAAAACAAAAAAAAAAIAAAACAEHIFAstAQAAAAIAAAAAAAAAAQAAAAAAAAABAAAAAgAAAAAAAAACAAAAAAAAAAEAAAACAEGAFQsJAQAAAAIAAAACAEGUFQtFAQAAAAEAAAACAAAAAAAAAAEAAAABAAAAAQAAAAIAAAAAAAAAAgAAAAEAAAABAAAAAgAAAAAAAAABAAAAAQAAAAIAAAACAEHkFQtFAgAAAAEAAAACAAAAAAAAAAEAAAACAAAAAQAAAAIAAAAAAAAAAgAAAAIAAAABAAAAAgAAAAAAAAACAAAAAQAAAAIAAAACAEG0FgtJAgAAAAAAAAACAAAAAgAAAAEAAAACAAAAAAAAAAIAAAACAAAAAgAAAAIAAAAAAAAAAgAAAAIAAAACAAAAAAAAAAIAAAACAAAAAgBBkBcLBQIAAAABAEGkFwsFAgAAAAIAQbgXCwECAEHEFwsRAgAAAAAAAAACAAAAAAAAAAEAQeAXCwkCAAAAAQAAAAEAQfQXCwkCAAAAAgAAAAEAQYgYCx0CAAAAAQAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgBBsBgLCQIAAAABAAAAAgBBxBgLCQIAAAACAAAAAgBB2BgLZQIAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAgAAAAAAAAACAAAAAQAAAAIAAAACAAAAAAAAAAIAAAACAAAAAgAAAAIAAAAAAAAAAgAAAAIAAAAAAAAAAgAAAAAAAAACAEHIGQu1AgEAAAAAAAAAAgAAAAEAAAAAAAAAAQAAAAAAAAACAAAAAgAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAQAAAAIAAAAAAAAAAgAAAAAAAAABAAAAAQAAAAAAAAACAAAAAQAAAAEAAAABAAAAAAAAAAIAAAACAAAAAQAAAAEAAAAAAAAAAgAAAAEAAAABAAAAAgAAAAAAAAACAAAAAAAAAAIAAAABAAAAAAAAAAIAAAABAAAAAgAAAAEAAAAAAAAAAgAAAAIAAAACAAAAAQAAAAAAAAACAAAAAgAAAAEAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAIAAAACAAAAAgAAAAEAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAAAAIAAAACAAAAAgBBkBwLBQEAAAABAEGkHAsFAQAAAAIAQbgcCwEBAEHEHAsRAgAAAAAAAAABAAAAAAAAAAEAQeAcCwkBAAAAAQAAAAEAQfQcCwkBAAAAAgAAAAEAQYgdCx0BAAAAAQAAAAAAAAACAAAAAAAAAAEAAAAAAAAAAgBBsB0LCQEAAAABAAAAAgBBxB0LCQEAAAACAAAAAgBB2B0LZQEAAAACAAAAAAAAAAIAAAAAAAAAAQAAAAAAAAACAAAAAgAAAAAAAAABAAAAAQAAAAIAAAACAAAAAAAAAAEAAAACAAAAAgAAAAIAAAAAAAAAAQAAAAIAAAAAAAAAAgAAAAAAAAABAEHIHgvlAQEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAgAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAIAAAAAAAAAAQAAAAAAAAABAAAAAQAAAAAAAAABAAAAAQAAAAEAAAABAAAAAAAAAAEAAAACAAAAAQAAAAEAAAAAAAAAAQAAAAEAAAABAAAAAgAAAAAAAAABAAAAAAAAAAIAAAABAAAAAAAAAAEAAAABAAAAAgAAAAEAAAAAAAAAAQAAAAIAAAACAAAAAQAAAAAAAAABAAAAAgAAAAEAAAACAAAAAAAAAAEAQbggC0UBAAAAAgAAAAIAAAABAAAAAAAAAAEAAAACAAAAAgAAAAIAAAAAAAAAAQAAAAIAAAACAAAAAAAAAAEAAAACAAAAAgAAAAIAQYwhCwkBAAAAAQAAAAEAQaAhCwkBAAAAAQAAAAIAQbQhCwUBAAAAAQBBxCEL+QECAAAAAQAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAQAAAAEAAAABAAAAAAAAAAEAAAABAAAAAgAAAAEAAAAAAAAAAQAAAAEAAAABAAAAAAAAAAIAAAABAAAAAQAAAAAAAAACAAAAAAAAAAEAAAABAAAAAQAAAAIAAAAAAAAAAQAAAAEAAAACAAAAAgAAAAAAAAABAAAAAQAAAAIAAAAAAAAAAgAAAAEAAAABAAAAAAAAAAIAAAACAAAAAQAAAAEAAAABAAAAAgAAAAIAAAABAAAAAQAAAAIAAAACAAAAAgAAAAEAAAABAAAAAgAAAAAAAAACAAAAAQAAAAEAQcgjC7UCAQAAAAEAAAABAAAAAQAAAAAAAAABAAAAAQAAAAEAAAACAAAAAAAAAAEAAAABAAAAAQAAAAAAAAABAAAAAgAAAAEAAAABAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAIAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAACAAAAAQAAAAEAAAAAAAAAAgAAAAEAAAABAAAAAQAAAAEAAAACAAAAAQAAAAEAAAABAAAAAgAAAAIAAAABAAAAAQAAAAEAAAACAAAAAQAAAAIAAAABAAAAAQAAAAAAAAABAAAAAQAAAAIAAAACAAAAAQAAAAEAAAABAAAAAgAAAAIAAAACAAAAAQAAAAEAAAACAAAAAgAAAAEAAAABAAAAAgAAAAIAAAACAEGMJgsJAgAAAAEAAAABAEGgJgsJAgAAAAEAAAACAEG0JgsFAgAAAAEAQcQmC/kBAgAAAAIAAAABAAAAAAAAAAEAAAAAAAAAAgAAAAEAAAABAAAAAQAAAAAAAAACAAAAAQAAAAIAAAABAAAAAAAAAAIAAAABAAAAAQAAAAAAAAACAAAAAgAAAAEAAAAAAAAAAgAAAAAAAAACAAAAAQAAAAEAAAACAAAAAAAAAAIAAAABAAAAAgAAAAIAAAAAAAAAAgAAAAEAAAACAAAAAAAAAAIAAAACAAAAAQAAAAAAAAACAAAAAgAAAAIAAAABAAAAAQAAAAIAAAACAAAAAgAAAAEAAAACAAAAAgAAAAIAAAACAAAAAQAAAAIAAAAAAAAAAgAAAAIAAAABAEHIKAu1AgEAAAACAAAAAQAAAAEAAAAAAAAAAQAAAAIAAAABAAAAAgAAAAAAAAABAAAAAgAAAAEAAAAAAAAAAQAAAAIAAAACAAAAAQAAAAAAAAABAAAAAQAAAAIAAAABAAAAAQAAAAEAAAABAAAAAgAAAAEAAAACAAAAAQAAAAEAAAACAAAAAQAAAAEAAAABAAAAAgAAAAIAAAABAAAAAAAAAAIAAAABAAAAAgAAAAEAAAABAAAAAgAAAAEAAAACAAAAAQAAAAIAAAACAAAAAQAAAAIAAAABAAAAAgAAAAEAAAACAAAAAgAAAAEAAAAAAAAAAgAAAAEAAAACAAAAAgAAAAEAAAACAAAAAQAAAAIAAAACAAAAAgAAAAIAAAABAAAAAgAAAAIAAAACAAAAAQAAAAIAAAACAAAAAgBBjCsLCQEAAAACAAAAAQBBoCsLCQEAAAACAAAAAgBBtCsLBQEAAAACAEHEKwv5AQIAAAABAAAAAgAAAAAAAAABAAAAAAAAAAEAAAACAAAAAQAAAAEAAAAAAAAAAQAAAAIAAAACAAAAAQAAAAAAAAABAAAAAgAAAAEAAAAAAAAAAgAAAAEAAAACAAAAAAAAAAIAAAAAAAAAAQAAAAIAAAABAAAAAgAAAAAAAAABAAAAAgAAAAIAAAACAAAAAAAAAAEAAAACAAAAAgAAAAAAAAACAAAAAQAAAAIAAAAAAAAAAgAAAAIAAAABAAAAAgAAAAEAAAACAAAAAgAAAAEAAAACAAAAAgAAAAIAAAACAAAAAQAAAAIAAAACAAAAAAAAAAIAAAABAAAAAgBByC0LtQIBAAAAAQAAAAIAAAABAAAAAAAAAAEAAAABAAAAAgAAAAIAAAAAAAAAAQAAAAEAAAACAAAAAAAAAAEAAAACAAAAAQAAAAIAAAAAAAAAAQAAAAEAAAABAAAAAgAAAAEAAAABAAAAAQAAAAEAAAACAAAAAgAAAAEAAAABAAAAAQAAAAIAAAABAAAAAQAAAAIAAAABAAAAAgAAAAAAAAACAAAAAQAAAAEAAAACAAAAAQAAAAIAAAABAAAAAQAAAAIAAAACAAAAAgAAAAEAAAABAAAAAgAAAAIAAAABAAAAAgAAAAEAAAACAAAAAAAAAAIAAAACAAAAAgAAAAIAAAABAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAEAAAACAAAAAgAAAAIAQYwwCwEBAEGYMAsBAgBBpDALAQMAQbAwCwEEAEHAMAu9AgQAAAAAAAAABAAAAAQAAAAAAAAABAAAAAQAAAAEAAAAAAAAAAEAAAAAAAAAAQAAAAEAAAAAAAAAAgAAAAEAAAAAAAAAAwAAAAEAAAAAAAAABAAAAAEAAAAAAAAAAQAAAAQAAAAAAAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAAAAAAAAIAAAAAAAAAAQAAAAIAAAAAAAAAAgAAAAIAAAAAAAAAAwAAAAIAAAAAAAAABAAAAAIAAAAAAAAAAgAAAAQAAAAAAAAABAAAAAQAAAACAAAABAAAAAQAAAAEAAAAAAAAAAMAAAAAAAAAAQAAAAMAAAAAAAAAAgAAAAMAAAAAAAAAAwAAAAMAAAAAAAAABAAAAAMAAAAAAAAAAwAAAAQAAAAAAAAABAAAAAQAAAADAAAABAAAAAQAAAAEAEGIMwv1AgEAAAABAAAAAAAAAAEAAAACAAAAAAAAAAEAAAADAAAAAAAAAAEAAAAEAAAAAAAAAAEAAAAAAAAABAAAAAEAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAQAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAACAAAAAQAAAAEAAAADAAAAAQAAAAEAAAAEAAAAAQAAAAEAAAABAAAABAAAAAEAAAAEAAAAAQAAAAQAAAABAAAABAAAAAQAAAAAAAAAAgAAAAEAAAABAAAAAgAAAAEAAAACAAAAAgAAAAEAAAADAAAAAgAAAAEAAAAEAAAAAgAAAAEAAAACAAAABAAAAAEAAAAEAAAAAgAAAAQAAAACAAAABAAAAAQAAAAAAAAAAwAAAAEAAAABAAAAAwAAAAEAAAACAAAAAwAAAAEAAAADAAAAAwAAAAEAAAAEAAAAAwAAAAEAAAADAAAABAAAAAEAAAAEAAAAAwAAAAQAAAADAAAABAAAAAQAQYg2C/UCAgAAAAEAAAAAAAAAAgAAAAIAAAAAAAAAAgAAAAMAAAAAAAAAAgAAAAQAAAAAAAAAAgAAAAAAAAAEAAAAAgAAAAIAAAAAAAAABAAAAAMAAAAAAAAABAAAAAAAAAABAAAAAgAAAAEAAAABAAAAAgAAAAIAAAABAAAAAgAAAAMAAAABAAAAAgAAAAQAAAABAAAAAgAAAAEAAAAEAAAAAgAAAAIAAAABAAAABAAAAAMAAAABAAAABAAAAAAAAAACAAAAAgAAAAEAAAACAAAAAgAAAAIAAAACAAAAAgAAAAMAAAACAAAAAgAAAAQAAAACAAAAAgAAAAIAAAAEAAAAAgAAAAIAAAACAAAABAAAAAMAAAACAAAABAAAAAAAAAADAAAAAgAAAAEAAAADAAAAAgAAAAIAAAADAAAAAgAAAAMAAAADAAAAAgAAAAQAAAADAAAAAgAAAAMAAAAEAAAAAgAAAAIAAAADAAAABAAAAAMAAAADAAAABABBiDkLPQMAAAABAAAAAAAAAAMAAAACAAAAAAAAAAMAAAADAAAAAAAAAAMAAAAEAAAAAAAAAAMAAAAAAAAABAAAAAMAQdA5C60CBAAAAAEAAAAAAAAABAAAAAAAAAABAAAAAwAAAAEAAAABAAAAAwAAAAIAAAABAAAAAwAAAAMAAAABAAAAAwAAAAQAAAABAAAAAwAAAAEAAAAEAAAAAwAAAAAAAAABAAAABAAAAAEAAAABAAAABAAAAAAAAAACAAAAAwAAAAEAAAACAAAAAwAAAAIAAAACAAAAAwAAAAMAAAACAAAAAwAAAAQAAAACAAAAAwAAAAIAAAAEAAAAAwAAAAAAAAACAAAABAAAAAEAAAACAAAABAAAAAAAAAADAAAAAwAAAAEAAAADAAAAAwAAAAIAAAADAAAAAwAAAAMAAAADAAAAAwAAAAQAAAADAAAAAwAAAAMAAAAEAAAAAwAAAAAAAAADAAAABAAAAAEAAAADAAAABABBgMgAC0XMAAAAcQAAAF0AAAA2AAAALAAAABoAAAAWAAAADQAAAAsAAAAGAAAABQAAAAAAAAABAAAAAQAAAAIAAAADAAAABAAAAAUAQdDIAAspBwAAAAYAAAAHAAAABgAAAAUAAAAGAAAABQAAAAYAAAAAAAAAIAAAAD8AQYTJAAsNEAAAACAAAAAvAAAAPwBBoMkACxEyAAAAHAAAABcAAAANAAAACwBBtMkACwMwJwE=";
|
|
3
|
+
|
|
4
|
+
// src/software-astc.ts
|
|
5
|
+
var SoftwareAstcDecoder = class {
|
|
6
|
+
constructor(_exports) {
|
|
7
|
+
this._exports = _exports;
|
|
8
|
+
this._src = 0;
|
|
9
|
+
this._srcSize = 0;
|
|
10
|
+
this._dst = 0;
|
|
11
|
+
this._dstSize = 0;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Decodes one layer of ASTC blocks to RGBA (width * height * 4 bytes). The result is a view
|
|
15
|
+
* into WebAssembly memory, valid until the next call.
|
|
16
|
+
*/
|
|
17
|
+
decode(astc, width, height, blockWidth, blockHeight) {
|
|
18
|
+
const ex = this._exports;
|
|
19
|
+
if (astc.length > this._srcSize) {
|
|
20
|
+
ex.astc_free(this._src);
|
|
21
|
+
this._src = ex.astc_alloc(astc.length);
|
|
22
|
+
this._srcSize = astc.length;
|
|
23
|
+
}
|
|
24
|
+
const rgbaSize = width * height * 4;
|
|
25
|
+
if (rgbaSize > this._dstSize) {
|
|
26
|
+
ex.astc_free(this._dst);
|
|
27
|
+
this._dst = ex.astc_alloc(rgbaSize);
|
|
28
|
+
this._dstSize = rgbaSize;
|
|
29
|
+
}
|
|
30
|
+
if (!this._src || !this._dst) throw new Error("Out of memory for software ASTC decoding");
|
|
31
|
+
new Uint8Array(ex.memory.buffer, this._src, astc.length).set(astc);
|
|
32
|
+
const failed = ex.astc_decode_layer(this._src, width, height, blockWidth, blockHeight, this._dst);
|
|
33
|
+
if (failed > 0) console.warn(`[AlphaVideoGpu] ${failed} ASTC blocks failed to decode (drawn magenta)`);
|
|
34
|
+
return new Uint8Array(ex.memory.buffer, this._dst, rgbaSize);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
var loading = null;
|
|
38
|
+
function loadSoftwareAstcDecoder() {
|
|
39
|
+
if (!loading) {
|
|
40
|
+
loading = (async () => {
|
|
41
|
+
const bytes = Uint8Array.from(atob(ASTC_WASM_BASE64), (c) => c.charCodeAt(0));
|
|
42
|
+
const { instance } = await WebAssembly.instantiate(bytes, { env: { emscripten_notify_memory_growth() {
|
|
43
|
+
} } });
|
|
44
|
+
const ex = instance.exports;
|
|
45
|
+
ex._initialize();
|
|
46
|
+
return new SoftwareAstcDecoder(ex);
|
|
47
|
+
})();
|
|
48
|
+
loading.catch(() => {
|
|
49
|
+
loading = null;
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return loading;
|
|
53
|
+
}
|
|
54
|
+
export {
|
|
55
|
+
SoftwareAstcDecoder,
|
|
56
|
+
loadSoftwareAstcDecoder
|
|
57
|
+
};
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { StorageKind, ByteStore, ByteSource } from 'range-source-web';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* KTX2 Player Core - Shared Types
|
|
5
|
+
*
|
|
6
|
+
* Framework-agnostic type definitions used by the core engine
|
|
7
|
+
* and all wrapper implementations (React Native Web, React, Vanilla JS).
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* What a player plays: a URL (http(s), relative, or asset://path), a Blob or File, bytes in
|
|
12
|
+
* memory, or a ByteSource that reads by offset (an app's own fetcher or cache).
|
|
13
|
+
*/
|
|
14
|
+
type KTX2Source = string | Blob | ArrayBuffer | Uint8Array | ByteSource;
|
|
15
|
+
interface KTX2SourceOptions {
|
|
16
|
+
/**
|
|
17
|
+
* Names the stored copy, for URLs that change while the file doesn't (presigned URLs).
|
|
18
|
+
* Defaults to the URL. A Blob or ByteSource is stored only with storage set and a cacheKey.
|
|
19
|
+
*/
|
|
20
|
+
cacheKey?: string;
|
|
21
|
+
/** Sent with every request for a URL, e.g. Authorization. */
|
|
22
|
+
headers?: Record<string, string>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Where streamed bytes are kept between plays: 'auto' (OPFS, else IndexedDB), 'opfs',
|
|
26
|
+
* 'indexeddb', 'cache' (the Cache API), 'memory' (this page only), 'none', or your own store.
|
|
27
|
+
*/
|
|
28
|
+
type KTX2Storage = StorageKind | ByteStore;
|
|
29
|
+
/** From the KTX2 header (size, frame count) and its KTXanimData key (frame rate, may be fractional). */
|
|
30
|
+
interface Metadata {
|
|
31
|
+
frameCount: number;
|
|
32
|
+
frameWidth: number;
|
|
33
|
+
frameHeight: number;
|
|
34
|
+
frameRate: number;
|
|
35
|
+
}
|
|
36
|
+
interface KTX2LoadEvent {
|
|
37
|
+
width: number;
|
|
38
|
+
height: number;
|
|
39
|
+
frameCount: number;
|
|
40
|
+
frameRate: number;
|
|
41
|
+
duration: number;
|
|
42
|
+
}
|
|
43
|
+
type PlayerState = 'idle' | 'loading' | 'ready' | 'playing' | 'paused' | 'stopped' | 'error';
|
|
44
|
+
type MemoryStrategy = 'vram' | 'ram';
|
|
45
|
+
/**
|
|
46
|
+
* Options for KTX2PlayerCore constructor.
|
|
47
|
+
* Framework-agnostic — no React or React Native types.
|
|
48
|
+
*/
|
|
49
|
+
interface KTX2PlayerCoreOptions {
|
|
50
|
+
/** Whether to start playing automatically (default: true) */
|
|
51
|
+
autoPlay?: boolean;
|
|
52
|
+
/** Whether to loop the animation (default: true) */
|
|
53
|
+
loop?: boolean;
|
|
54
|
+
/** Playback speed multiplier (default: 1.0) */
|
|
55
|
+
playbackSpeed?: number;
|
|
56
|
+
/** Enable streaming mode for texture array playback (default: true) */
|
|
57
|
+
stream?: boolean;
|
|
58
|
+
/** Frames decoded ahead of the shown one, all streaming keeps. Default: 8 */
|
|
59
|
+
streamingPrefetchAhead?: number;
|
|
60
|
+
/** Memory strategy: 'vram' | 'ram'. Default: 'vram' */
|
|
61
|
+
memoryStrategy?: MemoryStrategy;
|
|
62
|
+
/** Log info traces to the console (warnings and errors always log). Default: false */
|
|
63
|
+
verbose?: boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Where a URL's bytes are kept between plays, read back by range. Default: 'auto' for URLs,
|
|
66
|
+
* 'none' for Blobs, memory and ByteSources. With 'none', a clip under 16 MB still stays in
|
|
67
|
+
* memory for loops.
|
|
68
|
+
*/
|
|
69
|
+
storage?: KTX2Storage;
|
|
70
|
+
/** Cap on the bytes stored across every clip, evicting the least recently played. Default: 512 MB */
|
|
71
|
+
maxStorageBytes?: number;
|
|
72
|
+
/** ZSTDDecoder class constructor (for zstd decompression) */
|
|
73
|
+
ZSTDDecoderClass?: new () => any;
|
|
74
|
+
onStateChange?: (state: PlayerState) => void;
|
|
75
|
+
onLoad?: (event: KTX2LoadEvent) => void;
|
|
76
|
+
onFrameUpdate?: (frame: number, total: number) => void;
|
|
77
|
+
onFinished?: () => void;
|
|
78
|
+
onError?: (error: Error) => void;
|
|
79
|
+
/** Call onFrameUpdate for every frame played; seeks always call it. Default: true */
|
|
80
|
+
frameEvents?: boolean;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Shared WebGL context resources — used to avoid browser's ~8-16 context limit.
|
|
84
|
+
*/
|
|
85
|
+
interface SharedGLResources {
|
|
86
|
+
gl: WebGL2RenderingContext | WebGLRenderingContext;
|
|
87
|
+
canvas: HTMLCanvasElement;
|
|
88
|
+
arrayProgram: WebGLProgram | null;
|
|
89
|
+
positionBuffer: WebGLBuffer;
|
|
90
|
+
texCoordBuffer: WebGLBuffer;
|
|
91
|
+
refCount: number;
|
|
92
|
+
maxWidth: number;
|
|
93
|
+
maxHeight: number;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export type { KTX2PlayerCoreOptions as K, Metadata as M, PlayerState as P, SharedGLResources as S, KTX2Source as a, KTX2SourceOptions as b, KTX2LoadEvent as c, KTX2Storage as d, MemoryStrategy as e };
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { StorageKind, ByteStore, ByteSource } from 'range-source-web';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* KTX2 Player Core - Shared Types
|
|
5
|
+
*
|
|
6
|
+
* Framework-agnostic type definitions used by the core engine
|
|
7
|
+
* and all wrapper implementations (React Native Web, React, Vanilla JS).
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* What a player plays: a URL (http(s), relative, or asset://path), a Blob or File, bytes in
|
|
12
|
+
* memory, or a ByteSource that reads by offset (an app's own fetcher or cache).
|
|
13
|
+
*/
|
|
14
|
+
type KTX2Source = string | Blob | ArrayBuffer | Uint8Array | ByteSource;
|
|
15
|
+
interface KTX2SourceOptions {
|
|
16
|
+
/**
|
|
17
|
+
* Names the stored copy, for URLs that change while the file doesn't (presigned URLs).
|
|
18
|
+
* Defaults to the URL. A Blob or ByteSource is stored only with storage set and a cacheKey.
|
|
19
|
+
*/
|
|
20
|
+
cacheKey?: string;
|
|
21
|
+
/** Sent with every request for a URL, e.g. Authorization. */
|
|
22
|
+
headers?: Record<string, string>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Where streamed bytes are kept between plays: 'auto' (OPFS, else IndexedDB), 'opfs',
|
|
26
|
+
* 'indexeddb', 'cache' (the Cache API), 'memory' (this page only), 'none', or your own store.
|
|
27
|
+
*/
|
|
28
|
+
type KTX2Storage = StorageKind | ByteStore;
|
|
29
|
+
/** From the KTX2 header (size, frame count) and its KTXanimData key (frame rate, may be fractional). */
|
|
30
|
+
interface Metadata {
|
|
31
|
+
frameCount: number;
|
|
32
|
+
frameWidth: number;
|
|
33
|
+
frameHeight: number;
|
|
34
|
+
frameRate: number;
|
|
35
|
+
}
|
|
36
|
+
interface KTX2LoadEvent {
|
|
37
|
+
width: number;
|
|
38
|
+
height: number;
|
|
39
|
+
frameCount: number;
|
|
40
|
+
frameRate: number;
|
|
41
|
+
duration: number;
|
|
42
|
+
}
|
|
43
|
+
type PlayerState = 'idle' | 'loading' | 'ready' | 'playing' | 'paused' | 'stopped' | 'error';
|
|
44
|
+
type MemoryStrategy = 'vram' | 'ram';
|
|
45
|
+
/**
|
|
46
|
+
* Options for KTX2PlayerCore constructor.
|
|
47
|
+
* Framework-agnostic — no React or React Native types.
|
|
48
|
+
*/
|
|
49
|
+
interface KTX2PlayerCoreOptions {
|
|
50
|
+
/** Whether to start playing automatically (default: true) */
|
|
51
|
+
autoPlay?: boolean;
|
|
52
|
+
/** Whether to loop the animation (default: true) */
|
|
53
|
+
loop?: boolean;
|
|
54
|
+
/** Playback speed multiplier (default: 1.0) */
|
|
55
|
+
playbackSpeed?: number;
|
|
56
|
+
/** Enable streaming mode for texture array playback (default: true) */
|
|
57
|
+
stream?: boolean;
|
|
58
|
+
/** Frames decoded ahead of the shown one, all streaming keeps. Default: 8 */
|
|
59
|
+
streamingPrefetchAhead?: number;
|
|
60
|
+
/** Memory strategy: 'vram' | 'ram'. Default: 'vram' */
|
|
61
|
+
memoryStrategy?: MemoryStrategy;
|
|
62
|
+
/** Log info traces to the console (warnings and errors always log). Default: false */
|
|
63
|
+
verbose?: boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Where a URL's bytes are kept between plays, read back by range. Default: 'auto' for URLs,
|
|
66
|
+
* 'none' for Blobs, memory and ByteSources. With 'none', a clip under 16 MB still stays in
|
|
67
|
+
* memory for loops.
|
|
68
|
+
*/
|
|
69
|
+
storage?: KTX2Storage;
|
|
70
|
+
/** Cap on the bytes stored across every clip, evicting the least recently played. Default: 512 MB */
|
|
71
|
+
maxStorageBytes?: number;
|
|
72
|
+
/** ZSTDDecoder class constructor (for zstd decompression) */
|
|
73
|
+
ZSTDDecoderClass?: new () => any;
|
|
74
|
+
onStateChange?: (state: PlayerState) => void;
|
|
75
|
+
onLoad?: (event: KTX2LoadEvent) => void;
|
|
76
|
+
onFrameUpdate?: (frame: number, total: number) => void;
|
|
77
|
+
onFinished?: () => void;
|
|
78
|
+
onError?: (error: Error) => void;
|
|
79
|
+
/** Call onFrameUpdate for every frame played; seeks always call it. Default: true */
|
|
80
|
+
frameEvents?: boolean;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Shared WebGL context resources — used to avoid browser's ~8-16 context limit.
|
|
84
|
+
*/
|
|
85
|
+
interface SharedGLResources {
|
|
86
|
+
gl: WebGL2RenderingContext | WebGLRenderingContext;
|
|
87
|
+
canvas: HTMLCanvasElement;
|
|
88
|
+
arrayProgram: WebGLProgram | null;
|
|
89
|
+
positionBuffer: WebGLBuffer;
|
|
90
|
+
texCoordBuffer: WebGLBuffer;
|
|
91
|
+
refCount: number;
|
|
92
|
+
maxWidth: number;
|
|
93
|
+
maxHeight: number;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export type { KTX2PlayerCoreOptions as K, Metadata as M, PlayerState as P, SharedGLResources as S, KTX2Source as a, KTX2SourceOptions as b, KTX2LoadEvent as c, KTX2Storage as d, MemoryStrategy as e };
|