alpha-video-gpu-web 0.0.0-stage → 1.0.0

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