libbitsub 1.1.1 → 1.2.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
@@ -8,6 +8,7 @@ Started as a fork of Arcus92's [libpgs-js](https://github.com/Arcus92/libpgs-js)
8
8
 
9
9
  - **PGS (Blu-ray)** subtitle parsing and rendering
10
10
  - **VobSub (DVD)** subtitle parsing and rendering
11
+ - **WebGPU rendering** GPU-accelerated rendering with automatic Canvas2D fallback
11
12
  - **High-performance** Rust-based rendering engine compiled to WebAssembly
12
13
  - **Zero-copy** data transfer between JS and WASM where possible
13
14
  - **Caching** for decoded bitmaps to optimize repeated rendering
@@ -23,12 +24,20 @@ https://gist.github.com/user-attachments/assets/55ac8e11-1964-4fb9-923e-dcac82dc
23
24
 
24
25
  https://gist.github.com/user-attachments/assets/a89ae9fe-23e4-4bc3-8cad-16a3f0fea665
25
26
 
26
- ## Installation
27
+ ### Installation
27
28
 
29
+ **npm / bun**
28
30
  ```bash
31
+ npm install libbitsub
32
+ # or
29
33
  bun add libbitsub
30
34
  ```
31
35
 
36
+ **JSR (Deno)**
37
+ ```bash
38
+ deno add jsr:@altq/libbitsub
39
+ ```
40
+
32
41
  ### Setup for Web Workers (Recommended)
33
42
 
34
43
  For best performance with large subtitle files, copy the WASM files to your public folder so Web Workers can access them:
@@ -207,20 +216,46 @@ setInterval(() => {
207
216
 
208
217
  **Stats Reference:**
209
218
 
210
- | Property | Type | Description |
211
- |----------|------|-------------|
212
- | `framesRendered` | number | Total frames rendered since initialization |
213
- | `framesDropped` | number | Frames dropped due to slow rendering (>16.67ms) |
214
- | `avgRenderTime` | number | Average render time in milliseconds (rolling 60-sample window) |
215
- | `maxRenderTime` | number | Maximum render time in milliseconds |
216
- | `minRenderTime` | number | Minimum render time in milliseconds |
217
- | `lastRenderTime` | number | Most recent render time in milliseconds |
218
- | `renderFps` | number | Current renders per second (based on last 1 second) |
219
- | `usingWorker` | boolean | Whether rendering is using Web Worker (off-main-thread) |
220
- | `cachedFrames` | number | Number of decoded frames currently cached |
221
- | `pendingRenders` | number | Number of frames currently being decoded asynchronously |
222
- | `totalEntries` | number | Total subtitle entries/display sets in the loaded file |
223
- | `currentIndex` | number | Index of the currently displayed subtitle |
219
+ | Property | Type | Description |
220
+ | ---------------- | ------- | -------------------------------------------------------------- |
221
+ | `framesRendered` | number | Total frames rendered since initialization |
222
+ | `framesDropped` | number | Frames dropped due to slow rendering (>16.67ms) |
223
+ | `avgRenderTime` | number | Average render time in milliseconds (rolling 60-sample window) |
224
+ | `maxRenderTime` | number | Maximum render time in milliseconds |
225
+ | `minRenderTime` | number | Minimum render time in milliseconds |
226
+ | `lastRenderTime` | number | Most recent render time in milliseconds |
227
+ | `renderFps` | number | Current renders per second (based on last 1 second) |
228
+ | `usingWorker` | boolean | Whether rendering is using Web Worker (off-main-thread) |
229
+ | `cachedFrames` | number | Number of decoded frames currently cached |
230
+ | `pendingRenders` | number | Number of frames currently being decoded asynchronously |
231
+ | `totalEntries` | number | Total subtitle entries/display sets in the loaded file |
232
+ | `currentIndex` | number | Index of the currently displayed subtitle |
233
+
234
+ ### WebGPU Rendering
235
+
236
+ libbitsub automatically uses WebGPU for GPU-accelerated rendering when available, with automatic fallback to Canvas2D:
237
+
238
+ ```typescript
239
+ import { PgsRenderer, isWebGPUSupported } from 'libbitsub'
240
+
241
+ // Check WebGPU support
242
+ if (isWebGPUSupported()) {
243
+ console.log('WebGPU available - GPU-accelerated rendering enabled')
244
+ }
245
+
246
+ // Configure WebGPU preference
247
+ const renderer = new PgsRenderer({
248
+ video: videoElement,
249
+ subUrl: '/subtitles/movie.sup',
250
+ preferWebGPU: true, // default: true
251
+ onWebGPUFallback: () => console.log('Fell back to Canvas2D')
252
+ })
253
+ ```
254
+
255
+ **Options:**
256
+
257
+ - `preferWebGPU` (boolean): Enable WebGPU rendering if available. Default: `true`
258
+ - `onWebGPUFallback` (function): Callback when WebGPU is unavailable and falls back to Canvas2D
224
259
 
225
260
  ## Low-Level API (Programmatic Use)
226
261
 
@@ -398,18 +433,18 @@ interface SubtitleDisplaySettings {
398
433
 
399
434
  ```typescript
400
435
  interface SubtitleRendererStats {
401
- framesRendered: number // Total frames rendered since initialization
402
- framesDropped: number // Frames dropped due to slow rendering
403
- avgRenderTime: number // Average render time in milliseconds
404
- maxRenderTime: number // Maximum render time in milliseconds
405
- minRenderTime: number // Minimum render time in milliseconds
406
- lastRenderTime: number // Last render time in milliseconds
407
- renderFps: number // Current FPS (renders per second)
408
- usingWorker: boolean // Whether rendering is using web worker
409
- cachedFrames: number // Number of cached frames
410
- pendingRenders: number // Number of pending renders
411
- totalEntries: number // Total subtitle entries/display sets
412
- currentIndex: number // Current subtitle index being displayed
436
+ framesRendered: number // Total frames rendered since initialization
437
+ framesDropped: number // Frames dropped due to slow rendering
438
+ avgRenderTime: number // Average render time in milliseconds
439
+ maxRenderTime: number // Maximum render time in milliseconds
440
+ minRenderTime: number // Minimum render time in milliseconds
441
+ lastRenderTime: number // Last render time in milliseconds
442
+ renderFps: number // Current FPS (renders per second)
443
+ usingWorker: boolean // Whether rendering is using web worker
444
+ cachedFrames: number // Number of cached frames
445
+ pendingRenders: number // Number of pending renders
446
+ totalEntries: number // Total subtitle entries/display sets
447
+ currentIndex: number // Current subtitle index being displayed
413
448
  }
414
449
  ```
415
450
 
@@ -433,5 +468,5 @@ interface SubtitleCompositionData {
433
468
 
434
469
  Licensed under either of
435
470
 
436
- - Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://apache.org/licenses/LICENSE-2.0)
437
- - MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
471
+ - Apache License, Version 2.0
472
+ - MIT license
package/dist/index.d.ts CHANGED
@@ -5,7 +5,7 @@
5
5
  */
6
6
  export { PgsRenderer, VobSubRenderer, type VideoSubtitleOptions, type VideoVobSubOptions, type SubtitleRendererStats } from './wrapper';
7
7
  export { PgsParser, VobSubParserLowLevel, UnifiedSubtitleParser } from './wrapper';
8
- export { initWasm, isWasmInitialized, type SubtitleData, type SubtitleCompositionData, type SubtitleDisplaySettings } from './wrapper';
8
+ export { initWasm, isWasmInitialized, isWebGPUSupported, type SubtitleData, type SubtitleCompositionData, type SubtitleDisplaySettings } from './wrapper';
9
9
  export type { RenderResult, SubtitleFrame, VobSubFrame } from './wrapper';
10
10
  export { PGSRenderer, VobsubRenderer, UnifiedSubtitleRenderer } from './wrapper';
11
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,WAAW,EACX,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC3B,MAAM,WAAW,CAAA;AAGlB,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAGlF,OAAO,EACL,QAAQ,EACR,iBAAiB,EACjB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC7B,MAAM,WAAW,CAAA;AAGlB,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAGzE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,WAAW,EACX,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC3B,MAAM,WAAW,CAAA;AAGlB,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAGlF,OAAO,EACL,QAAQ,EACR,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC7B,MAAM,WAAW,CAAA;AAGlB,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAGzE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAA"}
package/dist/index.js CHANGED
@@ -8,7 +8,7 @@ export { PgsRenderer, VobSubRenderer } from './wrapper';
8
8
  // Low-level parsers for programmatic use
9
9
  export { PgsParser, VobSubParserLowLevel, UnifiedSubtitleParser } from './wrapper';
10
10
  // Utility exports
11
- export { initWasm, isWasmInitialized } from './wrapper';
11
+ export { initWasm, isWasmInitialized, isWebGPUSupported } from './wrapper';
12
12
  // Legacy aliases
13
13
  export { PGSRenderer, VobsubRenderer, UnifiedSubtitleRenderer } from './wrapper';
14
14
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,4EAA4E;AAC5E,OAAO,EACL,WAAW,EACX,cAAc,EAIf,MAAM,WAAW,CAAA;AAElB,yCAAyC;AACzC,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAElF,kBAAkB;AAClB,OAAO,EACL,QAAQ,EACR,iBAAiB,EAIlB,MAAM,WAAW,CAAA;AAKlB,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,4EAA4E;AAC5E,OAAO,EACL,WAAW,EACX,cAAc,EAIf,MAAM,WAAW,CAAA;AAElB,yCAAyC;AACzC,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAElF,kBAAkB;AAClB,OAAO,EACL,QAAQ,EACR,iBAAiB,EACjB,iBAAiB,EAIlB,MAAM,WAAW,CAAA;AAKlB,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAA"}
@@ -3,6 +3,7 @@
3
3
  * Handles canvas overlay, video sync, and subtitle fetching.
4
4
  */
5
5
  import type { SubtitleData, SubtitleDisplaySettings, VideoSubtitleOptions, VideoVobSubOptions } from './types';
6
+ import { WebGPURenderer } from './webgpu-renderer';
6
7
  /** Performance statistics for subtitle renderer */
7
8
  export interface SubtitleRendererStats {
8
9
  /** Total frames rendered since initialization */
@@ -50,6 +51,10 @@ declare abstract class BaseVideoSubtitleRenderer {
50
51
  protected lastRenderedData: SubtitleData | null;
51
52
  /** Display settings for subtitle rendering */
52
53
  protected displaySettings: SubtitleDisplaySettings;
54
+ protected webgpuRenderer: WebGPURenderer | null;
55
+ protected useWebGPU: boolean;
56
+ protected preferWebGPU: boolean;
57
+ protected onWebGPUFallback?: () => void;
53
58
  protected perfStats: {
54
59
  framesRendered: number;
55
60
  framesDropped: number;
@@ -75,6 +80,10 @@ declare abstract class BaseVideoSubtitleRenderer {
75
80
  protected init(): Promise<void>;
76
81
  /** Create the canvas overlay positioned over the video. */
77
82
  protected createCanvas(): void;
83
+ /** Initialize WebGPU renderer. */
84
+ private initWebGPU;
85
+ /** Initialize Canvas2D renderer. */
86
+ private initCanvas2D;
78
87
  /** Called when video seeks. */
79
88
  protected onSeek(): void;
80
89
  /** Calculate the actual video content bounds, accounting for letterboxing/pillarboxing */
@@ -96,6 +105,10 @@ declare abstract class BaseVideoSubtitleRenderer {
96
105
  protected startRenderLoop(): void;
97
106
  /** Render a subtitle frame to the canvas. */
98
107
  protected renderFrame(time: number, index: number): void;
108
+ /** Render using WebGPU. */
109
+ private renderFrameWebGPU;
110
+ /** Render using Canvas2D. */
111
+ private renderFrameCanvas2D;
99
112
  /** Dispose of all resources. */
100
113
  dispose(): void;
101
114
  }
@@ -1 +1 @@
1
- {"version":3,"file":"renderers.d.ts","sourceRoot":"","sources":["../../src/ts/renderers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAY9G,mDAAmD;AACnD,MAAM,WAAW,qBAAqB;IACpC,iDAAiD;IACjD,cAAc,EAAE,MAAM,CAAA;IACtB,2CAA2C;IAC3C,aAAa,EAAE,MAAM,CAAA;IACrB,0CAA0C;IAC1C,aAAa,EAAE,MAAM,CAAA;IACrB,0CAA0C;IAC1C,aAAa,EAAE,MAAM,CAAA;IACrB,0CAA0C;IAC1C,aAAa,EAAE,MAAM,CAAA;IACrB,uCAAuC;IACvC,cAAc,EAAE,MAAM,CAAA;IACtB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAA;IACjB,4CAA4C;IAC5C,WAAW,EAAE,OAAO,CAAA;IACpB,8BAA8B;IAC9B,YAAY,EAAE,MAAM,CAAA;IACpB,gCAAgC;IAChC,cAAc,EAAE,MAAM,CAAA;IACtB,0CAA0C;IAC1C,YAAY,EAAE,MAAM,CAAA;IACpB,6CAA6C;IAC7C,YAAY,EAAE,MAAM,CAAA;CACrB;AAED;;;GAGG;AACH,uBAAe,yBAAyB;IACtC,SAAS,CAAC,KAAK,EAAE,gBAAgB,CAAA;IACjC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAA;IACxB,SAAS,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAO;IACjD,SAAS,CAAC,GAAG,EAAE,wBAAwB,GAAG,IAAI,CAAO;IACrD,SAAS,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAO;IAChD,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAQ;IACnC,SAAS,CAAC,iBAAiB,EAAE,MAAM,CAAK;IACxC,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAK;IACvC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAQ;IACnC,SAAS,CAAC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAO;IACtD,SAAS,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI,CAAO;IACrD,SAAS,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAAO;IACzD,SAAS,CAAC,gBAAgB,EAAE,YAAY,GAAG,IAAI,CAAO;IAEtD,8CAA8C;IAC9C,SAAS,CAAC,eAAe,EAAE,uBAAuB,CAAkC;IAGpF,SAAS,CAAC,SAAS;;;qBAGE,MAAM,EAAE;;uBAEN,MAAM,EAAE;;MAE9B;gBAEW,OAAO,EAAE,oBAAoB;IAKzC,mCAAmC;IACnC,kBAAkB,IAAI,uBAAuB;IAI7C,iCAAiC;IACjC,QAAQ,CAAC,QAAQ,IAAI,qBAAqB;IAE1C,6CAA6C;IAC7C,SAAS,CAAC,YAAY,IAAI,IAAI,CAC5B,qBAAqB,EACrB,aAAa,GAAG,cAAc,GAAG,gBAAgB,GAAG,cAAc,CACnE;IAsBD,+CAA+C;IAC/C,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,IAAI;IAkBpE,yCAAyC;IACzC,oBAAoB,IAAI,IAAI;IAM5B,4BAA4B;IAC5B,SAAS,CAAC,SAAS,IAAI,IAAI;IAI3B,+BAA+B;cACf,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQrC,2DAA2D;IAC3D,SAAS,CAAC,YAAY,IAAI,IAAI;IA6B9B,+BAA+B;IAC/B,SAAS,CAAC,MAAM,IAAI,IAAI;IAExB,0FAA0F;IAC1F,SAAS,CAAC,qBAAqB,IAAI;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAqC1F,sDAAsD;IACtD,SAAS,CAAC,gBAAgB,IAAI,IAAI;IAoBlC,SAAS,CAAC,QAAQ,CAAC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IACjD,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IACvE,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IACzD,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAEzE,mFAAmF;IACnF,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAE1D,6BAA6B;IAC7B,SAAS,CAAC,eAAe,IAAI,IAAI;IA8CjC,6CAA6C;IAC7C,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAgExD,gCAAgC;IAChC,OAAO,IAAI,IAAI;CAkBhB;AAED;;;GAGG;AACH,qBAAa,WAAY,SAAQ,yBAAyB;IACxD,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,SAAS,CAAC,CAAY;IAC9B,OAAO,CAAC,QAAQ,CAAC,CAAY;IAC7B,OAAO,CAAC,OAAO,CAAC,CAAwB;gBAE5B,OAAO,EAAE,oBAAoB;cAQzB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;YA6ChC,gBAAgB;IAwB9B,kDAAkD;IAClD,OAAO,CAAC,WAAW;IAUnB,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAK9D,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAOhD,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IA2BhE,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIjD,SAAS,CAAC,MAAM,IAAI,IAAI;IASxB,kDAAkD;IAClD,QAAQ,IAAI,qBAAqB;IAWjC,OAAO,IAAI,IAAI;CAUhB;AAED;;;GAGG;AACH,qBAAa,cAAe,SAAQ,yBAAyB;IAC3D,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,SAAS,CAAC,CAAY;IAC9B,OAAO,CAAC,QAAQ,CAAC,CAAY;IAC7B,OAAO,CAAC,OAAO,CAAC,CAAwB;IAGxC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,kBAAkB,CAA+B;gBAE7C,OAAO,EAAE,kBAAkB;cASvB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;YAwDhC,gBAAgB;IAuB9B,kDAAkD;IAClD,OAAO,CAAC,WAAW;IAQnB,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAK9D,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAoChD,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IA6BhE,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIjD,SAAS,CAAC,MAAM,IAAI,IAAI;IAaxB,qDAAqD;IACrD,QAAQ,IAAI,qBAAqB;IAWjC,OAAO,IAAI,IAAI;CAUhB"}
1
+ {"version":3,"file":"renderers.d.ts","sourceRoot":"","sources":["../../src/ts/renderers.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ import { initWasm } from './wasm';
6
6
  import { getOrCreateWorker, sendToWorker } from './worker';
7
7
  import { binarySearchTimestamp, convertFrameData, createWorkerState } from './utils';
8
8
  import { PgsParser, VobSubParserLowLevel } from './parsers';
9
+ import { WebGPURenderer, isWebGPUSupported } from './webgpu-renderer';
9
10
  /** Default display settings */
10
11
  const DEFAULT_DISPLAY_SETTINGS = {
11
12
  scale: 1.0,
@@ -31,6 +32,11 @@ class BaseVideoSubtitleRenderer {
31
32
  lastRenderedData = null;
32
33
  /** Display settings for subtitle rendering */
33
34
  displaySettings = { ...DEFAULT_DISPLAY_SETTINGS };
35
+ // WebGPU renderer (optional, falls back to Canvas2D if unavailable)
36
+ webgpuRenderer = null;
37
+ useWebGPU = false;
38
+ preferWebGPU = true;
39
+ onWebGPUFallback;
34
40
  // Performance tracking
35
41
  perfStats = {
36
42
  framesRendered: 0,
@@ -43,6 +49,8 @@ class BaseVideoSubtitleRenderer {
43
49
  constructor(options) {
44
50
  this.video = options.video;
45
51
  this.subUrl = options.subUrl;
52
+ this.preferWebGPU = options.preferWebGPU !== false; // Default to true
53
+ this.onWebGPUFallback = options.onWebGPUFallback;
46
54
  }
47
55
  /** Get current display settings */
48
56
  getDisplaySettings() {
@@ -116,7 +124,13 @@ class BaseVideoSubtitleRenderer {
116
124
  }
117
125
  parent.appendChild(this.canvas);
118
126
  }
119
- this.ctx = this.canvas.getContext('2d');
127
+ // Try WebGPU first if preferred
128
+ if (this.preferWebGPU && isWebGPUSupported()) {
129
+ this.initWebGPU();
130
+ }
131
+ else {
132
+ this.initCanvas2D();
133
+ }
120
134
  this.updateCanvasSize();
121
135
  this.resizeObserver = new ResizeObserver(() => this.updateCanvasSize());
122
136
  this.resizeObserver.observe(this.video);
@@ -127,6 +141,37 @@ class BaseVideoSubtitleRenderer {
127
141
  this.onSeek();
128
142
  });
129
143
  }
144
+ /** Initialize WebGPU renderer. */
145
+ async initWebGPU() {
146
+ try {
147
+ this.webgpuRenderer = new WebGPURenderer();
148
+ await this.webgpuRenderer.init();
149
+ if (!this.canvas)
150
+ return;
151
+ const bounds = this.getVideoContentBounds();
152
+ const width = Math.max(1, bounds.width * window.devicePixelRatio);
153
+ const height = Math.max(1, bounds.height * window.devicePixelRatio);
154
+ await this.webgpuRenderer.setCanvas(this.canvas, width, height);
155
+ this.useWebGPU = true;
156
+ console.log('[libbitsub] Using WebGPU renderer');
157
+ }
158
+ catch (error) {
159
+ console.warn('[libbitsub] WebGPU init failed, falling back to Canvas2D:', error);
160
+ this.webgpuRenderer?.destroy();
161
+ this.webgpuRenderer = null;
162
+ this.useWebGPU = false;
163
+ this.initCanvas2D();
164
+ this.onWebGPUFallback?.();
165
+ }
166
+ }
167
+ /** Initialize Canvas2D renderer. */
168
+ initCanvas2D() {
169
+ if (!this.canvas)
170
+ return;
171
+ this.ctx = this.canvas.getContext('2d');
172
+ this.useWebGPU = false;
173
+ console.log('[libbitsub] Using Canvas2D renderer');
174
+ }
130
175
  /** Called when video seeks. */
131
176
  onSeek() { }
132
177
  /** Calculate the actual video content bounds, accounting for letterboxing/pillarboxing */
@@ -171,13 +216,19 @@ class BaseVideoSubtitleRenderer {
171
216
  const bounds = this.getVideoContentBounds();
172
217
  const width = bounds.width > 0 ? bounds.width : this.video.videoWidth || 1920;
173
218
  const height = bounds.height > 0 ? bounds.height : this.video.videoHeight || 1080;
174
- this.canvas.width = width * window.devicePixelRatio;
175
- this.canvas.height = height * window.devicePixelRatio;
219
+ const pixelWidth = Math.max(1, width * window.devicePixelRatio);
220
+ const pixelHeight = Math.max(1, height * window.devicePixelRatio);
221
+ this.canvas.width = pixelWidth;
222
+ this.canvas.height = pixelHeight;
176
223
  // Position canvas to match video content area
177
224
  this.canvas.style.left = `${bounds.x}px`;
178
225
  this.canvas.style.top = `${bounds.y}px`;
179
226
  this.canvas.style.width = `${bounds.width}px`;
180
227
  this.canvas.style.height = `${bounds.height}px`;
228
+ // Update WebGPU renderer size if active
229
+ if (this.useWebGPU && this.webgpuRenderer) {
230
+ this.webgpuRenderer.updateSize(pixelWidth, pixelHeight);
231
+ }
181
232
  this.lastRenderedIndex = -1;
182
233
  this.lastRenderedTime = -1;
183
234
  }
@@ -222,7 +273,7 @@ class BaseVideoSubtitleRenderer {
222
273
  }
223
274
  /** Render a subtitle frame to the canvas. */
224
275
  renderFrame(time, index) {
225
- if (!this.ctx || !this.canvas)
276
+ if (!this.canvas)
226
277
  return;
227
278
  // Get the data for this index
228
279
  const data = index >= 0 ? this.renderAtIndex(index) : undefined;
@@ -237,6 +288,40 @@ class BaseVideoSubtitleRenderer {
237
288
  return;
238
289
  }
239
290
  }
291
+ // Use WebGPU or Canvas2D based on availability
292
+ if (this.useWebGPU && this.webgpuRenderer) {
293
+ this.renderFrameWebGPU(data, index);
294
+ }
295
+ else {
296
+ this.renderFrameCanvas2D(data, index);
297
+ }
298
+ }
299
+ /** Render using WebGPU. */
300
+ renderFrameWebGPU(data, index) {
301
+ if (!this.webgpuRenderer || !this.canvas)
302
+ return;
303
+ // If no subtitle at this index, clear
304
+ if (index < 0 || !data || data.compositionData.length === 0) {
305
+ this.webgpuRenderer.clear();
306
+ this.lastRenderedData = null;
307
+ return;
308
+ }
309
+ // Store for potential reuse
310
+ this.lastRenderedData = data;
311
+ // Calculate base scale factors
312
+ const baseScaleX = this.canvas.width / data.width;
313
+ const baseScaleY = this.canvas.height / data.height;
314
+ // Apply display settings
315
+ const { scale, verticalOffset } = this.displaySettings;
316
+ const scaleX = baseScaleX * scale;
317
+ const scaleY = baseScaleY * scale;
318
+ const offsetY = (verticalOffset / 100) * this.canvas.height;
319
+ this.webgpuRenderer.render(data.compositionData, data.width, data.height, scaleX, scaleY, offsetY);
320
+ }
321
+ /** Render using Canvas2D. */
322
+ renderFrameCanvas2D(data, index) {
323
+ if (!this.ctx || !this.canvas)
324
+ return;
240
325
  // Clear canvas
241
326
  this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
242
327
  // If no subtitle at this index, we're done
@@ -283,12 +368,18 @@ class BaseVideoSubtitleRenderer {
283
368
  }
284
369
  this.resizeObserver?.disconnect();
285
370
  this.resizeObserver = null;
371
+ // Clean up WebGPU renderer
372
+ if (this.webgpuRenderer) {
373
+ this.webgpuRenderer.destroy();
374
+ this.webgpuRenderer = null;
375
+ }
286
376
  this.canvas?.parentElement?.removeChild(this.canvas);
287
377
  this.canvas = null;
288
378
  this.ctx = null;
289
379
  this.tempCanvas = null;
290
380
  this.tempCtx = null;
291
381
  this.lastRenderedData = null;
382
+ this.useWebGPU = false;
292
383
  }
293
384
  }
294
385
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"renderers.js","sourceRoot":"","sources":["../../src/ts/renderers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderers.js","sourceRoot":"","sources":["../../src/ts/renderers.ts"],"names":[],"mappings":"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"}
@@ -29,12 +29,16 @@ export interface VideoSubtitleOptions {
29
29
  subUrl: string;
30
30
  /** Worker URL (kept for API compatibility, not used in WASM version) */
31
31
  workerUrl?: string;
32
+ /** Prefer WebGPU renderer if available (default: true) */
33
+ preferWebGPU?: boolean;
32
34
  /** Callback when subtitle loading starts */
33
35
  onLoading?: () => void;
34
36
  /** Callback when subtitle loading completes */
35
37
  onLoaded?: () => void;
36
38
  /** Callback when subtitle loading fails */
37
39
  onError?: (error: Error) => void;
40
+ /** Callback when WebGPU is unavailable and falling back to Canvas2D */
41
+ onWebGPUFallback?: () => void;
38
42
  }
39
43
  /** Options for VobSub video subtitle renderer. */
40
44
  export interface VideoVobSubOptions extends VideoSubtitleOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ts/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ts/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import type { SubtitleCompositionData } from './types';
2
+ interface TextureInfo {
3
+ texture: GPUTexture;
4
+ view: GPUTextureView;
5
+ width: number;
6
+ height: number;
7
+ }
8
+ /**
9
+ * Check if WebGPU is supported in the current browser.
10
+ */
11
+ export declare function isWebGPUSupported(): boolean;
12
+ /**
13
+ * WebGPU-based subtitle renderer.
14
+ * Uploads RGBA bitmap data to GPU textures and renders textured quads.
15
+ */
16
+ export declare class WebGPURenderer {
17
+ device: GPUDevice | null;
18
+ context: GPUCanvasContext | null;
19
+ pipeline: GPURenderPipeline | null;
20
+ sampler: GPUSampler | null;
21
+ bindGroupLayout: GPUBindGroupLayout | null;
22
+ uniformBuffer: GPUBuffer | null;
23
+ quadDataBuffers: GPUBuffer[];
24
+ textures: TextureInfo[];
25
+ pendingDestroyTextures: GPUTexture[];
26
+ format: GPUTextureFormat;
27
+ private _canvas;
28
+ private _initPromise;
29
+ private _initialized;
30
+ /**
31
+ * Initialize the WebGPU renderer.
32
+ * Returns a promise that resolves when initialization is complete.
33
+ */
34
+ init(): Promise<void>;
35
+ private _initDevice;
36
+ /**
37
+ * Configure the canvas for WebGPU rendering.
38
+ */
39
+ setCanvas(canvas: HTMLCanvasElement, width: number, height: number): Promise<void>;
40
+ /**
41
+ * Update canvas dimensions.
42
+ */
43
+ updateSize(width: number, height: number): void;
44
+ private createTextureInfo;
45
+ /**
46
+ * Render subtitle compositions to the canvas.
47
+ */
48
+ render(compositions: SubtitleCompositionData[], screenWidth: number, screenHeight: number, scaleX: number, scaleY: number, offsetY: number): void;
49
+ /**
50
+ * Clear the canvas.
51
+ */
52
+ clear(): void;
53
+ /**
54
+ * Check if renderer is initialized.
55
+ */
56
+ get initialized(): boolean;
57
+ /**
58
+ * Destroy all resources.
59
+ */
60
+ destroy(): void;
61
+ }
62
+ export {};
63
+ //# sourceMappingURL=webgpu-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webgpu-renderer.d.ts","sourceRoot":"","sources":["../../src/ts/webgpu-renderer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA;AAuEtD,UAAU,WAAW;IACnB,OAAO,EAAE,UAAU,CAAA;IACnB,IAAI,EAAE,cAAc,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;GAGG;AACH,qBAAa,cAAc;IACzB,MAAM,EAAE,SAAS,GAAG,IAAI,CAAO;IAC/B,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAO;IACvC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAO;IACzC,OAAO,EAAE,UAAU,GAAG,IAAI,CAAO;IACjC,eAAe,EAAE,kBAAkB,GAAG,IAAI,CAAO;IAGjD,aAAa,EAAE,SAAS,GAAG,IAAI,CAAO;IAGtC,eAAe,EAAE,SAAS,EAAE,CAAK;IAGjC,QAAQ,EAAE,WAAW,EAAE,CAAK;IAC5B,sBAAsB,EAAE,UAAU,EAAE,CAAK;IAEzC,MAAM,EAAE,gBAAgB,CAAe;IAEvC,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,YAAY,CAAQ;IAE5B;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAMb,WAAW;IA0GzB;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BxF;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAS/C,OAAO,CAAC,iBAAiB;IAezB;;OAEG;IACH,MAAM,CACJ,YAAY,EAAE,uBAAuB,EAAE,EACvC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,IAAI;IA0HP;;OAEG;IACH,KAAK,IAAI,IAAI;IAqBb;;OAEG;IACH,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;OAEG;IACH,OAAO,IAAI,IAAI;CAwBhB"}
@@ -0,0 +1,405 @@
1
+ /// <reference types="@webgpu/types" />
2
+ // WGSL Vertex Shader
3
+ const VERTEX_SHADER = /* wgsl */ `
4
+ struct VertexOutput {
5
+ @builtin(position) position: vec4f,
6
+ @location(0) texCoord: vec2f,
7
+ }
8
+
9
+ struct Uniforms {
10
+ resolution: vec2f,
11
+ }
12
+
13
+ struct QuadData {
14
+ destRect: vec4f, // x, y, w, h in pixels
15
+ texSize: vec4f, // texW, texH, 0, 0
16
+ }
17
+
18
+ @group(0) @binding(0) var<uniform> uniforms: Uniforms;
19
+ @group(0) @binding(1) var<storage, read> quadData: QuadData;
20
+
21
+ // Quad vertices (two triangles)
22
+ const QUAD_POSITIONS = array<vec2f, 6>(
23
+ vec2f(0.0, 0.0),
24
+ vec2f(1.0, 0.0),
25
+ vec2f(0.0, 1.0),
26
+ vec2f(1.0, 0.0),
27
+ vec2f(1.0, 1.0),
28
+ vec2f(0.0, 1.0)
29
+ );
30
+
31
+ @vertex
32
+ fn vertexMain(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput {
33
+ var output: VertexOutput;
34
+
35
+ let quadPos = QUAD_POSITIONS[vertexIndex];
36
+ let wh = quadData.destRect.zw;
37
+
38
+ // Calculate pixel position
39
+ let pixelPos = quadData.destRect.xy + quadPos * wh;
40
+
41
+ // Convert to clip space (-1 to 1)
42
+ var clipPos = (pixelPos / uniforms.resolution) * 2.0 - 1.0;
43
+ clipPos.y = -clipPos.y; // Flip Y for canvas coordinates
44
+
45
+ output.position = vec4f(clipPos, 0.0, 1.0);
46
+ output.texCoord = quadPos;
47
+
48
+ return output;
49
+ }
50
+ `;
51
+ // WGSL Fragment Shader - sample RGBA texture directly
52
+ const FRAGMENT_SHADER = /* wgsl */ `
53
+ @group(0) @binding(2) var texSampler: sampler;
54
+ @group(0) @binding(3) var tex: texture_2d<f32>;
55
+
56
+ struct FragmentInput {
57
+ @location(0) texCoord: vec2f,
58
+ }
59
+
60
+ @fragment
61
+ fn fragmentMain(input: FragmentInput) -> @location(0) vec4f {
62
+ // Sample RGBA texture
63
+ let color = textureSample(tex, texSampler, input.texCoord);
64
+
65
+ // Output with premultiplied alpha
66
+ return vec4f(color.rgb * color.a, color.a);
67
+ }
68
+ `;
69
+ /**
70
+ * Check if WebGPU is supported in the current browser.
71
+ */
72
+ export function isWebGPUSupported() {
73
+ return typeof navigator !== 'undefined' && 'gpu' in navigator;
74
+ }
75
+ /**
76
+ * WebGPU-based subtitle renderer.
77
+ * Uploads RGBA bitmap data to GPU textures and renders textured quads.
78
+ */
79
+ export class WebGPURenderer {
80
+ device = null;
81
+ context = null;
82
+ pipeline = null;
83
+ sampler = null;
84
+ bindGroupLayout = null;
85
+ // Uniform buffer for resolution
86
+ uniformBuffer = null;
87
+ // Quad data buffers (one per composition)
88
+ quadDataBuffers = [];
89
+ // Textures for compositions
90
+ textures = [];
91
+ pendingDestroyTextures = [];
92
+ format = 'bgra8unorm';
93
+ _canvas = null;
94
+ _initPromise = null;
95
+ _initialized = false;
96
+ /**
97
+ * Initialize the WebGPU renderer.
98
+ * Returns a promise that resolves when initialization is complete.
99
+ */
100
+ async init() {
101
+ if (this._initPromise)
102
+ return this._initPromise;
103
+ this._initPromise = this._initDevice();
104
+ return this._initPromise;
105
+ }
106
+ async _initDevice() {
107
+ if (!navigator.gpu) {
108
+ throw new Error('WebGPU not supported');
109
+ }
110
+ const adapter = await navigator.gpu.requestAdapter({
111
+ powerPreference: 'high-performance'
112
+ });
113
+ if (!adapter) {
114
+ throw new Error('No WebGPU adapter found');
115
+ }
116
+ this.device = await adapter.requestDevice();
117
+ this.format = navigator.gpu.getPreferredCanvasFormat();
118
+ // Create shader modules
119
+ const vertexModule = this.device.createShaderModule({
120
+ code: VERTEX_SHADER
121
+ });
122
+ const fragmentModule = this.device.createShaderModule({
123
+ code: FRAGMENT_SHADER
124
+ });
125
+ // Create sampler - use linear filtering for smooth scaling
126
+ this.sampler = this.device.createSampler({
127
+ magFilter: 'linear',
128
+ minFilter: 'linear',
129
+ addressModeU: 'clamp-to-edge',
130
+ addressModeV: 'clamp-to-edge'
131
+ });
132
+ // Create uniform buffer
133
+ this.uniformBuffer = this.device.createBuffer({
134
+ size: 16, // vec2f resolution + padding
135
+ usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
136
+ });
137
+ // Create bind group layout
138
+ this.bindGroupLayout = this.device.createBindGroupLayout({
139
+ entries: [
140
+ {
141
+ binding: 0,
142
+ visibility: GPUShaderStage.VERTEX,
143
+ buffer: { type: 'uniform' }
144
+ },
145
+ {
146
+ binding: 1,
147
+ visibility: GPUShaderStage.VERTEX,
148
+ buffer: { type: 'read-only-storage' }
149
+ },
150
+ {
151
+ binding: 2,
152
+ visibility: GPUShaderStage.FRAGMENT,
153
+ sampler: { type: 'filtering' }
154
+ },
155
+ {
156
+ binding: 3,
157
+ visibility: GPUShaderStage.FRAGMENT,
158
+ texture: { sampleType: 'float' }
159
+ }
160
+ ]
161
+ });
162
+ // Create pipeline layout
163
+ const pipelineLayout = this.device.createPipelineLayout({
164
+ bindGroupLayouts: [this.bindGroupLayout]
165
+ });
166
+ // Create render pipeline with alpha blending
167
+ this.pipeline = this.device.createRenderPipeline({
168
+ layout: pipelineLayout,
169
+ vertex: {
170
+ module: vertexModule,
171
+ entryPoint: 'vertexMain'
172
+ },
173
+ fragment: {
174
+ module: fragmentModule,
175
+ entryPoint: 'fragmentMain',
176
+ targets: [
177
+ {
178
+ format: this.format,
179
+ blend: {
180
+ color: {
181
+ srcFactor: 'one',
182
+ dstFactor: 'one-minus-src-alpha',
183
+ operation: 'add'
184
+ },
185
+ alpha: {
186
+ srcFactor: 'one',
187
+ dstFactor: 'one-minus-src-alpha',
188
+ operation: 'add'
189
+ }
190
+ }
191
+ }
192
+ ]
193
+ },
194
+ primitive: {
195
+ topology: 'triangle-list'
196
+ }
197
+ });
198
+ this._initialized = true;
199
+ }
200
+ /**
201
+ * Configure the canvas for WebGPU rendering.
202
+ */
203
+ async setCanvas(canvas, width, height) {
204
+ await this.init();
205
+ if (!this.device) {
206
+ throw new Error('WebGPU device not initialized');
207
+ }
208
+ this._canvas = canvas;
209
+ // Get WebGPU context
210
+ if (!this.context) {
211
+ this.context = canvas.getContext('webgpu');
212
+ if (!this.context) {
213
+ throw new Error('Could not get WebGPU context');
214
+ }
215
+ this.context.configure({
216
+ device: this.device,
217
+ format: this.format,
218
+ alphaMode: 'premultiplied'
219
+ });
220
+ }
221
+ // Update canvas size
222
+ canvas.width = width;
223
+ canvas.height = height;
224
+ // Update uniform buffer with resolution
225
+ this.device.queue.writeBuffer(this.uniformBuffer, 0, new Float32Array([width, height]));
226
+ }
227
+ /**
228
+ * Update canvas dimensions.
229
+ */
230
+ updateSize(width, height) {
231
+ if (!this.device || !this._canvas)
232
+ return;
233
+ this._canvas.width = width;
234
+ this._canvas.height = height;
235
+ this.device.queue.writeBuffer(this.uniformBuffer, 0, new Float32Array([width, height]));
236
+ }
237
+ createTextureInfo(width, height) {
238
+ const texture = this.device.createTexture({
239
+ size: [width, height],
240
+ format: this.format,
241
+ usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT
242
+ });
243
+ return {
244
+ texture,
245
+ view: texture.createView(),
246
+ width,
247
+ height
248
+ };
249
+ }
250
+ /**
251
+ * Render subtitle compositions to the canvas.
252
+ */
253
+ render(compositions, screenWidth, screenHeight, scaleX, scaleY, offsetY) {
254
+ if (!this.device || !this.context || !this.pipeline)
255
+ return;
256
+ const commandEncoder = this.device.createCommandEncoder();
257
+ const textureView = this.context.getCurrentTexture().createView();
258
+ // Begin render pass with clear
259
+ const renderPass = commandEncoder.beginRenderPass({
260
+ colorAttachments: [
261
+ {
262
+ view: textureView,
263
+ clearValue: { r: 0, g: 0, b: 0, a: 0 },
264
+ loadOp: 'clear',
265
+ storeOp: 'store'
266
+ }
267
+ ]
268
+ });
269
+ renderPass.setPipeline(this.pipeline);
270
+ // Grow buffers if needed
271
+ while (this.textures.length < compositions.length) {
272
+ this.textures.push(this.createTextureInfo(64, 64));
273
+ }
274
+ while (this.quadDataBuffers.length < compositions.length) {
275
+ this.quadDataBuffers.push(this.device.createBuffer({
276
+ size: 32, // 2 x vec4f
277
+ usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST
278
+ }));
279
+ }
280
+ // Render each composition
281
+ for (let i = 0; i < compositions.length; i++) {
282
+ const comp = compositions[i];
283
+ const { pixelData, x, y } = comp;
284
+ const { width, height, data } = pixelData;
285
+ if (width <= 0 || height <= 0)
286
+ continue;
287
+ let texInfo = this.textures[i];
288
+ // Recreate texture if size changed
289
+ if (texInfo.width !== width || texInfo.height !== height) {
290
+ this.pendingDestroyTextures.push(texInfo.texture);
291
+ texInfo = this.createTextureInfo(width, height);
292
+ this.textures[i] = texInfo;
293
+ }
294
+ let uploadData;
295
+ if (this.format === 'bgra8unorm') {
296
+ const bgraData = new Uint8Array(data.length);
297
+ for (let j = 0; j < data.length; j += 4) {
298
+ bgraData[j] = data[j + 2]; // B <- R
299
+ bgraData[j + 1] = data[j + 1]; // G <- G
300
+ bgraData[j + 2] = data[j]; // R <- B
301
+ bgraData[j + 3] = data[j + 3]; // A <- A
302
+ }
303
+ uploadData = bgraData;
304
+ }
305
+ else {
306
+ uploadData = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
307
+ }
308
+ // Upload pixel data to texture
309
+ this.device.queue.writeTexture({ texture: texInfo.texture }, uploadData.buffer, { bytesPerRow: width * 4 }, { width, height });
310
+ // Calculate scaled position and size
311
+ const scaledWidth = width * scaleX;
312
+ const scaledHeight = height * scaleY;
313
+ const baseX = x * (this._canvas.width / screenWidth);
314
+ const baseY = y * (this._canvas.height / screenHeight);
315
+ const centeredX = baseX + (width * (this._canvas.width / screenWidth) - scaledWidth) / 2;
316
+ const adjustedY = baseY + offsetY + (height * (this._canvas.height / screenHeight) - scaledHeight);
317
+ // Update quad data buffer
318
+ const quadData = new Float32Array([
319
+ // destRect
320
+ centeredX,
321
+ adjustedY,
322
+ scaledWidth,
323
+ scaledHeight,
324
+ // texSize
325
+ width,
326
+ height,
327
+ 0,
328
+ 0
329
+ ]);
330
+ const quadBuffer = this.quadDataBuffers[i];
331
+ this.device.queue.writeBuffer(quadBuffer, 0, quadData);
332
+ // Create bind group for this composition
333
+ const bindGroup = this.device.createBindGroup({
334
+ layout: this.bindGroupLayout,
335
+ entries: [
336
+ { binding: 0, resource: { buffer: this.uniformBuffer } },
337
+ { binding: 1, resource: { buffer: quadBuffer } },
338
+ { binding: 2, resource: this.sampler },
339
+ { binding: 3, resource: texInfo.view }
340
+ ]
341
+ });
342
+ renderPass.setBindGroup(0, bindGroup);
343
+ renderPass.draw(6); // 6 vertices for quad
344
+ }
345
+ renderPass.end();
346
+ this.device.queue.submit([commandEncoder.finish()]);
347
+ // Destroy old textures after submit
348
+ for (const tex of this.pendingDestroyTextures) {
349
+ tex.destroy();
350
+ }
351
+ this.pendingDestroyTextures = [];
352
+ }
353
+ /**
354
+ * Clear the canvas.
355
+ */
356
+ clear() {
357
+ if (!this.device || !this.context)
358
+ return;
359
+ const commandEncoder = this.device.createCommandEncoder();
360
+ const textureView = this.context.getCurrentTexture().createView();
361
+ const renderPass = commandEncoder.beginRenderPass({
362
+ colorAttachments: [
363
+ {
364
+ view: textureView,
365
+ clearValue: { r: 0, g: 0, b: 0, a: 0 },
366
+ loadOp: 'clear',
367
+ storeOp: 'store'
368
+ }
369
+ ]
370
+ });
371
+ renderPass.end();
372
+ this.device.queue.submit([commandEncoder.finish()]);
373
+ }
374
+ /**
375
+ * Check if renderer is initialized.
376
+ */
377
+ get initialized() {
378
+ return this._initialized;
379
+ }
380
+ /**
381
+ * Destroy all resources.
382
+ */
383
+ destroy() {
384
+ for (const tex of this.textures) {
385
+ tex.texture.destroy();
386
+ }
387
+ this.textures = [];
388
+ for (const tex of this.pendingDestroyTextures) {
389
+ tex.destroy();
390
+ }
391
+ this.pendingDestroyTextures = [];
392
+ this.uniformBuffer?.destroy();
393
+ for (const buf of this.quadDataBuffers) {
394
+ buf.destroy();
395
+ }
396
+ this.quadDataBuffers = [];
397
+ this.device?.destroy();
398
+ this.device = null;
399
+ this.context = null;
400
+ this._canvas = null;
401
+ this._initialized = false;
402
+ this._initPromise = null;
403
+ }
404
+ }
405
+ //# sourceMappingURL=webgpu-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webgpu-renderer.js","sourceRoot":"","sources":["../../src/ts/webgpu-renderer.ts"],"names":[],"mappings":"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"}
package/dist/wrapper.d.ts CHANGED
@@ -4,6 +4,7 @@
4
4
  */
5
5
  export type { SubtitleData, SubtitleCompositionData, SubtitleDisplaySettings, VideoSubtitleOptions, VideoVobSubOptions, RenderResult, SubtitleFrame, VobSubFrame } from './ts/types';
6
6
  export { initWasm, isWasmInitialized } from './ts/wasm';
7
+ export { isWebGPUSupported } from './ts/webgpu-renderer';
7
8
  export { PgsParser, VobSubParserLowLevel, UnifiedSubtitleParser } from './ts/parsers';
8
9
  export { PgsRenderer, VobSubRenderer, type SubtitleRendererStats } from './ts/renderers';
9
10
  import { PgsRenderer as _PgsRenderer, VobSubRenderer as _VobSubRenderer } from './ts/renderers';
@@ -1 +1 @@
1
- {"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../src/wrapper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACV,YAAY,EACZ,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,WAAW,EACZ,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAGvD,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAGrF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAMxF,OAAO,EAAE,WAAW,IAAI,YAAY,EAAE,cAAc,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAC/F,OAAO,EAAE,qBAAqB,IAAI,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAE9E,0CAA0C;AAC1C,eAAO,MAAM,WAAW,qBAAe,CAAA;AAEvC,6CAA6C;AAC7C,eAAO,MAAM,cAAc,wBAAkB,CAAA;AAE7C,oDAAoD;AACpD,eAAO,MAAM,uBAAuB,+BAAyB,CAAA"}
1
+ {"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../src/wrapper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACV,YAAY,EACZ,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,WAAW,EACZ,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAGvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAGxD,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAGrF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAMxF,OAAO,EAAE,WAAW,IAAI,YAAY,EAAE,cAAc,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAC/F,OAAO,EAAE,qBAAqB,IAAI,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAE9E,0CAA0C;AAC1C,eAAO,MAAM,WAAW,qBAAe,CAAA;AAEvC,6CAA6C;AAC7C,eAAO,MAAM,cAAc,wBAAkB,CAAA;AAE7C,oDAAoD;AACpD,eAAO,MAAM,uBAAuB,+BAAyB,CAAA"}
package/dist/wrapper.js CHANGED
@@ -4,6 +4,8 @@
4
4
  */
5
5
  // Re-export WASM management
6
6
  export { initWasm, isWasmInitialized } from './ts/wasm';
7
+ // Re-export WebGPU utilities
8
+ export { isWebGPUSupported } from './ts/webgpu-renderer';
7
9
  // Re-export parsers
8
10
  export { PgsParser, VobSubParserLowLevel, UnifiedSubtitleParser } from './ts/parsers';
9
11
  // Re-export renderers
@@ -1 +1 @@
1
- {"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../src/wrapper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,4BAA4B;AAC5B,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAEvD,oBAAoB;AACpB,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAErF,sBAAsB;AACtB,OAAO,EAAE,WAAW,EAAE,cAAc,EAA8B,MAAM,gBAAgB,CAAA;AAExF,gFAAgF;AAChF,8CAA8C;AAC9C,gFAAgF;AAEhF,OAAO,EAAE,WAAW,IAAI,YAAY,EAAE,cAAc,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAC/F,OAAO,EAAE,qBAAqB,IAAI,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAE9E,0CAA0C;AAC1C,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAA;AAEvC,6CAA6C;AAC7C,MAAM,CAAC,MAAM,cAAc,GAAG,eAAe,CAAA;AAE7C,oDAAoD;AACpD,MAAM,CAAC,MAAM,uBAAuB,GAAG,sBAAsB,CAAA"}
1
+ {"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../src/wrapper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,4BAA4B;AAC5B,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAEvD,6BAA6B;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAExD,oBAAoB;AACpB,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAErF,sBAAsB;AACtB,OAAO,EAAE,WAAW,EAAE,cAAc,EAA8B,MAAM,gBAAgB,CAAA;AAExF,gFAAgF;AAChF,8CAA8C;AAC9C,gFAAgF;AAEhF,OAAO,EAAE,WAAW,IAAI,YAAY,EAAE,cAAc,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAC/F,OAAO,EAAE,qBAAqB,IAAI,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAE9E,0CAA0C;AAC1C,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAA;AAEvC,6CAA6C;AAC7C,MAAM,CAAC,MAAM,cAAc,GAAG,eAAe,CAAA;AAE7C,oDAAoD;AACpD,MAAM,CAAC,MAAM,uBAAuB,GAAG,sBAAsB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "libbitsub",
3
- "version": "1.1.1",
3
+ "version": "1.2.1",
4
4
  "author": "altqx",
5
5
  "license": "MIT OR Apache-2.0",
6
6
  "description": "High-performance WASM renderer for graphical subtitles (PGS and VobSub)",
@@ -50,5 +50,8 @@
50
50
  "peerDependencies": {},
51
51
  "engines": {
52
52
  "node": ">=18"
53
+ },
54
+ "dependencies": {
55
+ "@webgpu/types": "^0.1.68"
53
56
  }
54
57
  }
package/pkg/README.md CHANGED
@@ -8,6 +8,7 @@ Started as a fork of Arcus92's [libpgs-js](https://github.com/Arcus92/libpgs-js)
8
8
 
9
9
  - **PGS (Blu-ray)** subtitle parsing and rendering
10
10
  - **VobSub (DVD)** subtitle parsing and rendering
11
+ - **WebGPU rendering** GPU-accelerated rendering with automatic Canvas2D fallback
11
12
  - **High-performance** Rust-based rendering engine compiled to WebAssembly
12
13
  - **Zero-copy** data transfer between JS and WASM where possible
13
14
  - **Caching** for decoded bitmaps to optimize repeated rendering
@@ -23,12 +24,20 @@ https://gist.github.com/user-attachments/assets/55ac8e11-1964-4fb9-923e-dcac82dc
23
24
 
24
25
  https://gist.github.com/user-attachments/assets/a89ae9fe-23e4-4bc3-8cad-16a3f0fea665
25
26
 
26
- ## Installation
27
+ ### Installation
27
28
 
29
+ **npm / bun**
28
30
  ```bash
31
+ npm install libbitsub
32
+ # or
29
33
  bun add libbitsub
30
34
  ```
31
35
 
36
+ **JSR (Deno)**
37
+ ```bash
38
+ deno add jsr:@altq/libbitsub
39
+ ```
40
+
32
41
  ### Setup for Web Workers (Recommended)
33
42
 
34
43
  For best performance with large subtitle files, copy the WASM files to your public folder so Web Workers can access them:
@@ -207,20 +216,46 @@ setInterval(() => {
207
216
 
208
217
  **Stats Reference:**
209
218
 
210
- | Property | Type | Description |
211
- |----------|------|-------------|
212
- | `framesRendered` | number | Total frames rendered since initialization |
213
- | `framesDropped` | number | Frames dropped due to slow rendering (>16.67ms) |
214
- | `avgRenderTime` | number | Average render time in milliseconds (rolling 60-sample window) |
215
- | `maxRenderTime` | number | Maximum render time in milliseconds |
216
- | `minRenderTime` | number | Minimum render time in milliseconds |
217
- | `lastRenderTime` | number | Most recent render time in milliseconds |
218
- | `renderFps` | number | Current renders per second (based on last 1 second) |
219
- | `usingWorker` | boolean | Whether rendering is using Web Worker (off-main-thread) |
220
- | `cachedFrames` | number | Number of decoded frames currently cached |
221
- | `pendingRenders` | number | Number of frames currently being decoded asynchronously |
222
- | `totalEntries` | number | Total subtitle entries/display sets in the loaded file |
223
- | `currentIndex` | number | Index of the currently displayed subtitle |
219
+ | Property | Type | Description |
220
+ | ---------------- | ------- | -------------------------------------------------------------- |
221
+ | `framesRendered` | number | Total frames rendered since initialization |
222
+ | `framesDropped` | number | Frames dropped due to slow rendering (>16.67ms) |
223
+ | `avgRenderTime` | number | Average render time in milliseconds (rolling 60-sample window) |
224
+ | `maxRenderTime` | number | Maximum render time in milliseconds |
225
+ | `minRenderTime` | number | Minimum render time in milliseconds |
226
+ | `lastRenderTime` | number | Most recent render time in milliseconds |
227
+ | `renderFps` | number | Current renders per second (based on last 1 second) |
228
+ | `usingWorker` | boolean | Whether rendering is using Web Worker (off-main-thread) |
229
+ | `cachedFrames` | number | Number of decoded frames currently cached |
230
+ | `pendingRenders` | number | Number of frames currently being decoded asynchronously |
231
+ | `totalEntries` | number | Total subtitle entries/display sets in the loaded file |
232
+ | `currentIndex` | number | Index of the currently displayed subtitle |
233
+
234
+ ### WebGPU Rendering
235
+
236
+ libbitsub automatically uses WebGPU for GPU-accelerated rendering when available, with automatic fallback to Canvas2D:
237
+
238
+ ```typescript
239
+ import { PgsRenderer, isWebGPUSupported } from 'libbitsub'
240
+
241
+ // Check WebGPU support
242
+ if (isWebGPUSupported()) {
243
+ console.log('WebGPU available - GPU-accelerated rendering enabled')
244
+ }
245
+
246
+ // Configure WebGPU preference
247
+ const renderer = new PgsRenderer({
248
+ video: videoElement,
249
+ subUrl: '/subtitles/movie.sup',
250
+ preferWebGPU: true, // default: true
251
+ onWebGPUFallback: () => console.log('Fell back to Canvas2D')
252
+ })
253
+ ```
254
+
255
+ **Options:**
256
+
257
+ - `preferWebGPU` (boolean): Enable WebGPU rendering if available. Default: `true`
258
+ - `onWebGPUFallback` (function): Callback when WebGPU is unavailable and falls back to Canvas2D
224
259
 
225
260
  ## Low-Level API (Programmatic Use)
226
261
 
@@ -398,18 +433,18 @@ interface SubtitleDisplaySettings {
398
433
 
399
434
  ```typescript
400
435
  interface SubtitleRendererStats {
401
- framesRendered: number // Total frames rendered since initialization
402
- framesDropped: number // Frames dropped due to slow rendering
403
- avgRenderTime: number // Average render time in milliseconds
404
- maxRenderTime: number // Maximum render time in milliseconds
405
- minRenderTime: number // Minimum render time in milliseconds
406
- lastRenderTime: number // Last render time in milliseconds
407
- renderFps: number // Current FPS (renders per second)
408
- usingWorker: boolean // Whether rendering is using web worker
409
- cachedFrames: number // Number of cached frames
410
- pendingRenders: number // Number of pending renders
411
- totalEntries: number // Total subtitle entries/display sets
412
- currentIndex: number // Current subtitle index being displayed
436
+ framesRendered: number // Total frames rendered since initialization
437
+ framesDropped: number // Frames dropped due to slow rendering
438
+ avgRenderTime: number // Average render time in milliseconds
439
+ maxRenderTime: number // Maximum render time in milliseconds
440
+ minRenderTime: number // Minimum render time in milliseconds
441
+ lastRenderTime: number // Last render time in milliseconds
442
+ renderFps: number // Current FPS (renders per second)
443
+ usingWorker: boolean // Whether rendering is using web worker
444
+ cachedFrames: number // Number of cached frames
445
+ pendingRenders: number // Number of pending renders
446
+ totalEntries: number // Total subtitle entries/display sets
447
+ currentIndex: number // Current subtitle index being displayed
413
448
  }
414
449
  ```
415
450
 
@@ -433,5 +468,5 @@ interface SubtitleCompositionData {
433
468
 
434
469
  Licensed under either of
435
470
 
436
- - Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://apache.org/licenses/LICENSE-2.0)
437
- - MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
471
+ - Apache License, Version 2.0
472
+ - MIT license
Binary file
package/pkg/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "altqx"
6
6
  ],
7
7
  "description": "High-performance WASM renderer for graphical subtitles (PGS and VobSub)",
8
- "version": "1.1.1",
8
+ "version": "1.2.1",
9
9
  "license": "MIT OR Apache-2.0",
10
10
  "repository": {
11
11
  "type": "git",
package/src/wrapper.ts CHANGED
@@ -18,6 +18,9 @@ export type {
18
18
  // Re-export WASM management
19
19
  export { initWasm, isWasmInitialized } from './ts/wasm'
20
20
 
21
+ // Re-export WebGPU utilities
22
+ export { isWebGPUSupported } from './ts/webgpu-renderer'
23
+
21
24
  // Re-export parsers
22
25
  export { PgsParser, VobSubParserLowLevel, UnifiedSubtitleParser } from './ts/parsers'
23
26