jassub 2.4.3 → 2.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -38,7 +38,7 @@ The
38
38
 
39
39
  headers are recommended to use this library, as it uses SharedArrayBuffer for multi-threading, but if you can't set them, it will fallback automatically to work in single-threaded mode. Firefox doesn't support threading so they are not required there.
40
40
 
41
- At minimum WASM + TextDecoder + OffscreenCanvas + Web Workers + Proxy + AbortController + Fetch + Promise + getVideoPlaybackQuality/requestVideoFrameCallback are required for JASSUB to work.
41
+ At minimum WASM + TextDecoder + OffscreenCanvas + Web Workers + Proxy + Fetch + Promise + getVideoPlaybackQuality/requestVideoFrameCallback are required for JASSUB to work.
42
42
 
43
43
  <!--
44
44
  WASM: 57 11 52 / 51 11 47
@@ -49,12 +49,11 @@ BigInt: 67 15 68
49
49
  Web Workers: 4 4 3.5
50
50
  Promise: 33 7.1 29 / 4 3.1 2
51
51
  Proxy: 49 10 18
52
- AbortController: 66 12 57 / 4 3.1 2
53
52
  Fetch: 42 10.1 39 / 41 10.1 34
54
53
  getVPQ/rVFC: 80 8 42 / 28 8 42
55
54
  -->
56
55
 
57
- JASSUB supports Chrome/Safari/Firefox 80/17/105, you bring the support down to 67/16.2/68 if you enable some flags/settings in your browser for these features, and polyfill AbortController. For other engines other polyfills might be needed. Babel is also recommended if you need to support older JS engines as JASSUB ships as ES modules with modern syntax.
56
+ JASSUB supports Chrome/Safari/Firefox 80/17/105, you bring the support down to 67/16.2/68 if you enable some flags/settings in your browser for these features. For other engines polyfills might be needed. Babel is also recommended if you need to support older JS engines as JASSUB ships as ES modules with modern syntax.
58
57
 
59
58
  <!-- See https://github.com/gpuweb/gpuweb/wiki/Implementation-Status for a WebGPU support table, and what flags you might need to enable it in your browser if you want to utilise it instead of WebGL2. -->
60
59
 
@@ -108,7 +107,7 @@ const instance = new JASSUB({
108
107
 
109
108
  await instance.ready
110
109
 
111
- instance.setCurrentTime(15)
110
+ instance.manualRender({ expectedDisplayTime: performance.now(), width: 1920, height: 1080, mediaTime: 10.20 })
112
111
  ```
113
112
 
114
113
  # Docs
package/dist/jassub.d.ts CHANGED
@@ -3,6 +3,12 @@ import { Debug } from './debug.ts';
3
3
  import type { WeightValue } from './worker/util.ts';
4
4
  import type { ASSRenderer } from './worker/worker';
5
5
  import type { Remote } from 'abslink';
6
+ export declare const webYCbCrMap: {
7
+ readonly rgb: "RGB";
8
+ readonly bt709: "BT709";
9
+ readonly bt470bg: "BT601";
10
+ readonly smpte170m: "BT601";
11
+ };
6
12
  export type JASSUBOptions = {
7
13
  timeOffset?: number;
8
14
  debug?: boolean;
@@ -45,8 +51,6 @@ export default class JASSUB {
45
51
  _videoHeight: number;
46
52
  _videoColorSpace: string | null;
47
53
  _canvas: HTMLCanvasElement;
48
- _canvasParent: HTMLDivElement | undefined;
49
- _ctrl: AbortController;
50
54
  _ro: ResizeObserver;
51
55
  _destroyed: boolean;
52
56
  _lastDemandTime: Pick<VideoFrameCallbackMetadata, 'expectedDisplayTime' | 'width' | 'height' | 'mediaTime'>;
@@ -55,23 +59,28 @@ export default class JASSUB {
55
59
  constructor(opts: JASSUBOptions);
56
60
  static _supportsSIMD?: boolean;
57
61
  static _test(): void;
58
- resize(forceRepaint?: boolean, width?: number, height?: number, top?: number, left?: number): Promise<void>;
59
- _getVideoPosition(width?: number, height?: number): {
60
- width: number;
61
- height: number;
62
+ resize(forceRepaint?: boolean, renderWidth?: number, renderHeight?: number): Promise<void>;
63
+ _getElementBoundingBox(el: HTMLElement, videoWidth: number, videoHeight: number): {
62
64
  x: number;
63
65
  y: number;
66
+ width: number;
67
+ height: number;
64
68
  };
65
- _computeCanvasSize(width?: number, height?: number): {
69
+ _computeRenderSize(width?: number, height?: number): {
66
70
  width: number;
67
71
  height: number;
68
72
  };
69
- setVideo(video: HTMLVideoElement): Promise<void>;
73
+ setVideo(target: HTMLVideoElement): Promise<void>;
70
74
  _getLocalFont(font: string, weight?: WeightValue): Promise<Uint8Array<ArrayBuffer> | undefined>;
71
75
  _handleRVFC(data: VideoFrameCallbackMetadata): void;
72
76
  manualRender(data: Pick<VideoFrameCallbackMetadata, 'expectedDisplayTime' | 'width' | 'height' | 'mediaTime'>): Promise<void>;
73
77
  _demandRender(repaint?: boolean): Promise<void>;
74
- _updateColorSpace(): Promise<void>;
78
+ _boundUpdateColorSpace: ({ target }: {
79
+ target: EventTarget | null;
80
+ }) => void;
81
+ _updateColorSpace({ target }: {
82
+ target: EventTarget | null;
83
+ }): void;
75
84
  _removeListeners(): void;
76
85
  destroy(): Promise<void>;
77
86
  }
package/dist/jassub.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import 'rvfc-polyfill';
2
- import { proxy, releaseProxy } from 'abslink';
2
+ import { proxy, releaseProxy, transfer } from 'abslink';
3
3
  import { wrap } from 'abslink/w3c';
4
4
  import { Debug } from "./debug.js";
5
- const webYCbCrMap = {
5
+ export const webYCbCrMap = {
6
6
  rgb: 'RGB',
7
7
  bt709: 'BT709',
8
8
  // these might not be exactly correct? oops?
@@ -23,8 +23,6 @@ export default class JASSUB {
23
23
  _videoHeight = 0;
24
24
  _videoColorSpace = null;
25
25
  _canvas;
26
- _canvasParent;
27
- _ctrl = new AbortController();
28
26
  _ro = new ResizeObserver(async () => {
29
27
  await this.ready;
30
28
  this.resize();
@@ -45,14 +43,10 @@ export default class JASSUB {
45
43
  this._video = opts.video;
46
44
  this._canvas = opts.canvas ?? document.createElement('canvas');
47
45
  if (this._video && !opts.canvas) {
48
- this._canvasParent = document.createElement('div');
49
- this._canvasParent.className = 'JASSUB';
50
- this._canvasParent.style.position = 'relative';
51
- this._canvas.style.display = 'block';
46
+ this._canvas.className = 'JASSUB';
52
47
  this._canvas.style.position = 'absolute';
53
48
  this._canvas.style.pointerEvents = 'none';
54
- this._canvasParent.appendChild(this._canvas);
55
- this._video.insertAdjacentElement('afterend', this._canvasParent);
49
+ this._video.insertAdjacentElement('afterend', this._canvas);
56
50
  }
57
51
  const ctrl = this._canvas.transferControlToOffscreen();
58
52
  this.debug = opts.debug ? new Debug() : null;
@@ -70,26 +64,28 @@ export default class JASSUB {
70
64
  if (!availableFonts['liberation sans'] && !opts.defaultFont) {
71
65
  availableFonts['liberation sans'] = new URL('./default.woff2', import.meta.url).href;
72
66
  }
73
- this.ready = (async () => {
74
- this.renderer = await new Renderer({
75
- wasmUrl: JASSUB._supportsSIMD ? modern : normal,
76
- width: ctrl.width,
77
- height: ctrl.height,
78
- subUrl: opts.subUrl,
79
- subContent: opts.subContent ?? null,
80
- fonts: opts.fonts ?? [],
81
- availableFonts,
82
- defaultFont: opts.defaultFont ?? 'liberation sans',
83
- debug: !!opts.debug,
84
- libassMemoryLimit: opts.libassMemoryLimit ?? 0,
85
- libassGlyphLimit: opts.libassGlyphLimit ?? 0,
86
- queryFonts: opts.queryFonts ?? 'local'
87
- }, proxy(font => this._getLocalFont(font)));
88
- await this.renderer.ready();
89
- })();
90
- if (this._video)
67
+ this.ready = new Renderer({
68
+ wasmUrl: JASSUB._supportsSIMD ? modern : normal,
69
+ width: ctrl.width,
70
+ height: ctrl.height,
71
+ subUrl: opts.subUrl,
72
+ subContent: opts.subContent ?? null,
73
+ fonts: opts.fonts ?? [],
74
+ availableFonts,
75
+ defaultFont: opts.defaultFont ?? 'liberation sans',
76
+ debug: !!opts.debug,
77
+ libassMemoryLimit: opts.libassMemoryLimit ?? 0,
78
+ libassGlyphLimit: opts.libassGlyphLimit ?? 0,
79
+ queryFonts: opts.queryFonts ?? 'local'
80
+ }, proxy(font => this._getLocalFont(font)), transfer(ctrl, [ctrl])).then((renderer) => {
81
+ this.renderer = renderer;
82
+ });
83
+ if (this._video) {
91
84
  this.setVideo(this._video);
92
- this._worker.postMessage({ name: 'offscreenCanvas', ctrl }, [ctrl]);
85
+ }
86
+ else {
87
+ this._ro.observe(this._canvas);
88
+ }
93
89
  }
94
90
  static _supportsSIMD;
95
91
  static _test() {
@@ -105,94 +101,71 @@ export default class JASSUB {
105
101
  if (!(module instanceof WebAssembly.Module) || !(new WebAssembly.Instance(module) instanceof WebAssembly.Instance))
106
102
  throw new Error('WASM not supported');
107
103
  }
108
- async resize(forceRepaint = !!this._video?.paused, width = 0, height = 0, top = 0, left = 0) {
109
- if ((!width || !height) && this._video) {
110
- const videoSize = this._getVideoPosition();
111
- let renderSize = null;
112
- // support anamorphic video
113
- if (this._videoWidth) {
114
- const widthRatio = this._video.videoWidth / this._videoWidth;
115
- const heightRatio = this._video.videoHeight / this._videoHeight;
116
- renderSize = this._computeCanvasSize((videoSize.width || 0) / widthRatio, (videoSize.height || 0) / heightRatio);
117
- }
118
- else {
119
- renderSize = this._computeCanvasSize(videoSize.width || 0, videoSize.height || 0);
120
- }
121
- width = renderSize.width;
122
- height = renderSize.height;
123
- if (this._canvasParent) {
124
- top = videoSize.y - (this._canvasParent.getBoundingClientRect().top - this._video.getBoundingClientRect().top);
125
- left = videoSize.x;
126
- }
127
- this._canvas.style.width = videoSize.width + 'px';
128
- this._canvas.style.height = videoSize.height + 'px';
104
+ async resize(forceRepaint = !!this._video?.paused, renderWidth = 0, renderHeight = 0) {
105
+ const videoWidth = this._video?.videoWidth ?? this._videoWidth;
106
+ const videoHeight = this._video?.videoHeight ?? this._videoHeight;
107
+ const videoSize = this._getElementBoundingBox(this._video ?? this._canvas, videoWidth, videoHeight);
108
+ if (!renderWidth || !renderHeight) {
109
+ // || 1 for divide by zero safety
110
+ const widthScale = (this._videoWidth / videoWidth) || 1;
111
+ const heightScale = (this._videoHeight / videoHeight) || 1;
112
+ const { width, height } = this._computeRenderSize(videoSize.width * widthScale, videoSize.height * heightScale);
113
+ renderWidth = Math.round(width);
114
+ renderHeight = Math.round(height);
129
115
  }
130
- if (this._canvasParent) {
131
- this._canvas.style.top = top + 'px';
132
- this._canvas.style.left = left + 'px';
116
+ if (this._video) {
117
+ this._canvas.style.width = Math.round(videoSize.width) + 'px';
118
+ this._canvas.style.height = Math.round(videoSize.height) + 'px';
119
+ this._canvas.style.top = videoSize.y + 'px';
120
+ this._canvas.style.left = videoSize.x + 'px';
133
121
  }
134
- await this.renderer._resizeCanvas(width, height, (this._videoWidth || this._video?.videoWidth) ?? width, (this._videoHeight || this._video?.videoHeight) ?? height);
122
+ await this.renderer._resizeCanvas(renderWidth, renderHeight, this._videoWidth || renderWidth, this._videoHeight || renderHeight);
135
123
  if (this._lastDemandTime)
136
124
  await this._demandRender(forceRepaint);
137
125
  }
138
- _getVideoPosition(width = this._video.videoWidth, height = this._video.videoHeight) {
139
- const videoRatio = width / height;
140
- const { offsetWidth, offsetHeight } = this._video;
141
- const elementRatio = offsetWidth / offsetHeight;
142
- width = offsetWidth;
143
- height = offsetHeight;
126
+ _getElementBoundingBox(el, videoWidth, videoHeight) {
127
+ const { clientWidth, clientHeight, offsetLeft, offsetTop } = el;
128
+ const videoRatio = videoWidth / videoHeight;
129
+ const elementRatio = clientWidth / clientHeight;
144
130
  if (elementRatio > videoRatio) {
145
- width = Math.floor(offsetHeight * videoRatio);
131
+ videoHeight = clientHeight;
132
+ videoWidth = clientHeight * videoRatio;
146
133
  }
147
134
  else {
148
- height = Math.floor(offsetWidth / videoRatio);
135
+ videoHeight = clientWidth / videoRatio;
136
+ videoWidth = clientWidth;
149
137
  }
150
- const x = (offsetWidth - width) / 2;
151
- const y = (offsetHeight - height) / 2;
152
- return { width, height, x, y };
138
+ return { x: offsetLeft + (clientWidth - videoWidth) / 2, y: offsetTop + (clientHeight - videoHeight) / 2, width: videoWidth, height: videoHeight };
153
139
  }
154
- _computeCanvasSize(width = 0, height = 0) {
140
+ _computeRenderSize(width = 0, height = 0) {
141
+ if (height <= 0 || width <= 0)
142
+ return { width: 0, height: 0 };
155
143
  const scalefactor = this.prescaleFactor <= 0 ? 1.0 : this.prescaleFactor;
156
144
  const ratio = self.devicePixelRatio || 1;
157
- if (height <= 0 || width <= 0) {
158
- width = 0;
159
- height = 0;
160
- }
161
- else {
162
- const sgn = scalefactor < 1 ? -1 : 1;
163
- let newH = height * ratio;
164
- if (sgn * newH * scalefactor <= sgn * this.prescaleHeightLimit) {
165
- newH *= scalefactor;
166
- }
167
- else if (sgn * newH < sgn * this.prescaleHeightLimit) {
168
- newH = this.prescaleHeightLimit;
169
- }
170
- if (this.maxRenderHeight > 0 && newH > this.maxRenderHeight)
171
- newH = this.maxRenderHeight;
172
- width *= newH / height;
173
- height = newH;
174
- }
145
+ const sgn = scalefactor < 1 ? -1 : 1;
146
+ let newH = height * ratio;
147
+ if (sgn * newH * scalefactor <= sgn * this.prescaleHeightLimit) {
148
+ newH *= scalefactor;
149
+ }
150
+ else if (sgn * newH < sgn * this.prescaleHeightLimit) {
151
+ newH = this.prescaleHeightLimit;
152
+ }
153
+ if (this.maxRenderHeight > 0 && newH > this.maxRenderHeight)
154
+ newH = this.maxRenderHeight;
155
+ width *= newH / height;
156
+ height = newH;
175
157
  return { width, height };
176
158
  }
177
- async setVideo(video) {
178
- if (video instanceof HTMLVideoElement) {
179
- this._removeListeners();
180
- this._video = video;
181
- await this.ready;
182
- this._video.requestVideoFrameCallback((now, data) => this._handleRVFC(data));
183
- // everything else is unreliable for this, loadedmetadata and loadeddata included.
184
- if ('VideoFrame' in globalThis) {
185
- video.addEventListener('loadedmetadata', () => this._updateColorSpace(), this._ctrl);
186
- if (video.readyState > 2)
187
- this._updateColorSpace();
188
- }
189
- if (video.videoWidth > 0)
190
- this.resize();
191
- this._ro.observe(video);
192
- }
193
- else {
194
- throw new Error('Video element invalid!');
159
+ async setVideo(target) {
160
+ this._removeListeners();
161
+ this._video = target;
162
+ this._ro.observe(target);
163
+ if (typeof VideoFrame !== 'undefined') {
164
+ target.addEventListener('loadedmetadata', this._boundUpdateColorSpace);
165
+ this._updateColorSpace({ target });
195
166
  }
167
+ await this.ready;
168
+ this._video.requestVideoFrameCallback((now, data) => this._handleRVFC(data));
196
169
  }
197
170
  async _getLocalFont(font, weight = 'regular') {
198
171
  // electron by default has all permissions enabled, and it doesn't have perm query
@@ -242,12 +215,15 @@ export default class JASSUB {
242
215
  if (this._skipped)
243
216
  await this._demandRender();
244
217
  }
245
- async _updateColorSpace() {
246
- await this.ready;
218
+ _boundUpdateColorSpace = this._updateColorSpace.bind(this);
219
+ _updateColorSpace({ target }) {
247
220
  this._video.requestVideoFrameCallback(async () => {
221
+ if (this._destroyed || this._video !== target)
222
+ return;
248
223
  try {
249
224
  const frame = new VideoFrame(this._video);
250
225
  frame.close();
226
+ await this.ready;
251
227
  await this.renderer._setColorSpace(webYCbCrMap[frame.colorSpace.matrix]);
252
228
  }
253
229
  catch (e) {
@@ -257,20 +233,16 @@ export default class JASSUB {
257
233
  });
258
234
  }
259
235
  _removeListeners() {
260
- if (this._video) {
261
- if (this._ro)
262
- this._ro.unobserve(this._video);
263
- this._ctrl.abort();
264
- this._ctrl = new AbortController();
265
- }
236
+ this._ro.disconnect();
237
+ this._video?.removeEventListener('loadedmetadata', this._boundUpdateColorSpace);
266
238
  }
267
239
  async destroy() {
268
240
  if (this._destroyed)
269
241
  return;
270
242
  this._destroyed = true;
271
- if (this._video && this._canvasParent)
272
- this._video.parentNode?.removeChild(this._canvasParent);
243
+ this._canvas.remove();
273
244
  this._removeListeners();
245
+ await this.ready;
274
246
  await this.renderer?.[releaseProxy]();
275
247
  this._worker.terminate();
276
248
  }
@@ -1 +1 @@
1
- {"version":3,"file":"jassub.js","sourceRoot":"","sources":["../src/jassub.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jassub.js","sourceRoot":"","sources":["../src/jassub.ts"],"names":[],"mappings":"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"}
@@ -11,8 +11,9 @@ export const WEIGHT_MAP = [
11
11
  'black',
12
12
  'ultrablack'
13
13
  ];
14
- export const IS_FIREFOX = navigator.userAgent.toLowerCase().includes('firefox');
15
- export const IS_SAFARI = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
14
+ const UA = navigator.userAgent.toLowerCase();
15
+ export const IS_FIREFOX = UA.includes('firefox');
16
+ export const IS_SAFARI = /applewebkit\/[\d.]+ \(khtml, like gecko\)(?!.*chrome\/)/.test(UA);
16
17
  const a = 'BT601';
17
18
  const b = 'BT709';
18
19
  const c = 'SMPTE240M';
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/worker/util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/worker/util.ts"],"names":[],"mappings":"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"}
@@ -18,17 +18,16 @@ interface opts {
18
18
  libassGlyphLimit: number;
19
19
  queryFonts: 'local' | 'localandremote' | false;
20
20
  }
21
+ declare const constructor: unique symbol;
21
22
  export declare class ASSRenderer {
22
- _offCanvas?: OffscreenCanvas;
23
23
  _wasm: JASSUB;
24
24
  _subtitleColorSpace?: 'BT601' | 'BT709' | 'SMPTE240M' | 'FCC' | null;
25
25
  _videoColorSpace?: 'BT709' | 'BT601';
26
26
  _malloc: (size: number) => number;
27
27
  _gpurender: WebGL2Renderer | WebGL1Renderer | Canvas2DRenderer;
28
28
  debug: boolean;
29
- _ready: Promise<void>;
30
- constructor(data: opts, getFont: (font: string, weight: WeightValue) => Promise<Uint8Array<ArrayBuffer> | undefined>);
31
- ready(): Promise<void>;
29
+ constructor(...args: [data: opts, getFont: (font: string, weight: WeightValue) => Promise<Uint8Array<ArrayBuffer> | undefined>, ctrl: OffscreenCanvas]);
30
+ [constructor](data: opts, getFont: (font: string, weight: WeightValue) => Promise<Uint8Array<ArrayBuffer> | undefined>, ctrl: OffscreenCanvas): Promise<this>;
32
31
  processData(events: string): void;
33
32
  createEvent(event: ASSEvent): void;
34
33
  getEvents(): Partial<ASSEvent>[];
@@ -47,14 +46,14 @@ export declare class ASSRenderer {
47
46
  _defaultFont: string;
48
47
  setDefaultFont(fontName: string): void;
49
48
  _log(log: string): Promise<void>;
50
- addFonts(fontOrURLs: Array<Uint8Array | string>): Promise<PromiseSettledResult<void>[] | undefined>;
49
+ addFonts(fontOrURLs: Array<Uint8Array | string>): Promise<boolean>;
51
50
  _loadedInitialFonts: boolean;
52
51
  _loadInitialFonts(fontOrURLs: Array<Uint8Array | string>): Promise<void>;
53
52
  _getFont: (font: string, weight: WeightValue) => Promise<Uint8Array<ArrayBuffer> | undefined>;
54
53
  _availableFonts: Record<string, Uint8Array | string>;
55
54
  _checkedFonts: Set<string>;
56
- _findAvailableFont(fontName: string, weight?: WeightValue): Promise<PromiseSettledResult<void>[] | undefined>;
57
- queryFonts: false | "local" | "localandremote";
55
+ _findAvailableFont(fontName: string, weight?: WeightValue): Promise<boolean | undefined>;
56
+ queryFonts: 'local' | 'localandremote' | false;
58
57
  _queryLocalFont(fontName: string, weight: WeightValue): Promise<Uint8Array<ArrayBuffer> | undefined>;
59
58
  _queryRemoteFont(postscriptNames: string[]): Promise<Uint8Array<ArrayBuffer> | undefined>;
60
59
  _asyncWrite(font: string): Promise<void>;
@@ -7,16 +7,18 @@ import { Canvas2DRenderer } from "./renderers/2d-renderer.js";
7
7
  import { WebGL1Renderer } from "./renderers/webgl1-renderer.js";
8
8
  import { WebGL2Renderer } from "./renderers/webgl2-renderer.js";
9
9
  import { _applyKeys, _fetch, fetchtext, LIBASS_YCBCR_MAP, THREAD_COUNT, WEIGHT_MAP } from "./util.js";
10
+ const constructor = Symbol.for('constructor');
10
11
  export class ASSRenderer {
11
- _offCanvas;
12
12
  _wasm;
13
13
  _subtitleColorSpace;
14
14
  _videoColorSpace;
15
15
  _malloc;
16
16
  _gpurender;
17
17
  debug = false;
18
- _ready;
19
- constructor(data, getFont) {
18
+ constructor(...args) {
19
+ return this[constructor](...args);
20
+ }
21
+ async [constructor](data, getFont, ctrl) {
20
22
  // remove case sensitivity
21
23
  this._availableFonts = Object.fromEntries(Object.entries(data.availableFonts).map(([k, v]) => [k.trim().toLowerCase(), v]));
22
24
  this.debug = data.debug;
@@ -26,16 +28,6 @@ export class ASSRenderer {
26
28
  // hack, we want custom WASM URLs
27
29
  const _fetch = globalThis.fetch;
28
30
  globalThis.fetch = _ => _fetch(data.wasmUrl);
29
- // TODO: abslink doesnt support transferables yet
30
- const handleMessage = ({ data }) => {
31
- if (data.name === 'offscreenCanvas') {
32
- // await this._ready // needed for webGPU
33
- this._offCanvas = data.ctrl;
34
- this._gpurender.setCanvas(this._offCanvas);
35
- removeEventListener('message', handleMessage);
36
- }
37
- };
38
- addEventListener('message', handleMessage);
39
31
  // const devicePromise = navigator.gpu?.requestAdapter({
40
32
  // powerPreference: 'high-performance'
41
33
  // }).then(adapter => adapter?.requestDevice())
@@ -51,27 +43,24 @@ export class ASSRenderer {
51
43
  catch {
52
44
  this._gpurender = new Canvas2DRenderer();
53
45
  }
46
+ this._gpurender.setCanvas(ctrl);
47
+ this._loadedInitialFonts = !data.fonts.length;
54
48
  // eslint-disable-next-line @typescript-eslint/unbound-method
55
- this._ready = WASM({ __url: data.wasmUrl, __out: (log) => this._log(log) }).then(async ({ _malloc, JASSUB }) => {
56
- this._malloc = _malloc;
57
- this._wasm = new JASSUB(data.width, data.height, this._defaultFont);
58
- // Firefox seems to have issues with multithreading in workers
59
- // a worker inside a worker does not recieve messages properly
60
- this._wasm.setThreads(THREAD_COUNT);
61
- this._loadInitialFonts(data.fonts);
62
- this._wasm.createTrackMem(data.subContent ?? await fetchtext(data.subUrl));
63
- this._subtitleColorSpace = LIBASS_YCBCR_MAP[this._wasm.trackColorSpace];
64
- if (data.libassMemoryLimit > 0 || data.libassGlyphLimit > 0) {
65
- this._wasm.setMemoryLimits(data.libassGlyphLimit || 0, data.libassMemoryLimit || 0);
66
- }
67
- // const device = await devicePromise
68
- // this._gpurender = device ? new WebGPURenderer(device) : new WebGL2Renderer()
69
- // if (this._offCanvas) this._gpurender.setCanvas(this._offCanvas, this._offCanvas.width, this._offCanvas.height)
70
- this._checkColorSpace();
71
- });
72
- }
73
- ready() {
74
- return this._ready;
49
+ const { _malloc, JASSUB } = await WASM({ __url: data.wasmUrl, __out: (log) => this._log(log) });
50
+ this._malloc = _malloc;
51
+ this._wasm = new JASSUB(data.width, data.height, this._defaultFont);
52
+ // Firefox seems to have issues with multithreading in workers
53
+ // a worker inside a worker does not recieve messages properly
54
+ this._wasm.setThreads(THREAD_COUNT);
55
+ if (!this._loadedInitialFonts)
56
+ await this._loadInitialFonts(data.fonts);
57
+ this._wasm.createTrackMem(data.subContent ?? await fetchtext(data.subUrl));
58
+ this._subtitleColorSpace = LIBASS_YCBCR_MAP[this._wasm.trackColorSpace];
59
+ if (data.libassMemoryLimit > 0 || data.libassGlyphLimit > 0) {
60
+ this._wasm.setMemoryLimits(data.libassGlyphLimit || 0, data.libassMemoryLimit || 0);
61
+ }
62
+ this._checkColorSpace();
63
+ return this;
75
64
  }
76
65
  // this passes a string of track data to libass, be it styles, events etc, which it then processes and adds to the track
77
66
  // useful for streaming subtitles
@@ -150,7 +139,7 @@ export class ASSRenderer {
150
139
  }
151
140
  async addFonts(fontOrURLs) {
152
141
  if (!fontOrURLs.length)
153
- return;
142
+ return false;
154
143
  const strings = [];
155
144
  const uint8s = [];
156
145
  for (const fontOrURL of fontOrURLs) {
@@ -165,7 +154,7 @@ export class ASSRenderer {
165
154
  this._allocFonts(uint8s);
166
155
  // this isn't batched like uint8s because software like jellyfin exists, which loads 50+ fonts over the network which takes time...
167
156
  // is connection exhaustion a concern here?
168
- return await Promise.allSettled(strings.map(url => this._asyncWrite(url)));
157
+ return !!await Promise.allSettled(strings.map(url => this._asyncWrite(url)));
169
158
  }
170
159
  // we don't want to run _findAvailableFont before initial fonts are loaded
171
160
  // because it could duplicate fonts
@@ -173,6 +162,7 @@ export class ASSRenderer {
173
162
  async _loadInitialFonts(fontOrURLs) {
174
163
  await this.addFonts(fontOrURLs);
175
164
  this._loadedInitialFonts = true;
165
+ this._wasm.reloadFonts();
176
166
  }
177
167
  _getFont;
178
168
  _availableFonts = {};
@@ -240,7 +230,6 @@ export class ASSRenderer {
240
230
  this._gpurender.resizeCanvas(width, height);
241
231
  }
242
232
  async [finalizer]() {
243
- await this._ready;
244
233
  this._wasm.quitLibrary();
245
234
  this._gpurender.destroy();
246
235
  // @ts-expect-error force GC
@@ -250,8 +239,6 @@ export class ASSRenderer {
250
239
  this._availableFonts = {};
251
240
  }
252
241
  _draw(time, repaint = false) {
253
- if (!this._offCanvas || !this._gpurender)
254
- return;
255
242
  const result = this._wasm.rawRender(time, Number(repaint));
256
243
  if (this._wasm.changed === 0 && !repaint)
257
244
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/worker/worker.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAE/C,OAAO,IAAI,MAAM,0BAA0B,CAAA;AAE3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAiE,MAAM,WAAW,CAAA;AA0BpK,MAAM,OAAO,WAAW;IACtB,UAAU,CAAkB;IAC5B,KAAK,CAAS;IACd,mBAAmB,CAAiD;IACpE,gBAAgB,CAAoB;IACpC,OAAO,CAA2B;IAClC,UAAU,CAAoD;IAE9D,KAAK,GAAG,KAAK,CAAA;IAEb,MAAM,CAAA;IAEN,YAAa,IAAU,EAAE,OAA4F;QACnH,0BAA0B;QAC1B,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3H,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACvB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;QACjC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;QACvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QAEzD,iCAAiC;QACjC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAA;QAC/B,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAE5C,iDAAiD;QACjD,MAAM,aAAa,GAAG,CAAC,EAAE,IAAI,EAAgB,EAAE,EAAE;YAC/C,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBACpC,yCAAyC;gBACzC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAA;gBAC3B,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,UAAW,CAAC,CAAA;gBAC3C,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;YAC/C,CAAC;QACH,CAAC,CAAA;QACD,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;QAE1C,wDAAwD;QACxD,wCAAwC;QACxC,+CAA+C;QAC/C,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YAC5C,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpC,IAAI,CAAC,UAAU,GAAG,IAAI,cAAc,EAAE,CAAA;YACxC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAA;YAC1I,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,UAAU,GAAG,IAAI,gBAAgB,EAAE,CAAA;QAC1C,CAAC;QAED,6DAA6D;QAC7D,IAAI,CAAC,MAAM,GAAI,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;YAC9I,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;YAEtB,IAAI,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;YACnE,8DAA8D;YAC9D,8DAA8D;YAC9D,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;YAEnC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAElC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,IAAI,MAAM,SAAS,CAAC,IAAI,CAAC,MAAO,CAAC,CAAC,CAAA;YAE3E,IAAI,CAAC,mBAAmB,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;YAEvE,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;gBAC5D,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,EAAE,IAAI,CAAC,iBAAiB,IAAI,CAAC,CAAC,CAAA;YACrF,CAAC;YACD,qCAAqC;YACrC,+EAA+E;YAC/E,iHAAiH;YACjH,IAAI,CAAC,gBAAgB,EAAE,CAAA;QACzB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED,wHAAwH;IACxH,iCAAiC;IACjC,WAAW,CAAE,MAAc;QACzB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;IAChC,CAAC;IAED,WAAW,CAAE,KAAe;QAC1B,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAE,CAAC,CAAA;IAClE,CAAC;IAED,SAAS;QACP,MAAM,MAAM,GAA6B,EAAE,CAAA;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YACpD,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAA;YAC3H,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;QAC1G,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED,QAAQ,CAAE,KAAe,EAAE,KAAa;QACtC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAE,CAAC,CAAA;IAChD,CAAC;IAED,WAAW,CAAE,KAAa;QACxB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IAC/B,CAAC;IAED,WAAW,CAAE,KAAe;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAE,CAAA;QAC3D,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QACxB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,SAAS;QACP,MAAM,MAAM,GAAe,EAAE,CAAA;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YACtD,gEAAgE;YAC9D,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,yBAAyB,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAA;YAEnT,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,yBAAyB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QAClS,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED,QAAQ,CAAE,KAAe,EAAE,KAAa;QACtC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAE,CAAC,CAAA;IAChD,CAAC;IAED,WAAW,CAAE,KAAa;QACxB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IAC/B,CAAC;IAED,aAAa,CAAE,KAAe;QAC5B,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAA;IACnD,CAAC;IAED,oBAAoB;QAClB,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAA;IACnC,CAAC;IAED,QAAQ,CAAE,OAAe;QACvB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;QAElC,IAAI,CAAC,mBAAmB,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAE,CAAA;IAC1E,CAAC;IAED,SAAS;QACP,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAA;IAC1B,CAAC;IAED,KAAK,CAAC,aAAa,CAAE,GAAW;QAC9B,IAAI,CAAC,QAAQ,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;IACrC,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE,OAAM;QAC/D,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;IACjF,CAAC;IAED,YAAY,CAAA;IACZ,cAAc,CAAE,QAAgB;QAC9B,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QACjD,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAC9C,CAAC;IAED,KAAK,CAAC,IAAI,CAAE,GAAW;QACrB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAClB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAA;QAC/E,IAAI,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAClI,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAClD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAE,UAAsC;QACpD,IAAI,CAAC,UAAU,CAAC,MAAM;YAAE,OAAM;QAC9B,MAAM,OAAO,GAAa,EAAE,CAAA;QAC5B,MAAM,MAAM,GAAiB,EAAE,CAAA;QAE/B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAClC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACzB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACxB,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,MAAM;YAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;QAE3C,mIAAmI;QACnI,2CAA2C;QAC3C,OAAO,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAC5E,CAAC;IAED,0EAA0E;IAC1E,mCAAmC;IACnC,mBAAmB,GAAG,KAAK,CAAA;IAC3B,KAAK,CAAC,iBAAiB,CAAE,UAAsC;QAC7D,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;QAC/B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAA;IACjC,CAAC;IAED,QAAQ,CAAA;IACR,eAAe,GAAwC,EAAE,CAAA;IACzD,aAAa,GAAG,IAAI,GAAG,EAAU,CAAA;IACjC,KAAK,CAAC,kBAAkB,CAAE,QAAgB,EAAE,MAAoB;QAC9D,IAAI,CAAC,IAAI,CAAC,mBAAmB;YAAE,OAAM;QAErC,wCAAwC;QACxC,0CAA0C;QAC1C,kCAAkC;QAClC,gCAAgC;QAChC,KAAK,MAAM,OAAO,IAAI,UAAU,EAAE,CAAC;YACjC,iEAAiE;YACjE,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC/B,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;gBAC/C,MAAM,KAAK,OAAO,CAAA;gBAClB,MAAK;YACP,CAAC;QACH,CAAC;QAED,MAAM,KAAK,SAAS,CAAA;QAEpB,MAAM,GAAG,GAAG,QAAQ,GAAG,GAAG,GAAG,MAAM,CAAA;QACnC,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAM;QACvC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAE3B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAA;YACxK,IAAI,IAAI;gBAAE,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QAC9C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;QAC1D,CAAC;IACH,CAAC;IAED,UAAU,CAAA;IACV,KAAK,CAAC,eAAe,CAAE,QAAgB,EAAE,MAAmB;QAC1D,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAM;QAC5B,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAC9C,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAE,eAAyB;QAC/C,IAAI,IAAI,CAAC,UAAU,KAAK,gBAAgB;YAAE,OAAM;QAEhD,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC,CAAA;QAC5D,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE,OAAM;QAC5B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAA;QACtC,OAAO,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;IACjD,CAAC;IAED,KAAK,CAAC,WAAW,CAAE,IAAY;QAC7B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAA;IAC7D,CAAC;IAED,OAAO,GAAG,CAAC,CAAA;IACX,WAAW,CAAE,MAAoB;QAC/B,wCAAwC;QACxC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;YAC1C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;QACvE,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAA;IAC1B,CAAC;IAED,aAAa,CAAE,KAAa,EAAE,MAAc,EAAE,UAAkB,EAAE,WAAmB;QACnF,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAAA;QAC/D,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAC7C,CAAC;IAED,KAAK,CAAC,CAAC,SAAS,CAAC;QACf,MAAM,IAAI,CAAC,MAAM,CAAA;QACjB,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAA;QACxB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAA;QACzB,4BAA4B;QAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QACjB,4BAA4B;QAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;QACtB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAA;IAC3B,CAAC;IAED,KAAK,CAAE,IAAY,EAAE,OAAO,GAAG,KAAK;QAClC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAM;QAEhD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAE,CAAA;QAC3D,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO;YAAE,OAAM;QAEhD,MAAM,OAAO,GAAe,EAAE,CAAA;QAE9B,KAAK,IAAI,KAAK,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,IAAK,EAAE,EAAE,CAAC,EAAE,CAAC;YAC/E,uCAAuC;YACvC,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,CAAC,EAAE,KAAK,CAAC,CAAC;gBACV,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,CAAC,EAAE,KAAK,CAAC,CAAC;aACX,CAAC,CAAA;QACJ,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;IACjD,CAAC;IAED,cAAc,CAAE,eAA0C;QACxD,IAAI,eAAe,KAAK,KAAK;YAAE,OAAM;QACrC,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAA;QACvC,IAAI,CAAC,gBAAgB,EAAE,CAAA;IACzB,CAAC;CACF;AAED,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;IAClC,MAAM,CAAC,WAAW,CAAC,CAAA;AACrB,CAAC"}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/worker/worker.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jassub",
3
- "version": "2.4.3",
3
+ "version": "2.5.1",
4
4
  "description": "The Fastest JavaScript SSA/ASS Subtitle Renderer For Browsers",
5
5
  "main": "dist/jassub.js",
6
6
  "type": "module",
@@ -40,7 +40,7 @@
40
40
  },
41
41
  "homepage": "https://github.com/ThaUnknown/jassub",
42
42
  "dependencies": {
43
- "abslink": "^1.1.6",
43
+ "abslink": "^1.2.2",
44
44
  "lfa-ponyfill": "^1.1.0",
45
45
  "rvfc-polyfill": "^1.0.8",
46
46
  "throughput": "^1.0.2"
package/src/jassub.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import 'rvfc-polyfill'
2
2
 
3
- import { proxy, releaseProxy } from 'abslink'
3
+ import { proxy, releaseProxy, transfer } from 'abslink'
4
4
  import { wrap } from 'abslink/w3c'
5
5
 
6
6
  import { Debug } from './debug.ts'
@@ -14,7 +14,7 @@ declare const self: typeof globalThis & {
14
14
  queryLocalFonts: (opts?: { postscriptNames?: string[] }) => ReturnType<typeof queryRemoteFonts>
15
15
  }
16
16
 
17
- const webYCbCrMap = {
17
+ export const webYCbCrMap = {
18
18
  rgb: 'RGB',
19
19
  bt709: 'BT709',
20
20
  // these might not be exactly correct? oops?
@@ -65,8 +65,6 @@ export default class JASSUB {
65
65
  _videoHeight = 0
66
66
  _videoColorSpace: string | null = null
67
67
  _canvas
68
- _canvasParent
69
- _ctrl = new AbortController()
70
68
  _ro = new ResizeObserver(async () => {
71
69
  await this.ready
72
70
  this.resize()
@@ -87,16 +85,11 @@ export default class JASSUB {
87
85
  this._video = opts.video
88
86
  this._canvas = opts.canvas ?? document.createElement('canvas')
89
87
  if (this._video && !opts.canvas) {
90
- this._canvasParent = document.createElement('div')
91
- this._canvasParent.className = 'JASSUB'
92
- this._canvasParent.style.position = 'relative'
93
-
94
- this._canvas.style.display = 'block'
88
+ this._canvas.className = 'JASSUB'
95
89
  this._canvas.style.position = 'absolute'
96
90
  this._canvas.style.pointerEvents = 'none'
97
- this._canvasParent.appendChild(this._canvas)
98
91
 
99
- this._video.insertAdjacentElement('afterend', this._canvasParent)
92
+ this._video.insertAdjacentElement('afterend', this._canvas)
100
93
  }
101
94
 
102
95
  const ctrl = this._canvas.transferControlToOffscreen()
@@ -122,8 +115,8 @@ export default class JASSUB {
122
115
  availableFonts['liberation sans'] = new URL('./default.woff2', import.meta.url).href
123
116
  }
124
117
 
125
- this.ready = (async () => {
126
- this.renderer = await new Renderer({
118
+ this.ready = new Renderer(
119
+ {
127
120
  wasmUrl: JASSUB._supportsSIMD ? modern : normal,
128
121
  width: ctrl.width,
129
122
  height: ctrl.height,
@@ -136,13 +129,18 @@ export default class JASSUB {
136
129
  libassMemoryLimit: opts.libassMemoryLimit ?? 0,
137
130
  libassGlyphLimit: opts.libassGlyphLimit ?? 0,
138
131
  queryFonts: opts.queryFonts ?? 'local'
139
- }, proxy(font => this._getLocalFont(font))) as unknown as Remote<ASSRenderer>
140
-
141
- await this.renderer.ready()
142
- })()
132
+ },
133
+ proxy(font => this._getLocalFont(font)),
134
+ transfer(ctrl, [ctrl])
135
+ ).then((renderer: unknown) => {
136
+ this.renderer = renderer as Remote<ASSRenderer>
137
+ })
143
138
 
144
- if (this._video) this.setVideo(this._video)
145
- this._worker.postMessage({ name: 'offscreenCanvas', ctrl }, [ctrl])
139
+ if (this._video) {
140
+ this.setVideo(this._video)
141
+ } else {
142
+ this._ro.observe(this._canvas)
143
+ }
146
144
  }
147
145
 
148
146
  static _supportsSIMD?: boolean
@@ -160,102 +158,88 @@ export default class JASSUB {
160
158
  if (!(module instanceof WebAssembly.Module) || !(new WebAssembly.Instance(module) instanceof WebAssembly.Instance)) throw new Error('WASM not supported')
161
159
  }
162
160
 
163
- async resize (forceRepaint = !!this._video?.paused, width = 0, height = 0, top = 0, left = 0) {
164
- if ((!width || !height) && this._video) {
165
- const videoSize = this._getVideoPosition()
166
- let renderSize = null
167
- // support anamorphic video
168
- if (this._videoWidth) {
169
- const widthRatio = this._video.videoWidth / this._videoWidth
170
- const heightRatio = this._video.videoHeight / this._videoHeight
171
- renderSize = this._computeCanvasSize((videoSize.width || 0) / widthRatio, (videoSize.height || 0) / heightRatio)
172
- } else {
173
- renderSize = this._computeCanvasSize(videoSize.width || 0, videoSize.height || 0)
174
- }
175
- width = renderSize.width
176
- height = renderSize.height
177
- if (this._canvasParent) {
178
- top = videoSize.y - (this._canvasParent.getBoundingClientRect().top - this._video.getBoundingClientRect().top)
179
- left = videoSize.x
180
- }
181
- this._canvas.style.width = videoSize.width + 'px'
182
- this._canvas.style.height = videoSize.height + 'px'
161
+ async resize (forceRepaint = !!this._video?.paused, renderWidth = 0, renderHeight = 0) {
162
+ const videoWidth = this._video?.videoWidth ?? this._videoWidth
163
+ const videoHeight = this._video?.videoHeight ?? this._videoHeight
164
+ const videoSize = this._getElementBoundingBox(this._video ?? this._canvas, videoWidth, videoHeight)
165
+
166
+ if (!renderWidth || !renderHeight) {
167
+ // || 1 for divide by zero safety
168
+ const widthScale = (this._videoWidth / videoWidth) || 1
169
+ const heightScale = (this._videoHeight / videoHeight) || 1
170
+
171
+ const { width, height } = this._computeRenderSize(videoSize.width * widthScale, videoSize.height * heightScale)
172
+ renderWidth = Math.round(width)
173
+ renderHeight = Math.round(height)
183
174
  }
184
175
 
185
- if (this._canvasParent) {
186
- this._canvas.style.top = top + 'px'
187
- this._canvas.style.left = left + 'px'
176
+ if (this._video) {
177
+ this._canvas.style.width = Math.round(videoSize.width) + 'px'
178
+ this._canvas.style.height = Math.round(videoSize.height) + 'px'
179
+ this._canvas.style.top = videoSize.y + 'px'
180
+ this._canvas.style.left = videoSize.x + 'px'
188
181
  }
189
182
 
190
183
  await this.renderer._resizeCanvas(
191
- width,
192
- height,
193
- (this._videoWidth || this._video?.videoWidth) ?? width,
194
- (this._videoHeight || this._video?.videoHeight) ?? height
184
+ renderWidth,
185
+ renderHeight,
186
+ this._videoWidth || renderWidth,
187
+ this._videoHeight || renderHeight
195
188
  )
196
189
 
197
190
  if (this._lastDemandTime) await this._demandRender(forceRepaint)
198
191
  }
199
192
 
200
- _getVideoPosition (width = this._video!.videoWidth, height = this._video!.videoHeight) {
201
- const videoRatio = width / height
202
- const { offsetWidth, offsetHeight } = this._video!
203
- const elementRatio = offsetWidth / offsetHeight
204
- width = offsetWidth
205
- height = offsetHeight
193
+ _getElementBoundingBox (el: HTMLElement, videoWidth: number, videoHeight: number) {
194
+ const { clientWidth, clientHeight, offsetLeft, offsetTop } = el
195
+
196
+ const videoRatio = videoWidth / videoHeight
197
+ const elementRatio = clientWidth / clientHeight
198
+
206
199
  if (elementRatio > videoRatio) {
207
- width = Math.floor(offsetHeight * videoRatio)
200
+ videoHeight = clientHeight
201
+ videoWidth = clientHeight * videoRatio
208
202
  } else {
209
- height = Math.floor(offsetWidth / videoRatio)
203
+ videoHeight = clientWidth / videoRatio
204
+ videoWidth = clientWidth
210
205
  }
211
206
 
212
- const x = (offsetWidth - width) / 2
213
- const y = (offsetHeight - height) / 2
214
-
215
- return { width, height, x, y }
207
+ return { x: offsetLeft + (clientWidth - videoWidth) / 2, y: offsetTop + (clientHeight - videoHeight) / 2, width: videoWidth, height: videoHeight }
216
208
  }
217
209
 
218
- _computeCanvasSize (width = 0, height = 0) {
210
+ _computeRenderSize (width = 0, height = 0) {
211
+ if (height <= 0 || width <= 0) return { width: 0, height: 0 }
212
+
219
213
  const scalefactor = this.prescaleFactor <= 0 ? 1.0 : this.prescaleFactor
220
214
  const ratio = self.devicePixelRatio || 1
221
215
 
222
- if (height <= 0 || width <= 0) {
223
- width = 0
224
- height = 0
225
- } else {
226
- const sgn = scalefactor < 1 ? -1 : 1
227
- let newH = height * ratio
228
- if (sgn * newH * scalefactor <= sgn * this.prescaleHeightLimit) {
229
- newH *= scalefactor
230
- } else if (sgn * newH < sgn * this.prescaleHeightLimit) {
231
- newH = this.prescaleHeightLimit
232
- }
216
+ const sgn = scalefactor < 1 ? -1 : 1
217
+ let newH = height * ratio
218
+ if (sgn * newH * scalefactor <= sgn * this.prescaleHeightLimit) {
219
+ newH *= scalefactor
220
+ } else if (sgn * newH < sgn * this.prescaleHeightLimit) {
221
+ newH = this.prescaleHeightLimit
222
+ }
233
223
 
234
- if (this.maxRenderHeight > 0 && newH > this.maxRenderHeight) newH = this.maxRenderHeight
224
+ if (this.maxRenderHeight > 0 && newH > this.maxRenderHeight) newH = this.maxRenderHeight
235
225
 
236
- width *= newH / height
237
- height = newH
238
- }
226
+ width *= newH / height
227
+ height = newH
239
228
 
240
229
  return { width, height }
241
230
  }
242
231
 
243
- async setVideo (video: HTMLVideoElement) {
244
- if (video instanceof HTMLVideoElement) {
245
- this._removeListeners()
246
- this._video = video
247
- await this.ready
248
- this._video.requestVideoFrameCallback((now, data) => this._handleRVFC(data))
249
- // everything else is unreliable for this, loadedmetadata and loadeddata included.
250
- if ('VideoFrame' in globalThis) {
251
- video.addEventListener('loadedmetadata', () => this._updateColorSpace(), this._ctrl)
252
- if (video.readyState > 2) this._updateColorSpace()
253
- }
254
- if (video.videoWidth > 0) this.resize()
255
- this._ro.observe(video)
256
- } else {
257
- throw new Error('Video element invalid!')
232
+ async setVideo (target: HTMLVideoElement) {
233
+ this._removeListeners()
234
+ this._video = target
235
+ this._ro.observe(target)
236
+ if (typeof VideoFrame !== 'undefined') {
237
+ target.addEventListener('loadedmetadata', this._boundUpdateColorSpace)
238
+ this._updateColorSpace({ target })
258
239
  }
240
+
241
+ await this.ready
242
+ this._video.requestVideoFrameCallback((now, data) => this._handleRVFC(data))
259
243
  }
260
244
 
261
245
  async _getLocalFont (font: string, weight: WeightValue = 'regular') {
@@ -314,12 +298,15 @@ export default class JASSUB {
314
298
  if (this._skipped) await this._demandRender()
315
299
  }
316
300
 
317
- async _updateColorSpace () {
318
- await this.ready
301
+ _boundUpdateColorSpace = this._updateColorSpace.bind(this)
302
+
303
+ _updateColorSpace ({ target }: { target: EventTarget | null }) {
319
304
  this._video!.requestVideoFrameCallback(async () => {
305
+ if (this._destroyed || this._video !== target) return
320
306
  try {
321
- const frame = new VideoFrame(this._video!)
307
+ const frame = new VideoFrame(this._video)
322
308
  frame.close()
309
+ await this.ready
323
310
  await this.renderer._setColorSpace(webYCbCrMap[frame.colorSpace.matrix!])
324
311
  } catch (e) {
325
312
  // sources can be tainted
@@ -329,18 +316,16 @@ export default class JASSUB {
329
316
  }
330
317
 
331
318
  _removeListeners () {
332
- if (this._video) {
333
- if (this._ro) this._ro.unobserve(this._video)
334
- this._ctrl.abort()
335
- this._ctrl = new AbortController()
336
- }
319
+ this._ro.disconnect()
320
+ this._video?.removeEventListener('loadedmetadata', this._boundUpdateColorSpace)
337
321
  }
338
322
 
339
323
  async destroy () {
340
324
  if (this._destroyed) return
341
325
  this._destroyed = true
342
- if (this._video && this._canvasParent) this._video.parentNode?.removeChild(this._canvasParent)
326
+ this._canvas.remove()
343
327
  this._removeListeners()
328
+ await this.ready
344
329
  await this.renderer?.[releaseProxy]()
345
330
  this._worker.terminate()
346
331
  }
@@ -21,8 +21,9 @@ export const WEIGHT_MAP = [
21
21
 
22
22
  export type WeightValue = typeof WEIGHT_MAP[number]
23
23
 
24
- export const IS_FIREFOX = navigator.userAgent.toLowerCase().includes('firefox')
25
- export const IS_SAFARI = /^((?!chrome|android).)*safari/i.test(navigator.userAgent)
24
+ const UA = navigator.userAgent.toLowerCase()
25
+ export const IS_FIREFOX = UA.includes('firefox')
26
+ export const IS_SAFARI = /applewebkit\/[\d.]+ \(khtml, like gecko\)(?!.*chrome\/)/.test(UA)
26
27
 
27
28
  const a = 'BT601'
28
29
  const b = 'BT709'
@@ -34,19 +34,22 @@ interface opts {
34
34
  queryFonts: 'local' | 'localandremote' | false
35
35
  }
36
36
 
37
+ const constructor = Symbol.for('constructor')
38
+
37
39
  export class ASSRenderer {
38
- _offCanvas?: OffscreenCanvas
39
40
  _wasm!: JASSUB
40
41
  _subtitleColorSpace?: 'BT601' | 'BT709' | 'SMPTE240M' | 'FCC' | null
41
42
  _videoColorSpace?: 'BT709' | 'BT601'
42
43
  _malloc!: (size: number) => number
43
- _gpurender: WebGL2Renderer | WebGL1Renderer | Canvas2DRenderer
44
+ _gpurender!: WebGL2Renderer | WebGL1Renderer | Canvas2DRenderer
44
45
 
45
46
  debug = false
46
47
 
47
- _ready
48
+ constructor (...args: [data: opts, getFont: (font: string, weight: WeightValue) => Promise<Uint8Array<ArrayBuffer> | undefined>, ctrl: OffscreenCanvas]) {
49
+ return this[constructor](...args) as unknown as this
50
+ }
48
51
 
49
- constructor (data: opts, getFont: (font: string, weight: WeightValue) => Promise<Uint8Array<ArrayBuffer> | undefined>) {
52
+ async [constructor] (data: opts, getFont: (font: string, weight: WeightValue) => Promise<Uint8Array<ArrayBuffer> | undefined>, ctrl: OffscreenCanvas) {
50
53
  // remove case sensitivity
51
54
  this._availableFonts = Object.fromEntries(Object.entries(data.availableFonts).map(([k, v]) => [k.trim().toLowerCase(), v]))
52
55
  this.debug = data.debug
@@ -58,17 +61,6 @@ export class ASSRenderer {
58
61
  const _fetch = globalThis.fetch
59
62
  globalThis.fetch = _ => _fetch(data.wasmUrl)
60
63
 
61
- // TODO: abslink doesnt support transferables yet
62
- const handleMessage = ({ data }: MessageEvent) => {
63
- if (data.name === 'offscreenCanvas') {
64
- // await this._ready // needed for webGPU
65
- this._offCanvas = data.ctrl
66
- this._gpurender.setCanvas(this._offCanvas!)
67
- removeEventListener('message', handleMessage)
68
- }
69
- }
70
- addEventListener('message', handleMessage)
71
-
72
64
  // const devicePromise = navigator.gpu?.requestAdapter({
73
65
  // powerPreference: 'high-performance'
74
66
  // }).then(adapter => adapter?.requestDevice())
@@ -83,33 +75,30 @@ export class ASSRenderer {
83
75
  this._gpurender = new Canvas2DRenderer()
84
76
  }
85
77
 
78
+ this._gpurender.setCanvas(ctrl)
79
+
80
+ this._loadedInitialFonts = !data.fonts.length
86
81
  // eslint-disable-next-line @typescript-eslint/unbound-method
87
- this._ready = (WASM({ __url: data.wasmUrl, __out: (log: string) => this._log(log) }) as Promise<MainModule>).then(async ({ _malloc, JASSUB }) => {
88
- this._malloc = _malloc
82
+ const { _malloc, JASSUB } = await (WASM({ __url: data.wasmUrl, __out: (log: string) => this._log(log) }) as Promise<MainModule>)
83
+ this._malloc = _malloc
89
84
 
90
- this._wasm = new JASSUB(data.width, data.height, this._defaultFont)
91
- // Firefox seems to have issues with multithreading in workers
92
- // a worker inside a worker does not recieve messages properly
93
- this._wasm.setThreads(THREAD_COUNT)
85
+ this._wasm = new JASSUB(data.width, data.height, this._defaultFont)
86
+ // Firefox seems to have issues with multithreading in workers
87
+ // a worker inside a worker does not recieve messages properly
88
+ this._wasm.setThreads(THREAD_COUNT)
94
89
 
95
- this._loadInitialFonts(data.fonts)
90
+ if (!this._loadedInitialFonts) await this._loadInitialFonts(data.fonts)
96
91
 
97
- this._wasm.createTrackMem(data.subContent ?? await fetchtext(data.subUrl!))
92
+ this._wasm.createTrackMem(data.subContent ?? await fetchtext(data.subUrl!))
98
93
 
99
- this._subtitleColorSpace = LIBASS_YCBCR_MAP[this._wasm.trackColorSpace]
94
+ this._subtitleColorSpace = LIBASS_YCBCR_MAP[this._wasm.trackColorSpace]
100
95
 
101
- if (data.libassMemoryLimit > 0 || data.libassGlyphLimit > 0) {
102
- this._wasm.setMemoryLimits(data.libassGlyphLimit || 0, data.libassMemoryLimit || 0)
103
- }
104
- // const device = await devicePromise
105
- // this._gpurender = device ? new WebGPURenderer(device) : new WebGL2Renderer()
106
- // if (this._offCanvas) this._gpurender.setCanvas(this._offCanvas, this._offCanvas.width, this._offCanvas.height)
107
- this._checkColorSpace()
108
- })
109
- }
96
+ if (data.libassMemoryLimit > 0 || data.libassGlyphLimit > 0) {
97
+ this._wasm.setMemoryLimits(data.libassGlyphLimit || 0, data.libassMemoryLimit || 0)
98
+ }
99
+ this._checkColorSpace()
110
100
 
111
- ready () {
112
- return this._ready
101
+ return this
113
102
  }
114
103
 
115
104
  // this passes a string of track data to libass, be it styles, events etc, which it then processes and adds to the track
@@ -191,7 +180,7 @@ export class ASSRenderer {
191
180
  this._gpurender.setColorMatrix(this._subtitleColorSpace, this._videoColorSpace)
192
181
  }
193
182
 
194
- _defaultFont
183
+ _defaultFont!: string
195
184
  setDefaultFont (fontName: string) {
196
185
  this._defaultFont = fontName.trim().toLowerCase()
197
186
  this._wasm.setDefaultFont(this._defaultFont)
@@ -206,7 +195,7 @@ export class ASSRenderer {
206
195
  }
207
196
 
208
197
  async addFonts (fontOrURLs: Array<Uint8Array | string>) {
209
- if (!fontOrURLs.length) return
198
+ if (!fontOrURLs.length) return false
210
199
  const strings: string[] = []
211
200
  const uint8s: Uint8Array[] = []
212
201
 
@@ -221,7 +210,7 @@ export class ASSRenderer {
221
210
 
222
211
  // this isn't batched like uint8s because software like jellyfin exists, which loads 50+ fonts over the network which takes time...
223
212
  // is connection exhaustion a concern here?
224
- return await Promise.allSettled(strings.map(url => this._asyncWrite(url)))
213
+ return !!await Promise.allSettled(strings.map(url => this._asyncWrite(url)))
225
214
  }
226
215
 
227
216
  // we don't want to run _findAvailableFont before initial fonts are loaded
@@ -230,9 +219,10 @@ export class ASSRenderer {
230
219
  async _loadInitialFonts (fontOrURLs: Array<Uint8Array | string>) {
231
220
  await this.addFonts(fontOrURLs)
232
221
  this._loadedInitialFonts = true
222
+ this._wasm.reloadFonts()
233
223
  }
234
224
 
235
- _getFont
225
+ _getFont!: (font: string, weight: WeightValue) => Promise<Uint8Array<ArrayBuffer> | undefined>
236
226
  _availableFonts: Record<string, Uint8Array | string> = {}
237
227
  _checkedFonts = new Set<string>()
238
228
  async _findAvailableFont (fontName: string, weight?: WeightValue) {
@@ -265,7 +255,7 @@ export class ASSRenderer {
265
255
  }
266
256
  }
267
257
 
268
- queryFonts
258
+ queryFonts!: 'local' | 'localandremote' | false
269
259
  async _queryLocalFont (fontName: string, weight: WeightValue) {
270
260
  if (!this.queryFonts) return
271
261
  return await this._getFont(fontName, weight)
@@ -302,7 +292,6 @@ export class ASSRenderer {
302
292
  }
303
293
 
304
294
  async [finalizer] () {
305
- await this._ready
306
295
  this._wasm.quitLibrary()
307
296
  this._gpurender.destroy()
308
297
  // @ts-expect-error force GC
@@ -313,8 +302,6 @@ export class ASSRenderer {
313
302
  }
314
303
 
315
304
  _draw (time: number, repaint = false) {
316
- if (!this._offCanvas || !this._gpurender) return
317
-
318
305
  const result = this._wasm.rawRender(time, Number(repaint))!
319
306
  if (this._wasm.changed === 0 && !repaint) return
320
307