jassub 2.2.6 → 2.3.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.
@@ -1,4 +1,4 @@
1
- const IS_FIREFOX = navigator.userAgent.toLowerCase().includes('firefox');
1
+ import { IS_FIREFOX } from "./util.js";
2
2
  const THREAD_COUNT = !IS_FIREFOX && self.crossOriginIsolated ? Math.min(Math.max(1, navigator.hardwareConcurrency - 2), 8) : 1;
3
3
  // @ts-expect-error new experimental API
4
4
  const SUPPORTS_GROWTH = !!WebAssembly.Memory.prototype.toResizableBuffer;
@@ -147,6 +147,7 @@ const TEX_ARRAY_SIZE = 64; // Fixed layer count
147
147
  const TEX_INITIAL_SIZE = 256; // Initial width/height
148
148
  const MAX_INSTANCES = 256; // Maximum instances per draw call
149
149
  export class WebGL2Renderer {
150
+ canvas = null;
150
151
  gl = null;
151
152
  program = null;
152
153
  vao = null;
@@ -171,89 +172,87 @@ export class WebGL2Renderer {
171
172
  this.instanceColorData = new Float32Array(MAX_INSTANCES * 4);
172
173
  this.instanceTexLayerData = new Float32Array(MAX_INSTANCES);
173
174
  }
174
- setCanvas(canvas, width, height) {
175
+ _scheduledResize;
176
+ resizeCanvas(width, height) {
175
177
  // WebGL2 doesn't allow 0-sized canvases
176
178
  if (width <= 0 || height <= 0)
177
179
  return;
178
- canvas.width = width;
179
- canvas.height = height;
180
+ this._scheduledResize = { width, height };
181
+ }
182
+ setCanvas(canvas) {
183
+ this.canvas = canvas;
184
+ this.gl = canvas.getContext('webgl2', {
185
+ alpha: true,
186
+ premultipliedAlpha: true,
187
+ antialias: false,
188
+ depth: false,
189
+ preserveDrawingBuffer: false,
190
+ stencil: false,
191
+ desynchronized: true,
192
+ powerPreference: 'high-performance'
193
+ });
180
194
  if (!this.gl) {
181
- this.gl = canvas.getContext('webgl2', {
182
- alpha: true,
183
- premultipliedAlpha: true,
184
- antialias: false,
185
- depth: false,
186
- preserveDrawingBuffer: false,
187
- stencil: false,
188
- desynchronized: true,
189
- powerPreference: 'high-performance'
190
- });
191
- if (!this.gl) {
192
- throw new Error('Could not get WebGL2 context');
193
- }
194
- // Create shaders
195
- const vertexShader = this.createShader(this.gl.VERTEX_SHADER, VERTEX_SHADER);
196
- const fragmentShader = this.createShader(this.gl.FRAGMENT_SHADER, FRAGMENT_SHADER);
197
- if (!vertexShader || !fragmentShader) {
198
- throw new Error('Failed to create shaders');
199
- }
200
- // Create program
201
- this.program = this.gl.createProgram();
202
- this.gl.attachShader(this.program, vertexShader);
203
- this.gl.attachShader(this.program, fragmentShader);
204
- this.gl.linkProgram(this.program);
205
- if (!this.gl.getProgramParameter(this.program, this.gl.LINK_STATUS)) {
206
- const info = this.gl.getProgramInfoLog(this.program);
207
- throw new Error('Failed to link program: ' + info);
208
- }
209
- this.gl.deleteShader(vertexShader);
210
- this.gl.deleteShader(fragmentShader);
211
- // Get uniform locations
212
- this.u_resolution = this.gl.getUniformLocation(this.program, 'u_resolution');
213
- this.u_texArray = this.gl.getUniformLocation(this.program, 'u_texArray');
214
- this.u_colorMatrix = this.gl.getUniformLocation(this.program, 'u_colorMatrix');
215
- // Create instance attribute buffers
216
- this.instanceDestRectBuffer = this.gl.createBuffer();
217
- this.instanceColorBuffer = this.gl.createBuffer();
218
- this.instanceTexLayerBuffer = this.gl.createBuffer();
219
- // Create a VAO (required for WebGL2)
220
- this.vao = this.gl.createVertexArray();
221
- this.gl.bindVertexArray(this.vao);
222
- // Setup instance attributes
223
- const destRectLoc = this.gl.getAttribLocation(this.program, 'a_destRect');
224
- this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.instanceDestRectBuffer);
225
- this.gl.enableVertexAttribArray(destRectLoc);
226
- this.gl.vertexAttribPointer(destRectLoc, 4, this.gl.FLOAT, false, 0, 0);
227
- this.gl.vertexAttribDivisor(destRectLoc, 1);
228
- const colorLoc = this.gl.getAttribLocation(this.program, 'a_color');
229
- this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.instanceColorBuffer);
230
- this.gl.enableVertexAttribArray(colorLoc);
231
- this.gl.vertexAttribPointer(colorLoc, 4, this.gl.FLOAT, false, 0, 0);
232
- this.gl.vertexAttribDivisor(colorLoc, 1);
233
- const texLayerLoc = this.gl.getAttribLocation(this.program, 'a_texLayer');
234
- this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.instanceTexLayerBuffer);
235
- this.gl.enableVertexAttribArray(texLayerLoc);
236
- this.gl.vertexAttribPointer(texLayerLoc, 1, this.gl.FLOAT, false, 0, 0);
237
- this.gl.vertexAttribDivisor(texLayerLoc, 1);
238
- // Set up blending for premultiplied alpha
239
- this.gl.enable(this.gl.BLEND);
240
- this.gl.blendFunc(this.gl.ONE, this.gl.ONE_MINUS_SRC_ALPHA);
241
- // Use the program
242
- this.gl.useProgram(this.program);
243
- // Set texture unit
244
- this.gl.uniform1i(this.u_texArray, 0);
245
- // Set initial color matrix
246
- this.gl.uniformMatrix3fv(this.u_colorMatrix, false, this.colorMatrix);
247
- // Set one-time GL state
248
- this.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT, 1);
249
- this.gl.clearColor(0, 0, 0, 0);
250
- this.gl.activeTexture(this.gl.TEXTURE0);
251
- // Create initial texture array
252
- this.createTexArray(TEX_INITIAL_SIZE, TEX_INITIAL_SIZE);
195
+ throw new Error('Could not get WebGL2 context');
196
+ }
197
+ // Create shaders
198
+ const vertexShader = this.createShader(this.gl.VERTEX_SHADER, VERTEX_SHADER);
199
+ const fragmentShader = this.createShader(this.gl.FRAGMENT_SHADER, FRAGMENT_SHADER);
200
+ if (!vertexShader || !fragmentShader) {
201
+ throw new Error('Failed to create shaders');
253
202
  }
254
- // Update viewport and resolution uniform
255
- this.gl.viewport(0, 0, width, height);
256
- this.gl.uniform2f(this.u_resolution, width, height);
203
+ // Create program
204
+ this.program = this.gl.createProgram();
205
+ this.gl.attachShader(this.program, vertexShader);
206
+ this.gl.attachShader(this.program, fragmentShader);
207
+ this.gl.linkProgram(this.program);
208
+ if (!this.gl.getProgramParameter(this.program, this.gl.LINK_STATUS)) {
209
+ const info = this.gl.getProgramInfoLog(this.program);
210
+ throw new Error('Failed to link program: ' + info);
211
+ }
212
+ this.gl.deleteShader(vertexShader);
213
+ this.gl.deleteShader(fragmentShader);
214
+ // Get uniform locations
215
+ this.u_resolution = this.gl.getUniformLocation(this.program, 'u_resolution');
216
+ this.u_texArray = this.gl.getUniformLocation(this.program, 'u_texArray');
217
+ this.u_colorMatrix = this.gl.getUniformLocation(this.program, 'u_colorMatrix');
218
+ // Create instance attribute buffers
219
+ this.instanceDestRectBuffer = this.gl.createBuffer();
220
+ this.instanceColorBuffer = this.gl.createBuffer();
221
+ this.instanceTexLayerBuffer = this.gl.createBuffer();
222
+ // Create a VAO (required for WebGL2)
223
+ this.vao = this.gl.createVertexArray();
224
+ this.gl.bindVertexArray(this.vao);
225
+ // Setup instance attributes
226
+ const destRectLoc = this.gl.getAttribLocation(this.program, 'a_destRect');
227
+ this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.instanceDestRectBuffer);
228
+ this.gl.enableVertexAttribArray(destRectLoc);
229
+ this.gl.vertexAttribPointer(destRectLoc, 4, this.gl.FLOAT, false, 0, 0);
230
+ this.gl.vertexAttribDivisor(destRectLoc, 1);
231
+ const colorLoc = this.gl.getAttribLocation(this.program, 'a_color');
232
+ this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.instanceColorBuffer);
233
+ this.gl.enableVertexAttribArray(colorLoc);
234
+ this.gl.vertexAttribPointer(colorLoc, 4, this.gl.FLOAT, false, 0, 0);
235
+ this.gl.vertexAttribDivisor(colorLoc, 1);
236
+ const texLayerLoc = this.gl.getAttribLocation(this.program, 'a_texLayer');
237
+ this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.instanceTexLayerBuffer);
238
+ this.gl.enableVertexAttribArray(texLayerLoc);
239
+ this.gl.vertexAttribPointer(texLayerLoc, 1, this.gl.FLOAT, false, 0, 0);
240
+ this.gl.vertexAttribDivisor(texLayerLoc, 1);
241
+ // Set up blending for premultiplied alpha
242
+ this.gl.enable(this.gl.BLEND);
243
+ this.gl.blendFunc(this.gl.ONE, this.gl.ONE_MINUS_SRC_ALPHA);
244
+ // Use the program
245
+ this.gl.useProgram(this.program);
246
+ // Set texture unit
247
+ this.gl.uniform1i(this.u_texArray, 0);
248
+ // Set initial color matrix
249
+ this.gl.uniformMatrix3fv(this.u_colorMatrix, false, this.colorMatrix);
250
+ // Set one-time GL state
251
+ this.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT, 1);
252
+ this.gl.clearColor(0, 0, 0, 0);
253
+ this.gl.activeTexture(this.gl.TEXTURE0);
254
+ // Create initial texture array
255
+ this.createTexArray(TEX_INITIAL_SIZE, TEX_INITIAL_SIZE);
257
256
  }
258
257
  createShader(type, source) {
259
258
  const shader = this.gl.createShader(type);
@@ -300,8 +299,21 @@ export class WebGL2Renderer {
300
299
  if ((self.HEAPU8RAW.buffer !== self.WASMMEMORY.buffer) || SHOULD_REFERENCE_MEMORY) {
301
300
  heap = self.HEAPU8RAW = new Uint8Array(self.WASMMEMORY.buffer);
302
301
  }
303
- // Clear canvas
304
- this.gl.clear(this.gl.COLOR_BUFFER_BIT);
302
+ // we scheduled a resize because changing the canvas size clears it, and we don't want it to flicker
303
+ // so we do it here, right before rendering
304
+ if (this._scheduledResize) {
305
+ const { width, height } = this._scheduledResize;
306
+ this._scheduledResize = undefined;
307
+ this.canvas.width = width;
308
+ this.canvas.height = height;
309
+ // Update viewport and resolution uniform
310
+ this.gl.viewport(0, 0, width, height);
311
+ this.gl.uniform2f(this.u_resolution, width, height);
312
+ }
313
+ else {
314
+ // Clear canvas
315
+ this.gl.clear(this.gl.COLOR_BUFFER_BIT);
316
+ }
305
317
  // Find max dimensions needed and filter valid images
306
318
  let maxW = this.texArrayWidth;
307
319
  let maxH = this.texArrayHeight;
@@ -1 +1 @@
1
- {"version":3,"file":"webgl-renderer.js","sourceRoot":"","sources":["../../src/worker/webgl-renderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webgl-renderer.js","sourceRoot":"","sources":["../../src/worker/webgl-renderer.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { finalizer } from 'abslink';
2
- import { WebGL2Renderer } from './webgl-renderer';
3
- import type { ASSEvent, ASSStyle } from '../jassub';
4
- import type { JASSUB } from '../wasm/types.js';
2
+ import { type ASSEvent, type ASSStyle, type WeightValue } from './util.ts';
3
+ import { WebGL2Renderer } from './webgl-renderer.ts';
4
+ import type { JASSUB } from '../wasm/types.d.ts';
5
5
  interface opts {
6
6
  wasmUrl: string;
7
7
  width: number;
@@ -10,11 +10,11 @@ interface opts {
10
10
  subContent: string | null;
11
11
  fonts: Array<string | Uint8Array>;
12
12
  availableFonts: Record<string, Uint8Array | string>;
13
- fallbackFont: string;
13
+ defaultFont: string;
14
14
  debug: boolean;
15
15
  libassMemoryLimit: number;
16
16
  libassGlyphLimit: number;
17
- useLocalFonts: boolean;
17
+ queryFonts: 'local' | 'localandremote' | false;
18
18
  }
19
19
  export declare class ASSRenderer {
20
20
  _offCanvas?: OffscreenCanvas;
@@ -24,37 +24,42 @@ export declare class ASSRenderer {
24
24
  _malloc: (size: number) => number;
25
25
  _gpurender: WebGL2Renderer;
26
26
  debug: boolean;
27
- useLocalFonts: boolean;
28
- _availableFonts: Record<string, Uint8Array | string>;
29
- _fontMap: Record<string, boolean>;
30
- _fontId: number;
31
27
  _ready: Promise<void>;
32
- _getFont: (font: string) => Promise<void>;
33
- constructor(data: opts, getFont: (font: string) => Promise<void>);
28
+ constructor(data: opts, getFont: (font: string, weight: WeightValue) => Promise<Uint8Array<ArrayBuffer> | undefined>);
34
29
  ready(): Promise<void>;
35
- addFont(fontOrURL: Uint8Array | string): void;
36
30
  createEvent(event: ASSEvent): void;
37
31
  getEvents(): Partial<ASSEvent>[];
38
32
  setEvent(event: ASSEvent, index: number): void;
39
33
  removeEvent(index: number): void;
40
- createStyle(style: ASSStyle): import("../wasm/types.js").ASS_Style;
34
+ createStyle(style: ASSStyle): import("../wasm/types.d.ts").ASS_Style;
41
35
  getStyles(): ASSStyle[];
42
36
  setStyle(style: ASSStyle, index: number): void;
43
37
  removeStyle(index: number): void;
44
38
  styleOverride(style: ASSStyle): void;
45
39
  disableStyleOverride(): void;
46
- setDefaultFont(fontName: string): void;
47
40
  setTrack(content: string): void;
48
41
  freeTrack(): void;
49
- setTrackByUrl(url: string): void;
42
+ setTrackByUrl(url: string): Promise<void>;
50
43
  _checkColorSpace(): void;
51
- _findAvailableFonts(font: string): void;
52
- _asyncWrite(font: Uint8Array | string): void;
53
- _allocFont(uint8: Uint8Array): void;
54
- _processAvailableFonts(content: string): void;
55
- _canvas(width: number, height: number, videoWidth: number, videoHeight: number): void;
44
+ _defaultFont: string;
45
+ setDefaultFont(fontName: string): void;
46
+ _log(log: string): void;
47
+ addFonts(fontOrURLs: Array<Uint8Array | string>): Promise<void>;
48
+ _loadedInitialFonts: boolean;
49
+ _loadInitialFonts(fontOrURLs: Array<Uint8Array | string>): Promise<void>;
50
+ _getFont: (font: string, weight: WeightValue) => Promise<Uint8Array<ArrayBuffer> | undefined>;
51
+ _availableFonts: Record<string, Uint8Array | string>;
52
+ _checkedFonts: Set<string>;
53
+ _findAvailableFont(fontName: string, weight?: WeightValue): Promise<void>;
54
+ queryFonts: false | "local" | "localandremote";
55
+ _queryLocalFont(fontName: string, weight: WeightValue): Promise<Uint8Array<ArrayBuffer> | undefined>;
56
+ _queryRemoteFont(fontName: string, postscriptName: string): Promise<Uint8Array<ArrayBuffer> | undefined>;
57
+ _asyncWrite(font: string): Promise<void>;
58
+ _fontId: number;
59
+ _allocFonts(uint8s: Uint8Array[]): void;
60
+ _resizeCanvas(width: number, height: number, videoWidth: number, videoHeight: number): void;
56
61
  [finalizer](): Promise<void>;
57
- _draw(time: number, force?: boolean): void;
62
+ _draw(time: number, repaint?: boolean): void;
58
63
  _setColorSpace(videoColorSpace: 'RGB' | 'BT709' | 'BT601'): void;
59
64
  }
60
65
  export {};
@@ -1,10 +1,10 @@
1
1
  /* eslint-disable camelcase */
2
2
  import { finalizer } from 'abslink';
3
3
  import { expose } from 'abslink/w3c';
4
+ import { queryRemoteFonts } from 'lfa-ponyfill';
4
5
  import WASM from '../wasm/jassub-worker.js';
5
- import { libassYCbCrMap, read_, readAsync, _applyKeys } from './util';
6
- import { WebGL2Renderer } from './webgl-renderer';
7
- const IS_FIREFOX = navigator.userAgent.toLowerCase().includes('firefox');
6
+ import { _applyKeys, _fetch, fetchtext, IS_FIREFOX, LIBASS_YCBCR_MAP, WEIGHT_MAP } from "./util.js";
7
+ import { WebGL2Renderer } from "./webgl-renderer.js";
8
8
  export class ASSRenderer {
9
9
  _offCanvas;
10
10
  _wasm;
@@ -13,17 +13,14 @@ export class ASSRenderer {
13
13
  _malloc;
14
14
  _gpurender = new WebGL2Renderer();
15
15
  debug = false;
16
- useLocalFonts = false;
17
- _availableFonts = {};
18
- _fontMap = {};
19
- _fontId = 0;
20
16
  _ready;
21
- _getFont;
22
17
  constructor(data, getFont) {
23
- this._availableFonts = data.availableFonts;
18
+ // remove case sensitivity
19
+ this._availableFonts = Object.fromEntries(Object.entries(data.availableFonts).map(([k, v]) => [k.trim().toLowerCase(), v]));
24
20
  this.debug = data.debug;
25
- this.useLocalFonts = data.useLocalFonts;
21
+ this.queryFonts = data.queryFonts;
26
22
  this._getFont = getFont;
23
+ this._defaultFont = data.defaultFont.trim().toLowerCase();
27
24
  // hack, we want custom WASM URLs
28
25
  const _fetch = globalThis.fetch;
29
26
  globalThis.fetch = _ => _fetch(data.wasmUrl);
@@ -32,7 +29,7 @@ export class ASSRenderer {
32
29
  if (data.name === 'offscreenCanvas') {
33
30
  // await this._ready // needed for webGPU
34
31
  this._offCanvas = data.ctrl;
35
- this._gpurender.setCanvas(this._offCanvas, this._offCanvas.width, this._offCanvas.height);
32
+ this._gpurender.setCanvas(this._offCanvas);
36
33
  removeEventListener('message', handleMessage);
37
34
  }
38
35
  };
@@ -40,22 +37,16 @@ export class ASSRenderer {
40
37
  // const devicePromise = navigator.gpu?.requestAdapter({
41
38
  // powerPreference: 'high-performance'
42
39
  // }).then(adapter => adapter?.requestDevice())
43
- this._ready = WASM({ __url: data.wasmUrl }).then(async (Module) => {
44
- // eslint-disable-next-line @typescript-eslint/unbound-method
45
- this._malloc = Module._malloc;
46
- const fallbackFont = data.fallbackFont.toLowerCase();
47
- this._wasm = new Module.JASSUB(data.width, data.height, fallbackFont);
40
+ // eslint-disable-next-line @typescript-eslint/unbound-method
41
+ this._ready = WASM({ __url: data.wasmUrl, __out: (log) => this._log(log) }).then(async ({ _malloc, JASSUB }) => {
42
+ this._malloc = _malloc;
43
+ this._wasm = new JASSUB(data.width, data.height, this._defaultFont);
48
44
  // Firefox seems to have issues with multithreading in workers
49
- // a worker inside a worker does not recive messages properly
45
+ // a worker inside a worker does not recieve messages properly
50
46
  this._wasm.setThreads(!IS_FIREFOX && self.crossOriginIsolated ? Math.min(Math.max(1, navigator.hardwareConcurrency - 2), 8) : 1);
51
- if (fallbackFont)
52
- this._findAvailableFonts(fallbackFont);
53
- const subContent = data.subContent ?? read_(data.subUrl);
54
- for (const font of data.fonts)
55
- this._asyncWrite(font);
56
- this._wasm.createTrackMem(subContent);
57
- this._processAvailableFonts(subContent);
58
- this._subtitleColorSpace = libassYCbCrMap[this._wasm.trackColorSpace];
47
+ this._loadInitialFonts(data.fonts);
48
+ this._wasm.createTrackMem(data.subContent ?? await fetchtext(data.subUrl));
49
+ this._subtitleColorSpace = LIBASS_YCBCR_MAP[this._wasm.trackColorSpace];
59
50
  if (data.libassMemoryLimit > 0 || data.libassGlyphLimit > 0) {
60
51
  this._wasm.setMemoryLimits(data.libassGlyphLimit || 0, data.libassMemoryLimit || 0);
61
52
  }
@@ -68,9 +59,6 @@ export class ASSRenderer {
68
59
  ready() {
69
60
  return this._ready;
70
61
  }
71
- addFont(fontOrURL) {
72
- this._asyncWrite(fontOrURL);
73
- }
74
62
  createEvent(event) {
75
63
  _applyKeys(event, this._wasm.getEvent(this._wasm.allocEvent()));
76
64
  }
@@ -114,73 +102,126 @@ export class ASSRenderer {
114
102
  disableStyleOverride() {
115
103
  this._wasm.disableStyleOverride();
116
104
  }
117
- setDefaultFont(fontName) {
118
- this._wasm.setDefaultFont(fontName);
119
- }
120
105
  setTrack(content) {
121
106
  this._wasm.createTrackMem(content);
122
- this._processAvailableFonts(content);
123
- this._subtitleColorSpace = libassYCbCrMap[this._wasm.trackColorSpace];
107
+ this._subtitleColorSpace = LIBASS_YCBCR_MAP[this._wasm.trackColorSpace];
124
108
  }
125
109
  freeTrack() {
126
110
  this._wasm.removeTrack();
127
111
  }
128
- setTrackByUrl(url) {
129
- this.setTrack(read_(url));
112
+ async setTrackByUrl(url) {
113
+ this.setTrack(await fetchtext(url));
130
114
  }
131
115
  _checkColorSpace() {
132
116
  if (!this._subtitleColorSpace || !this._videoColorSpace)
133
117
  return;
134
118
  this._gpurender.setColorMatrix(this._subtitleColorSpace, this._videoColorSpace);
135
119
  }
136
- _findAvailableFonts(font) {
137
- font = font.trim().toLowerCase();
138
- if (font[0] === '@')
139
- font = font.substring(1);
140
- if (this._fontMap[font])
141
- return;
142
- this._fontMap[font] = true;
143
- if (!this._availableFonts[font]) {
144
- if (this.useLocalFonts)
145
- this._getFont(font);
120
+ _defaultFont;
121
+ setDefaultFont(fontName) {
122
+ this._defaultFont = fontName.trim().toLowerCase();
123
+ this._wasm.setDefaultFont(this._defaultFont);
124
+ }
125
+ _log(log) {
126
+ console.debug(log);
127
+ const match = log.match(/JASSUB: fontselect: Using default font family: \(([^,]+), (\d{1,4}), \d\)/);
128
+ if (match) {
129
+ this._findAvailableFont(match[1].trim().toLowerCase(), WEIGHT_MAP[parseInt(match[2], 10) / 100 - 1]);
146
130
  }
147
- else {
148
- this._asyncWrite(this._availableFonts[font]);
131
+ else if (log.startsWith('JASSUB: fontselect: failed to find any fallback with glyph 0x0 for font:')) {
132
+ this._findAvailableFont(this._defaultFont);
149
133
  }
150
134
  }
151
- _asyncWrite(font) {
152
- if (typeof font === 'string') {
153
- readAsync(font, fontData => {
154
- this._allocFont(new Uint8Array(fontData));
155
- }, console.error);
156
- }
157
- else {
158
- this._allocFont(font);
135
+ async addFonts(fontOrURLs) {
136
+ if (!fontOrURLs.length)
137
+ return;
138
+ const strings = [];
139
+ const uint8s = [];
140
+ for (const fontOrURL of fontOrURLs) {
141
+ if (typeof fontOrURL === 'string') {
142
+ strings.push(fontOrURL);
143
+ }
144
+ else {
145
+ uint8s.push(fontOrURL);
146
+ }
159
147
  }
148
+ if (uint8s.length)
149
+ this._allocFonts(uint8s);
150
+ // this isn't batched like uint8s because software like jellyfin exists, which loads 50+ fonts over the network which takes time...
151
+ // is connection exhaustion a concern here?
152
+ await Promise.allSettled(strings.map(url => this._asyncWrite(url)));
160
153
  }
161
- // TODO: this should re-draw last frame!
162
- _allocFont(uint8) {
163
- const ptr = this._malloc(uint8.byteLength);
164
- self.HEAPU8RAW.set(uint8, ptr);
165
- this._wasm.addFont('font-' + (this._fontId++), ptr, uint8.byteLength);
166
- this._wasm.reloadFonts();
154
+ // we don't want to run _findAvailableFont before initial fonts are loaded
155
+ // because it could duplicate fonts
156
+ _loadedInitialFonts = false;
157
+ async _loadInitialFonts(fontOrURLs) {
158
+ await this.addFonts(fontOrURLs);
159
+ this._loadedInitialFonts = true;
167
160
  }
168
- _processAvailableFonts(content) {
169
- if (!this._availableFonts)
161
+ _getFont;
162
+ _availableFonts = {};
163
+ _checkedFonts = new Set();
164
+ async _findAvailableFont(fontName, weight) {
165
+ if (!this._loadedInitialFonts)
166
+ return;
167
+ // Roboto Medium, null -> Roboto, Medium
168
+ // Roboto Medium, Medium -> Roboto, Medium
169
+ // Roboto, null -> Roboto, Regular
170
+ // italic is not handled I guess
171
+ for (const _weight of WEIGHT_MAP) {
172
+ // check if fontname has this weight name in it, if yes remove it
173
+ if (fontName.includes(_weight)) {
174
+ fontName = fontName.replace(_weight, '').trim();
175
+ weight ??= _weight;
176
+ break;
177
+ }
178
+ }
179
+ weight ??= 'regular';
180
+ const key = fontName + ' ' + weight;
181
+ if (this._checkedFonts.has(key))
170
182
  return;
171
- for (const { FontName } of this.getStyles()) {
172
- this._findAvailableFonts(FontName);
183
+ this._checkedFonts.add(key);
184
+ try {
185
+ const font = this._availableFonts[key] ?? this._availableFonts[fontName] ?? await this._queryLocalFont(fontName, weight) ?? await this._queryRemoteFont(fontName, key);
186
+ if (font)
187
+ return await this.addFonts([font]);
173
188
  }
174
- const regex = /\\fn([^\\}]*?)[\\}]/g;
175
- let matches;
176
- while ((matches = regex.exec(content)) !== null) {
177
- this._findAvailableFonts(matches[1]);
189
+ catch (e) {
190
+ console.warn('Error querying font', fontName, weight, e);
191
+ }
192
+ }
193
+ queryFonts;
194
+ async _queryLocalFont(fontName, weight) {
195
+ if (!this.queryFonts)
196
+ return;
197
+ return await this._getFont(fontName, weight);
198
+ }
199
+ async _queryRemoteFont(fontName, postscriptName) {
200
+ if (this.queryFonts !== 'localandremote')
201
+ return;
202
+ const fontData = await queryRemoteFonts({ postscriptNames: [postscriptName, fontName] });
203
+ if (!fontData.length)
204
+ return;
205
+ const blob = await fontData[0].blob();
206
+ return new Uint8Array(await blob.arrayBuffer());
207
+ }
208
+ async _asyncWrite(font) {
209
+ const res = await _fetch(font);
210
+ this._allocFonts([new Uint8Array(await res.arrayBuffer())]);
211
+ }
212
+ _fontId = 0;
213
+ _allocFonts(uint8s) {
214
+ // TODO: this should re-draw last frame!
215
+ for (const uint8 of uint8s) {
216
+ const ptr = this._malloc(uint8.byteLength);
217
+ self.HEAPU8RAW.set(uint8, ptr);
218
+ this._wasm.addFont('font-' + (this._fontId++), ptr, uint8.byteLength);
178
219
  }
220
+ this._wasm.reloadFonts();
179
221
  }
180
- _canvas(width, height, videoWidth, videoHeight) {
181
- if (this._offCanvas && this._gpurender)
182
- this._gpurender.setCanvas(this._offCanvas, width, height);
222
+ _resizeCanvas(width, height, videoWidth, videoHeight) {
183
223
  this._wasm.resizeCanvas(width, height, videoWidth, videoHeight);
224
+ this._gpurender.resizeCanvas(width, height);
184
225
  }
185
226
  async [finalizer]() {
186
227
  await this._ready;
@@ -192,11 +233,11 @@ export class ASSRenderer {
192
233
  this._gpurender = null;
193
234
  this._availableFonts = {};
194
235
  }
195
- _draw(time, force = false) {
236
+ _draw(time, repaint = false) {
196
237
  if (!this._offCanvas || !this._gpurender)
197
238
  return;
198
- const result = this._wasm.rawRender(time, Number(force));
199
- if (this._wasm.changed === 0 && !force)
239
+ const result = this._wasm.rawRender(time, Number(repaint));
240
+ if (this._wasm.changed === 0 && !repaint)
200
241
  return;
201
242
  const bitmaps = [];
202
243
  for (let image = result, i = 0; i < this._wasm.count; image = image.next, ++i) {