akarisub 0.2.2 → 1.0.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.
Files changed (78) hide show
  1. package/README.md +198 -167
  2. package/THIRD_PARTY_NOTICES.md +55 -163
  3. package/dist/COPYRIGHT +56 -164
  4. package/dist/index.d.ts +26 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +24 -147
  7. package/dist/index.js.map +1 -0
  8. package/dist/ts/akarisub.d.ts +323 -0
  9. package/dist/ts/akarisub.d.ts.map +1 -0
  10. package/dist/ts/akarisub.js +2235 -0
  11. package/dist/ts/akarisub.js.map +1 -0
  12. package/dist/ts/timing.d.ts +63 -0
  13. package/dist/ts/timing.d.ts.map +1 -0
  14. package/dist/ts/timing.js +219 -0
  15. package/dist/ts/timing.js.map +1 -0
  16. package/dist/ts/{ts/types.d.ts → types.d.ts} +176 -78
  17. package/dist/ts/types.d.ts.map +1 -0
  18. package/dist/ts/types.js +2 -0
  19. package/dist/ts/{ts/types.js.map → types.js.map} +1 -1
  20. package/dist/ts/{ts/utils.d.ts → utils.d.ts} +24 -37
  21. package/dist/ts/utils.d.ts.map +1 -0
  22. package/dist/ts/{ts/utils.js → utils.js} +12 -56
  23. package/dist/ts/utils.js.map +1 -0
  24. package/dist/ts/wasm.d.ts +12 -0
  25. package/dist/ts/wasm.d.ts.map +1 -0
  26. package/dist/ts/wasm.js +46 -0
  27. package/dist/ts/wasm.js.map +1 -0
  28. package/dist/ts/{ts/webgl2-renderer.d.ts → webgl2-renderer.d.ts} +17 -12
  29. package/dist/ts/webgl2-renderer.d.ts.map +1 -0
  30. package/dist/ts/{ts/webgl2-renderer.js → webgl2-renderer.js} +17 -27
  31. package/dist/ts/webgl2-renderer.js.map +1 -0
  32. package/dist/ts/webgpu-renderer.d.ts +88 -0
  33. package/dist/ts/webgpu-renderer.d.ts.map +1 -0
  34. package/dist/ts/{ts/webgpu-renderer.js → webgpu-renderer.js} +173 -71
  35. package/dist/ts/webgpu-renderer.js.map +1 -0
  36. package/dist/ts/worker.d.ts +2 -0
  37. package/dist/ts/{ts/worker.d.ts.map → worker.d.ts.map} +1 -1
  38. package/dist/ts/{ts/worker.js → worker.js} +1064 -264
  39. package/dist/ts/worker.js.map +1 -0
  40. package/dist/wrapper.d.ts +8 -0
  41. package/dist/wrapper.d.ts.map +1 -0
  42. package/dist/{ts/index.js → wrapper.js} +4 -14
  43. package/dist/wrapper.js.map +1 -0
  44. package/package.json +24 -22
  45. package/pkg/akarisub.js +53 -0
  46. package/{dist/akarisub-worker.wasm → pkg/akarisub.wasm} +0 -0
  47. package/src/wrapper.ts +46 -0
  48. package/dist/akarisub-worker.js +0 -39
  49. package/dist/akarisub.umd.js +0 -159
  50. package/dist/ts/index.d.ts +0 -14
  51. package/dist/ts/index.d.ts.map +0 -1
  52. package/dist/ts/index.js.map +0 -1
  53. package/dist/ts/ts/akarisub.d.ts +0 -225
  54. package/dist/ts/ts/akarisub.d.ts.map +0 -1
  55. package/dist/ts/ts/akarisub.js +0 -1073
  56. package/dist/ts/ts/akarisub.js.map +0 -1
  57. package/dist/ts/ts/types.d.ts.map +0 -1
  58. package/dist/ts/ts/types.js +0 -5
  59. package/dist/ts/ts/utils.d.ts.map +0 -1
  60. package/dist/ts/ts/utils.js.map +0 -1
  61. package/dist/ts/ts/webgl2-renderer.d.ts.map +0 -1
  62. package/dist/ts/ts/webgl2-renderer.js.map +0 -1
  63. package/dist/ts/ts/webgpu-renderer.d.ts +0 -62
  64. package/dist/ts/ts/webgpu-renderer.d.ts.map +0 -1
  65. package/dist/ts/ts/webgpu-renderer.js.map +0 -1
  66. package/dist/ts/ts/worker.d.ts +0 -6
  67. package/dist/ts/ts/worker.js.map +0 -1
  68. package/dist/ts/wrapper.d.ts +0 -8
  69. package/dist/ts/wrapper.d.ts.map +0 -1
  70. package/dist/ts/wrapper.js +0 -9
  71. package/dist/ts/wrapper.js.map +0 -1
  72. package/src/ts/akarisub.ts +0 -1272
  73. package/src/ts/types.ts +0 -397
  74. package/src/ts/utils.ts +0 -512
  75. package/src/ts/webgl2-renderer.ts +0 -426
  76. package/src/ts/webgpu-renderer.ts +0 -691
  77. package/src/ts/worker.ts +0 -2052
  78. /package/{dist → assets}/default.woff2 +0 -0
@@ -1,48 +1,45 @@
1
- /**
2
- * Type definitions for AkariSub TypeScript implementation.
3
- */
4
- /** ASS Event (dialogue/subtitle entry) */
1
+ /** A single Dialogue or Comment event from an ASS/SSA track. */
5
2
  export interface ASSEvent {
6
- /** Start Time of the Event (in milliseconds) */
3
+ /** Start time in seconds. */
7
4
  Start: number;
8
- /** Duration of the Event (in milliseconds) */
5
+ /** Duration in seconds. */
9
6
  Duration: number;
10
- /** Style name */
7
+ /** Style name referenced by this event. */
11
8
  Style: string;
12
9
  /** Character name (for information only) */
13
10
  Name: string;
14
- /** Left Margin override in pixels */
11
+ /** Left margin in script pixels. */
15
12
  MarginL: number;
16
- /** Right Margin override in pixels */
13
+ /** Right margin in script pixels. */
17
14
  MarginR: number;
18
- /** Bottom Margin override in pixels */
15
+ /** Vertical margin in script pixels. */
19
16
  MarginV: number;
20
- /** Transition Effect */
17
+ /** Transition or karaoke effect string. */
21
18
  Effect: string;
22
- /** Subtitle Text */
19
+ /** Dialogue text, including override tags. */
23
20
  Text: string;
24
- /** Read order number */
21
+ /** libass read order used to break timestamp ties. */
25
22
  ReadOrder: number;
26
- /** Z-index layer */
23
+ /** Collision layer. */
27
24
  Layer: number;
28
- /** Internal index */
25
+ /** Original event index in the loaded track, when known. */
29
26
  _index?: number;
30
27
  }
31
- /** ASS Style definition */
28
+ /** A named style from an ASS/SSA `[V4+ Styles]` section. */
32
29
  export interface ASSStyle {
33
30
  /** Style name (case sensitive) */
34
31
  Name: string;
35
- /** Font family name */
32
+ /** Typeface family used when the event does not override `\\fn`. */
36
33
  FontName: string;
37
- /** Font size */
34
+ /** Font size in script pixels. */
38
35
  FontSize: number;
39
- /** Primary color (RGBA as uint32) */
36
+ /** RGBA packed as uint32 */
40
37
  PrimaryColour: number;
41
- /** Secondary color (RGBA as uint32) */
38
+ /** RGBA packed as uint32 */
42
39
  SecondaryColour: number;
43
- /** Outline color (RGBA as uint32) */
40
+ /** RGBA packed as uint32 */
44
41
  OutlineColour: number;
45
- /** Background/shadow color (RGBA as uint32) */
42
+ /** RGBA packed as uint32 */
46
43
  BackColour: number;
47
44
  /** Bold (-1 = true, 0 = false) */
48
45
  Bold: number;
@@ -52,82 +49,107 @@ export interface ASSStyle {
52
49
  Underline: number;
53
50
  /** StrikeOut (-1 = true, 0 = false) */
54
51
  StrikeOut: number;
55
- /** Width scale (percent) */
52
+ /** Width scale percent */
56
53
  ScaleX: number;
57
- /** Height scale (percent) */
54
+ /** Height scale percent */
58
55
  ScaleY: number;
59
- /** Extra spacing between characters (pixels) */
56
+ /** Extra glyph spacing in script pixels. */
60
57
  Spacing: number;
61
- /** Rotation angle (degrees) */
58
+ /** Z-axis rotation in degrees. */
62
59
  Angle: number;
63
60
  /** Border style (1 = outline + shadow, 3 = opaque box) */
64
61
  BorderStyle: number;
65
- /** Outline width (0-4 pixels) */
62
+ /** Outline width in script pixels. */
66
63
  Outline: number;
67
- /** Shadow depth (0-4 pixels) */
64
+ /** Shadow offset in script pixels. */
68
65
  Shadow: number;
69
66
  /** Alignment (1-9, numpad style) */
70
67
  Alignment: number;
71
- /** Left margin (pixels) */
68
+ /** Left margin in script pixels. */
72
69
  MarginL: number;
73
- /** Right margin (pixels) */
70
+ /** Right margin in script pixels. */
74
71
  MarginR: number;
75
- /** Vertical margin (pixels) */
72
+ /** Vertical margin in script pixels. */
76
73
  MarginV: number;
77
- /** Font encoding */
74
+ /** Windows charset / encoding id. */
78
75
  Encoding: number;
79
- /** Treat font name as pattern */
76
+ /** When non-zero, `FontName` is treated as a fontconfig pattern. */
80
77
  treat_fontname_as_pattern: number;
81
- /** Blur amount */
78
+ /** Gaussian blur strength. */
82
79
  Blur: number;
83
- /** Text justification */
80
+ /** Horizontal justification used with some alignments. */
84
81
  Justify: number;
85
82
  }
86
- /** Performance statistics for the renderer */
83
+ /** Snapshot of renderer throughput, latency, and worker mode. */
87
84
  export interface PerformanceStats {
88
- /** Total frames rendered since reset */
85
+ /** Number of frames the worker finished. */
89
86
  framesRendered: number;
90
- /** Number of frames dropped */
87
+ /** Number of frames skipped because a newer demand arrived. */
91
88
  framesDropped: number;
92
- /** Average render time in milliseconds */
89
+ /** Mean worker render time in milliseconds. */
93
90
  avgRenderTime: number;
94
- /** Maximum render time in milliseconds */
91
+ /** Slowest worker render time in milliseconds. */
95
92
  maxRenderTime: number;
96
- /** Minimum render time in milliseconds */
93
+ /** Fastest worker render time in milliseconds. */
97
94
  minRenderTime: number;
98
- /** Last render time in milliseconds */
95
+ /** Most recent worker render time in milliseconds. */
99
96
  lastRenderTime: number;
100
- /** Estimated render FPS based on timing */
97
+ /** Current automatically learned presentation-latency compensation in milliseconds */
98
+ timingCompensationMs?: number;
99
+ /** Number of image planes emitted by the last render */
100
+ lastImageCount?: number;
101
+ /** Total RGBA/raw image pixels emitted by the last render */
102
+ lastImagePixels?: number;
103
+ /** Estimated frames per second from `avgRenderTime`. */
101
104
  renderFps: number;
102
- /** Whether using Web Worker */
105
+ /** Always true for this renderer; kept for compatibility. */
103
106
  usingWorker: boolean;
104
- /** Whether offscreen rendering is enabled */
107
+ /** Whether worker-side raw ASS_Image WebGL2 composition is active */
108
+ rawAssImageGpu?: boolean;
109
+ /** Backend that composed the last frame. */
110
+ workerRenderer?: 'webgl2-raw-ass' | 'canvas2d' | 'hybrid' | 'main-thread';
111
+ /** Whether the worker owns an OffscreenCanvas. */
105
112
  offscreenRender: boolean;
106
- /** Whether on-demand rendering is enabled */
113
+ /** Whether `requestVideoFrameCallback` drives presentation. */
107
114
  onDemandRender: boolean;
108
- /** Number of pending render operations */
115
+ /** Demand renders still in flight. */
109
116
  pendingRenders: number;
110
- /** Total subtitle events in current track */
117
+ /** Dialogue events currently in the track. */
111
118
  totalEvents: number;
112
- /** Number of cache hits (unchanged frames) */
119
+ /** Worker bitmap-cache hits. */
113
120
  cacheHits: number;
114
- /** Number of cache misses (rendered frames) */
121
+ /** Worker bitmap-cache misses. */
115
122
  cacheMisses: number;
116
123
  }
117
- /** Configuration options for AkariSub */
124
+ /** Encoded-frame timestamps with optional media/subtitle clock offsets. */
125
+ export interface FrameTimeline extends ArrayLike<number> {
126
+ /** Origin subtracted from raw browser media timestamps when locating a frame. */
127
+ mediaTimeOrigin?: number;
128
+ /** Signed offset subtracted from frame time when sampling libass. */
129
+ subtitleTimeOffset?: number;
130
+ }
131
+ /** Construction options for {@linkcode AkariSub}. */
118
132
  export interface AkariSubOptions {
119
- /** Video element to sync with and overlay */
133
+ /** Video element to overlay. Either `video` or `canvas` is required. */
120
134
  video?: HTMLVideoElement;
121
- /** Custom canvas element (optional if video is provided) */
135
+ /** Existing canvas to paint into instead of creating an overlay. */
122
136
  canvas?: HTMLCanvasElement;
123
137
  /** Image blending mode: 'js' for hardware acceleration, 'wasm' for software */
124
138
  blendMode?: 'js' | 'wasm';
125
139
  /** Use async rendering with ImageBitmap (default: true) */
126
140
  asyncRender?: boolean;
127
- /** Use offscreen canvas rendering (default: true) */
141
+ /** Use offscreen canvas rendering (default: true for video-managed canvases, false for custom canvases) */
128
142
  offscreenRender?: boolean;
143
+ /** Use worker-side raw ASS_Image WebGL2 composition (default: false) */
144
+ rawAssImageGpu?: boolean;
129
145
  /** Use requestVideoFrameCallback for precise sync (default: true) */
130
146
  onDemandRender?: boolean;
147
+ /** Compensate measured render/presentation latency while playing (default: true) */
148
+ adaptiveTiming?: boolean;
149
+ /** Encoded video-frame timestamps and optional browser/subtitle clock offsets, in seconds */
150
+ frameTimeline?: FrameTimeline;
151
+ /** Number of exact subtitle frames to prepare ahead (default: 2) */
152
+ framePrefetch?: number;
131
153
  /** Target FPS when not using onDemandRender (default: 24) */
132
154
  targetFps?: number;
133
155
  /** Time offset in seconds (default: 0) */
@@ -146,35 +168,46 @@ export interface AkariSubOptions {
146
168
  dropAllBlur?: boolean;
147
169
  /** Clamp \\pos values to script resolution (default: false) */
148
170
  clampPos?: boolean;
149
- /** URL to the worker script */
171
+ /** Optional worker script URL. Defaults to the package worker module URL. */
150
172
  workerUrl?: string;
151
- /** URL to the WASM binary */
173
+ /** Optional WASM binary URL. Defaults to the package WASM URL resolved from import.meta.url. */
152
174
  wasmUrl?: string;
153
- /** URL to subtitle file */
175
+ /** Optional WASM glue script URL. Defaults to the package glue URL resolved from import.meta.url. */
176
+ glueUrl?: string;
177
+ /** HTTP(S) URL of an ASS/SSA file to load after init. */
154
178
  subUrl?: string;
155
- /** Subtitle content as string or UTF-8 bytes */
179
+ /** Inline ASS/SSA text or bytes to load after init. */
156
180
  subContent?: string | Uint8Array | ArrayBuffer;
157
181
  /** Encrypted subtitle content decrypted inside the worker before loading into libass */
158
182
  encryptedSubContent?: EncryptedSubtitleContent;
159
- /** Array of font URLs or Uint8Arrays */
183
+ /** Extra fonts as URLs or file bytes. */
160
184
  fonts?: (string | Uint8Array)[];
161
- /** Available fonts map (lowercase name -> URL/data) */
185
+ /** Map of font family name to URL or file bytes. */
162
186
  availableFonts?: Record<string, string | Uint8Array>;
163
187
  /** Fallback font families in order (default: ['liberation sans']). Fontconfig uses these for cascade. */
164
188
  fallbackFonts?: string[];
165
- /** Use Local Font Access API (default: true if available) */
189
+ /** Use Local Font Access API for OS font lookup (default: true if available) */
166
190
  useLocalFonts?: boolean;
191
+ /** Use libass fontconfig provider for virtual/packaged font lookup (default: true) */
192
+ useFontconfigProvider?: boolean;
167
193
  /** libass bitmap cache memory limit in MiB */
168
194
  libassMemoryLimit?: number;
169
195
  /** libass glyph cache limit */
170
196
  libassGlyphLimit?: number;
171
197
  /** Callback invoked when all GPU renderers (WebGPU, WebGL2) are unavailable and the renderer falls back to Canvas2D */
172
198
  onCanvasFallback?: () => void;
173
- /** Additional time in seconds to render subtitles ahead for pipeline latency compensation (default: 0.008) */
199
+ /** Additional time in seconds to render subtitles ahead, on top of adaptive timing (default: 0) */
174
200
  renderAhead?: number;
175
201
  /** Pre-render early track windows after load to warm libass caches (default: false) */
176
202
  fullTrackWarmup?: boolean;
203
+ /** Wait for fullTrackWarmup to finish before ready (default: false) */
204
+ blockingFullTrackWarmup?: boolean;
205
+ /** Step in seconds for fullTrackWarmup; lower values warm more frames (default: 1) */
206
+ fullTrackWarmupStep?: number;
207
+ /** Allow adaptive CPU preblend layouts for text-heavy frames (default: false) */
208
+ adaptiveBlendLayouts?: boolean;
177
209
  }
210
+ /** AES-GCM subtitle payload decrypted inside the worker. */
178
211
  export interface EncryptedSubtitleContent {
179
212
  /** Non-extractable AES-GCM content key from akari-crypto's v2 transport flow */
180
213
  contentKey: CryptoKey;
@@ -191,24 +224,47 @@ export type ASSStyleCallback = (error: Error | null, styles: ASSStyle[]) => void
191
224
  export type PerformanceStatsCallback = (error: Error | null, stats: PerformanceStats | null) => void;
192
225
  /** @deprecated Use Promise-based resetStats() instead */
193
226
  export type ResetStatsCallback = (error: Error | null) => void;
194
- /** Image data for rendering */
227
+ /** One blended subtitle bitmap or GPU plane to composite. */
195
228
  export interface RenderImage {
229
+ /** Destination X in canvas pixels. */
196
230
  x: number;
231
+ /** Destination Y in canvas pixels. */
197
232
  y: number;
233
+ /** Bitmap width in pixels. */
198
234
  w: number;
235
+ /** Bitmap height in pixels. */
199
236
  h: number;
237
+ /** Premultiplied RGBA bitmap, or a WASM pointer when using raw GPU composition. */
200
238
  image: ImageBitmap | ArrayBuffer | Uint8Array | Uint8ClampedArray | number;
201
239
  }
202
- /** Render timing debug info */
240
+ /** Raw libass ASS_Image plane exposed directly from WASM for GPU mask composition. */
241
+ export interface RawASSImage {
242
+ dst_x: number;
243
+ dst_y: number;
244
+ w: number;
245
+ h: number;
246
+ /** Pointer to ASS_Image.bitmap in WASM memory */
247
+ bitmap: number;
248
+ /** ASS_Image.color packed as RRGGBBAA */
249
+ color: number;
250
+ stride: number;
251
+ type: number;
252
+ }
253
+ /** Timing breakdown for a single worker render, in milliseconds. */
203
254
  export interface RenderTimes {
255
+ /** libass raster time. */
204
256
  WASMRenderTime?: number;
257
+ /** Time spent copying WASM bitmaps into JS. */
205
258
  WASMBitmapDecodeTime?: number;
259
+ /** Main-thread composite time. */
206
260
  JSRenderTime?: number;
261
+ /** ImageBitmap construction time. */
207
262
  JSBitmapGenerationTime?: number;
263
+ /** Worker-to-main postMessage latency. */
208
264
  IPCTime?: number;
265
+ /** Number of bitmaps in this frame. */
209
266
  bitmaps?: number;
210
267
  }
211
- /** Worker -> Main thread message for rendering */
212
268
  export interface RenderMessage {
213
269
  target: 'render';
214
270
  asyncRender: boolean;
@@ -217,14 +273,20 @@ export interface RenderMessage {
217
273
  width: number;
218
274
  height: number;
219
275
  colorSpace: string | null;
276
+ requestId?: number;
277
+ renderEpoch?: number;
278
+ presentationId?: number;
220
279
  }
221
- /** Worker -> Main thread messages */
222
280
  export type WorkerOutboundMessage = {
223
281
  target: 'ready';
224
282
  } | {
225
283
  target: 'trackReady';
226
284
  } | {
227
285
  target: 'unbusy';
286
+ requestId?: number;
287
+ renderEpoch?: number;
288
+ presentationId?: number;
289
+ painted?: boolean;
228
290
  } | {
229
291
  target: 'console';
230
292
  command: string;
@@ -255,14 +317,21 @@ export type WorkerOutboundMessage = {
255
317
  target: 'getStyleCount';
256
318
  count: number;
257
319
  } | RenderMessage;
258
- /** Main thread -> Worker init message */
259
320
  export interface WorkerInitMessage {
260
321
  target: 'init';
261
322
  wasmUrl: string;
323
+ glueUrl?: string;
262
324
  asyncRender: boolean;
263
325
  fullTrackWarmup: boolean;
326
+ blockingFullTrackWarmup: boolean;
327
+ fullTrackWarmupStep: number;
328
+ adaptiveBlendLayouts: boolean;
329
+ rawAssImageGpu: boolean;
264
330
  onDemandRender: boolean;
265
331
  initialTime: number;
332
+ initialIsPaused: boolean;
333
+ initialPlaybackRate: number;
334
+ initialTimeSnapshotAtMs: number;
266
335
  width: number;
267
336
  height: number;
268
337
  blendMode: 'js' | 'wasm';
@@ -274,17 +343,21 @@ export interface WorkerInitMessage {
274
343
  fallbackFonts: string[];
275
344
  debug: boolean;
276
345
  targetFps: number;
346
+ renderAhead: number;
347
+ adaptiveTiming: boolean;
348
+ frameTimelineMode: boolean;
277
349
  dropAllAnimations?: boolean;
278
350
  dropAllBlur?: boolean;
279
351
  clampPos?: boolean;
280
352
  libassMemoryLimit?: number;
281
353
  libassGlyphLimit?: number;
282
354
  useLocalFonts: boolean;
355
+ useFontconfigProvider: boolean;
283
356
  hasBitmapBug: boolean;
284
357
  }
285
- /** Main thread -> Worker messages */
286
358
  export type WorkerInboundMessage = WorkerInitMessage | {
287
359
  target: 'offscreenCanvas';
360
+ rawAssImageGpu?: boolean;
288
361
  transferable: [OffscreenCanvas];
289
362
  } | {
290
363
  target: 'detachOffscreen';
@@ -300,6 +373,7 @@ export type WorkerInboundMessage = WorkerInitMessage | {
300
373
  currentTime?: number;
301
374
  isPaused?: boolean;
302
375
  rate?: number;
376
+ renderAhead?: number;
303
377
  colorSpace?: string | null;
304
378
  } | {
305
379
  target: 'setTrack';
@@ -315,6 +389,26 @@ export type WorkerInboundMessage = WorkerInitMessage | {
315
389
  } | {
316
390
  target: 'demand';
317
391
  time: number;
392
+ force?: boolean;
393
+ requestId?: number;
394
+ renderEpoch?: number;
395
+ presentationId?: number;
396
+ } | {
397
+ target: 'prepare';
398
+ time: number;
399
+ prepareId: number;
400
+ renderEpoch: number;
401
+ force?: boolean;
402
+ } | {
403
+ target: 'presentation';
404
+ presentationId: number;
405
+ } | {
406
+ target: 'presentFrame';
407
+ bitmap: ImageBitmap;
408
+ presentationId: number;
409
+ } | {
410
+ target: 'frameTimelineMode';
411
+ enabled: boolean;
318
412
  } | {
319
413
  target: 'destroy';
320
414
  } | {
@@ -363,39 +457,42 @@ export type WorkerInboundMessage = WorkerInitMessage | {
363
457
  } | {
364
458
  target: 'getColorSpace';
365
459
  };
366
- /** requestVideoFrameCallback metadata */
460
+ /** Metadata passed to `HTMLVideoElement.requestVideoFrameCallback`. */
367
461
  export interface VideoFrameCallbackMetadata {
368
- /** The current media time of the frame being displayed (seconds) */
462
+ /** Media time of the presented frame, in seconds. */
369
463
  mediaTime: number;
370
- /** Video intrinsic width */
464
+ /** Presented frame width in CSS pixels. */
371
465
  width: number;
372
- /** Video intrinsic height */
466
+ /** Presented frame height in CSS pixels. */
373
467
  height: number;
374
- /** Number of frames presented so far */
468
+ /** Count of frames presented since the callback was scheduled. */
375
469
  presentedFrames?: number;
376
- /** Time spent processing the frame (milliseconds) */
470
+ /** Time spent processing the frame, in milliseconds. */
377
471
  processingDuration?: number;
378
- /** Expected time when this frame will be displayed (DOMHighResTimeStamp) */
472
+ /** Predicted compositor display time, in milliseconds. */
379
473
  expectedDisplayTime?: number;
380
- /** Time at which the frame was presented (DOMHighResTimeStamp) */
474
+ /** Capture timestamp, in milliseconds. */
381
475
  presentationTime?: number;
382
476
  }
477
+ /** Video YCbCr matrix used for subtitle color-space conversion. */
383
478
  export type WebYCbCrColorSpace = 'BT709' | 'BT601';
479
+ /** libass YCbCr matrix, or `null` when the track does not declare one. */
384
480
  export type SubtitleColorSpace = 'BT601' | 'BT709' | 'SMPTE240M' | 'FCC' | null;
385
- /** Emscripten AkariSub Module (C ABI exports) */
386
481
  export interface AkariSubModule extends EmscriptenModule {
387
482
  _malloc: (size: number) => number;
388
483
  _free: (ptr: number) => void;
389
484
  _akarisub_create: (width: number, height: number, fallbackFontPtr: number, debug: number) => number;
390
485
  _akarisub_destroy: (handle: number) => void;
391
486
  _akarisub_set_drop_animations: (handle: number, value: number) => void;
487
+ _akarisub_set_adaptive_blend_layouts: (handle: number, value: number) => void;
392
488
  _akarisub_create_track_mem: (handle: number, contentPtr: number) => void;
393
489
  _akarisub_remove_track: (handle: number) => void;
394
490
  _akarisub_resize_canvas: (handle: number, width: number, height: number, videoWidth: number, videoHeight: number) => void;
395
- _akarisub_add_font: (handle: number, namePtr: number, dataPtr: number, size: number) => void;
491
+ _akarisub_add_font: (handle: number, namePtr: number, dataPtr: number, size: number) => number;
396
492
  _akarisub_reload_fonts: (handle: number) => void;
397
493
  _akarisub_set_default_font: (handle: number, fontPtr: number) => void;
398
494
  _akarisub_set_fallback_fonts: (handle: number, fontsPtr: number) => void;
495
+ _akarisub_set_use_fontconfig_provider: (handle: number, enabled: number) => void;
399
496
  _akarisub_set_memory_limits: (handle: number, glyphLimit: number, memoryLimit: number) => void;
400
497
  _akarisub_get_event_count: (handle: number) => number;
401
498
  _akarisub_alloc_event: (handle: number) => number;
@@ -418,6 +515,7 @@ export interface AkariSubModule extends EmscriptenModule {
418
515
  _akarisub_get_empty_window: (handle: number, tm: number, outPtr: number) => number;
419
516
  _akarisub_render_blend_collect: (handle: number, time: number, force: number, outPtr: number, maxItems: number) => number;
420
517
  _akarisub_render_image_collect: (handle: number, time: number, force: number, outPtr: number, maxItems: number) => number;
518
+ _akarisub_render_raw_collect: (handle: number, time: number, force: number, outPtr: number, maxItems: number) => number;
421
519
  FS_createPath: (parent: string, path: string, canRead: boolean, canWrite: boolean) => void;
422
520
  FS_createDataFile: (parent: string, name: string | null, data: Uint8Array, canRead: boolean, canWrite: boolean, canOwn?: boolean) => void;
423
521
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ts/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ts/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/ts/types.ts"],"names":[],"mappings":""}
@@ -1,27 +1,18 @@
1
- /**
2
- * Utility functions for AkariSub.
3
- */
4
1
  import type { SubtitleColorSpace, WebYCbCrColorSpace } from './types';
5
- /** Map video color space to standard name */
2
+ /** Map from HTMLVideoElement color-space names to {@linkcode WebYCbCrColorSpace}. */
6
3
  export declare const webYCbCrMap: Record<string, WebYCbCrColorSpace>;
7
- /** Color matrix conversion values for SVG filter */
4
+ /** feColorMatrix values that convert a subtitle matrix into a video matrix. */
8
5
  export declare const colorMatrixConversionMap: Record<string, Record<string, string>>;
9
- /** libass YCbCr color space index map */
6
+ /** libass `YCbCr Matrix` header values indexed by the libass enum. */
10
7
  export declare const libassYCbCrMap: (SubtitleColorSpace | null)[];
11
- /**
12
- * Generate SVG filter URL for color space conversion.
13
- */
8
+ /** SVG filter URL that converts `subtitleColorSpace` into `videoColorSpace`, or `null` when none is needed. */
14
9
  export declare function getColorSpaceFilterUrl(subtitleColorSpace: SubtitleColorSpace, videoColorSpace: WebYCbCrColorSpace): string | null;
15
- /**
16
- * Compute canvas size with prescaling.
17
- */
10
+ /** Canvas pixel size after device-pixel-ratio and prescale limits. */
18
11
  export declare function computeCanvasSize(width: number, height: number, prescaleFactor: number, prescaleHeightLimit: number, maxRenderHeight: number): {
19
12
  width: number;
20
13
  height: number;
21
14
  };
22
- /**
23
- * Get video position and size accounting for aspect ratio.
24
- */
15
+ /** Letterboxed video rectangle inside the element's layout box. */
25
16
  export declare function getVideoPosition(video: HTMLVideoElement, videoWidth?: number, videoHeight?: number): {
26
17
  width: number;
27
18
  height: number;
@@ -32,47 +23,43 @@ export declare function getVideoPosition(video: HTMLVideoElement, videoWidth?: n
32
23
  * Fix alpha bug in some browsers (transparent pixels rendered as non-black).
33
24
  */
34
25
  export declare function fixAlpha(uint8: Uint8ClampedArray, hasAlphaBug: boolean): Uint8ClampedArray;
35
- interface ASSSection {
36
- name: string;
37
- body: ASSBodyEntry[];
38
- }
39
- interface ASSBodyEntry {
26
+ /** One key/value or comment line inside an {@linkcode ASSSection}. */
27
+ export interface ASSBodyEntry {
28
+ /** Present for `;` comment lines. */
40
29
  type?: 'comment';
30
+ /** ASS key such as `Dialogue` or `Format`. */
41
31
  key?: string;
32
+ /** Raw string, format columns, or a Format-keyed record. */
42
33
  value: string | string[] | Record<string, string>;
43
34
  }
44
- /**
45
- * Parse ASS file content.
46
- * @param content - ASS file content
47
- * @param stopAtEvents - Stop parsing when [Events] section is reached (for font detection)
48
- */
35
+ /** A `[Section]` block from an ASS/SSA file. */
36
+ export interface ASSSection {
37
+ /** Section title without brackets, for example `Events`. */
38
+ name: string;
39
+ /** Ordered lines in this section. */
40
+ body: ASSBodyEntry[];
41
+ }
42
+ /** Parse ASS/SSA text into named sections. Stops before `[Events]` when `stopAtEvents` is set. */
49
43
  export declare function parseAss(content: string, stopAtEvents?: boolean): ASSSection[];
50
- /**
51
- * Remove all blur tags from subtitle content.
52
- */
44
+ /** Strip `\\blur` override tags from an ASS document. */
53
45
  export declare function dropBlur(subContent: string): string;
54
46
  /**
55
47
  * Scale override tags in Events from detected source resolution to PlayRes.
56
48
  * Only scales tags within override blocks {...} in the Events section.
57
49
  */
58
50
  export declare function fixPlayRes(subContent: string): string;
59
- /**
60
- * Test for browser image bugs.
61
- */
51
+ /** Probe canvas `ImageData` and `ImageBitmap` bugs used by the renderer workarounds. */
62
52
  export declare function testImageBugs(): Promise<{
63
53
  hasAlphaBug: boolean;
64
54
  hasBitmapBug: boolean;
65
55
  }>;
66
- /**
67
- * Run all feature detection tests.
68
- */
56
+ /** Run canvas feature tests. Currently the same as {@linkcode testImageBugs}. */
69
57
  export declare function runFeatureTests(): Promise<{
70
58
  hasAlphaBug: boolean;
71
59
  hasBitmapBug: boolean;
72
60
  }>;
73
- /** Get cached alpha bug value */
61
+ /** Last {@linkcode testImageBugs} alpha-bug result, or `null` before the first probe. */
74
62
  export declare function getAlphaBug(): boolean | null;
75
- /** Get cached bitmap bug value */
63
+ /** Last {@linkcode testImageBugs} partial-bitmap-bug result, or `null` before the first probe. */
76
64
  export declare function getBitmapBug(): boolean | null;
77
- export {};
78
65
  //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/ts/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAErE,qFAAqF;AACrF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAI1D,CAAA;AAED,+EAA+E;AAC/E,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAe3E,CAAA;AAED,sEAAsE;AACtE,eAAO,MAAM,cAAc,EAAE,CAAC,kBAAkB,GAAG,IAAI,CAAC,EAYvD,CAAA;AAED,+GAA+G;AAC/G,wBAAgB,sBAAsB,CACpC,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,kBAAkB,GAClC,MAAM,GAAG,IAAI,CAQf;AAED,sEAAsE;AACtE,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,mBAAmB,EAAE,MAAM,EAC3B,eAAe,EAAE,MAAM,GACtB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAyBnC;AAED,mEAAmE;AACnE,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,gBAAgB,EACvB,UAAU,GAAE,MAAyB,EACrC,WAAW,GAAE,MAA0B,GACtC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAkBzD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,OAAO,GAAG,iBAAiB,CAmB1F;AAED,sEAAsE;AACtE,MAAM,WAAW,YAAY;IAC3B,qCAAqC;IACrC,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,8CAA8C;IAC9C,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,4DAA4D;IAC5D,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClD;AAED,gDAAgD;AAChD,MAAM,WAAW,UAAU;IACzB,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAA;IACZ,qCAAqC;IACrC,IAAI,EAAE,YAAY,EAAE,CAAA;CACrB;AAED,kGAAkG;AAClG,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,GAAE,OAAe,GAAG,UAAU,EAAE,CA0ErF;AAID,yDAAyD;AACzD,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEnD;AAyBD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAmHrD;AAKD,wFAAwF;AACxF,wBAAsB,aAAa,IAAI,OAAO,CAAC;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,CAAC,CAyD9F;AAED,iFAAiF;AACjF,wBAAsB,eAAe,IAAI,OAAO,CAAC;IAC/C,WAAW,EAAE,OAAO,CAAA;IACpB,YAAY,EAAE,OAAO,CAAA;CACtB,CAAC,CAED;AAED,yFAAyF;AACzF,wBAAgB,WAAW,IAAI,OAAO,GAAG,IAAI,CAE5C;AAED,kGAAkG;AAClG,wBAAgB,YAAY,IAAI,OAAO,GAAG,IAAI,CAE7C"}