jassub 2.3.3 → 2.4.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.
@@ -5,8 +5,10 @@ import { queryRemoteFonts } from 'lfa-ponyfill'
5
5
 
6
6
  import WASM from '../wasm/jassub-worker.js'
7
7
 
8
- import { _applyKeys, _fetch, fetchtext, IS_FIREFOX, LIBASS_YCBCR_MAP, WEIGHT_MAP, type ASSEvent, type ASSImage, type ASSStyle, type WeightValue } from './util.ts'
9
- import { WebGL2Renderer } from './webgl-renderer.ts'
8
+ import { Canvas2DRenderer } from './renderers/2d-renderer.ts'
9
+ import { WebGL1Renderer } from './renderers/webgl1-renderer.ts'
10
+ import { WebGL2Renderer } from './renderers/webgl2-renderer.ts'
11
+ import { _applyKeys, _fetch, fetchtext, LIBASS_YCBCR_MAP, THREAD_COUNT, WEIGHT_MAP, type ASSEvent, type ASSImage, type ASSStyle, type WeightValue } from './util.ts'
10
12
 
11
13
  import type { JASSUB, MainModule } from '../wasm/types.d.ts'
12
14
  // import { WebGPURenderer } from './webgpu-renderer'
@@ -38,7 +40,7 @@ export class ASSRenderer {
38
40
  _subtitleColorSpace?: 'BT601' | 'BT709' | 'SMPTE240M' | 'FCC' | null
39
41
  _videoColorSpace?: 'BT709' | 'BT601'
40
42
  _malloc!: (size: number) => number
41
- _gpurender = new WebGL2Renderer()
43
+ _gpurender: WebGL2Renderer | WebGL1Renderer | Canvas2DRenderer
42
44
 
43
45
  debug = false
44
46
 
@@ -57,7 +59,7 @@ export class ASSRenderer {
57
59
  globalThis.fetch = _ => _fetch(data.wasmUrl)
58
60
 
59
61
  // TODO: abslink doesnt support transferables yet
60
- const handleMessage = async ({ data }: MessageEvent) => {
62
+ const handleMessage = ({ data }: MessageEvent) => {
61
63
  if (data.name === 'offscreenCanvas') {
62
64
  // await this._ready // needed for webGPU
63
65
  this._offCanvas = data.ctrl
@@ -70,6 +72,16 @@ export class ASSRenderer {
70
72
  // const devicePromise = navigator.gpu?.requestAdapter({
71
73
  // powerPreference: 'high-performance'
72
74
  // }).then(adapter => adapter?.requestDevice())
75
+ try {
76
+ const testCanvas = new OffscreenCanvas(1, 1)
77
+ if (testCanvas.getContext('webgl2')) {
78
+ this._gpurender = new WebGL2Renderer()
79
+ } else {
80
+ this._gpurender = testCanvas.getContext('webgl') ? new WebGL1Renderer() : new Canvas2DRenderer()
81
+ }
82
+ } catch {
83
+ this._gpurender = new Canvas2DRenderer()
84
+ }
73
85
 
74
86
  // eslint-disable-next-line @typescript-eslint/unbound-method
75
87
  this._ready = (WASM({ __url: data.wasmUrl, __out: (log: string) => this._log(log) }) as Promise<MainModule>).then(async ({ _malloc, JASSUB }) => {
@@ -78,7 +90,7 @@ export class ASSRenderer {
78
90
  this._wasm = new JASSUB(data.width, data.height, this._defaultFont)
79
91
  // Firefox seems to have issues with multithreading in workers
80
92
  // a worker inside a worker does not recieve messages properly
81
- this._wasm.setThreads(!IS_FIREFOX && self.crossOriginIsolated ? Math.min(Math.max(1, navigator.hardwareConcurrency - 2), 8) : 1)
93
+ this._wasm.setThreads(THREAD_COUNT)
82
94
 
83
95
  this._loadInitialFonts(data.fonts)
84
96