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/dist/react.js ADDED
@@ -0,0 +1,1994 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __esm = (fn, res) => function __init() {
9
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
10
+ };
11
+ var __export = (target, all) => {
12
+ for (var name in all)
13
+ __defProp(target, name, { get: all[name], enumerable: true });
14
+ };
15
+ var __copyProps = (to, from, except, desc) => {
16
+ if (from && typeof from === "object" || typeof from === "function") {
17
+ for (let key of __getOwnPropNames(from))
18
+ if (!__hasOwnProp.call(to, key) && key !== except)
19
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
20
+ }
21
+ return to;
22
+ };
23
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
24
+ // If the importer is in node compatibility mode or this is not an ESM
25
+ // file that has been converted to a CommonJS file using a Babel-
26
+ // compatible transform (i.e. "__esModule" has not been set), then set
27
+ // "default" to the CommonJS "module.exports" for node compatibility.
28
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
29
+ mod
30
+ ));
31
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
32
+
33
+ // src/astc-wasm.ts
34
+ var ASTC_WASM_BASE64;
35
+ var init_astc_wasm = __esm({
36
+ "src/astc-wasm.ts"() {
37
+ "use strict";
38
+ ASTC_WASM_BASE64 = "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AQAAAAIAAAACAAAAAQAAAAAAAAACAAAAAgAAAAIAAAABAAAAAAAAAAIAAAAAAAAAAgAAAAEAQcgPCy0BAAAAAQAAAAAAAAABAAAAAAAAAAEAAAABAAAAAAAAAAIAAAAAAAAAAQAAAAEAQYAQCwkBAAAAAgAAAAEAQZQQC0UBAAAAAQAAAAEAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAAAAAACAAAAAQAAAAEAAAABAAAAAAAAAAEAAAABAAAAAgAAAAEAQeQQC0UCAAAAAQAAAAEAAAAAAAAAAQAAAAIAAAABAAAAAQAAAAAAAAACAAAAAgAAAAEAAAABAAAAAAAAAAIAAAABAAAAAgAAAAEAQbQRC0kBAAAAAAAAAAIAAAACAAAAAQAAAAEAAAAAAAAAAgAAAAIAAAACAAAAAQAAAAAAAAACAAAAAgAAAAEAAAAAAAAAAgAAAAIAAAACAEGMEgsJAgAAAAAAAAABAEGgEgsJAgAAAAAAAAACAEG0EgsBAgBBxBILBQIAAAACAEHUEgtFAQAAAAAAAAACAAAAAAAAAAEAAAABAAAAAAAAAAIAAAAAAAAAAgAAAAEAAAAAAAAAAgAAAAAAAAABAAAAAAAAAAIAAAACAEGkEwtFAgAAAAAAAAACAAAAAAAAAAEAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAACAEH0EwtFAgAAAAIAAAACAAAAAAAAAAEAAAACAAAAAgAAAAIAAAAAAAAAAgAAAAIAAAACAAAAAgAAAAAAAAACAAAAAAAAAAIAAAACAEHIFAstAQAAAAIAAAAAAAAAAQAAAAAAAAABAAAAAgAAAAAAAAACAAAAAAAAAAEAAAACAEGAFQsJAQAAAAIAAAACAEGUFQtFAQAAAAEAAAACAAAAAAAAAAEAAAABAAAAAQAAAAIAAAAAAAAAAgAAAAEAAAABAAAAAgAAAAAAAAABAAAAAQAAAAIAAAACAEHkFQtFAgAAAAEAAAACAAAAAAAAAAEAAAACAAAAAQAAAAIAAAAAAAAAAgAAAAIAAAABAAAAAgAAAAAAAAACAAAAAQAAAAIAAAACAEG0FgtJAgAAAAAAAAACAAAAAgAAAAEAAAACAAAAAAAAAAIAAAACAAAAAgAAAAIAAAAAAAAAAgAAAAIAAAACAAAAAAAAAAIAAAACAAAAAgBBkBcLBQIAAAABAEGkFwsFAgAAAAIAQbgXCwECAEHEFwsRAgAAAAAAAAACAAAAAAAAAAEAQeAXCwkCAAAAAQAAAAEAQfQXCwkCAAAAAgAAAAEAQYgYCx0CAAAAAQAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgBBsBgLCQIAAAABAAAAAgBBxBgLCQIAAAACAAAAAgBB2BgLZQIAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAgAAAAAAAAACAAAAAQAAAAIAAAACAAAAAAAAAAIAAAACAAAAAgAAAAIAAAAAAAAAAgAAAAIAAAAAAAAAAgAAAAAAAAACAEHIGQu1AgEAAAAAAAAAAgAAAAEAAAAAAAAAAQAAAAAAAAACAAAAAgAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAQAAAAIAAAAAAAAAAgAAAAAAAAABAAAAAQAAAAAAAAACAAAAAQAAAAEAAAABAAAAAAAAAAIAAAACAAAAAQAAAAEAAAAAAAAAAgAAAAEAAAABAAAAAgAAAAAAAAACAAAAAAAAAAIAAAABAAAAAAAAAAIAAAABAAAAAgAAAAEAAAAAAAAAAgAAAAIAAAACAAAAAQAAAAAAAAACAAAAAgAAAAEAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAIAAAACAAAAAgAAAAEAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAAAAIAAAACAAAAAgBBkBwLBQEAAAABAEGkHAsFAQAAAAIAQbgcCwEBAEHEHAsRAgAAAAAAAAABAAAAAAAAAAEAQeAcCwkBAAAAAQAAAAEAQfQcCwkBAAAAAgAAAAEAQYgdCx0BAAAAAQAAAAAAAAACAAAAAAAAAAEAAAAAAAAAAgBBsB0LCQEAAAABAAAAAgBBxB0LCQEAAAACAAAAAgBB2B0LZQEAAAACAAAAAAAAAAIAAAAAAAAAAQAAAAAAAAACAAAAAgAAAAAAAAABAAAAAQAAAAIAAAACAAAAAAAAAAEAAAACAAAAAgAAAAIAAAAAAAAAAQAAAAIAAAAAAAAAAgAAAAAAAAABAEHIHgvlAQEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAgAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAIAAAAAAAAAAQAAAAAAAAABAAAAAQAAAAAAAAABAAAAAQAAAAEAAAABAAAAAAAAAAEAAAACAAAAAQAAAAEAAAAAAAAAAQAAAAEAAAABAAAAAgAAAAAAAAABAAAAAAAAAAIAAAABAAAAAAAAAAEAAAABAAAAAgAAAAEAAAAAAAAAAQAAAAIAAAACAAAAAQAAAAAAAAABAAAAAgAAAAEAAAACAAAAAAAAAAEAQbggC0UBAAAAAgAAAAIAAAABAAAAAAAAAAEAAAACAAAAAgAAAAIAAAAAAAAAAQAAAAIAAAACAAAAAAAAAAEAAAACAAAAAgAAAAIAQYwhCwkBAAAAAQAAAAEAQaAhCwkBAAAAAQAAAAIAQbQhCwUBAAAAAQBBxCEL+QECAAAAAQAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAQAAAAEAAAABAAAAAAAAAAEAAAABAAAAAgAAAAEAAAAAAAAAAQAAAAEAAAABAAAAAAAAAAIAAAABAAAAAQAAAAAAAAACAAAAAAAAAAEAAAABAAAAAQAAAAIAAAAAAAAAAQAAAAEAAAACAAAAAgAAAAAAAAABAAAAAQAAAAIAAAAAAAAAAgAAAAEAAAABAAAAAAAAAAIAAAACAAAAAQAAAAEAAAABAAAAAgAAAAIAAAABAAAAAQAAAAIAAAACAAAAAgAAAAEAAAABAAAAAgAAAAAAAAACAAAAAQAAAAEAQcgjC7UCAQAAAAEAAAABAAAAAQAAAAAAAAABAAAAAQAAAAEAAAACAAAAAAAAAAEAAAABAAAAAQAAAAAAAAABAAAAAgAAAAEAAAABAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAIAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAACAAAAAQAAAAEAAAAAAAAAAgAAAAEAAAABAAAAAQAAAAEAAAACAAAAAQAAAAEAAAABAAAAAgAAAAIAAAABAAAAAQAAAAEAAAACAAAAAQAAAAIAAAABAAAAAQAAAAAAAAABAAAAAQAAAAIAAAACAAAAAQAAAAEAAAABAAAAAgAAAAIAAAACAAAAAQAAAAEAAAACAAAAAgAAAAEAAAABAAAAAgAAAAIAAAACAEGMJgsJAgAAAAEAAAABAEGgJgsJAgAAAAEAAAACAEG0JgsFAgAAAAEAQcQmC/kBAgAAAAIAAAABAAAAAAAAAAEAAAAAAAAAAgAAAAEAAAABAAAAAQAAAAAAAAACAAAAAQAAAAIAAAABAAAAAAAAAAIAAAABAAAAAQAAAAAAAAACAAAAAgAAAAEAAAAAAAAAAgAAAAAAAAACAAAAAQAAAAEAAAACAAAAAAAAAAIAAAABAAAAAgAAAAIAAAAAAAAAAgAAAAEAAAACAAAAAAAAAAIAAAACAAAAAQAAAAAAAAACAAAAAgAAAAIAAAABAAAAAQAAAAIAAAACAAAAAgAAAAEAAAACAAAAAgAAAAIAAAACAAAAAQAAAAIAAAAAAAAAAgAAAAIAAAABAEHIKAu1AgEAAAACAAAAAQAAAAEAAAAAAAAAAQAAAAIAAAABAAAAAgAAAAAAAAABAAAAAgAAAAEAAAAAAAAAAQAAAAIAAAACAAAAAQAAAAAAAAABAAAAAQAAAAIAAAABAAAAAQAAAAEAAAABAAAAAgAAAAEAAAACAAAAAQAAAAEAAAACAAAAAQAAAAEAAAABAAAAAgAAAAIAAAABAAAAAAAAAAIAAAABAAAAAgAAAAEAAAABAAAAAgAAAAEAAAACAAAAAQAAAAIAAAACAAAAAQAAAAIAAAABAAAAAgAAAAEAAAACAAAAAgAAAAEAAAAAAAAAAgAAAAEAAAACAAAAAgAAAAEAAAACAAAAAQAAAAIAAAACAAAAAgAAAAIAAAABAAAAAgAAAAIAAAACAAAAAQAAAAIAAAACAAAAAgBBjCsLCQEAAAACAAAAAQBBoCsLCQEAAAACAAAAAgBBtCsLBQEAAAACAEHEKwv5AQIAAAABAAAAAgAAAAAAAAABAAAAAAAAAAEAAAACAAAAAQAAAAEAAAAAAAAAAQAAAAIAAAACAAAAAQAAAAAAAAABAAAAAgAAAAEAAAAAAAAAAgAAAAEAAAACAAAAAAAAAAIAAAAAAAAAAQAAAAIAAAABAAAAAgAAAAAAAAABAAAAAgAAAAIAAAACAAAAAAAAAAEAAAACAAAAAgAAAAAAAAACAAAAAQAAAAIAAAAAAAAAAgAAAAIAAAABAAAAAgAAAAEAAAACAAAAAgAAAAEAAAACAAAAAgAAAAIAAAACAAAAAQAAAAIAAAACAAAAAAAAAAIAAAABAAAAAgBByC0LtQIBAAAAAQAAAAIAAAABAAAAAAAAAAEAAAABAAAAAgAAAAIAAAAAAAAAAQAAAAEAAAACAAAAAAAAAAEAAAACAAAAAQAAAAIAAAAAAAAAAQAAAAEAAAABAAAAAgAAAAEAAAABAAAAAQAAAAEAAAACAAAAAgAAAAEAAAABAAAAAQAAAAIAAAABAAAAAQAAAAIAAAABAAAAAgAAAAAAAAACAAAAAQAAAAEAAAACAAAAAQAAAAIAAAABAAAAAQAAAAIAAAACAAAAAgAAAAEAAAABAAAAAgAAAAIAAAABAAAAAgAAAAEAAAACAAAAAAAAAAIAAAACAAAAAgAAAAIAAAABAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAEAAAACAAAAAgAAAAIAQYwwCwEBAEGYMAsBAgBBpDALAQMAQbAwCwEEAEHAMAu9AgQAAAAAAAAABAAAAAQAAAAAAAAABAAAAAQAAAAEAAAAAAAAAAEAAAAAAAAAAQAAAAEAAAAAAAAAAgAAAAEAAAAAAAAAAwAAAAEAAAAAAAAABAAAAAEAAAAAAAAAAQAAAAQAAAAAAAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAAAAAAAAIAAAAAAAAAAQAAAAIAAAAAAAAAAgAAAAIAAAAAAAAAAwAAAAIAAAAAAAAABAAAAAIAAAAAAAAAAgAAAAQAAAAAAAAABAAAAAQAAAACAAAABAAAAAQAAAAEAAAAAAAAAAMAAAAAAAAAAQAAAAMAAAAAAAAAAgAAAAMAAAAAAAAAAwAAAAMAAAAAAAAABAAAAAMAAAAAAAAAAwAAAAQAAAAAAAAABAAAAAQAAAADAAAABAAAAAQAAAAEAEGIMwv1AgEAAAABAAAAAAAAAAEAAAACAAAAAAAAAAEAAAADAAAAAAAAAAEAAAAEAAAAAAAAAAEAAAAAAAAABAAAAAEAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAQAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAACAAAAAQAAAAEAAAADAAAAAQAAAAEAAAAEAAAAAQAAAAEAAAABAAAABAAAAAEAAAAEAAAAAQAAAAQAAAABAAAABAAAAAQAAAAAAAAAAgAAAAEAAAABAAAAAgAAAAEAAAACAAAAAgAAAAEAAAADAAAAAgAAAAEAAAAEAAAAAgAAAAEAAAACAAAABAAAAAEAAAAEAAAAAgAAAAQAAAACAAAABAAAAAQAAAAAAAAAAwAAAAEAAAABAAAAAwAAAAEAAAACAAAAAwAAAAEAAAADAAAAAwAAAAEAAAAEAAAAAwAAAAEAAAADAAAABAAAAAEAAAAEAAAAAwAAAAQAAAADAAAABAAAAAQAQYg2C/UCAgAAAAEAAAAAAAAAAgAAAAIAAAAAAAAAAgAAAAMAAAAAAAAAAgAAAAQAAAAAAAAAAgAAAAAAAAAEAAAAAgAAAAIAAAAAAAAABAAAAAMAAAAAAAAABAAAAAAAAAABAAAAAgAAAAEAAAABAAAAAgAAAAIAAAABAAAAAgAAAAMAAAABAAAAAgAAAAQAAAABAAAAAgAAAAEAAAAEAAAAAgAAAAIAAAABAAAABAAAAAMAAAABAAAABAAAAAAAAAACAAAAAgAAAAEAAAACAAAAAgAAAAIAAAACAAAAAgAAAAMAAAACAAAAAgAAAAQAAAACAAAAAgAAAAIAAAAEAAAAAgAAAAIAAAACAAAABAAAAAMAAAACAAAABAAAAAAAAAADAAAAAgAAAAEAAAADAAAAAgAAAAIAAAADAAAAAgAAAAMAAAADAAAAAgAAAAQAAAADAAAAAgAAAAMAAAAEAAAAAgAAAAIAAAADAAAABAAAAAMAAAADAAAABABBiDkLPQMAAAABAAAAAAAAAAMAAAACAAAAAAAAAAMAAAADAAAAAAAAAAMAAAAEAAAAAAAAAAMAAAAAAAAABAAAAAMAQdA5C60CBAAAAAEAAAAAAAAABAAAAAAAAAABAAAAAwAAAAEAAAABAAAAAwAAAAIAAAABAAAAAwAAAAMAAAABAAAAAwAAAAQAAAABAAAAAwAAAAEAAAAEAAAAAwAAAAAAAAABAAAABAAAAAEAAAABAAAABAAAAAAAAAACAAAAAwAAAAEAAAACAAAAAwAAAAIAAAACAAAAAwAAAAMAAAACAAAAAwAAAAQAAAACAAAAAwAAAAIAAAAEAAAAAwAAAAAAAAACAAAABAAAAAEAAAACAAAABAAAAAAAAAADAAAAAwAAAAEAAAADAAAAAwAAAAIAAAADAAAAAwAAAAMAAAADAAAAAwAAAAQAAAADAAAAAwAAAAMAAAAEAAAAAwAAAAAAAAADAAAABAAAAAEAAAADAAAABABBgMgAC0XMAAAAcQAAAF0AAAA2AAAALAAAABoAAAAWAAAADQAAAAsAAAAGAAAABQAAAAAAAAABAAAAAQAAAAIAAAADAAAABAAAAAUAQdDIAAspBwAAAAYAAAAHAAAABgAAAAUAAAAGAAAABQAAAAYAAAAAAAAAIAAAAD8AQYTJAAsNEAAAACAAAAAvAAAAPwBBoMkACxEyAAAAHAAAABcAAAANAAAACwBBtMkACwMwJwE=";
39
+ }
40
+ });
41
+
42
+ // src/software-astc.ts
43
+ var software_astc_exports = {};
44
+ __export(software_astc_exports, {
45
+ SoftwareAstcDecoder: () => SoftwareAstcDecoder,
46
+ loadSoftwareAstcDecoder: () => loadSoftwareAstcDecoder
47
+ });
48
+ function loadSoftwareAstcDecoder() {
49
+ if (!loading) {
50
+ loading = (async () => {
51
+ const bytes = Uint8Array.from(atob(ASTC_WASM_BASE64), (c) => c.charCodeAt(0));
52
+ const { instance: instance2 } = await WebAssembly.instantiate(bytes, { env: { emscripten_notify_memory_growth() {
53
+ } } });
54
+ const ex = instance2.exports;
55
+ ex._initialize();
56
+ return new SoftwareAstcDecoder(ex);
57
+ })();
58
+ loading.catch(() => {
59
+ loading = null;
60
+ });
61
+ }
62
+ return loading;
63
+ }
64
+ var SoftwareAstcDecoder, loading;
65
+ var init_software_astc = __esm({
66
+ "src/software-astc.ts"() {
67
+ "use strict";
68
+ init_astc_wasm();
69
+ SoftwareAstcDecoder = class {
70
+ constructor(_exports) {
71
+ this._exports = _exports;
72
+ this._src = 0;
73
+ this._srcSize = 0;
74
+ this._dst = 0;
75
+ this._dstSize = 0;
76
+ }
77
+ /**
78
+ * Decodes one layer of ASTC blocks to RGBA (width * height * 4 bytes). The result is a view
79
+ * into WebAssembly memory, valid until the next call.
80
+ */
81
+ decode(astc, width, height, blockWidth, blockHeight) {
82
+ const ex = this._exports;
83
+ if (astc.length > this._srcSize) {
84
+ ex.astc_free(this._src);
85
+ this._src = ex.astc_alloc(astc.length);
86
+ this._srcSize = astc.length;
87
+ }
88
+ const rgbaSize = width * height * 4;
89
+ if (rgbaSize > this._dstSize) {
90
+ ex.astc_free(this._dst);
91
+ this._dst = ex.astc_alloc(rgbaSize);
92
+ this._dstSize = rgbaSize;
93
+ }
94
+ if (!this._src || !this._dst) throw new Error("Out of memory for software ASTC decoding");
95
+ new Uint8Array(ex.memory.buffer, this._src, astc.length).set(astc);
96
+ const failed = ex.astc_decode_layer(this._src, width, height, blockWidth, blockHeight, this._dst);
97
+ if (failed > 0) console.warn(`[AlphaVideoGpu] ${failed} ASTC blocks failed to decode (drawn magenta)`);
98
+ return new Uint8Array(ex.memory.buffer, this._dst, rgbaSize);
99
+ }
100
+ };
101
+ loading = null;
102
+ }
103
+ });
104
+
105
+ // src/react.tsx
106
+ var react_exports = {};
107
+ __export(react_exports, {
108
+ AlphaVideoGpuPlayer: () => AlphaVideoGpuPlayer
109
+ });
110
+ module.exports = __toCommonJS(react_exports);
111
+ var import_react = __toESM(require("react"));
112
+
113
+ // src/webgl-context.ts
114
+ var sharedGLResources = null;
115
+ var VERT_ARRAY = `#version 300 es
116
+ in vec2 a_position;
117
+ in vec2 a_texCoord;
118
+ out vec2 v_texCoord;
119
+ void main() {
120
+ gl_Position = vec4(a_position, 0.0, 1.0);
121
+ v_texCoord = a_texCoord;
122
+ }
123
+ `;
124
+ var FRAG_ARRAY = `#version 300 es
125
+ precision mediump float;
126
+ precision mediump sampler2DArray;
127
+ in vec2 v_texCoord;
128
+ out vec4 fragColor;
129
+ uniform sampler2DArray u_textureArray;
130
+ uniform float u_layer;
131
+ void main() {
132
+ fragColor = texture(u_textureArray, vec3(v_texCoord, u_layer));
133
+ }
134
+ `;
135
+ var QUAD_POSITIONS = new Float32Array([
136
+ -1,
137
+ -1,
138
+ 1,
139
+ -1,
140
+ -1,
141
+ 1,
142
+ -1,
143
+ 1,
144
+ 1,
145
+ -1,
146
+ 1,
147
+ 1
148
+ ]);
149
+ var QUAD_TEXCOORDS = new Float32Array([
150
+ 0,
151
+ 1,
152
+ 1,
153
+ 1,
154
+ 0,
155
+ 0,
156
+ 0,
157
+ 0,
158
+ 1,
159
+ 1,
160
+ 1,
161
+ 0
162
+ ]);
163
+ function compileShader(gl, type, source) {
164
+ const shader = gl.createShader(type);
165
+ gl.shaderSource(shader, source);
166
+ gl.compileShader(shader);
167
+ if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
168
+ const info = gl.getShaderInfoLog(shader);
169
+ gl.deleteShader(shader);
170
+ throw new Error(`Shader compile error: ${info}`);
171
+ }
172
+ return shader;
173
+ }
174
+ function linkProgram(gl, vs, fs) {
175
+ const program = gl.createProgram();
176
+ gl.attachShader(program, vs);
177
+ gl.attachShader(program, fs);
178
+ gl.linkProgram(program);
179
+ if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
180
+ const info = gl.getProgramInfoLog(program);
181
+ gl.deleteProgram(program);
182
+ throw new Error(`Program link error: ${info}`);
183
+ }
184
+ return program;
185
+ }
186
+ function ensureSharedCanvasSize(width, height) {
187
+ if (!sharedGLResources) return;
188
+ const needsResize = width > sharedGLResources.maxWidth || height > sharedGLResources.maxHeight;
189
+ if (!needsResize) return;
190
+ const newWidth = Math.max(sharedGLResources.maxWidth, width);
191
+ const newHeight = Math.max(sharedGLResources.maxHeight, height);
192
+ sharedGLResources.canvas.width = newWidth;
193
+ sharedGLResources.canvas.height = newHeight;
194
+ sharedGLResources.maxWidth = newWidth;
195
+ sharedGLResources.maxHeight = newHeight;
196
+ console.debug(`[AlphaVideoGpu] Shared canvas resized to ${newWidth}x${newHeight}`);
197
+ }
198
+ function getSharedGL() {
199
+ if (sharedGLResources) {
200
+ sharedGLResources.refCount++;
201
+ return sharedGLResources;
202
+ }
203
+ const canvas = document.createElement("canvas");
204
+ canvas.width = 512;
205
+ canvas.height = 512;
206
+ const gl = canvas.getContext("webgl2", {
207
+ alpha: true,
208
+ premultipliedAlpha: true,
209
+ preserveDrawingBuffer: true
210
+ }) || canvas.getContext("webgl", {
211
+ alpha: true,
212
+ premultipliedAlpha: true,
213
+ preserveDrawingBuffer: true
214
+ });
215
+ if (!gl) {
216
+ console.warn("[AlphaVideoGpu] Failed to create shared WebGL context");
217
+ return null;
218
+ }
219
+ let arrayProgram = null;
220
+ if (gl instanceof WebGL2RenderingContext) {
221
+ try {
222
+ const vsArr = compileShader(gl, gl.VERTEX_SHADER, VERT_ARRAY);
223
+ const fsArr = compileShader(gl, gl.FRAGMENT_SHADER, FRAG_ARRAY);
224
+ arrayProgram = linkProgram(gl, vsArr, fsArr);
225
+ } catch (e) {
226
+ console.warn("[AlphaVideoGpu] Texture array shader failed:", e);
227
+ }
228
+ }
229
+ const positionBuffer = gl.createBuffer();
230
+ gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
231
+ gl.bufferData(gl.ARRAY_BUFFER, QUAD_POSITIONS, gl.STATIC_DRAW);
232
+ const texCoordBuffer = gl.createBuffer();
233
+ gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer);
234
+ gl.bufferData(gl.ARRAY_BUFFER, QUAD_TEXCOORDS, gl.STATIC_DRAW);
235
+ gl.enable(gl.BLEND);
236
+ gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
237
+ sharedGLResources = {
238
+ gl,
239
+ canvas,
240
+ arrayProgram,
241
+ positionBuffer,
242
+ texCoordBuffer,
243
+ refCount: 1,
244
+ maxWidth: 512,
245
+ maxHeight: 512
246
+ };
247
+ console.debug("[AlphaVideoGpu] Created shared WebGL context");
248
+ return sharedGLResources;
249
+ }
250
+ function releaseSharedGL() {
251
+ if (!sharedGLResources) return;
252
+ sharedGLResources.refCount--;
253
+ if (sharedGLResources.refCount <= 0) {
254
+ const { gl, arrayProgram, positionBuffer, texCoordBuffer } = sharedGLResources;
255
+ if (arrayProgram) gl.deleteProgram(arrayProgram);
256
+ gl.deleteBuffer(positionBuffer);
257
+ gl.deleteBuffer(texCoordBuffer);
258
+ const ext = gl.getExtension("WEBGL_lose_context");
259
+ if (ext) ext.loseContext();
260
+ sharedGLResources = null;
261
+ console.debug("[AlphaVideoGpu] Released shared WebGL context");
262
+ }
263
+ }
264
+ function getSharedGLResources() {
265
+ return sharedGLResources;
266
+ }
267
+ function createDedicatedGL(canvas) {
268
+ const gl = canvas.getContext("webgl2") || canvas.getContext("webgl");
269
+ if (!gl) return null;
270
+ let arrayProgram = null;
271
+ if (gl instanceof WebGL2RenderingContext) {
272
+ try {
273
+ const vsArr = compileShader(gl, gl.VERTEX_SHADER, VERT_ARRAY);
274
+ const fsArr = compileShader(gl, gl.FRAGMENT_SHADER, FRAG_ARRAY);
275
+ arrayProgram = linkProgram(gl, vsArr, fsArr);
276
+ } catch {
277
+ }
278
+ }
279
+ const positionBuffer = gl.createBuffer();
280
+ gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
281
+ gl.bufferData(gl.ARRAY_BUFFER, QUAD_POSITIONS, gl.STATIC_DRAW);
282
+ const texCoordBuffer = gl.createBuffer();
283
+ gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer);
284
+ gl.bufferData(gl.ARRAY_BUFFER, QUAD_TEXCOORDS, gl.STATIC_DRAW);
285
+ gl.enable(gl.BLEND);
286
+ gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
287
+ return { gl, arrayProgram, positionBuffer, texCoordBuffer };
288
+ }
289
+
290
+ // src/ktx2-parser.ts
291
+ var DEFAULT_FRAME_RATE = 30;
292
+ function extractKTX2Metadata(ktx2Data) {
293
+ var _a;
294
+ if (ktx2Data.byteLength < 80 || ktx2Data[0] !== 171 || ktx2Data[1] !== 75 || ktx2Data[2] !== 84 || ktx2Data[3] !== 88) {
295
+ return null;
296
+ }
297
+ const view = new DataView(ktx2Data.buffer, ktx2Data.byteOffset, ktx2Data.byteLength);
298
+ return {
299
+ frameWidth: view.getUint32(20, true),
300
+ frameHeight: view.getUint32(24, true),
301
+ frameCount: view.getUint32(32, true),
302
+ frameRate: (_a = readAnimFrameRate(ktx2Data, view)) != null ? _a : DEFAULT_FRAME_RATE
303
+ };
304
+ }
305
+ function readAnimFrameRate(ktx2Data, view) {
306
+ const kvdEnd = Math.min(view.getUint32(56, true) + view.getUint32(60, true), ktx2Data.byteLength);
307
+ let pos = view.getUint32(56, true);
308
+ while (pos + 4 <= kvdEnd) {
309
+ const entryLength = view.getUint32(pos, true);
310
+ const entryStart = pos + 4;
311
+ if (entryLength === 0 || entryStart + entryLength > kvdEnd) break;
312
+ let keyEnd = entryStart;
313
+ while (keyEnd < entryStart + entryLength && ktx2Data[keyEnd] !== 0) keyEnd++;
314
+ const key = new TextDecoder().decode(ktx2Data.subarray(entryStart, keyEnd));
315
+ if (key === "KTXanimData" && entryStart + entryLength - (keyEnd + 1) >= 12) {
316
+ const duration = view.getUint32(keyEnd + 1, true);
317
+ const timescale = view.getUint32(keyEnd + 5, true);
318
+ return duration > 0 && timescale > 0 ? timescale / duration : null;
319
+ }
320
+ pos = entryStart + entryLength + (4 - entryLength % 4) % 4;
321
+ }
322
+ return null;
323
+ }
324
+ var ASTC_FORMAT_MAP = {
325
+ // 4x4
326
+ 157: 37808,
327
+ 158: 37840,
328
+ // 5x4
329
+ 159: 37809,
330
+ 160: 37841,
331
+ // 5x5
332
+ 161: 37810,
333
+ 162: 37842,
334
+ // 6x5
335
+ 163: 37811,
336
+ 164: 37843,
337
+ // 6x6
338
+ 165: 37812,
339
+ 166: 37844,
340
+ // 8x5
341
+ 167: 37813,
342
+ 168: 37845,
343
+ // 8x6
344
+ 169: 37814,
345
+ 170: 37846,
346
+ // 8x8
347
+ 171: 37815,
348
+ 172: 37847,
349
+ // 10x5
350
+ 173: 37816,
351
+ 174: 37848,
352
+ // 10x6
353
+ 175: 37817,
354
+ 176: 37849,
355
+ // 10x8
356
+ 177: 37818,
357
+ 178: 37850,
358
+ // 10x10
359
+ 179: 37819,
360
+ 180: 37851,
361
+ // 12x10
362
+ 181: 37820,
363
+ 182: 37852,
364
+ // 12x12
365
+ 183: 37821,
366
+ 184: 37853
367
+ };
368
+ function getASTCBlockSize(vkFormat) {
369
+ const base = vkFormat % 2 === 0 ? vkFormat - 1 : vkFormat;
370
+ switch (base) {
371
+ case 157:
372
+ return { blockWidth: 4, blockHeight: 4 };
373
+ case 159:
374
+ return { blockWidth: 5, blockHeight: 4 };
375
+ case 161:
376
+ return { blockWidth: 5, blockHeight: 5 };
377
+ case 163:
378
+ return { blockWidth: 6, blockHeight: 5 };
379
+ case 165:
380
+ return { blockWidth: 6, blockHeight: 6 };
381
+ case 167:
382
+ return { blockWidth: 8, blockHeight: 5 };
383
+ case 169:
384
+ return { blockWidth: 8, blockHeight: 6 };
385
+ case 171:
386
+ return { blockWidth: 8, blockHeight: 8 };
387
+ case 173:
388
+ return { blockWidth: 10, blockHeight: 5 };
389
+ case 175:
390
+ return { blockWidth: 10, blockHeight: 6 };
391
+ case 177:
392
+ return { blockWidth: 10, blockHeight: 8 };
393
+ case 179:
394
+ return { blockWidth: 10, blockHeight: 10 };
395
+ case 181:
396
+ return { blockWidth: 12, blockHeight: 10 };
397
+ case 183:
398
+ return { blockWidth: 12, blockHeight: 12 };
399
+ default:
400
+ return { blockWidth: 4, blockHeight: 4 };
401
+ }
402
+ }
403
+ function getASTCBytesPerLayer(width, height, vkFormat) {
404
+ const { blockWidth, blockHeight } = getASTCBlockSize(vkFormat);
405
+ const blocksX = Math.ceil(width / blockWidth);
406
+ const blocksY = Math.ceil(height / blockHeight);
407
+ return blocksX * blocksY * 16;
408
+ }
409
+
410
+ // src/errors.ts
411
+ var AlphaVideoGpuError = class extends Error {
412
+ constructor(code, message) {
413
+ super(message);
414
+ this.name = "AlphaVideoGpuError";
415
+ this.code = code;
416
+ }
417
+ };
418
+
419
+ // src/zstd-seek-table.ts
420
+ var SEEK_TABLE_MAGIC = 407710302;
421
+ var SEEKABLE_FOOTER_MAGIC = 2408770225;
422
+ var FOOTER_SIZE = 9;
423
+ var SKIPPABLE_HEADER_SIZE = 8;
424
+ var CHECKSUM_FLAG = 128;
425
+ var RESERVED_BITS = 124;
426
+ function parseZstdSeekTable(level, decompressedLength, tailOffset = 0) {
427
+ if (level.length < SKIPPABLE_HEADER_SIZE + FOOTER_SIZE) return null;
428
+ const view = new DataView(level.buffer, level.byteOffset, level.byteLength);
429
+ const end = level.length;
430
+ if (view.getUint32(end - 4, true) !== SEEKABLE_FOOTER_MAGIC) return null;
431
+ const descriptor = level[end - 5];
432
+ if (descriptor & RESERVED_BITS) return null;
433
+ const frameCount = view.getUint32(end - FOOTER_SIZE, true);
434
+ const entrySize = descriptor & CHECKSUM_FLAG ? 12 : 8;
435
+ const tableSize = frameCount * entrySize + FOOTER_SIZE;
436
+ const tableStart = end - SKIPPABLE_HEADER_SIZE - tableSize;
437
+ if (frameCount === 0 || tableStart < 0) return null;
438
+ if (view.getUint32(tableStart, true) !== SEEK_TABLE_MAGIC) return null;
439
+ if (view.getUint32(tableStart + 4, true) !== tableSize) return null;
440
+ const compressedOffsets = [];
441
+ const decompressedOffsets = [];
442
+ let compressed = 0;
443
+ let decompressed = 0;
444
+ for (let i = 0; i < frameCount; i++) {
445
+ const entry = tableStart + SKIPPABLE_HEADER_SIZE + i * entrySize;
446
+ compressedOffsets.push(compressed);
447
+ decompressedOffsets.push(decompressed);
448
+ compressed += view.getUint32(entry, true);
449
+ decompressed += view.getUint32(entry + 4, true);
450
+ }
451
+ if (compressed !== tailOffset + tableStart) return null;
452
+ if (decompressedLength !== void 0 && decompressed !== decompressedLength) return null;
453
+ return { compressedOffsets, decompressedOffsets };
454
+ }
455
+ async function readZstdSeekTable(read, levelLength, decompressedLength) {
456
+ if (levelLength < SKIPPABLE_HEADER_SIZE + FOOTER_SIZE) return null;
457
+ const footer = await read(levelLength - FOOTER_SIZE, FOOTER_SIZE);
458
+ if (footer.length < FOOTER_SIZE) return null;
459
+ const view = new DataView(footer.buffer, footer.byteOffset, footer.byteLength);
460
+ if (view.getUint32(5, true) !== SEEKABLE_FOOTER_MAGIC || footer[4] & RESERVED_BITS) return null;
461
+ const entrySize = footer[4] & CHECKSUM_FLAG ? 12 : 8;
462
+ const tableStart = levelLength - SKIPPABLE_HEADER_SIZE - (view.getUint32(0, true) * entrySize + FOOTER_SIZE);
463
+ if (tableStart < 0) return null;
464
+ return parseZstdSeekTable(await read(tableStart, levelLength - tableStart), decompressedLength, tableStart);
465
+ }
466
+ function seekPointBefore(table, decompressedOffset) {
467
+ if (!table) return { compressedOffset: 0, decompressedOffset: 0 };
468
+ const starts = table.decompressedOffsets;
469
+ let low = 0;
470
+ let high = starts.length - 1;
471
+ while (low < high) {
472
+ const mid = low + high + 1 >> 1;
473
+ if (starts[mid] <= decompressedOffset) low = mid;
474
+ else high = mid - 1;
475
+ }
476
+ return { compressedOffset: table.compressedOffsets[low], decompressedOffset: starts[low] };
477
+ }
478
+
479
+ // src/zstd-layer-stream.ts
480
+ var INPUT_CHUNK_SIZE = 256 * 1024;
481
+ var PushPump = class {
482
+ constructor(decoder, _level, _inputPos) {
483
+ this._level = _level;
484
+ this._inputPos = _inputPos;
485
+ this._output = null;
486
+ this._controller = new AbortController();
487
+ this._closed = false;
488
+ this._decoder = decoder.createStreamingDecoder();
489
+ }
490
+ async next() {
491
+ for (; ; ) {
492
+ if (this._closed) return null;
493
+ if (this._output) {
494
+ const piece = this._output.next();
495
+ if (!piece.done) return piece.value;
496
+ this._output = null;
497
+ }
498
+ if (this._inputPos >= this._level.length) {
499
+ if (!this._decoder.finished()) throw new Error("zstd: the level ends partway through a frame");
500
+ return null;
501
+ }
502
+ const length = Math.min(INPUT_CHUNK_SIZE, this._level.length - this._inputPos);
503
+ let input;
504
+ try {
505
+ input = await this._level.read(this._inputPos, length, this._controller.signal);
506
+ } catch (error) {
507
+ if (this._closed) return null;
508
+ throw error;
509
+ }
510
+ if (this._closed) return null;
511
+ if (input.byteLength === 0) throw new Error(`the level ends at ${this._inputPos} of ${this._level.length} bytes`);
512
+ this._inputPos += input.byteLength;
513
+ this._output = this._decoder.decode(input);
514
+ }
515
+ }
516
+ close() {
517
+ var _a;
518
+ if (this._closed) return;
519
+ this._closed = true;
520
+ this._controller.abort();
521
+ try {
522
+ (_a = this._output) == null ? void 0 : _a.return(void 0);
523
+ } catch {
524
+ }
525
+ this._decoder.free();
526
+ }
527
+ };
528
+ var WholeLevelPump = class {
529
+ constructor(decoder, level, offset) {
530
+ this._generator = decoder.decodeStreaming(chunksFrom(level, offset));
531
+ }
532
+ async next() {
533
+ var _a;
534
+ const piece = (_a = this._generator) == null ? void 0 : _a.next();
535
+ return !piece || piece.done ? null : piece.value;
536
+ }
537
+ close() {
538
+ var _a;
539
+ try {
540
+ (_a = this._generator) == null ? void 0 : _a.return(void 0);
541
+ } catch {
542
+ }
543
+ this._generator = null;
544
+ }
545
+ };
546
+ function* chunksFrom(data, offset) {
547
+ for (let start = offset; start < data.length; start += INPUT_CHUNK_SIZE) {
548
+ yield data.subarray(start, Math.min(start + INPUT_CHUNK_SIZE, data.length));
549
+ }
550
+ }
551
+ var ZstdLayerStream = class _ZstdLayerStream {
552
+ constructor(_decoder, _level, _bytesPerLayer, seekTable, _wholeLevel) {
553
+ this._decoder = _decoder;
554
+ this._level = _level;
555
+ this._bytesPerLayer = _bytesPerLayer;
556
+ this.seekTable = seekTable;
557
+ this._wholeLevel = _wholeLevel;
558
+ this._pump = null;
559
+ this._chunk = new Uint8Array(0);
560
+ this._chunkPos = 0;
561
+ // Decompressed bytes taken from the decoder, counted from the level's start
562
+ this._decoded = 0;
563
+ this._skipBytes = 0;
564
+ this._position = 0;
565
+ // Changes on every moveTo and close, so a read they interrupt can tell
566
+ this._epoch = 0;
567
+ this._atEnd = false;
568
+ this._startAt(0, 0);
569
+ }
570
+ /** Reads the level's seek table (and the whole level, for a decoder that needs it), then starts at layer 0. */
571
+ static async open(decoder, level, bytesPerLayer, decompressedLength) {
572
+ const seekTable = await readZstdSeekTable((offset, length) => level.read(offset, length), level.length, decompressedLength);
573
+ const whole = decoder.createStreamingDecoder ? null : await level.read(0, level.length);
574
+ return new _ZstdLayerStream(decoder, level, bytesPerLayer, seekTable, whole);
575
+ }
576
+ get position() {
577
+ return this._position;
578
+ }
579
+ get skipping() {
580
+ return this._skipBytes > 0;
581
+ }
582
+ get atEnd() {
583
+ return this._atEnd;
584
+ }
585
+ /**
586
+ * Makes layer the next one read. Decoding carries on from where it is when that is no further
587
+ * from the target than the nearest seek point, and starts at that seek point otherwise.
588
+ */
589
+ moveTo(layer) {
590
+ this._epoch++;
591
+ this._atEnd = false;
592
+ const target = layer * this._bytesPerLayer;
593
+ const point = seekPointBefore(this.seekTable, target);
594
+ if (this._decoded < point.decompressedOffset || this._decoded > target) {
595
+ this._startAt(point.compressedOffset, point.decompressedOffset);
596
+ }
597
+ this._skipBytes = target - this._decoded;
598
+ this._position = layer;
599
+ }
600
+ /** Throws away decoded bytes toward position until done or the deadline (performance.now()). */
601
+ async skip(deadline = Infinity) {
602
+ while (this._skipBytes > 0 && performance.now() < deadline) {
603
+ if (!await this._fillChunk()) return;
604
+ const taken = Math.min(this._skipBytes, this._chunk.length - this._chunkPos);
605
+ this._chunkPos += taken;
606
+ this._decoded += taken;
607
+ this._skipBytes -= taken;
608
+ }
609
+ }
610
+ async readLayer() {
611
+ const epoch = this._epoch;
612
+ await this.skip();
613
+ if (epoch !== this._epoch) return null;
614
+ if (this._skipBytes > 0) {
615
+ this._atEnd = true;
616
+ return null;
617
+ }
618
+ const layer = new Uint8Array(this._bytesPerLayer);
619
+ let filled = 0;
620
+ while (filled < layer.length) {
621
+ const more = await this._fillChunk();
622
+ if (epoch !== this._epoch) return null;
623
+ if (!more) {
624
+ this._atEnd = true;
625
+ return null;
626
+ }
627
+ const taken = Math.min(layer.length - filled, this._chunk.length - this._chunkPos);
628
+ layer.set(this._chunk.subarray(this._chunkPos, this._chunkPos + taken), filled);
629
+ this._chunkPos += taken;
630
+ this._decoded += taken;
631
+ filled += taken;
632
+ }
633
+ this._position++;
634
+ return layer;
635
+ }
636
+ /** Frees the decoder's WASM buffers and stops reading. */
637
+ close() {
638
+ var _a;
639
+ this._epoch++;
640
+ (_a = this._pump) == null ? void 0 : _a.close();
641
+ this._pump = null;
642
+ }
643
+ _startAt(compressedOffset, decompressedOffset) {
644
+ var _a;
645
+ (_a = this._pump) == null ? void 0 : _a.close();
646
+ this._pump = this._wholeLevel ? new WholeLevelPump(this._decoder, this._wholeLevel, compressedOffset) : new PushPump(this._decoder, this._level, compressedOffset);
647
+ this._chunk = new Uint8Array(0);
648
+ this._chunkPos = 0;
649
+ this._decoded = decompressedOffset;
650
+ }
651
+ /** False when the decoder has no more output, or its pump was replaced or closed meanwhile. */
652
+ async _fillChunk() {
653
+ while (this._chunkPos >= this._chunk.length) {
654
+ const pump = this._pump;
655
+ if (!pump) return false;
656
+ const piece = await pump.next();
657
+ if (pump !== this._pump || !piece) return false;
658
+ this._chunk = piece;
659
+ this._chunkPos = 0;
660
+ }
661
+ return true;
662
+ }
663
+ };
664
+
665
+ // src/layer-stream.ts
666
+ var UncompressedLayerStream = class {
667
+ constructor(_level, _bytesPerLayer, _layerCount) {
668
+ this._level = _level;
669
+ this._bytesPerLayer = _bytesPerLayer;
670
+ this._layerCount = _layerCount;
671
+ this._position = 0;
672
+ this._epoch = 0;
673
+ this._atEnd = false;
674
+ this._controller = new AbortController();
675
+ }
676
+ get position() {
677
+ return this._position;
678
+ }
679
+ get skipping() {
680
+ return false;
681
+ }
682
+ get atEnd() {
683
+ return this._atEnd;
684
+ }
685
+ moveTo(layer) {
686
+ this._epoch++;
687
+ this._position = layer;
688
+ this._atEnd = false;
689
+ }
690
+ async skip() {
691
+ }
692
+ async readLayer() {
693
+ const layer = this._position;
694
+ if (layer >= this._layerCount) {
695
+ this._atEnd = true;
696
+ return null;
697
+ }
698
+ const epoch = this._epoch;
699
+ const data = await this._level.read(layer * this._bytesPerLayer, this._bytesPerLayer, this._controller.signal);
700
+ if (epoch !== this._epoch) return null;
701
+ if (data.byteLength < this._bytesPerLayer) {
702
+ this._atEnd = true;
703
+ return null;
704
+ }
705
+ this._position = layer + 1;
706
+ return data;
707
+ }
708
+ close() {
709
+ this._epoch++;
710
+ this._controller.abort();
711
+ }
712
+ };
713
+
714
+ // src/source.ts
715
+ var import_range_source_web = require("range-source-web");
716
+ var STORAGE_NAMESPACE = "alpha-video-gpu";
717
+ function resolveWebUri(uri) {
718
+ return uri.startsWith("asset://") ? "/" + uri.slice("asset://".length).replace(/^\/+/, "") : uri;
719
+ }
720
+ function sourceIdentity(source, cacheKey) {
721
+ return typeof source === "string" ? cacheKey || source : source;
722
+ }
723
+ async function openKtx2Source(source, options = {}) {
724
+ var _a, _b, _c;
725
+ if (source instanceof ArrayBuffer || source instanceof Uint8Array) {
726
+ return memoryReader(source instanceof Uint8Array ? source : new Uint8Array(source));
727
+ }
728
+ let byteSource;
729
+ let key;
730
+ let storage;
731
+ if (typeof source === "string") {
732
+ const uri = resolveWebUri(source);
733
+ byteSource = (0, import_range_source_web.httpSource)(uri, { headers: options.headers });
734
+ key = options.cacheKey || uri;
735
+ storage = (_a = options.storage) != null ? _a : "auto";
736
+ } else if (typeof Blob !== "undefined" && source instanceof Blob) {
737
+ byteSource = (0, import_range_source_web.blobSource)(source);
738
+ key = options.cacheKey;
739
+ storage = (_b = options.storage) != null ? _b : "none";
740
+ } else if ((0, import_range_source_web.isByteSource)(source)) {
741
+ byteSource = source;
742
+ key = options.cacheKey;
743
+ storage = (_c = options.storage) != null ? _c : "none";
744
+ } else {
745
+ throw new TypeError("setSource takes a URL, a Blob, an ArrayBuffer, a Uint8Array or a ByteSource");
746
+ }
747
+ const store = key ? (0, import_range_source_web.createStore)(storage, { namespace: STORAGE_NAMESPACE, maxBytes: options.maxStorageBytes }) : null;
748
+ return (0, import_range_source_web.openReader)(byteSource, { store, key, signal: options.signal });
749
+ }
750
+ function memoryReader(data) {
751
+ return {
752
+ size: data.byteLength,
753
+ async read(offset, length) {
754
+ return data.subarray(offset, Math.min(offset + length, data.byteLength));
755
+ },
756
+ close() {
757
+ }
758
+ };
759
+ }
760
+
761
+ // src/KTX2PlayerCore.ts
762
+ function clampInt(value, min, max) {
763
+ return Math.max(min, Math.min(max, Math.round(value)));
764
+ }
765
+ var HEADER_READ_BYTES = 16 * 1024;
766
+ async function readKtx2Header(reader) {
767
+ let header = await reader.read(0, Math.min(reader.size, HEADER_READ_BYTES));
768
+ if (header.byteLength < 80) throw new Error(`Not a KTX2 file: ${header.byteLength} bytes`);
769
+ const view = new DataView(header.buffer, header.byteOffset, header.byteLength);
770
+ const levelIndexEnd = 80 + Math.max(1, view.getUint32(40, true)) * 24;
771
+ const kvdEnd = view.getUint32(56, true) + view.getUint32(60, true);
772
+ const needed = Math.max(levelIndexEnd, kvdEnd);
773
+ if (needed > header.byteLength) header = await reader.read(0, needed);
774
+ return header;
775
+ }
776
+ var SupersededLoad = class extends Error {
777
+ };
778
+ function isAbortError(error) {
779
+ return (error == null ? void 0 : error.name) === "AbortError";
780
+ }
781
+ var DECODE_SLICE_MS = 8;
782
+ var RAM_RING_SIZE = 4;
783
+ function yieldToEventLoop() {
784
+ const scheduler = globalThis.scheduler;
785
+ if (typeof (scheduler == null ? void 0 : scheduler.yield) === "function") return scheduler.yield();
786
+ return new Promise((resolve) => setTimeout(resolve, 0));
787
+ }
788
+ var KTX2PlayerCore = class {
789
+ // ======== Constructor ========
790
+ constructor(canvas, options = {}) {
791
+ this._ctx2d = null;
792
+ this._usingSharedGL = false;
793
+ this._gl = null;
794
+ this._arrayProgram = null;
795
+ this._positionBuffer = null;
796
+ this._texCoordBuffer = null;
797
+ // -- Textures --
798
+ this._textureArray = null;
799
+ // Set when the browser has no ASTC: layers are decoded to RGBA and the textures are RGBA8
800
+ this._softwareAstc = null;
801
+ this._blockWidth = 4;
802
+ this._blockHeight = 4;
803
+ // -- Playback --
804
+ this._metadata = null;
805
+ this._state = "idle";
806
+ this._currentFrame = 0;
807
+ this._animationFrameId = null;
808
+ this._lastFrameTime = 0;
809
+ this._loadedSource = null;
810
+ // Counts loads, so one that a newer setSource or destroy replaced can stop
811
+ this._loadId = 0;
812
+ this._reader = null;
813
+ // -- Decoders --
814
+ this._zstdDecoder = null;
815
+ // -- Streaming --
816
+ this._streamingMode = false;
817
+ this._streamingCancelled = false;
818
+ this._streamingFrameCache = /* @__PURE__ */ new Map();
819
+ this._useVramStrategy = false;
820
+ this._streamingRingBuffer = null;
821
+ this._streamingRingSlots = [];
822
+ this._streamingRingActualSize = 0;
823
+ this._streamingDecodePos = 0;
824
+ this._streamingFramesReady = 0;
825
+ this._streamingLoopCount = 0;
826
+ // Reads the level's layers: zstd-decoded, or straight from the file when uncompressed
827
+ this._layerStream = null;
828
+ this._streamingBytesPerLayer = 0;
829
+ this._streamingWidth = 0;
830
+ this._streamingHeight = 0;
831
+ this._streamingLayerCount = 0;
832
+ this._streamingLevel0Offset = 0;
833
+ this._streamingAstcFormat = 0;
834
+ // The stream the background decode loop is reading, while it runs
835
+ this._backgroundDecodeStream = null;
836
+ // A clip that doesn't loop has reached its last frame; playing again starts it over
837
+ this._ended = false;
838
+ this._pausedByProp = false;
839
+ // Polls for a frame a seek owes while not playing, until it is decoded
840
+ this._owedFrameId = null;
841
+ // -- RAM mode (non-streaming texture arrays with memoryStrategy='ram') --
842
+ this._ramHeavyMode = false;
843
+ this._ramFrameData = null;
844
+ this._ramBytesPerFrame = 0;
845
+ this._ramFrameCount = 0;
846
+ this._ramUploadedFrame = -1;
847
+ this._ramAstcFormat = 0;
848
+ this._ramWidth = 0;
849
+ this._ramHeight = 0;
850
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;
851
+ this._canvas = canvas;
852
+ this._autoPlay = (_a = options.autoPlay) != null ? _a : true;
853
+ this._loop = (_b = options.loop) != null ? _b : true;
854
+ this._playbackSpeed = (_c = options.playbackSpeed) != null ? _c : 1;
855
+ this._stream = (_d = options.stream) != null ? _d : true;
856
+ this._streamingPrefetchAhead = clampInt((_e = options.streamingPrefetchAhead) != null ? _e : 8, 1, 100);
857
+ this._memoryStrategy = options.memoryStrategy === "ram" ? "ram" : "vram";
858
+ this._verbose = (_f = options.verbose) != null ? _f : false;
859
+ this._storage = options.storage;
860
+ this._maxStorageBytes = options.maxStorageBytes;
861
+ this._ZSTDDecoderClass = (_g = options.ZSTDDecoderClass) != null ? _g : null;
862
+ this._onStateChange = (_h = options.onStateChange) != null ? _h : null;
863
+ this._onLoad = (_i = options.onLoad) != null ? _i : null;
864
+ this._onFrameUpdate = (_j = options.onFrameUpdate) != null ? _j : null;
865
+ this._onFinished = (_k = options.onFinished) != null ? _k : null;
866
+ this._onError = (_l = options.onError) != null ? _l : null;
867
+ this._frameEvents = (_m = options.frameEvents) != null ? _m : true;
868
+ }
869
+ // ======== Public API ========
870
+ get state() {
871
+ return this._state;
872
+ }
873
+ get currentFrame() {
874
+ return this._currentFrame;
875
+ }
876
+ get totalFrames() {
877
+ var _a, _b;
878
+ return (_b = (_a = this._metadata) == null ? void 0 : _a.frameCount) != null ? _b : 0;
879
+ }
880
+ get frameRate() {
881
+ var _a, _b;
882
+ return (_b = (_a = this._metadata) == null ? void 0 : _a.frameRate) != null ? _b : 30;
883
+ }
884
+ get duration() {
885
+ return this.totalFrames / this.frameRate;
886
+ }
887
+ get currentTime() {
888
+ return this._currentFrame / this.frameRate;
889
+ }
890
+ get metadataInfo() {
891
+ return this._metadata;
892
+ }
893
+ /** Whether a source starts playing once loaded. */
894
+ set autoPlay(v) {
895
+ this._autoPlay = v;
896
+ }
897
+ get autoPlay() {
898
+ return this._autoPlay;
899
+ }
900
+ /** Whether onFrameUpdate fires for every frame played, not only for seeks. */
901
+ set frameEvents(v) {
902
+ this._frameEvents = v;
903
+ }
904
+ get frameEvents() {
905
+ return this._frameEvents;
906
+ }
907
+ set loop(v) {
908
+ this._loop = v;
909
+ }
910
+ get loop() {
911
+ return this._loop;
912
+ }
913
+ set playbackSpeed(v) {
914
+ this._playbackSpeed = v;
915
+ if (this._state === "playing") {
916
+ this._stopAnimationLoop();
917
+ this._startAnimationLoop();
918
+ }
919
+ }
920
+ get playbackSpeed() {
921
+ return this._playbackSpeed;
922
+ }
923
+ /** Update callbacks after construction (useful for wrappers where callbacks change). */
924
+ updateCallbacks(cbs) {
925
+ if (cbs.onStateChange !== void 0) this._onStateChange = cbs.onStateChange;
926
+ if (cbs.onLoad !== void 0) this._onLoad = cbs.onLoad;
927
+ if (cbs.onFrameUpdate !== void 0) this._onFrameUpdate = cbs.onFrameUpdate;
928
+ if (cbs.onFinished !== void 0) this._onFinished = cbs.onFinished;
929
+ if (cbs.onError !== void 0) this._onError = cbs.onError;
930
+ }
931
+ /** Plays from the shown frame, or from the start once a clip that doesn't loop has ended. */
932
+ play() {
933
+ if (this._state === "paused") {
934
+ this.resume();
935
+ } else if (this._state === "ready" || this._state === "stopped") {
936
+ if (this._ended) this.seekToFrame(0);
937
+ this._streamingCancelled = false;
938
+ this._setState("playing");
939
+ this._kickStreamingDecode();
940
+ this._lastFrameTime = performance.now();
941
+ this._startAnimationLoop();
942
+ }
943
+ }
944
+ pause() {
945
+ if (this._state === "playing") {
946
+ this._setState("paused");
947
+ this._streamingCancelled = true;
948
+ this._stopAnimationLoop();
949
+ }
950
+ }
951
+ resume() {
952
+ if (this._state === "paused") {
953
+ this._streamingCancelled = false;
954
+ this._setState("playing");
955
+ this._kickStreamingDecode();
956
+ this._lastFrameTime = performance.now();
957
+ this._startAnimationLoop();
958
+ }
959
+ }
960
+ /**
961
+ * Holds playback and decoding, keeping the frames (the `paused` prop, for screen focus and
962
+ * blur). Unpausing plays again only when autoPlay is on; a source loaded while paused waits.
963
+ */
964
+ setPaused(paused) {
965
+ this._pausedByProp = paused;
966
+ if (paused) {
967
+ this.pause();
968
+ } else if (this._autoPlay && (this._state === "paused" || this._state === "ready")) {
969
+ this.play();
970
+ }
971
+ }
972
+ /** Pauses on the first frame. */
973
+ stop() {
974
+ this._setState("stopped");
975
+ this._stopAnimationLoop();
976
+ this.seekToFrame(0);
977
+ }
978
+ /**
979
+ * Shows that frame (clamped to the clip) and keeps playing or stays paused. Ignored until
980
+ * the source has loaded. While streaming, a seek outside the buffered frames decodes again.
981
+ */
982
+ seekToFrame(frame) {
983
+ var _a, _b, _c;
984
+ const total = (_b = (_a = this._metadata) == null ? void 0 : _a.frameCount) != null ? _b : 0;
985
+ if (!total || this._state === "idle" || this._state === "loading" || this._state === "error") return;
986
+ const target = Math.max(0, Math.min(Math.floor(frame) || 0, total - 1));
987
+ this._ended = false;
988
+ if (this._streamingMode) this._moveStreamTo(target);
989
+ this._currentFrame = target;
990
+ this._lastFrameTime = performance.now();
991
+ (_c = this._onFrameUpdate) == null ? void 0 : _c.call(this, target, total);
992
+ if (this._state !== "playing") this._drawWhenReady();
993
+ }
994
+ /** Seeks to the frame showing at that time, in seconds. */
995
+ seekToTime(seconds) {
996
+ this.seekToFrame(Math.floor((seconds > 0 ? seconds : 0) * this.frameRate + 1e-6));
997
+ }
998
+ set verbose(v) {
999
+ this._verbose = v;
1000
+ }
1001
+ /** Reset loaded source tracking so next setSource will reload even the same URI. */
1002
+ resetSource() {
1003
+ this._loadedSource = null;
1004
+ }
1005
+ /**
1006
+ * Loads an ASTC KTX2 texture array from a URL (http(s), relative, or asset://path, served from
1007
+ * the site root), a Blob or File, bytes in memory, or a ByteSource. Files are read by range:
1008
+ * streaming playback starts once the first frames have arrived, and a URL's bytes are kept in
1009
+ * the storage option's store for the next play.
1010
+ *
1011
+ * @param options cacheKey and headers; a string is taken as the cacheKey
1012
+ */
1013
+ async setSource(source, options = {}) {
1014
+ var _a;
1015
+ const { cacheKey, headers } = typeof options === "string" ? { cacheKey: options, headers: void 0 } : options;
1016
+ const identity = sourceIdentity(source, cacheKey);
1017
+ if (this._loadedSource === identity) return;
1018
+ this._loadedSource = identity;
1019
+ const loadId = ++this._loadId;
1020
+ try {
1021
+ this._setState("loading");
1022
+ this._stopAnimationLoop();
1023
+ this._streamingCancelled = false;
1024
+ this._currentFrame = 0;
1025
+ this._ended = false;
1026
+ const gl = this._gl || this._initGL();
1027
+ if (!gl) return;
1028
+ this._cleanupTextures(gl);
1029
+ this._cleanupStreamingState(gl);
1030
+ this._cleanupRamState();
1031
+ this._closeReader();
1032
+ const reader = await openKtx2Source(source, {
1033
+ cacheKey,
1034
+ headers,
1035
+ storage: this._storage,
1036
+ maxStorageBytes: this._maxStorageBytes
1037
+ });
1038
+ if (loadId !== this._loadId) {
1039
+ reader.close();
1040
+ return;
1041
+ }
1042
+ this._reader = reader;
1043
+ const header = await readKtx2Header(reader);
1044
+ this._checkLoad(loadId);
1045
+ await this._loadKTX2Source(gl, header, reader, loadId);
1046
+ this._checkLoad(loadId);
1047
+ this._currentFrame = 0;
1048
+ this._finishLoad();
1049
+ } catch (error) {
1050
+ if (loadId !== this._loadId) return;
1051
+ console.error("[AlphaVideoGpu] Load error:", error);
1052
+ this._setState("error");
1053
+ (_a = this._onError) == null ? void 0 : _a.call(this, error);
1054
+ }
1055
+ }
1056
+ _log(...args) {
1057
+ if (this._verbose) console.log(...args);
1058
+ }
1059
+ /** Tear down all resources. Call when the player is no longer needed. */
1060
+ destroy() {
1061
+ this._loadId++;
1062
+ this._streamingCancelled = true;
1063
+ this._stopAnimationLoop();
1064
+ if (this._owedFrameId !== null) cancelAnimationFrame(this._owedFrameId);
1065
+ this._owedFrameId = null;
1066
+ const gl = this._gl;
1067
+ if (gl) {
1068
+ if (this._textureArray) gl.deleteTexture(this._textureArray);
1069
+ if (this._streamingRingBuffer) gl.deleteTexture(this._streamingRingBuffer);
1070
+ if (!this._usingSharedGL) {
1071
+ if (this._arrayProgram) gl.deleteProgram(this._arrayProgram);
1072
+ if (this._positionBuffer) gl.deleteBuffer(this._positionBuffer);
1073
+ if (this._texCoordBuffer) gl.deleteBuffer(this._texCoordBuffer);
1074
+ }
1075
+ }
1076
+ if (this._usingSharedGL) {
1077
+ releaseSharedGL();
1078
+ this._usingSharedGL = false;
1079
+ }
1080
+ this._streamingMode = false;
1081
+ this._streamingFrameCache.clear();
1082
+ this._closeLayerStream();
1083
+ this._closeReader();
1084
+ this._ramFrameData = null;
1085
+ this._ramHeavyMode = false;
1086
+ this._loadedSource = null;
1087
+ this._state = "idle";
1088
+ }
1089
+ /** Stops a load that a newer setSource or destroy has replaced. */
1090
+ _checkLoad(loadId) {
1091
+ if (loadId !== this._loadId) throw new SupersededLoad();
1092
+ }
1093
+ _closeReader() {
1094
+ var _a;
1095
+ (_a = this._reader) == null ? void 0 : _a.close();
1096
+ this._reader = null;
1097
+ }
1098
+ // ======== Private: State ========
1099
+ _setState(newState) {
1100
+ var _a;
1101
+ if (this._state === newState) return;
1102
+ this._state = newState;
1103
+ (_a = this._onStateChange) == null ? void 0 : _a.call(this, newState);
1104
+ }
1105
+ _finishLoad() {
1106
+ this._setState("ready");
1107
+ if (this._autoPlay && !this._pausedByProp) {
1108
+ this._setState("playing");
1109
+ this._lastFrameTime = performance.now();
1110
+ this._startAnimationLoop();
1111
+ } else {
1112
+ this._drawWhenReady();
1113
+ }
1114
+ }
1115
+ // ======== Private: GL Init ========
1116
+ _initGL() {
1117
+ var _a;
1118
+ const shared = getSharedGL();
1119
+ if (shared) {
1120
+ const ctx2d = this._canvas.getContext("2d", { alpha: true });
1121
+ if (ctx2d) {
1122
+ this._ctx2d = ctx2d;
1123
+ this._usingSharedGL = true;
1124
+ this._gl = shared.gl;
1125
+ this._arrayProgram = shared.arrayProgram;
1126
+ this._positionBuffer = shared.positionBuffer;
1127
+ this._texCoordBuffer = shared.texCoordBuffer;
1128
+ return shared.gl;
1129
+ }
1130
+ }
1131
+ const dedicated = createDedicatedGL(this._canvas);
1132
+ if (!dedicated) {
1133
+ (_a = this._onError) == null ? void 0 : _a.call(this, new AlphaVideoGpuError("WEBGL_UNSUPPORTED", "WebGL is not supported"));
1134
+ return null;
1135
+ }
1136
+ this._usingSharedGL = false;
1137
+ this._gl = dedicated.gl;
1138
+ this._arrayProgram = dedicated.arrayProgram;
1139
+ this._positionBuffer = dedicated.positionBuffer;
1140
+ this._texCoordBuffer = dedicated.texCoordBuffer;
1141
+ return dedicated.gl;
1142
+ }
1143
+ // ======== Private: ZSTD ========
1144
+ async _ensureZstdDecoder() {
1145
+ if (this._zstdDecoder) return this._zstdDecoder;
1146
+ if (this._ZSTDDecoderClass) {
1147
+ this._zstdDecoder = new this._ZSTDDecoderClass();
1148
+ } else if (typeof globalThis.ZSTDDecoder !== "undefined") {
1149
+ this._zstdDecoder = new globalThis.ZSTDDecoder();
1150
+ } else {
1151
+ throw new Error("ZSTDDecoder not available");
1152
+ }
1153
+ await this._zstdDecoder.init();
1154
+ return this._zstdDecoder;
1155
+ }
1156
+ // ======== Private: ASTC on the GPU, or decoded in software ========
1157
+ /** Uses the GPU's ASTC where the browser has it, and loads the software decoder where not. */
1158
+ async _prepareAstc(gl, vkFormat) {
1159
+ ({ blockWidth: this._blockWidth, blockHeight: this._blockHeight } = getASTCBlockSize(vkFormat));
1160
+ if (gl.getExtension("WEBGL_compressed_texture_astc")) {
1161
+ this._softwareAstc = null;
1162
+ return;
1163
+ }
1164
+ try {
1165
+ const { loadSoftwareAstcDecoder: loadSoftwareAstcDecoder2 } = await Promise.resolve().then(() => (init_software_astc(), software_astc_exports));
1166
+ this._softwareAstc = await loadSoftwareAstcDecoder2();
1167
+ } catch (error) {
1168
+ throw new AlphaVideoGpuError(
1169
+ "ASTC_UNSUPPORTED",
1170
+ `This browser has no ASTC texture support (WEBGL_compressed_texture_astc), and the software decoder failed to load: ${error.message}`
1171
+ );
1172
+ }
1173
+ this._log("[AlphaVideoGpu] No GPU ASTC support: decoding frames to RGBA in software");
1174
+ }
1175
+ /** Allocates the bound texture array: ASTC, or RGBA8 when decoding in software. */
1176
+ _allocateLayers(gl, width, height, layers, astcFormat) {
1177
+ gl.texStorage3D(gl.TEXTURE_2D_ARRAY, 1, this._softwareAstc ? gl.RGBA8 : astcFormat, width, height, layers);
1178
+ }
1179
+ /** Uploads one layer of ASTC blocks to the bound texture array, decoding it first in software. */
1180
+ _uploadLayer(gl, layer, width, height, astcFormat, astc) {
1181
+ if (this._softwareAstc) {
1182
+ const rgba = this._softwareAstc.decode(astc, width, height, this._blockWidth, this._blockHeight);
1183
+ gl.texSubImage3D(gl.TEXTURE_2D_ARRAY, 0, 0, 0, layer, width, height, 1, gl.RGBA, gl.UNSIGNED_BYTE, rgba);
1184
+ } else {
1185
+ gl.compressedTexSubImage3D(gl.TEXTURE_2D_ARRAY, 0, 0, 0, layer, width, height, 1, astcFormat, astc);
1186
+ }
1187
+ }
1188
+ // ======== Private: Cleanup ========
1189
+ _cleanupTextures(gl) {
1190
+ if (this._textureArray) {
1191
+ gl.deleteTexture(this._textureArray);
1192
+ this._textureArray = null;
1193
+ }
1194
+ }
1195
+ _cleanupStreamingState(gl) {
1196
+ if (this._streamingRingBuffer) {
1197
+ gl.deleteTexture(this._streamingRingBuffer);
1198
+ this._streamingRingBuffer = null;
1199
+ }
1200
+ this._streamingMode = false;
1201
+ this._streamingFrameCache.clear();
1202
+ this._closeLayerStream();
1203
+ }
1204
+ _cleanupRamState() {
1205
+ this._ramFrameData = null;
1206
+ this._ramHeavyMode = false;
1207
+ this._ramBytesPerFrame = 0;
1208
+ this._ramFrameCount = 0;
1209
+ this._ramUploadedFrame = -1;
1210
+ }
1211
+ // ======== Private: Emit ========
1212
+ _emitLoad(metadata) {
1213
+ var _a;
1214
+ (_a = this._onLoad) == null ? void 0 : _a.call(this, {
1215
+ width: metadata.frameWidth,
1216
+ height: metadata.frameHeight,
1217
+ frameCount: metadata.frameCount,
1218
+ frameRate: metadata.frameRate,
1219
+ duration: metadata.frameCount / metadata.frameRate
1220
+ });
1221
+ }
1222
+ // ======== Private: Load KTX2 Source ========
1223
+ async _loadKTX2Source(gl, header, reader, loadId) {
1224
+ const metadata = extractKTX2Metadata(header);
1225
+ if (!metadata) throw new Error("Not a KTX2 file");
1226
+ const vkFormat = new DataView(header.buffer, header.byteOffset, header.byteLength).getUint32(12, true);
1227
+ if (!(vkFormat in ASTC_FORMAT_MAP) || metadata.frameCount < 1) {
1228
+ throw new Error(`Only ASTC texture arrays play (this file has vkFormat ${vkFormat} and ${metadata.frameCount} layers); encode it with texenc`);
1229
+ }
1230
+ if (!(gl instanceof WebGL2RenderingContext) || !this._arrayProgram) {
1231
+ throw new AlphaVideoGpuError("WEBGL_UNSUPPORTED", "Texture arrays need WebGL2");
1232
+ }
1233
+ this._log(`[AlphaVideoGpu] Metadata: ${metadata.frameCount} frames, ${metadata.frameWidth}x${metadata.frameHeight}`);
1234
+ this._metadata = metadata;
1235
+ this._emitLoad(metadata);
1236
+ const view = new DataView(header.buffer, header.byteOffset, header.byteLength);
1237
+ const supercompressionScheme = view.getUint32(44, true);
1238
+ if (supercompressionScheme !== 0 && supercompressionScheme !== 2) {
1239
+ throw new Error(`Unsupported supercompressionScheme: ${supercompressionScheme}`);
1240
+ }
1241
+ if (this._stream) {
1242
+ this._log(`[AlphaVideoGpu] Streaming ${supercompressionScheme === 2 ? "zstd" : "uncompressed"} layers (stream=true)`);
1243
+ await this._loadStreamingTextureArray(gl, header, reader, metadata, loadId);
1244
+ } else {
1245
+ const level0Offset = Number(view.getBigUint64(80, true));
1246
+ const level0Length = Number(view.getBigUint64(88, true));
1247
+ const level = await reader.read(level0Offset, level0Length);
1248
+ this._checkLoad(loadId);
1249
+ if (level.byteLength < level0Length) throw new Error(`The file ends ${level0Length - level.byteLength} bytes into its texture data`);
1250
+ this._closeReader();
1251
+ const success = await this._loadTextureArray(gl, header, level, metadata, loadId);
1252
+ if (!success) throw new Error("Failed to load texture array");
1253
+ }
1254
+ }
1255
+ // ======== Private: Load Texture Array (non-streaming) ========
1256
+ async _loadTextureArray(gl, header, level, metadata, loadId) {
1257
+ try {
1258
+ const view = new DataView(header.buffer, header.byteOffset, header.byteLength);
1259
+ const vkFormat = view.getUint32(12, true);
1260
+ const width = view.getUint32(20, true);
1261
+ const height = view.getUint32(24, true);
1262
+ const layerCount = view.getUint32(32, true);
1263
+ const supercompressionScheme = view.getUint32(44, true);
1264
+ const astcFormat = ASTC_FORMAT_MAP[vkFormat];
1265
+ if (!astcFormat) throw new Error(`Unsupported ASTC VkFormat: ${vkFormat}`);
1266
+ await this._prepareAstc(gl, vkFormat);
1267
+ this._checkLoad(loadId);
1268
+ const useRamMode = this._memoryStrategy === "ram" || this._softwareAstc !== null;
1269
+ this._log(`[AlphaVideoGpu] Texture array: ${width}x${height}, ${layerCount} layers (${useRamMode ? "RAM" : "VRAM"} mode)`);
1270
+ const level0UncompressedLength = Number(view.getBigUint64(96, true));
1271
+ let compressedData;
1272
+ if (supercompressionScheme === 2) {
1273
+ const decoder = await this._ensureZstdDecoder();
1274
+ this._checkLoad(loadId);
1275
+ compressedData = decoder.decode(level, level0UncompressedLength);
1276
+ this._log(`[AlphaVideoGpu] WASM zstd decompressed ${level.length} -> ${compressedData.length} bytes`);
1277
+ } else {
1278
+ compressedData = level;
1279
+ }
1280
+ const textureArray = gl.createTexture();
1281
+ gl.bindTexture(gl.TEXTURE_2D_ARRAY, textureArray);
1282
+ if (useRamMode) {
1283
+ const gpuRingSize = 2;
1284
+ const bytesPerLayer = getASTCBytesPerLayer(width, height, vkFormat);
1285
+ this._allocateLayers(gl, width, height, gpuRingSize, astcFormat);
1286
+ this._ramFrameData = compressedData;
1287
+ this._ramBytesPerFrame = bytesPerLayer;
1288
+ this._ramFrameCount = layerCount;
1289
+ this._ramUploadedFrame = -1;
1290
+ this._ramAstcFormat = astcFormat;
1291
+ this._ramWidth = width;
1292
+ this._ramHeight = height;
1293
+ this._ramHeavyMode = true;
1294
+ const cpuMB = (compressedData.length / (1024 * 1024)).toFixed(1);
1295
+ const gpuMB = (bytesPerLayer * gpuRingSize / (1024 * 1024)).toFixed(2);
1296
+ this._log(`[AlphaVideoGpu] RAM mode: ${layerCount} frames in CPU (${cpuMB}MB), ${gpuRingSize} slots in GPU (${gpuMB}MB)`);
1297
+ } else {
1298
+ this._ramHeavyMode = false;
1299
+ gl.compressedTexImage3D(gl.TEXTURE_2D_ARRAY, 0, astcFormat, width, height, layerCount, 0, compressedData);
1300
+ const glError = gl.getError();
1301
+ if (glError !== gl.NO_ERROR) {
1302
+ console.error("[AlphaVideoGpu] WebGL error after texture array upload:", glError);
1303
+ return false;
1304
+ }
1305
+ const dataMB = (compressedData.length / (1024 * 1024)).toFixed(1);
1306
+ this._log(`[AlphaVideoGpu] VRAM mode: ${dataMB}MB uploaded to GPU`);
1307
+ }
1308
+ gl.texParameteri(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
1309
+ gl.texParameteri(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
1310
+ gl.texParameteri(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
1311
+ gl.texParameteri(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
1312
+ this._textureArray = textureArray;
1313
+ this._log(`[AlphaVideoGpu] \u2713 Texture array loaded: ${width}x${height}, ${layerCount} layers`);
1314
+ return true;
1315
+ } catch (error) {
1316
+ if (error instanceof AlphaVideoGpuError || error instanceof SupersededLoad) throw error;
1317
+ console.error("[AlphaVideoGpu] Failed to load texture array:", error);
1318
+ return false;
1319
+ }
1320
+ }
1321
+ // ======== Private: Streaming Ring Buffer Init ========
1322
+ _initStreamingRingBuffer(gl, width, height, astcFormat, layerCount, vkFormat) {
1323
+ const useVram = this._memoryStrategy !== "ram";
1324
+ this._useVramStrategy = useVram;
1325
+ const gpuCacheSize = useVram ? this._streamingPrefetchAhead + 2 : RAM_RING_SIZE;
1326
+ const ringSize = Math.min(gpuCacheSize, layerCount);
1327
+ this._log(`[AlphaVideoGpu] Memory strategy: ${this._memoryStrategy} (useVram=${useVram}), GPU cache: ${ringSize} slots`);
1328
+ const bytesPerLayer = vkFormat != null ? getASTCBytesPerLayer(width, height, vkFormat) : Math.ceil(width / 4) * Math.ceil(height / 4) * 16;
1329
+ const ringBuffer = gl.createTexture();
1330
+ gl.bindTexture(gl.TEXTURE_2D_ARRAY, ringBuffer);
1331
+ this._allocateLayers(gl, width, height, ringSize, astcFormat);
1332
+ gl.texParameteri(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
1333
+ gl.texParameteri(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
1334
+ gl.texParameteri(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
1335
+ gl.texParameteri(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
1336
+ this._streamingRingBuffer = ringBuffer;
1337
+ this._streamingRingActualSize = ringSize;
1338
+ this._streamingRingSlots = new Array(ringSize).fill(-1);
1339
+ this._streamingBytesPerLayer = bytesPerLayer;
1340
+ this._streamingWidth = width;
1341
+ this._streamingHeight = height;
1342
+ this._streamingAstcFormat = astcFormat;
1343
+ this._log(`[AlphaVideoGpu] Ring buffer initialized: ${ringSize} slots, ${bytesPerLayer} bytes/layer`);
1344
+ }
1345
+ // ======== Private: Streaming ========
1346
+ /**
1347
+ * Plays the level a layer at a time: zstd-decoded, or read straight from the file when
1348
+ * uncompressed. The first frames are read before the load finishes; the rest are read
1349
+ * ahead of playback by the background decode loop.
1350
+ */
1351
+ async _loadStreamingTextureArray(gl, header, reader, metadata, loadId) {
1352
+ const view = new DataView(header.buffer, header.byteOffset, header.byteLength);
1353
+ const vkFormat = view.getUint32(12, true);
1354
+ const width = view.getUint32(20, true);
1355
+ const height = view.getUint32(24, true);
1356
+ const layerCount = view.getUint32(32, true);
1357
+ const supercompressionScheme = view.getUint32(44, true);
1358
+ const level0Offset = Number(view.getBigUint64(80, true));
1359
+ const level0Length = Number(view.getBigUint64(88, true));
1360
+ const level0UncompressedLength = Number(view.getBigUint64(96, true));
1361
+ const bytesPerLayer = getASTCBytesPerLayer(width, height, vkFormat);
1362
+ this._log(`[AlphaVideoGpu] Streaming: ${width}x${height}, ${layerCount} layers, level ${level0Length} bytes (${level0UncompressedLength} decoded), ${bytesPerLayer} bytes/layer`);
1363
+ const astcFormat = ASTC_FORMAT_MAP[vkFormat];
1364
+ if (!astcFormat) throw new Error(`Unsupported ASTC VkFormat: ${vkFormat}`);
1365
+ await this._prepareAstc(gl, vkFormat);
1366
+ this._checkLoad(loadId);
1367
+ const level = {
1368
+ length: level0Length,
1369
+ read: (offset, length, signal) => reader.read(level0Offset + offset, Math.min(length, level0Length - offset), signal)
1370
+ };
1371
+ let stream;
1372
+ if (supercompressionScheme === 2) {
1373
+ const decoder = await this._ensureZstdDecoder();
1374
+ this._checkLoad(loadId);
1375
+ const zstdStream = await ZstdLayerStream.open(decoder, level, bytesPerLayer, level0UncompressedLength);
1376
+ if (loadId !== this._loadId) {
1377
+ zstdStream.close();
1378
+ throw new SupersededLoad();
1379
+ }
1380
+ this._log(zstdStream.seekTable ? `[AlphaVideoGpu] Seek table: ${zstdStream.seekTable.compressedOffsets.length} seek points` : "[AlphaVideoGpu] No seek table: seeks decode from the start");
1381
+ stream = zstdStream;
1382
+ } else {
1383
+ stream = new UncompressedLayerStream(level, bytesPerLayer, layerCount);
1384
+ }
1385
+ this._initStreamingRingBuffer(gl, width, height, astcFormat, layerCount, vkFormat);
1386
+ this._streamingMode = true;
1387
+ this._streamingLayerCount = layerCount;
1388
+ this._streamingLevel0Offset = level0Offset;
1389
+ this._streamingFrameCache = /* @__PURE__ */ new Map();
1390
+ this._streamingDecodePos = 0;
1391
+ this._streamingFramesReady = 0;
1392
+ this._layerStream = stream;
1393
+ const actualRingSize = this._streamingRingActualSize;
1394
+ const prefetchCount = Math.min(this._streamingPrefetchAhead, layerCount);
1395
+ this._log(`[AlphaVideoGpu] Pre-decoding ${prefetchCount} frames...`);
1396
+ for (let i = 0; i < prefetchCount && !this._streamingCancelled; i++) {
1397
+ const frameData = await stream.readLayer();
1398
+ this._checkLoad(loadId);
1399
+ if (!frameData) break;
1400
+ this._streamingFrameCache.set(i, frameData);
1401
+ this._streamingDecodePos = i + 1;
1402
+ this._streamingFramesReady = i + 1;
1403
+ if (i < actualRingSize) {
1404
+ gl.bindTexture(gl.TEXTURE_2D_ARRAY, this._streamingRingBuffer);
1405
+ this._uploadLayer(gl, i, width, height, astcFormat, frameData);
1406
+ this._streamingRingSlots[i] = i;
1407
+ }
1408
+ }
1409
+ this._textureArray = this._streamingRingBuffer;
1410
+ this._startBackgroundDecompression();
1411
+ this._log(`[AlphaVideoGpu] \u2713 Streaming ready: ${metadata.frameCount} frames @ ${metadata.frameRate} fps`);
1412
+ }
1413
+ // ======== Private: Background Decode ========
1414
+ /**
1415
+ * Reads and decodes ahead of playback, and catches up to a seek target, in slices of
1416
+ * DECODE_SLICE_MS so a long catch-up doesn't hold up drawing or input. A seek during a read
1417
+ * interrupts it (readLayer returns null) and the loop carries on from the new position.
1418
+ */
1419
+ _startBackgroundDecompression() {
1420
+ const stream = this._layerStream;
1421
+ if (!stream || this._backgroundDecodeStream === stream) return;
1422
+ this._backgroundDecodeStream = stream;
1423
+ const decompressLoop = async () => {
1424
+ var _a;
1425
+ const layerCount = this._streamingLayerCount;
1426
+ const aheadLimit = this._streamingPrefetchAhead;
1427
+ let sliceEnd = performance.now() + DECODE_SLICE_MS;
1428
+ try {
1429
+ while (!this._streamingCancelled && this._layerStream === stream && stream.position < layerCount) {
1430
+ if (performance.now() >= sliceEnd) {
1431
+ await yieldToEventLoop();
1432
+ sliceEnd = performance.now() + DECODE_SLICE_MS;
1433
+ } else if (stream.skipping) {
1434
+ await stream.skip(sliceEnd);
1435
+ } else if (stream.position - this._currentFrame <= aheadLimit) {
1436
+ const frameIndex = stream.position;
1437
+ const frameData = await stream.readLayer();
1438
+ if (this._layerStream !== stream) break;
1439
+ if (!frameData) {
1440
+ if (stream.atEnd) break;
1441
+ continue;
1442
+ }
1443
+ this._streamingFrameCache.set(frameIndex, frameData);
1444
+ this._streamingDecodePos = stream.position;
1445
+ this._streamingFramesReady = stream.position;
1446
+ this._evictOldFramesFromCache(this._currentFrame);
1447
+ } else {
1448
+ await new Promise((resolve) => setTimeout(resolve, 16));
1449
+ sliceEnd = performance.now() + DECODE_SLICE_MS;
1450
+ }
1451
+ }
1452
+ } catch (error) {
1453
+ if (this._layerStream === stream && !isAbortError(error)) {
1454
+ console.error("[AlphaVideoGpu] Streaming decode failed:", error);
1455
+ this._setState("error");
1456
+ (_a = this._onError) == null ? void 0 : _a.call(this, error);
1457
+ }
1458
+ } finally {
1459
+ if (this._backgroundDecodeStream === stream) this._backgroundDecodeStream = null;
1460
+ }
1461
+ };
1462
+ decompressLoop();
1463
+ }
1464
+ // ======== Private: Ensure Frame In Ring Buffer ========
1465
+ _ensureFrameInRingBuffer(frameIndex) {
1466
+ const gl = this._gl;
1467
+ if (!gl || !this._streamingRingBuffer) return -1;
1468
+ const ringSize = this._streamingRingActualSize;
1469
+ const ringSlots = this._streamingRingSlots;
1470
+ const frameCache = this._streamingFrameCache;
1471
+ const existingSlot = ringSlots.indexOf(frameIndex);
1472
+ if (existingSlot !== -1) return existingSlot;
1473
+ const frameData = frameCache.get(frameIndex);
1474
+ if (!frameData) return -1;
1475
+ const slot = frameIndex % ringSize;
1476
+ gl.bindTexture(gl.TEXTURE_2D_ARRAY, this._streamingRingBuffer);
1477
+ this._uploadLayer(gl, slot, this._streamingWidth, this._streamingHeight, this._streamingAstcFormat, frameData);
1478
+ ringSlots[slot] = frameIndex;
1479
+ return slot;
1480
+ }
1481
+ // ======== Private: Evict Old Frames From Cache ========
1482
+ _evictOldFramesFromCache(currentPlaybackFrame) {
1483
+ const frameCache = this._streamingFrameCache;
1484
+ const metadata = this._metadata;
1485
+ if (!metadata) return;
1486
+ const toRemove = [];
1487
+ if (this._useVramStrategy) {
1488
+ for (const frameIndex of frameCache.keys()) {
1489
+ if (frameIndex < currentPlaybackFrame - 2) toRemove.push(frameIndex);
1490
+ }
1491
+ if (frameCache.size - toRemove.length > 5) {
1492
+ const sorted = Array.from(frameCache.keys()).sort((a, b) => a - b);
1493
+ for (const frameIndex of sorted) {
1494
+ if (frameIndex < currentPlaybackFrame && !toRemove.includes(frameIndex)) {
1495
+ toRemove.push(frameIndex);
1496
+ if (frameCache.size - toRemove.length <= 5) break;
1497
+ }
1498
+ }
1499
+ }
1500
+ } else {
1501
+ const minFrame = currentPlaybackFrame - 2;
1502
+ const maxFrame = currentPlaybackFrame + this._streamingPrefetchAhead;
1503
+ for (const frameIndex of frameCache.keys()) {
1504
+ if (frameIndex < minFrame || frameIndex > maxFrame) toRemove.push(frameIndex);
1505
+ }
1506
+ }
1507
+ for (const frameIndex of toRemove) frameCache.delete(frameIndex);
1508
+ if (frameCache.size > this._streamingPrefetchAhead + 10) {
1509
+ console.warn(`[AlphaVideoGpu] Frame cache too large: ${frameCache.size} frames (max: ${this._streamingPrefetchAhead}), playback: ${currentPlaybackFrame}`);
1510
+ }
1511
+ }
1512
+ // ======== Private: Handle Streaming Loop ========
1513
+ _handleStreamingLoop() {
1514
+ if (!this._layerStream) return;
1515
+ this._streamingLoopCount++;
1516
+ this._log(`[AlphaVideoGpu] \u{1F504} Loop #${this._streamingLoopCount}`);
1517
+ this._moveStreamTo(0);
1518
+ }
1519
+ /** Starts the streaming decoder, unless it is already running. */
1520
+ _kickStreamingDecode() {
1521
+ if (!this._streamingMode || !this._layerStream || this._streamingCancelled) return;
1522
+ this._startBackgroundDecompression();
1523
+ }
1524
+ /**
1525
+ * Points the streaming decoder at target. Frames from target up to the decoder that are all
1526
+ * still buffered are kept; otherwise decoding carries on or starts at a seek point, whichever
1527
+ * reaches target sooner (see ZstdLayerStream.moveTo).
1528
+ */
1529
+ _moveStreamTo(target) {
1530
+ if (!this._layerStream) return;
1531
+ const decodePos = this._streamingDecodePos;
1532
+ let buffered = target < decodePos;
1533
+ for (let f = target; buffered && f < decodePos; f++) {
1534
+ buffered = this._streamingFrameCache.has(f) || this._streamingRingSlots.includes(f);
1535
+ }
1536
+ if (!buffered) this._decodeFrom(target);
1537
+ }
1538
+ /** Stops the stream's reads and frees the zstd decoder's WASM buffers. */
1539
+ _closeLayerStream() {
1540
+ var _a;
1541
+ (_a = this._layerStream) == null ? void 0 : _a.close();
1542
+ this._layerStream = null;
1543
+ }
1544
+ /** Drops the decoded frames and has the decoder produce target next. */
1545
+ _decodeFrom(target) {
1546
+ const stream = this._layerStream;
1547
+ if (!stream) return;
1548
+ this._streamingFrameCache.clear();
1549
+ stream.moveTo(target);
1550
+ this._streamingDecodePos = target;
1551
+ this._streamingFramesReady = target;
1552
+ this._kickStreamingDecode();
1553
+ }
1554
+ /** Draws the shown frame once it is decoded, for a seek while not playing. */
1555
+ _drawWhenReady() {
1556
+ if (this._owedFrameId !== null) cancelAnimationFrame(this._owedFrameId);
1557
+ this._owedFrameId = null;
1558
+ const pauseDecodeAfter = this._state === "paused";
1559
+ this._streamingCancelled = false;
1560
+ this._kickStreamingDecode();
1561
+ const attempt = () => {
1562
+ this._owedFrameId = null;
1563
+ if (this._state === "playing") return;
1564
+ if (this._render()) {
1565
+ if (pauseDecodeAfter && this._state === "paused") this._streamingCancelled = true;
1566
+ return;
1567
+ }
1568
+ this._owedFrameId = requestAnimationFrame(attempt);
1569
+ };
1570
+ attempt();
1571
+ }
1572
+ // ======== Private: Render Frame ========
1573
+ /** Draws the current frame; false when it isn't decoded yet, leaving the last one showing. */
1574
+ _render() {
1575
+ const gl = this._gl;
1576
+ const metadata = this._metadata;
1577
+ const arrayProgram = this._arrayProgram;
1578
+ if (!gl || !metadata || !arrayProgram || !this._textureArray) return false;
1579
+ const currentFrame = this._currentFrame;
1580
+ if (currentFrame >= metadata.frameCount) return false;
1581
+ const prepareTarget = () => {
1582
+ if (this._usingSharedGL && getSharedGLResources()) {
1583
+ const frameWidth = metadata.frameWidth;
1584
+ const frameHeight = metadata.frameHeight;
1585
+ ensureSharedCanvasSize(frameWidth, frameHeight);
1586
+ gl.viewport(0, 0, frameWidth, frameHeight);
1587
+ }
1588
+ gl.clearColor(0, 0, 0, 0);
1589
+ gl.clear(gl.COLOR_BUFFER_BIT);
1590
+ };
1591
+ const gl2 = gl;
1592
+ let layerIndex;
1593
+ if (this._streamingMode) {
1594
+ const slot = currentFrame < this._streamingFramesReady ? this._ensureFrameInRingBuffer(currentFrame) : -1;
1595
+ if (slot === -1) return false;
1596
+ layerIndex = slot;
1597
+ for (let i = 1; i <= 3 && i < this._streamingRingActualSize; i++) {
1598
+ const nextFrame = currentFrame + i;
1599
+ if (nextFrame < metadata.frameCount) {
1600
+ this._ensureFrameInRingBuffer(nextFrame);
1601
+ }
1602
+ }
1603
+ } else if (this._ramHeavyMode && this._ramFrameData) {
1604
+ if (currentFrame !== this._ramUploadedFrame) {
1605
+ const offset = currentFrame * this._ramBytesPerFrame;
1606
+ const frameData = new Uint8Array(
1607
+ this._ramFrameData.buffer,
1608
+ this._ramFrameData.byteOffset + offset,
1609
+ this._ramBytesPerFrame
1610
+ );
1611
+ gl2.bindTexture(gl2.TEXTURE_2D_ARRAY, this._textureArray);
1612
+ this._uploadLayer(gl2, 0, this._ramWidth, this._ramHeight, this._ramAstcFormat, frameData);
1613
+ this._ramUploadedFrame = currentFrame;
1614
+ }
1615
+ layerIndex = 0;
1616
+ } else {
1617
+ layerIndex = currentFrame;
1618
+ }
1619
+ prepareTarget();
1620
+ gl2.useProgram(arrayProgram);
1621
+ gl2.activeTexture(gl2.TEXTURE0);
1622
+ gl2.bindTexture(gl2.TEXTURE_2D_ARRAY, this._textureArray);
1623
+ gl2.uniform1i(gl2.getUniformLocation(arrayProgram, "u_textureArray"), 0);
1624
+ gl2.uniform1f(gl2.getUniformLocation(arrayProgram, "u_layer"), layerIndex);
1625
+ const posLoc = gl2.getAttribLocation(arrayProgram, "a_position");
1626
+ gl2.bindBuffer(gl2.ARRAY_BUFFER, this._positionBuffer);
1627
+ gl2.enableVertexAttribArray(posLoc);
1628
+ gl2.vertexAttribPointer(posLoc, 2, gl2.FLOAT, false, 0, 0);
1629
+ const texLoc = gl2.getAttribLocation(arrayProgram, "a_texCoord");
1630
+ gl2.bindBuffer(gl2.ARRAY_BUFFER, this._texCoordBuffer);
1631
+ gl2.enableVertexAttribArray(texLoc);
1632
+ gl2.vertexAttribPointer(texLoc, 2, gl2.FLOAT, false, 0, 0);
1633
+ gl2.drawArrays(gl2.TRIANGLES, 0, 6);
1634
+ if (this._usingSharedGL && this._ctx2d) {
1635
+ const sharedRes = getSharedGLResources();
1636
+ if (sharedRes) {
1637
+ const canvas = this._canvas;
1638
+ const ctx2d = this._ctx2d;
1639
+ const sharedCanvas = sharedRes.canvas;
1640
+ const frameWidth = metadata.frameWidth;
1641
+ const frameHeight = metadata.frameHeight;
1642
+ const srcY = sharedCanvas.height - frameHeight;
1643
+ ctx2d.clearRect(0, 0, canvas.width, canvas.height);
1644
+ ctx2d.drawImage(
1645
+ sharedCanvas,
1646
+ 0,
1647
+ srcY,
1648
+ frameWidth,
1649
+ frameHeight,
1650
+ 0,
1651
+ 0,
1652
+ canvas.width,
1653
+ canvas.height
1654
+ );
1655
+ }
1656
+ }
1657
+ return true;
1658
+ }
1659
+ // ======== Private: Animation Loop ========
1660
+ _startAnimationLoop() {
1661
+ if (this._animationFrameId) return;
1662
+ const metadata = this._metadata;
1663
+ if (!metadata) return;
1664
+ const frameInterval = 1e3 / metadata.frameRate;
1665
+ const animate = (timestamp) => {
1666
+ var _a, _b;
1667
+ this._animationFrameId = null;
1668
+ if (this._state !== "playing") return;
1669
+ const elapsed = timestamp - this._lastFrameTime;
1670
+ if (elapsed >= frameInterval / this._playbackSpeed && this._render()) {
1671
+ this._lastFrameTime = timestamp - elapsed % (frameInterval / this._playbackSpeed);
1672
+ if (this._frameEvents) (_a = this._onFrameUpdate) == null ? void 0 : _a.call(this, this._currentFrame, metadata.frameCount);
1673
+ if (this._currentFrame + 1 < metadata.frameCount) {
1674
+ this._currentFrame++;
1675
+ } else if (this._loop) {
1676
+ this._currentFrame = 0;
1677
+ if (this._streamingMode && this._streamingFrameCache) {
1678
+ this._handleStreamingLoop();
1679
+ }
1680
+ } else {
1681
+ this._ended = true;
1682
+ this._setState("stopped");
1683
+ (_b = this._onFinished) == null ? void 0 : _b.call(this);
1684
+ return;
1685
+ }
1686
+ }
1687
+ this._animationFrameId = requestAnimationFrame(animate);
1688
+ };
1689
+ this._animationFrameId = requestAnimationFrame(animate);
1690
+ }
1691
+ _stopAnimationLoop() {
1692
+ if (this._animationFrameId) {
1693
+ cancelAnimationFrame(this._animationFrameId);
1694
+ this._animationFrameId = null;
1695
+ }
1696
+ }
1697
+ };
1698
+
1699
+ // src/zstddec-stream-bundled.js
1700
+ function _arrayLikeToArray(r, a) {
1701
+ (null == a || a > r.length) && (a = r.length);
1702
+ for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
1703
+ return n;
1704
+ }
1705
+ function _createForOfIteratorHelperLoose(r, e) {
1706
+ var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
1707
+ if (t) return (t = t.call(r)).next.bind(t);
1708
+ if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
1709
+ t && (r = t);
1710
+ var o = 0;
1711
+ return function() {
1712
+ return o >= r.length ? {
1713
+ done: true
1714
+ } : {
1715
+ done: false,
1716
+ value: r[o++]
1717
+ };
1718
+ };
1719
+ }
1720
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
1721
+ }
1722
+ function _unsupportedIterableToArray(r, a) {
1723
+ if (r) {
1724
+ if ("string" == typeof r) return _arrayLikeToArray(r, a);
1725
+ var t = {}.toString.call(r).slice(8, -1);
1726
+ return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
1727
+ }
1728
+ }
1729
+ var _init;
1730
+ var instance;
1731
+ var heap;
1732
+ var heapView;
1733
+ var IMPORT_OBJECT = {
1734
+ env: {
1735
+ emscripten_notify_memory_growth: function emscripten_notify_memory_growth(_) {
1736
+ heap = new Uint8Array(instance.exports.memory.buffer);
1737
+ heapView = new DataView(heap.buffer);
1738
+ }
1739
+ }
1740
+ };
1741
+ var ZSTDDecoder = /* @__PURE__ */ (function() {
1742
+ function ZSTDDecoder2() {
1743
+ }
1744
+ var _proto = ZSTDDecoder2.prototype;
1745
+ _proto.init = function init() {
1746
+ if (_init) return _init;
1747
+ if (typeof fetch !== "undefined") {
1748
+ _init = fetch("data:application/wasm;base64," + wasm).then(function(response) {
1749
+ return response.arrayBuffer();
1750
+ }).then(function(arrayBuffer) {
1751
+ return WebAssembly.instantiate(arrayBuffer, IMPORT_OBJECT);
1752
+ }).then(this._init);
1753
+ } else {
1754
+ _init = WebAssembly.instantiate(Buffer.from(wasm, "base64"), IMPORT_OBJECT).then(this._init);
1755
+ }
1756
+ return _init;
1757
+ };
1758
+ _proto._init = function _init2(result) {
1759
+ instance = result.instance;
1760
+ IMPORT_OBJECT.env.emscripten_notify_memory_growth(0);
1761
+ };
1762
+ _proto.decode = function decode(array, uncompressedSize) {
1763
+ if (uncompressedSize === void 0) {
1764
+ uncompressedSize = 0;
1765
+ }
1766
+ if (!instance) throw new Error("ZSTDDecoder: Await .init() before decoding.");
1767
+ var compressedSize = array.byteLength;
1768
+ var compressedPtr = instance.exports.malloc(compressedSize);
1769
+ heap.set(array, compressedPtr);
1770
+ if (uncompressedSize === 0) {
1771
+ uncompressedSize = Number(instance.exports.ZSTD_findDecompressedSize(compressedPtr, compressedSize));
1772
+ }
1773
+ if (uncompressedSize === -1) {
1774
+ instance.exports.free(compressedPtr);
1775
+ var parts = [];
1776
+ for (var _iterator = _createForOfIteratorHelperLoose(this.decodeStreaming([array])), _step; !(_step = _iterator()).done; ) {
1777
+ var out = _step.value;
1778
+ parts.push(out);
1779
+ }
1780
+ if (parts.length === 1) {
1781
+ return parts[0];
1782
+ }
1783
+ var fullByteLength = parts.reduce(function(acc, arr) {
1784
+ return acc + arr.byteLength;
1785
+ }, 0);
1786
+ var result = new Uint8Array(fullByteLength);
1787
+ var offset = 0;
1788
+ for (var _i = 0, _parts = parts; _i < _parts.length; _i++) {
1789
+ var part = _parts[_i];
1790
+ result.set(part, offset);
1791
+ offset += part.byteLength;
1792
+ }
1793
+ return result;
1794
+ }
1795
+ var uncompressedPtr = instance.exports.malloc(uncompressedSize);
1796
+ var actualSize = instance.exports.ZSTD_decompress(uncompressedPtr, uncompressedSize, compressedPtr, compressedSize);
1797
+ var dec = heap.slice(uncompressedPtr, uncompressedPtr + actualSize);
1798
+ instance.exports.free(compressedPtr);
1799
+ instance.exports.free(uncompressedPtr);
1800
+ return dec;
1801
+ };
1802
+ _proto.createStreamingDecoder = function createStreamingDecoder() {
1803
+ if (!instance) throw new Error("ZSTDDecoder: Await .init() before decoding.");
1804
+ var buffOutSize = instance.exports.ZSTD_DStreamOutSize();
1805
+ var buffOut = instance.exports.malloc(buffOutSize);
1806
+ var dctxPtr = instance.exports.ZSTD_createDCtx();
1807
+ var sizeOfPointer = 4;
1808
+ var sizeOfSizeT = 4;
1809
+ var inputPtr = instance.exports.malloc(sizeOfPointer + sizeOfSizeT * 2);
1810
+ var outputPtr = instance.exports.malloc(sizeOfPointer + sizeOfSizeT * 2);
1811
+ var lastRet = 0;
1812
+ var freed = false;
1813
+ function* decode(array) {
1814
+ if (freed) throw new Error("ZSTDDecoder: the streaming decoder was freed");
1815
+ var compressedPtr = instance.exports.malloc(array.byteLength);
1816
+ try {
1817
+ heap.set(array, compressedPtr);
1818
+ heapView.setInt32(inputPtr, compressedPtr, true);
1819
+ heapView.setInt32(inputPtr + sizeOfPointer, array.byteLength, true);
1820
+ heapView.setInt32(inputPtr + sizeOfPointer + sizeOfSizeT, 0, true);
1821
+ var outputFull = false;
1822
+ while (outputFull || heapView.getUint32(inputPtr + sizeOfPointer + sizeOfSizeT, true) < heapView.getUint32(inputPtr + sizeOfPointer, true)) {
1823
+ heapView.setInt32(outputPtr, buffOut, true);
1824
+ heapView.setInt32(outputPtr + sizeOfPointer, buffOutSize, true);
1825
+ heapView.setInt32(outputPtr + sizeOfPointer + sizeOfSizeT, 0, true);
1826
+ lastRet = instance.exports.ZSTD_decompressStream(dctxPtr, outputPtr, inputPtr);
1827
+ if (lastRet < 0) throw new Error("zstd: corrupt or unsupported data");
1828
+ var outputPos = heapView.getUint32(outputPtr + sizeOfPointer + sizeOfSizeT, true);
1829
+ outputFull = outputPos === buffOutSize && lastRet !== 0;
1830
+ if (outputPos > 0) yield heap.slice(buffOut, buffOut + outputPos);
1831
+ if (freed) return;
1832
+ }
1833
+ } finally {
1834
+ instance.exports.free(compressedPtr);
1835
+ }
1836
+ }
1837
+ return {
1838
+ decode,
1839
+ finished: function finished() {
1840
+ return lastRet === 0;
1841
+ },
1842
+ free: function free() {
1843
+ if (freed) return;
1844
+ freed = true;
1845
+ instance.exports.ZSTD_freeDCtx(dctxPtr);
1846
+ instance.exports.free(buffOut);
1847
+ instance.exports.free(inputPtr);
1848
+ instance.exports.free(outputPtr);
1849
+ }
1850
+ };
1851
+ };
1852
+ _proto.decodeStreaming = function* decodeStreaming(arrays) {
1853
+ var stream = this.createStreamingDecoder();
1854
+ try {
1855
+ for (var _iterator2 = _createForOfIteratorHelperLoose(arrays), _step2; !(_step2 = _iterator2()).done; ) {
1856
+ yield* stream.decode(_step2.value);
1857
+ }
1858
+ if (!stream.finished()) throw new Error("Incomplete stream, more data expected.");
1859
+ } finally {
1860
+ stream.free();
1861
+ }
1862
+ };
1863
+ return ZSTDDecoder2;
1864
+ })();
1865
+ var wasm = "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QQhyIQBBACEDA0AgACADTQ0DIANBQGshAwwACwALQWwhCiAOIA5B/ABqIA5B+ABqIAUgBhAGIgJBiH9LDQEgDigCeCIDIARLDQEgACAOIA4oAnwgByAIIAMgDRAlIAEgADYCACACIQoMAQtBbCEKCyAOQYABaiQAIAoLcAEEfyAAQgA3AgAgAgRAIAFBCmohBiABKAIEIQRBACECQQAhAQNAIAEgBHZFBEAgAiAGIAFBA3RqLQAAIgUgAiAFSxshAiABQQFqIQEgAyAFQRZLaiEDDAELCyAAIAI2AgQgACADQQggBGt0NgIACwuuAQEEfyABIAIoAgQiAyABKAIEaiIENgIEIAAgA0ECdEGwGWooAgAgASgCAEEAIARrdnE2AgACQCAEQSFPBEAgAUGwGjYCCAwBCyABKAIIIgMgASgCEE8EQCABEAwMAQsgAyABKAIMIgVGDQAgASADIAMgBWsgBEEDdiIGIAMgBmsgBUkbIgNrIgU2AgggASAEIANBA3RrNgIEIAEgBSgAADYCAAsgACACQQhqNgIEC40CAgN/AX4gACACaiEEAkACQCACQQhOBEAgACABayICQXlIDQELA0AgACAETw0CIAAgAS0AADoAACAAQQFqIQAgAUEBaiEBDAALAAsCQAJAIAJBb0sNACAAIARBIGsiAksNACABKQAAIQYgACABKQAINwAIIAAgBjcAACACIABrIgVBEU4EQCAAQRBqIQAgASEDA0AgAykAECEGIAAgAykAGDcACCAAIAY3AAAgAykAICEGIAAgAykAKDcAGCAAIAY3ABAgA0EgaiEDIABBIGoiACACSQ0ACwsgASAFaiEBDAELIAAhAgsDQCACIARPDQEgAiABLQAAOgAAIAJBAWohAiABQQFqIQEMAAsACwvfAQEGf0G6fyEKAkAgAigCBCIIIAIoAgAiCWoiDSABIABrSw0AQWwhCiAJIAQgAygCACILa0sNACAAIAlqIgQgAigCCCIMayECIAAgAUEgayIBIAsgCUEAEDMgAyAJIAtqNgIAAkACQCAEIAVrIAxPBEAgAiEFDAELIAwgBCAGa0sNAiAHIAcgAiAFayIDaiICIAhqTwRAIAhFDQIgBCACIAj8CgAADAILQQAgA2siAARAIAQgAiAA/AoAAAsgAyAIaiEIIAQgA2shBAsgBCABIAUgCEEBEDMLIA0hCgsgCgvrAQEGf0G6fyELAkAgAygCBCIJIAMoAgAiCmoiDSABIABrSw0AIAUgBCgCACIFayAKSQRAQWwPCyADKAIIIQwgACAFSyAFIApqIg4gAEtxDQAgACAKaiIDIAxrIQEgACAFIAoQLyAEIA42AgACQAJAIAMgBmsgDE8EQCABIQYMAQtBbCELIAwgAyAHa0sNAiAIIAggASAGayIAaiIBIAlqTwRAIAlFDQIgAyABIAn8CgAADAILQQAgAGsiBARAIAMgASAE/AoAAAsgACAJaiEJIAMgAGshAwsgAyACIAYgCUEBEDMLIA0hCwsgCwurAgECfyACQR9xIQMgASEEA0AgA0EISUUEQCADQQhrIQMgBCkAAELP1tO+0ser2UJ+Qh+JQoeVr6+Ytt6bnn9+IACFQhuJQoeVr6+Ytt6bnn9+Qp2jteqDsY2K+gB9IQAgBEEIaiEEDAELCyABIAJBGHFqIQEgAkEHcSIDQQRJBH8gAQUgA0EEayEDIAE1AABCh5Wvr5i23puef34gAIVCF4lCz9bTvtLHq9lCfkL5893xmfaZqxZ8IQAgAUEEagshBANAIAMEQCADQQFrIQMgBDEAAELFz9my8eW66id+IACFQguJQoeVr6+Ytt6bnn9+IQAgBEEBaiEEDAELCyAAQiGIIACFQs/W077Sx6vZQn4iAEIdiCAAhUL5893xmfaZqxZ+IgBCIIggAIUL4QQCAX4CfyAAIANqIQcCQCADQQdMBEADQCAAIAdPDQIgACACLQAAOgAAIABBAWohACACQQFqIQIMAAsACyAEBEACQCAAIAJrIgZBB00EQCAAIAItAAA6AAAgACACLQABOgABIAAgAi0AAjoAAiAAIAItAAM6AAMgACACIAZBAnQiBkHgGmooAgBqIgIoAAA2AAQgAiAGQYAbaigCAGshAgwBCyAAIAIpAAA3AAALIANBCGshAyACQQhqIQIgAEEIaiEACyABIAdPBEAgACADaiEBIARFIAAgAmtBD0pyRQRAA0AgACACKQAANwAAIAJBCGohAiAAQQhqIgAgAUkNAAwDCwALIAIpAAAhBSAAIAIpAAg3AAggACAFNwAAIANBEUkNASAAQRBqIQADQCACKQAQIQUgACACKQAYNwAIIAAgBTcAACACKQAgIQUgACACKQAoNwAYIAAgBTcAECACQSBqIQIgAEEgaiIAIAFJDQALDAELAkAgACABSwRAIAAhAQwBCyABIABrIQYCQCAERSAAIAJrQQ9KckUEQCACIQMDQCAAIAMpAAA3AAAgA0EIaiEDIABBCGoiACABSQ0ACwwBCyACKQAAIQUgACACKQAINwAIIAAgBTcAACAGQRFIDQAgAEEQaiEAIAIhAwNAIAMpABAhBSAAIAMpABg3AAggACAFNwAAIAMpACAhBSAAIAMpACg3ABggACAFNwAQIANBIGohAyAAQSBqIgAgAUkNAAsLIAIgBmohAgsDQCABIAdPDQEgASACLQAAOgAAIAFBAWohASACQQFqIQIMAAsACwtOAQJ/IwBBEGsiBCQAIARBADYCCCAEQgA3AwACQCAEEBciBUUEQEFAIQMMAQsgBSAAIAEgAiADIAUQIRAiIQMgBRAZGgsgBEEQaiQAIAMLrwgCAn8BfiMAQRBrIgYkAAJAIAAgBBA2IARHBEBBuH8hBQwBCyAAIAEgAhAgIAAgACkD8OkBIAStfDcD8OkBQX8hBQJAAkACQAJAAkACQAJAAkAgACgChOoBDggAAQIDAwQFBggLAkAgACgC7OoBIgUNAEEAIQUgAygAAEFwcUHQ1LTCAUcNACAEBEAgAEGo7AVqIAMgBPwKAAALIABBBjYChOoBIABBCCAEazYCvOkBDAgLIAAgAyAEIAUQHCIFNgLo6gEgBUGIf0sNByAEBEAgAEGo7AVqIAMgBPwKAAALIABBATYChOoBIAAgBSAEazYCvOkBQQAhBQwHCyAAQajsBWohASAAKALo6gEhAiAEBEAgASACIARraiADIAT8CgAACyAAIAEgAhAmIgVBiH9LDQYgAEECNgKE6gEgAEEDNgK86QFBACEFDAYLIANBAyAGQQRqEB8iAUGIf0sEQCABIQUMBgtBbCEFIAEgACgC0OkBSw0FIAAgATYCvOkBIAAgBigCBDYCgOoBIAAgBigCDDYCjOsBIAYoAgghAiAAAn9BBEEDIAIbIAENABogAgRAIAAoAuDpAQRAIABBBDYCvOkBQQUMAgsgAEEANgK86QFBAAwBCyAAQQM2ArzpAUECCzYChOoBQQAhBQwFC0FsIQUCQAJAAkACQAJAAkACQCAAKAKA6gEOAwABAgsLIAIgBEkEQEG6fyEFDAsLAkAgAUUEQCAERQ0BQbZ/IQUMDAsgBARAIAEgAyAE/AoAAAsgBEGIf00NACAEIQUMCwsgACAAKAK86QEgBGsiAjYCvOkBIAQhBQwDCwJAIAIgACgCjOsBIgVJBH9Bun8FIAENASAFRQ0FQbZ/CyEFIABBADYCvOkBDAoLIAVFDQEgASADLQAAIAX8CwAMAQsgACABIAIgAyAEQQEQJyEFC0EAIQIgAEEANgK86QEgBUGIf0sNBwsgBSAAKALQ6QFNDQFBbCEFDAYLQQAhAiAAQQA2ArzpAUEAIQULIAAgACkD+OkBIAUiA618NwP46QEgACgC9OoBBEAgAEGQ6gFqIAEgAxAoIAAoArzpASECCyAAIAEgA2o2AqzpASACDQMgACgChOoBQQRGBEAgACkDwOkBIgdCf1IEQEFsIQUgACkD+OkBIAdSDQYLIAAoAuDpAQRAIABBBTYChOoBIABBBDYCvOkBDAULIABBADYChOoBIABBADYCvOkBDAQLIABBAzYCvOkBIABBAjYChOoBDAMLIAAoAvTqAUUNASADKAAAIABBkOoBahApp0YNAUFqIQUMAwsgBARAIAAgBGtBsOwFaiADIAT8CgAACyAAQQc2AoTqASAAIAAoAKzsBTYCvOkBQQAhBQwCC0EAIQUgAEEANgKE6gEgAEEANgK86QEMAQsgAyEFCyAGQRBqJAAgBQtGAQF/IAAoAoTqAUEDa0ECTwRAIAAoArzpAQ8LIAAoArzpASECIAAoAoDqAQR/IAIFQQEgASACIAEgAkkbIgAgAEEBTRsLCwYAQYOACAsGAEGAgAgLxBACGH8CfiMAQRBrIggkACACKAIIIQ4gAigCBCEPIAIoAgAhBCABKAIEIRAgCCABKAIAIgYgASgCCCITaiIYNgIMAkAgDiAPSwRAQbh/IQMMAQsCQCAQIBNJDQACQCAAKALs6wFBAUcNACAAKAK86wFFDQBBmH8hAyAAKALw6wEgBkcNAiAAKAL46wEgE0cNAiAAKAL06wEgEEcNAgsgBiAQaiEMIAQgD2ohCSAAQfDrAWohESAPIA5rIRUgAEGo7AVqIQogAEHA6QFqIQ0gAEHY6wFqIRQgAEGE6gFqIRYgAEGE6wFqIRcgAEGA6wFqIRkgBCAOaiISIQQDQAJAIAQhBgJ/AkAgBUEBcUUEQEF/IQMCQAJAAkAgDSAKAn8CQAJAIAAoArzrAQ4FAQADBAUMCyAAKALg6wEMAQsgAEEANgLI6wEgAEEBNgK86wEgFEIANwMIIBRCADcDACARIAEoAgg2AgggESABKQIANwIAQQALIAAoAuzqARAbIQQCQCAAKAKw6wFFDQAgACgCrOsBRQ0AIAAQKgsgBEGIf0sEQCAEIQMMCgsgBARAIAQgACgC4OsBIgNrIgUgCSAGayIHSwRAIAYgCUcEQCAHBEAgAyAKaiAGIAf8CgAACyAAIAMgB2oiAzYC4OsBCyACIAIoAgQ2AgggDSAKIAMgACgC7OoBEBsiA0GIf0sNC0ECQQYgACgC7OoBGyIBIAQgASAESxsgACgC4OsBa0EDaiEDDAsLIAUEQCADIApqIAYgBfwKAAALIAAgBDYC4OsBIAUgBmohBEEAIQUMCAsCQCANKQMAIhtCf1ENACAAKALU6QFBAUYNACAbIAwgCCgCDCIEayIDrVYNACASIBUgACgC7OoBEB4iBSAVSw0AIAAgBCADIBIgBSAAECEQIiIDQYh/Sw0KIAggAyAEakEAIAQbNgIMIABBADYCvOsBIABBADYCvOkBIAUgEmohBEEBIQUMCAsCQCAAKALs6wFBAUcNACAAKALU6QFBAUYNACANKQMAIhtCf1ENACAbIAwgCCgCDGutVg0JCyAAIAAQIRAjAn8CQCAAKALs6gENACAKKAAAQXBxQdDUtMIBRw0AIAAoAKzsBSEFQQcMAQsgACAKIAAoAuDrARAmIgNBiH9LDQpBAyEFQQILIQQgACAFNgK86QEgFiAENgIAIABCgAggACkDyOkBIhsgG0KACFgbIhs3A8jpASAANQLM6wEgG1QEQEFwIQMMCgsgACgC0OkBIQUgACgCuOsBIgQEQCAAIAUgBCAEIAVLGyIFNgLQ6QELQQAhB0EAIQMgACgC7OsBRQRAQXAgDSkDACIcIBsgBUKAgAggGyAbQoCACFobpyIEIAQgBUsbQQF0rXxCQH0iGyAbIBxWGyIbpyAbQoCAgIAQWhshAwsgACgC1OsBIgsgACgCxOsBIhpqQQQgBSAFQQRNGyIEIANqIgVBA2xPBEAgACgCvOwFQQFqIQcLIAAgBzYCvOwFIAQgGksgAyALS3JFIAdBgAFJcUUEQAJAAkAgACgCkOsBIgcEQCAFIAdBwOwFa00NAQwKCyAAKALA6wEgGSgCACAXKAIAEBUgAEEANgLU6wEgAEEANgLE6wEgACAFIAAoAvzqASAXKAIAEBgiBTYCwOsBIAVFDQkMAQsgACgCwOsBIQULIAAgAzYC1OsBIAAgBDYCxOsBIAAgBCAFajYC0OsBCyAAQQI2ArzrAQsgACAJIAZrIgQQNiIDRQRAIABBADYCvOsBQQEhBSAGIQQMBwsgAyAETQRAIAMgBmohBEEAIQUgACAIQQxqIAwgBiADEDoiA0GJf0kNBwwJC0EBIQUgBiAJIgRGDQYgAEEDNgK86wELIAAoArzpASILIAAoAsjrASIFayEDAkAgFigCAEEHRwRAIAAoAsTrASAFayADSQRAQWwhAwwKCyADIAkgBmsiBCADIARJGyIHRQ0EIAcEQCAAKALA6wEgBWogBiAH/AoAAAsgACgCyOsBIQUMAQsgAyAJIAZrIgQgAyAESRsiB0UNAwsgACAFIAdqNgLI6wEgBiAHagwDCyAMIAgoAgwiA2siByAAKALc6wEgACgC2OsBIgVrIgsgByALSRsiBARAIAQEQCADIAAoAtDrASAFaiAE/AoAAAsgACgC2OsBIQULIAggAyAEakEAIAMbNgIMIBQgBCAFaiIDNgIAQQEhBSAGIQQgByALSQ0EIABBAjYCvOsBQQAhBSAAKQPA6QEgACgC1OsBIgatWA0EIAAoAtDpASADaiAGTQ0EIABCADcD2OsBDAQLIAIgBiACKAIAazYCCCABIAgoAgwiBCABKAIAayIDNgIIIBEgAzYCCCARIAEpAgA3AgACQCAGIBJHIAQgGEdyRQRAIAAgACgC6OsBIgFBAWo2AujrASABQQ9IDQEgECATRgRAQbB/IQMMCAsgDiAPRw0BQa5/IQMMBwsgAEEANgLo6wELIAAoArzpASIBRQRAIAAoAuTrASEBAkACQCAAKALc6wEgACgC2OsBRgRAQQAhAyABRQ0JIAIoAggiASACKAIETwRAIABBAjYCvOsBDAILIAIgAUEBajYCCAwJCyABRQ0BC0EBIQMMBwsgAiACKAIIQQFrNgIIQQEhAyAAQQE2AuTrAQwGCyABIAAoAsjrAWtBA0EAIABBhOoBaigCAEEDRhtqIQMMBQtBACEHIAYLIQRBASEFIAMgB0sNAUEAIQUgAEEANgLI6wEgACAIQQxqIAwgACgCwOsBIAsQOiIDQYl/SQ0BDAMLC0FAIQMMAQtBun8hAwsgCEEQaiQAIAMLxwEBAn8gACgChOoBIgVBB0YhBgJAIAACfwJAIAAoAuzrAUUEQAJ/IAVBB0YEQCAAKALY6wEhAUEADAELIAAoAtTrASAAKALY6wEiAWsLIQIgACAAKALQ6wEgAWogAiADIAQQNSIEQYh/Sw0DIAQgBnJFDQEgACAAKALY6wEgBGo2AtzrAUEEDAILIAAgASgCACIFQQAgAiAFayAGGyADIAQQNSIEQYh/Sw0CIAEgASgCACAEajYCAAtBAgs2ArzrAUEAIQQLIAQLCgAgAARAEDwACwsDAAALC80SCgBBiAgLBQEAAAABAEGYCAvbBAEAAAABAAAAlgAAANgAAAB9AQAAdwAAAKoAAADNAAAAAgIAAHAAAACxAAAAxwAAABsCAABuAAAAxQAAAMIAAACEAgAAawAAAN0AAADAAAAA3wIAAGsAAAAAAQAAvQAAAHEDAABqAAAAZwEAALwAAACPBAAAbQAAAEYCAAC7AAAAIgYAAHIAAACwAgAAuwAAALAGAAB6AAAAOQMAALoAAACtBwAAiAAAANADAAC5AAAAUwgAAJYAAACcBAAAugAAABYIAACvAAAAYQUAALkAAADDBgAAygAAAIQFAAC5AAAAnwYAAMoAAAAAAAAAAQAAAAEAAAAFAAAADQAAAB0AAAA9AAAAfQAAAP0AAAD9AQAA/QMAAP0HAAD9DwAA/R8AAP0/AAD9fwAA/f8AAP3/AQD9/wMA/f8HAP3/DwD9/x8A/f8/AP3/fwD9//8A/f//Af3//wP9//8H/f//D/3//x/9//8//f//fwABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAJQAAACcAAAApAAAAKwAAAC8AAAAzAAAAOwAAAEMAAABTAAAAYwAAAIMAAAADAQAAAwIAAAMEAAADCAAAAxAAAAMgAAADQAAAA4AAAAMAAQBBoA0LFQEBAQECAgMDBAQFBwgJCgsMDQ4PEABBxA0LiwEBAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEgAAABQAAAAWAAAAGAAAABwAAAAgAAAAKAAAADAAAABAAAAAgAAAAAABAAAAAgAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAAABAEHgDgumBAEBAQECAgMDBAYHCAkKCwwNDg8QAQAAAAQAAAAIAAAAAQABAQYAAAAAAAAEAAAAABAAAAQAAAAAIAAABQEAAAAAAAAFAwAAAAAAAAUEAAAAAAAABQYAAAAAAAAFBwAAAAAAAAUJAAAAAAAABQoAAAAAAAAFDAAAAAAAAAYOAAAAAAABBRAAAAAAAAEFFAAAAAAAAQUWAAAAAAACBRwAAAAAAAMFIAAAAAAABAUwAAAAIAAGBUAAAAAAAAcFgAAAAAAACAYAAQAAAAAKBgAEAAAAAAwGABAAACAAAAQAAAAAAAAABAEAAAAAAAAFAgAAACAAAAUEAAAAAAAABQUAAAAgAAAFBwAAAAAAAAUIAAAAIAAABQoAAAAAAAAFCwAAAAAAAAYNAAAAIAABBRAAAAAAAAEFEgAAACAAAQUWAAAAAAACBRgAAAAgAAMFIAAAAAAAAwUoAAAAAAAGBEAAAAAQAAYEQAAAACAABwWAAAAAAAAJBgACAAAAAAsGAAgAADAAAAQAAAAAEAAABAEAAAAgAAAFAgAAACAAAAUDAAAAIAAABQUAAAAgAAAFBgAAACAAAAUIAAAAIAAABQkAAAAgAAAFCwAAACAAAAUMAAAAAAAABg8AAAAgAAEFEgAAACAAAQUUAAAAIAACBRgAAAAgAAIFHAAAACAAAwUoAAAAIAAEBTAAAAAAABAGAAABAAAADwYAgAAAAAAOBgBAAAAAAA0GACAAQZATC4cCAQABAQUAAAAAAAAFAAAAAAAABgQ9AAAAAAAJBf0BAAAAAA8F/X8AAAAAFQX9/x8AAAADBQUAAAAAAAcEfQAAAAAADAX9DwAAAAASBf3/AwAAABcF/f9/AAAABQUdAAAAAAAIBP0AAAAAAA4F/T8AAAAAFAX9/w8AAAACBQEAAAAQAAcEfQAAAAAACwX9BwAAAAARBf3/AQAAABYF/f8/AAAABAUNAAAAEAAIBP0AAAAAAA0F/R8AAAAAEwX9/wcAAAABBQEAAAAQAAYEPQAAAAAACgX9AwAAAAAQBf3/AAAAABwF/f//DwAAGwX9//8HAAAaBf3//wMAABkF/f//AQAAGAX9//8AQaAVC4YEAQABAQYAAAAAAAAGAwAAAAAAAAQEAAAAIAAABQUAAAAAAAAFBgAAAAAAAAUIAAAAAAAABQkAAAAAAAAFCwAAAAAAAAYNAAAAAAAABhAAAAAAAAAGEwAAAAAAAAYWAAAAAAAABhkAAAAAAAAGHAAAAAAAAAYfAAAAAAAABiIAAAAAAAEGJQAAAAAAAQYpAAAAAAACBi8AAAAAAAMGOwAAAAAABAZTAAAAAAAHBoMAAAAAAAkGAwIAABAAAAQEAAAAAAAABAUAAAAgAAAFBgAAAAAAAAUHAAAAIAAABQkAAAAAAAAFCgAAAAAAAAYMAAAAAAAABg8AAAAAAAAGEgAAAAAAAAYVAAAAAAAABhgAAAAAAAAGGwAAAAAAAAYeAAAAAAAABiEAAAAAAAEGIwAAAAAAAQYnAAAAAAACBisAAAAAAAMGMwAAAAAABAZDAAAAAAAFBmMAAAAAAAgGAwEAACAAAAQEAAAAMAAABAQAAAAQAAAEBQAAACAAAAUHAAAAIAAABQgAAAAgAAAFCgAAACAAAAULAAAAAAAABg4AAAAAAAAGEQAAAAAAAAYUAAAAAAAABhcAAAAAAAAGGgAAAAAAAAYdAAAAAAAABiAAAAAAABAGAwABAAAADwYDgAAAAAAOBgNAAAAAAA0GAyAAAAAADAYDEAAAAAALBgMIAAAAAAoGAwQAQbQZC3wBAAAAAwAAAAcAAAAPAAAAHwAAAD8AAAB/AAAA/wAAAP8BAAD/AwAA/wcAAP8PAAD/HwAA/z8AAP9/AAD//wAA//8BAP//AwD//wcA//8PAP//HwD//z8A//9/AP///wD///8B////A////wf///8P////H////z////9/AEHEGgtZAQAAAAIAAAAEAAAAAAAAAAIAAAAEAAAACAAAAAAAAAABAAAAAgAAAAEAAAAEAAAABAAAAAQAAAAEAAAACAAAAAgAAAAIAAAABwAAAAgAAAAJAAAACgAAAAsAQaAbCwOgDwE=";
1866
+
1867
+ // src/react.tsx
1868
+ var AlphaVideoGpuPlayer = (0, import_react.forwardRef)(({
1869
+ src,
1870
+ cacheKey,
1871
+ headers,
1872
+ storage,
1873
+ maxStorageBytes,
1874
+ width = 300,
1875
+ height = 300,
1876
+ className,
1877
+ style,
1878
+ autoPlay = true,
1879
+ loop = true,
1880
+ playbackSpeed = 1,
1881
+ paused = false,
1882
+ stream = true,
1883
+ streamingPrefetchAhead,
1884
+ memoryStrategy,
1885
+ verbose = false,
1886
+ onLoad,
1887
+ onStateChange,
1888
+ onFrameUpdate,
1889
+ onFinished,
1890
+ onError
1891
+ }, ref) => {
1892
+ const canvasRef = (0, import_react.useRef)(null);
1893
+ const coreRef = (0, import_react.useRef)(null);
1894
+ const loadedSrcRef = (0, import_react.useRef)(null);
1895
+ const headersRef = (0, import_react.useRef)(headers);
1896
+ headersRef.current = headers;
1897
+ (0, import_react.useImperativeHandle)(ref, () => ({
1898
+ play: () => {
1899
+ var _a;
1900
+ return (_a = coreRef.current) == null ? void 0 : _a.play();
1901
+ },
1902
+ pause: () => {
1903
+ var _a;
1904
+ return (_a = coreRef.current) == null ? void 0 : _a.pause();
1905
+ },
1906
+ stop: () => {
1907
+ var _a;
1908
+ return (_a = coreRef.current) == null ? void 0 : _a.stop();
1909
+ },
1910
+ seekToFrame: (frame) => {
1911
+ var _a;
1912
+ return (_a = coreRef.current) == null ? void 0 : _a.seekToFrame(frame);
1913
+ },
1914
+ seekToTime: (seconds) => {
1915
+ var _a;
1916
+ return (_a = coreRef.current) == null ? void 0 : _a.seekToTime(seconds);
1917
+ }
1918
+ }), []);
1919
+ (0, import_react.useEffect)(() => {
1920
+ const canvas = canvasRef.current;
1921
+ if (!canvas || coreRef.current) return;
1922
+ coreRef.current = new KTX2PlayerCore(canvas, {
1923
+ autoPlay,
1924
+ loop,
1925
+ playbackSpeed,
1926
+ stream,
1927
+ streamingPrefetchAhead,
1928
+ memoryStrategy,
1929
+ verbose,
1930
+ storage,
1931
+ maxStorageBytes,
1932
+ ZSTDDecoderClass: ZSTDDecoder,
1933
+ onStateChange,
1934
+ onLoad,
1935
+ onFrameUpdate,
1936
+ onFinished,
1937
+ onError
1938
+ });
1939
+ return () => {
1940
+ var _a;
1941
+ (_a = coreRef.current) == null ? void 0 : _a.destroy();
1942
+ coreRef.current = null;
1943
+ loadedSrcRef.current = null;
1944
+ };
1945
+ }, []);
1946
+ (0, import_react.useEffect)(() => {
1947
+ var _a;
1948
+ (_a = coreRef.current) == null ? void 0 : _a.updateCallbacks({ onStateChange, onLoad, onFrameUpdate, onFinished, onError });
1949
+ }, [onStateChange, onLoad, onFrameUpdate, onFinished, onError]);
1950
+ (0, import_react.useEffect)(() => {
1951
+ const core = coreRef.current;
1952
+ if (!core || !src) return;
1953
+ const identity = typeof src === "string" && cacheKey || src;
1954
+ if (loadedSrcRef.current === identity) return;
1955
+ loadedSrcRef.current = identity;
1956
+ core.setSource(src, { cacheKey, headers: headersRef.current });
1957
+ return () => {
1958
+ loadedSrcRef.current = null;
1959
+ core.resetSource();
1960
+ };
1961
+ }, [typeof src === "string" && cacheKey || src]);
1962
+ (0, import_react.useEffect)(() => {
1963
+ if (coreRef.current) coreRef.current.verbose = verbose;
1964
+ }, [verbose]);
1965
+ (0, import_react.useEffect)(() => {
1966
+ if (coreRef.current) coreRef.current.playbackSpeed = playbackSpeed;
1967
+ }, [playbackSpeed]);
1968
+ (0, import_react.useEffect)(() => {
1969
+ if (coreRef.current) coreRef.current.loop = loop;
1970
+ }, [loop]);
1971
+ (0, import_react.useEffect)(() => {
1972
+ var _a;
1973
+ (_a = coreRef.current) == null ? void 0 : _a.setPaused(paused);
1974
+ }, [paused]);
1975
+ const canvasStyle = (0, import_react.useMemo)(() => ({
1976
+ display: "block",
1977
+ ...style
1978
+ }), [style]);
1979
+ return /* @__PURE__ */ import_react.default.createElement(
1980
+ "canvas",
1981
+ {
1982
+ ref: canvasRef,
1983
+ width,
1984
+ height,
1985
+ className,
1986
+ style: canvasStyle
1987
+ }
1988
+ );
1989
+ });
1990
+ AlphaVideoGpuPlayer.displayName = "AlphaVideoGpuPlayer";
1991
+ // Annotate the CommonJS export names for ESM import in node:
1992
+ 0 && (module.exports = {
1993
+ AlphaVideoGpuPlayer
1994
+ });