libbitsub 1.1.0 → 1.2.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/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
@@ -207,20 +208,46 @@ setInterval(() => {
207
208
 
208
209
  **Stats Reference:**
209
210
 
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 |
211
+ | Property | Type | Description |
212
+ | ---------------- | ------- | -------------------------------------------------------------- |
213
+ | `framesRendered` | number | Total frames rendered since initialization |
214
+ | `framesDropped` | number | Frames dropped due to slow rendering (>16.67ms) |
215
+ | `avgRenderTime` | number | Average render time in milliseconds (rolling 60-sample window) |
216
+ | `maxRenderTime` | number | Maximum render time in milliseconds |
217
+ | `minRenderTime` | number | Minimum render time in milliseconds |
218
+ | `lastRenderTime` | number | Most recent render time in milliseconds |
219
+ | `renderFps` | number | Current renders per second (based on last 1 second) |
220
+ | `usingWorker` | boolean | Whether rendering is using Web Worker (off-main-thread) |
221
+ | `cachedFrames` | number | Number of decoded frames currently cached |
222
+ | `pendingRenders` | number | Number of frames currently being decoded asynchronously |
223
+ | `totalEntries` | number | Total subtitle entries/display sets in the loaded file |
224
+ | `currentIndex` | number | Index of the currently displayed subtitle |
225
+
226
+ ### WebGPU Rendering
227
+
228
+ libbitsub automatically uses WebGPU for GPU-accelerated rendering when available, with automatic fallback to Canvas2D:
229
+
230
+ ```typescript
231
+ import { PgsRenderer, isWebGPUSupported } from 'libbitsub'
232
+
233
+ // Check WebGPU support
234
+ if (isWebGPUSupported()) {
235
+ console.log('WebGPU available - GPU-accelerated rendering enabled')
236
+ }
237
+
238
+ // Configure WebGPU preference
239
+ const renderer = new PgsRenderer({
240
+ video: videoElement,
241
+ subUrl: '/subtitles/movie.sup',
242
+ preferWebGPU: true, // default: true
243
+ onWebGPUFallback: () => console.log('Fell back to Canvas2D')
244
+ })
245
+ ```
246
+
247
+ **Options:**
248
+
249
+ - `preferWebGPU` (boolean): Enable WebGPU rendering if available. Default: `true`
250
+ - `onWebGPUFallback` (function): Callback when WebGPU is unavailable and falls back to Canvas2D
224
251
 
225
252
  ## Low-Level API (Programmatic Use)
226
253
 
@@ -398,18 +425,18 @@ interface SubtitleDisplaySettings {
398
425
 
399
426
  ```typescript
400
427
  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
428
+ framesRendered: number // Total frames rendered since initialization
429
+ framesDropped: number // Frames dropped due to slow rendering
430
+ avgRenderTime: number // Average render time in milliseconds
431
+ maxRenderTime: number // Maximum render time in milliseconds
432
+ minRenderTime: number // Minimum render time in milliseconds
433
+ lastRenderTime: number // Last render time in milliseconds
434
+ renderFps: number // Current FPS (renders per second)
435
+ usingWorker: boolean // Whether rendering is using web worker
436
+ cachedFrames: number // Number of cached frames
437
+ pendingRenders: number // Number of pending renders
438
+ totalEntries: number // Total subtitle entries/display sets
439
+ currentIndex: number // Current subtitle index being displayed
413
440
  }
414
441
  ```
415
442
 
@@ -428,3 +455,10 @@ interface SubtitleCompositionData {
428
455
  y: number // Y position
429
456
  }
430
457
  ```
458
+
459
+ ## License
460
+
461
+ Licensed under either of
462
+
463
+ - Apache License, Version 2.0
464
+ - MIT license
Binary file
package/pkg/package.json CHANGED
@@ -5,8 +5,8 @@
5
5
  "altqx"
6
6
  ],
7
7
  "description": "High-performance WASM renderer for graphical subtitles (PGS and VobSub)",
8
- "version": "1.1.0",
9
- "license": "GPL-3.0-only",
8
+ "version": "1.2.0",
9
+ "license": "MIT OR Apache-2.0",
10
10
  "repository": {
11
11
  "type": "git",
12
12
  "url": "https://github.com/altqx/libbitsub"
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