jassub 2.2.7 → 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.
- package/README.md +52 -0
- package/dist/default.woff2 +0 -0
- package/dist/jassub.d.ts +12 -12
- package/dist/jassub.js +27 -40
- package/dist/jassub.js.map +1 -1
- package/dist/wasm/jassub-worker.js +4 -0
- package/dist/wasm/jassub-worker.js.map +1 -1
- package/dist/worker/util.d.ts +10 -4
- package/dist/worker/util.js +20 -20
- package/dist/worker/util.js.map +1 -1
- package/dist/worker/webgl-renderer.d.ts +1 -1
- package/dist/worker/webgl-renderer.js +1 -1
- package/dist/worker/webgl-renderer.js.map +1 -1
- package/dist/worker/worker.d.ts +24 -19
- package/dist/worker/worker.js +110 -68
- package/dist/worker/worker.js.map +1 -1
- package/package.json +5 -2
- package/src/jassub.ts +42 -47
- package/src/worker/util.ts +30 -22
- package/src/worker/webgl-renderer.ts +1 -3
- package/src/worker/worker.ts +115 -76
package/dist/worker/worker.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { finalizer } from 'abslink';
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import type { JASSUB } from '../wasm/types.
|
|
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
|
-
|
|
13
|
+
defaultFont: string;
|
|
14
14
|
debug: boolean;
|
|
15
15
|
libassMemoryLimit: number;
|
|
16
16
|
libassGlyphLimit: number;
|
|
17
|
-
|
|
17
|
+
queryFonts: 'local' | 'localandremote' | false;
|
|
18
18
|
}
|
|
19
19
|
export declare class ASSRenderer {
|
|
20
20
|
_offCanvas?: OffscreenCanvas;
|
|
@@ -24,34 +24,39 @@ 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
|
-
|
|
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.
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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;
|
|
55
60
|
_resizeCanvas(width: number, height: number, videoWidth: number, videoHeight: number): void;
|
|
56
61
|
[finalizer](): Promise<void>;
|
|
57
62
|
_draw(time: number, repaint?: boolean): void;
|
package/dist/worker/worker.js
CHANGED
|
@@ -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 {
|
|
6
|
-
import { WebGL2Renderer } from
|
|
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
|
-
|
|
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.
|
|
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);
|
|
@@ -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
|
-
|
|
44
|
-
|
|
45
|
-
this._malloc =
|
|
46
|
-
|
|
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
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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,68 +102,122 @@ 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.
|
|
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(
|
|
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
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
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.
|
|
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
|
-
|
|
152
|
-
if (
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
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
|
-
//
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
this.
|
|
166
|
-
this.
|
|
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
|
-
|
|
169
|
-
|
|
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
|
-
|
|
172
|
-
|
|
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
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
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
222
|
_resizeCanvas(width, height, videoWidth, videoHeight) {
|
|
181
223
|
this._wasm.resizeCanvas(width, height, videoWidth, videoHeight);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/worker/worker.ts"],"names":[],"mappings":"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"}
|
|
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.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "The Fastest JavaScript SSA/ASS Subtitle Renderer For Browsers",
|
|
5
5
|
"main": "dist/jassub.js",
|
|
6
6
|
"type": "module",
|
|
@@ -9,11 +9,13 @@
|
|
|
9
9
|
"dist/worker/*",
|
|
10
10
|
"dist/jassub.*",
|
|
11
11
|
"dist/debug.*",
|
|
12
|
+
"dist/default.woff2",
|
|
12
13
|
"!dist/wasm/jassub-worker-modern.js",
|
|
13
14
|
"README.md",
|
|
14
15
|
"LICENSE",
|
|
15
16
|
"index.d.ts",
|
|
16
|
-
"src/**/*.ts"
|
|
17
|
+
"src/**/*.ts",
|
|
18
|
+
"!src/default.woff2"
|
|
17
19
|
],
|
|
18
20
|
"repository": {
|
|
19
21
|
"type": "git",
|
|
@@ -39,6 +41,7 @@
|
|
|
39
41
|
"homepage": "https://github.com/ThaUnknown/jassub",
|
|
40
42
|
"dependencies": {
|
|
41
43
|
"abslink": "^1.1.6",
|
|
44
|
+
"lfa-ponyfill": "^1.1.0",
|
|
42
45
|
"rvfc-polyfill": "^1.0.8",
|
|
43
46
|
"throughput": "^1.0.2"
|
|
44
47
|
},
|
package/src/jassub.ts
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
|
-
/* eslint-disable camelcase */
|
|
2
1
|
import 'rvfc-polyfill'
|
|
3
2
|
|
|
4
3
|
import { proxy, releaseProxy } from 'abslink'
|
|
5
4
|
import { wrap } from 'abslink/w3c'
|
|
6
5
|
|
|
7
|
-
import { Debug } from './debug'
|
|
6
|
+
import { Debug } from './debug.ts'
|
|
8
7
|
|
|
9
|
-
import type {
|
|
8
|
+
import type { WeightValue } from './worker/util.ts'
|
|
10
9
|
import type { ASSRenderer } from './worker/worker'
|
|
11
10
|
import type { Remote } from 'abslink'
|
|
11
|
+
import type { queryRemoteFonts } from 'lfa-ponyfill'
|
|
12
|
+
|
|
13
|
+
declare const self: typeof globalThis & {
|
|
14
|
+
queryLocalFonts: (opts?: { postscriptNames?: string[] }) => ReturnType<typeof queryRemoteFonts>
|
|
15
|
+
}
|
|
12
16
|
|
|
13
17
|
const webYCbCrMap = {
|
|
14
18
|
rgb: 'RGB',
|
|
@@ -18,10 +22,6 @@ const webYCbCrMap = {
|
|
|
18
22
|
smpte170m: 'BT601'// alias BT.601 NTSC... whats the difference?
|
|
19
23
|
} as const
|
|
20
24
|
|
|
21
|
-
export type ASSEvent = Omit<ASS_Event, keyof ClassHandle>
|
|
22
|
-
export type ASSStyle = Omit<ASS_Style, keyof ClassHandle>
|
|
23
|
-
export type ASSImage = Omit<ASS_Image, keyof ClassHandle>
|
|
24
|
-
|
|
25
25
|
export type JASSUBOptions = {
|
|
26
26
|
timeOffset?: number
|
|
27
27
|
debug?: boolean
|
|
@@ -31,12 +31,10 @@ export type JASSUBOptions = {
|
|
|
31
31
|
workerUrl?: string
|
|
32
32
|
wasmUrl?: string
|
|
33
33
|
modernWasmUrl?: string
|
|
34
|
-
|
|
35
|
-
subContent?: string
|
|
36
|
-
fonts?: string[] | Uint8Array[]
|
|
34
|
+
fonts?: Array<string | Uint8Array>
|
|
37
35
|
availableFonts?: Record<string, Uint8Array | string>
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
defaultFont?: string
|
|
37
|
+
queryFonts?: 'local' | 'localandremote' | false
|
|
40
38
|
libassMemoryLimit?: number
|
|
41
39
|
libassGlyphLimit?: number
|
|
42
40
|
} & ({
|
|
@@ -45,6 +43,12 @@ export type JASSUBOptions = {
|
|
|
45
43
|
} | {
|
|
46
44
|
video?: HTMLVideoElement
|
|
47
45
|
canvas: HTMLCanvasElement
|
|
46
|
+
}) & ({
|
|
47
|
+
subUrl: string
|
|
48
|
+
subContent?: string
|
|
49
|
+
} | {
|
|
50
|
+
subUrl?: string
|
|
51
|
+
subContent: string
|
|
48
52
|
})
|
|
49
53
|
|
|
50
54
|
export default class JASSUB {
|
|
@@ -111,23 +115,27 @@ export default class JASSUB {
|
|
|
111
115
|
const Renderer = wrap<typeof ASSRenderer>(this._worker)
|
|
112
116
|
|
|
113
117
|
const modern = opts.modernWasmUrl ?? new URL('./wasm/jassub-worker-modern.wasm', import.meta.url).href
|
|
114
|
-
const
|
|
118
|
+
const normal = opts.wasmUrl ?? new URL('./wasm/jassub-worker.wasm', import.meta.url).href
|
|
119
|
+
|
|
120
|
+
const availableFonts = opts.availableFonts ?? {}
|
|
121
|
+
if (!availableFonts['liberation sans'] && !opts.defaultFont) {
|
|
122
|
+
availableFonts['liberation sans'] = new URL('./default.woff2', import.meta.url).href
|
|
123
|
+
}
|
|
115
124
|
|
|
116
125
|
this.ready = (async () => {
|
|
117
126
|
this.renderer = await new Renderer({
|
|
118
|
-
wasmUrl: JASSUB._supportsSIMD ? modern :
|
|
127
|
+
wasmUrl: JASSUB._supportsSIMD ? modern : normal,
|
|
119
128
|
width: ctrl.width,
|
|
120
129
|
height: ctrl.height,
|
|
121
130
|
subUrl: opts.subUrl,
|
|
122
131
|
subContent: opts.subContent ?? null,
|
|
123
132
|
fonts: opts.fonts ?? [],
|
|
124
|
-
availableFonts
|
|
125
|
-
|
|
133
|
+
availableFonts,
|
|
134
|
+
defaultFont: opts.defaultFont ?? 'liberation sans',
|
|
126
135
|
debug: !!opts.debug,
|
|
127
136
|
libassMemoryLimit: opts.libassMemoryLimit ?? 0,
|
|
128
137
|
libassGlyphLimit: opts.libassGlyphLimit ?? 0,
|
|
129
|
-
|
|
130
|
-
useLocalFonts: typeof queryLocalFonts !== 'undefined' && (opts.useLocalFonts ?? true)
|
|
138
|
+
queryFonts: opts.queryFonts ?? 'local'
|
|
131
139
|
}, proxy(font => this._getLocalFont(font))) as unknown as Remote<ASSRenderer>
|
|
132
140
|
|
|
133
141
|
await this.renderer.ready()
|
|
@@ -174,8 +182,10 @@ export default class JASSUB {
|
|
|
174
182
|
this._canvas.style.height = videoSize.height + 'px'
|
|
175
183
|
}
|
|
176
184
|
|
|
177
|
-
this.
|
|
178
|
-
|
|
185
|
+
if (this._canvasParent) {
|
|
186
|
+
this._canvas.style.top = top + 'px'
|
|
187
|
+
this._canvas.style.left = left + 'px'
|
|
188
|
+
}
|
|
179
189
|
|
|
180
190
|
await this.renderer._resizeCanvas(
|
|
181
191
|
width,
|
|
@@ -248,36 +258,21 @@ export default class JASSUB {
|
|
|
248
258
|
}
|
|
249
259
|
}
|
|
250
260
|
|
|
251
|
-
async
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
for (const font of fonts) {
|
|
258
|
-
const blob: Blob = await font.blob()
|
|
259
|
-
this.renderer.addFont(new Uint8Array(await blob.arrayBuffer()))
|
|
260
|
-
}
|
|
261
|
-
} catch (e) {
|
|
262
|
-
console.warn('Local fonts API:', e)
|
|
261
|
+
async _getLocalFont (font: string, weight: WeightValue = 'regular') {
|
|
262
|
+
// electron by default has all permissions enabled, and it doesn't have perm query
|
|
263
|
+
// if this happens, just send it
|
|
264
|
+
if (navigator.permissions?.query) {
|
|
265
|
+
const { state } = await navigator.permissions.query({ name: 'local-fonts' as PermissionName })
|
|
266
|
+
if (state !== 'granted') return
|
|
263
267
|
}
|
|
264
|
-
}
|
|
265
268
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
const permission = await navigator.permissions.query({ name: 'local-fonts' })
|
|
273
|
-
if (permission.state === 'granted') {
|
|
274
|
-
await this._sendLocalFont(font)
|
|
275
|
-
}
|
|
276
|
-
} else {
|
|
277
|
-
await this._sendLocalFont(font)
|
|
269
|
+
for (const data of await self.queryLocalFonts()) {
|
|
270
|
+
const family = data.family.toLowerCase()
|
|
271
|
+
const style = data.style.toLowerCase()
|
|
272
|
+
if (family === font && style === weight) {
|
|
273
|
+
const blob = await data.blob()
|
|
274
|
+
return new Uint8Array(await blob.arrayBuffer())
|
|
278
275
|
}
|
|
279
|
-
} catch (e) {
|
|
280
|
-
console.warn('Local fonts API:', e)
|
|
281
276
|
}
|
|
282
277
|
}
|
|
283
278
|
|
package/src/worker/util.ts
CHANGED
|
@@ -1,35 +1,43 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export const read_ = (url: string, ab = false) => {
|
|
4
|
-
const xhr = new XMLHttpRequest()
|
|
5
|
-
xhr.open('GET', url, false)
|
|
6
|
-
xhr.responseType = ab ? 'arraybuffer' : 'text'
|
|
7
|
-
xhr.send(null)
|
|
8
|
-
return xhr.response
|
|
9
|
-
}
|
|
1
|
+
/* eslint-disable camelcase */
|
|
2
|
+
import type { ASS_Event, ASS_Image, ASS_Style, ClassHandle } from '../wasm/types.d.ts'
|
|
10
3
|
|
|
11
|
-
export
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
4
|
+
export type ASSEvent = Omit<ASS_Event, keyof ClassHandle>
|
|
5
|
+
export type ASSStyle = Omit<ASS_Style, keyof ClassHandle>
|
|
6
|
+
export type ASSImage = Omit<ASS_Image, keyof ClassHandle>
|
|
7
|
+
|
|
8
|
+
// offset by 1, 0 = 1, to match CSS font-weight values, but dividing by 100 gives the correct index
|
|
9
|
+
export const WEIGHT_MAP = [
|
|
10
|
+
'thin',
|
|
11
|
+
'extralight',
|
|
12
|
+
'light',
|
|
13
|
+
'regular', // Normal isn't used
|
|
14
|
+
'medium',
|
|
15
|
+
'semibold',
|
|
16
|
+
'bold',
|
|
17
|
+
'extrabold',
|
|
18
|
+
'black',
|
|
19
|
+
'ultrablack'
|
|
20
|
+
] as const
|
|
21
|
+
|
|
22
|
+
export type WeightValue = typeof WEIGHT_MAP[number]
|
|
23
|
+
|
|
24
|
+
export const IS_FIREFOX = navigator.userAgent.toLowerCase().includes('firefox')
|
|
23
25
|
|
|
24
26
|
const a = 'BT601'
|
|
25
27
|
const b = 'BT709'
|
|
26
28
|
const c = 'SMPTE240M'
|
|
27
29
|
const d = 'FCC'
|
|
28
30
|
|
|
29
|
-
export const
|
|
31
|
+
export const LIBASS_YCBCR_MAP = [null, a, null, a, a, b, b, c, c, d, d] as const
|
|
30
32
|
|
|
31
33
|
export function _applyKeys<T extends (ASSEvent | ASSStyle)> (input: T, output: T) {
|
|
32
34
|
for (const v of Object.keys(input) as Array<keyof T>) {
|
|
33
35
|
output[v] = input[v]
|
|
34
36
|
}
|
|
35
37
|
}
|
|
38
|
+
|
|
39
|
+
export const _fetch = globalThis.fetch
|
|
40
|
+
export async function fetchtext (url: string) {
|
|
41
|
+
const res = await _fetch(url)
|
|
42
|
+
return await res.text()
|
|
43
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { IS_FIREFOX, type ASSImage } from './util.ts'
|
|
2
2
|
|
|
3
3
|
declare const self: DedicatedWorkerGlobalScope &
|
|
4
4
|
typeof globalThis & {
|
|
@@ -6,8 +6,6 @@ declare const self: DedicatedWorkerGlobalScope &
|
|
|
6
6
|
WASMMEMORY: WebAssembly.Memory
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
const IS_FIREFOX = navigator.userAgent.toLowerCase().includes('firefox')
|
|
10
|
-
|
|
11
9
|
const THREAD_COUNT = !IS_FIREFOX && self.crossOriginIsolated ? Math.min(Math.max(1, navigator.hardwareConcurrency - 2), 8) : 1
|
|
12
10
|
|
|
13
11
|
// @ts-expect-error new experimental API
|