libbitsub 1.10.2 → 1.12.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.
Files changed (98) hide show
  1. package/README.md +296 -49
  2. package/dist/index.d.ts +3 -3
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +3 -3
  5. package/dist/index.js.map +1 -1
  6. package/dist/integrations/hlsjs.d.ts +45 -0
  7. package/dist/integrations/hlsjs.d.ts.map +1 -0
  8. package/dist/integrations/hlsjs.js +121 -0
  9. package/dist/integrations/hlsjs.js.map +1 -0
  10. package/dist/integrations/index.d.ts +11 -0
  11. package/dist/integrations/index.d.ts.map +1 -0
  12. package/dist/integrations/index.js +11 -0
  13. package/dist/integrations/index.js.map +1 -0
  14. package/dist/integrations/react.d.ts +55 -0
  15. package/dist/integrations/react.d.ts.map +1 -0
  16. package/dist/integrations/react.js +133 -0
  17. package/dist/integrations/react.js.map +1 -0
  18. package/dist/integrations/shaka.d.ts +38 -0
  19. package/dist/integrations/shaka.d.ts.map +1 -0
  20. package/dist/integrations/shaka.js +71 -0
  21. package/dist/integrations/shaka.js.map +1 -0
  22. package/dist/integrations/shared.d.ts +41 -0
  23. package/dist/integrations/shared.d.ts.map +1 -0
  24. package/dist/integrations/shared.js +123 -0
  25. package/dist/integrations/shared.js.map +1 -0
  26. package/dist/integrations/videojs.d.ts +85 -0
  27. package/dist/integrations/videojs.d.ts.map +1 -0
  28. package/dist/integrations/videojs.js +111 -0
  29. package/dist/integrations/videojs.js.map +1 -0
  30. package/dist/ts/capabilities.d.ts +8 -0
  31. package/dist/ts/capabilities.d.ts.map +1 -0
  32. package/dist/ts/capabilities.js +105 -0
  33. package/dist/ts/capabilities.js.map +1 -0
  34. package/dist/ts/diagnostics.d.ts.map +1 -1
  35. package/dist/ts/diagnostics.js.map +1 -1
  36. package/dist/ts/frame-export.d.ts.map +1 -1
  37. package/dist/ts/frame-export.js +4 -4
  38. package/dist/ts/frame-export.js.map +1 -1
  39. package/dist/ts/parsers.d.ts +46 -8
  40. package/dist/ts/parsers.d.ts.map +1 -1
  41. package/dist/ts/parsers.js +305 -14
  42. package/dist/ts/parsers.js.map +1 -1
  43. package/dist/ts/range-loader.d.ts +31 -0
  44. package/dist/ts/range-loader.d.ts.map +1 -0
  45. package/dist/ts/range-loader.js +220 -0
  46. package/dist/ts/range-loader.js.map +1 -0
  47. package/dist/ts/renderers.d.ts +140 -8
  48. package/dist/ts/renderers.d.ts.map +1 -1
  49. package/dist/ts/renderers.js +1773 -287
  50. package/dist/ts/renderers.js.map +1 -1
  51. package/dist/ts/types.d.ts +210 -7
  52. package/dist/ts/types.d.ts.map +1 -1
  53. package/dist/ts/utils.d.ts.map +1 -1
  54. package/dist/ts/utils.js +98 -2
  55. package/dist/ts/utils.js.map +1 -1
  56. package/dist/ts/video-frame-scheduler.d.ts +35 -0
  57. package/dist/ts/video-frame-scheduler.d.ts.map +1 -0
  58. package/dist/ts/video-frame-scheduler.js +98 -0
  59. package/dist/ts/video-frame-scheduler.js.map +1 -0
  60. package/dist/ts/wasm.d.ts +2 -0
  61. package/dist/ts/wasm.d.ts.map +1 -1
  62. package/dist/ts/wasm.js +12 -0
  63. package/dist/ts/wasm.js.map +1 -1
  64. package/dist/ts/webgl2-renderer.d.ts +9 -0
  65. package/dist/ts/webgl2-renderer.d.ts.map +1 -1
  66. package/dist/ts/webgl2-renderer.js +34 -0
  67. package/dist/ts/webgl2-renderer.js.map +1 -1
  68. package/dist/ts/webgpu-renderer.d.ts +9 -0
  69. package/dist/ts/webgpu-renderer.d.ts.map +1 -1
  70. package/dist/ts/webgpu-renderer.js +70 -2
  71. package/dist/ts/webgpu-renderer.js.map +1 -1
  72. package/dist/ts/worker.d.ts +11 -0
  73. package/dist/ts/worker.d.ts.map +1 -1
  74. package/dist/ts/worker.js +620 -158
  75. package/dist/ts/worker.js.map +1 -1
  76. package/dist/wrapper.d.ts +6 -3
  77. package/dist/wrapper.d.ts.map +1 -1
  78. package/dist/wrapper.js +5 -2
  79. package/dist/wrapper.js.map +1 -1
  80. package/examples/README.md +38 -0
  81. package/examples/hlsjs/README.md +53 -0
  82. package/examples/react/README.md +60 -0
  83. package/examples/shaka/README.md +61 -0
  84. package/examples/videojs/README.md +55 -0
  85. package/package.json +66 -8
  86. package/pkg/README.md +296 -49
  87. package/pkg/libbitsub.d.ts +65 -1
  88. package/pkg/libbitsub.js +228 -3
  89. package/pkg/libbitsub_bg.wasm +0 -0
  90. package/pkg/libbitsub_bg.wasm.d.ts +28 -0
  91. package/pkg/package.json +4 -4
  92. package/src/integrations/hlsjs.ts +154 -0
  93. package/src/integrations/index.ts +36 -0
  94. package/src/integrations/react.tsx +176 -0
  95. package/src/integrations/shaka.ts +92 -0
  96. package/src/integrations/shared.ts +171 -0
  97. package/src/integrations/videojs.ts +200 -0
  98. package/src/wrapper.ts +34 -2
@@ -0,0 +1,220 @@
1
+ const DEFAULT_RANGE_CHUNK_THRESHOLD = 2 * 1024 * 1024;
2
+ const DEFAULT_RANGE_CHUNK_SIZE = 512 * 1024;
3
+ function emitProgress(onProgress, loaded, total, rangeSupported, strategy) {
4
+ if (!onProgress)
5
+ return;
6
+ onProgress({
7
+ loaded,
8
+ total,
9
+ ratio: total && total > 0 ? Math.min(1, loaded / total) : null,
10
+ rangeSupported,
11
+ strategy
12
+ });
13
+ }
14
+ function parseContentLength(header) {
15
+ if (!header)
16
+ return null;
17
+ const value = Number(header);
18
+ return Number.isFinite(value) && value >= 0 ? value : null;
19
+ }
20
+ function parseContentRangeTotal(header) {
21
+ if (!header)
22
+ return null;
23
+ const match = /bytes\s+(?:\d+-\d+|\*)\/(\d+|\*)/i.exec(header);
24
+ if (!match)
25
+ return null;
26
+ if (match[1] === '*')
27
+ return null;
28
+ return parseContentLength(match[1]);
29
+ }
30
+ function mergeHeaders(base, extra) {
31
+ const headers = new Headers(base);
32
+ if (extra) {
33
+ const more = new Headers(extra);
34
+ more.forEach((value, key) => headers.set(key, value));
35
+ }
36
+ return headers;
37
+ }
38
+ export async function probeRangeSupport(url, options = {}) {
39
+ const headers = mergeHeaders(options.headers, { Range: 'bytes=0-0' });
40
+ try {
41
+ const response = await fetch(url, {
42
+ method: 'GET',
43
+ headers,
44
+ signal: options.signal
45
+ });
46
+ if (response.status === 206) {
47
+ const size = parseContentRangeTotal(response.headers.get('content-range')) ??
48
+ parseContentLength(response.headers.get('content-length'));
49
+ try {
50
+ await response.body?.cancel();
51
+ }
52
+ catch {
53
+ /* ignore */
54
+ }
55
+ return {
56
+ supportsRange: true,
57
+ size,
58
+ acceptRanges: response.headers.get('accept-ranges')
59
+ };
60
+ }
61
+ if (response.ok) {
62
+ const accept = response.headers.get('accept-ranges');
63
+ const size = parseContentLength(response.headers.get('content-length'));
64
+ try {
65
+ await response.body?.cancel();
66
+ }
67
+ catch {
68
+ /* ignore */
69
+ }
70
+ return {
71
+ supportsRange: Boolean(accept && accept.toLowerCase() !== 'none'),
72
+ size,
73
+ acceptRanges: accept
74
+ };
75
+ }
76
+ }
77
+ catch {
78
+ /* try HEAD */
79
+ }
80
+ try {
81
+ const head = await fetch(url, {
82
+ method: 'HEAD',
83
+ headers: mergeHeaders(options.headers),
84
+ signal: options.signal
85
+ });
86
+ if (!head.ok) {
87
+ return { supportsRange: false, size: null, acceptRanges: null };
88
+ }
89
+ const accept = head.headers.get('accept-ranges');
90
+ return {
91
+ supportsRange: Boolean(accept && accept.toLowerCase() !== 'none'),
92
+ size: parseContentLength(head.headers.get('content-length')),
93
+ acceptRanges: accept
94
+ };
95
+ }
96
+ catch {
97
+ return { supportsRange: false, size: null, acceptRanges: null };
98
+ }
99
+ }
100
+ async function readResponseStream(response, totalHint, rangeSupported, strategy, onProgress, onChunk) {
101
+ const total = totalHint ?? parseContentLength(response.headers.get('content-length'));
102
+ if (!response.body || typeof response.body.getReader !== 'function') {
103
+ const buffer = new Uint8Array(await response.arrayBuffer());
104
+ const progress = {
105
+ loaded: buffer.byteLength,
106
+ total: total ?? buffer.byteLength,
107
+ ratio: 1,
108
+ rangeSupported,
109
+ strategy: strategy === 'stream' ? 'basic' : strategy
110
+ };
111
+ await onChunk?.(buffer, progress);
112
+ onProgress?.(progress);
113
+ return buffer;
114
+ }
115
+ const reader = response.body.getReader();
116
+ const chunks = [];
117
+ let loaded = 0;
118
+ while (true) {
119
+ const { done, value } = await reader.read();
120
+ if (done)
121
+ break;
122
+ if (!value || value.byteLength === 0)
123
+ continue;
124
+ const chunk = value instanceof Uint8Array ? value : new Uint8Array(value);
125
+ chunks.push(chunk);
126
+ loaded += chunk.byteLength;
127
+ const progress = {
128
+ loaded,
129
+ total,
130
+ ratio: total && total > 0 ? Math.min(1, loaded / total) : null,
131
+ rangeSupported,
132
+ strategy
133
+ };
134
+ await onChunk?.(chunk, progress);
135
+ onProgress?.(progress);
136
+ }
137
+ const assembled = new Uint8Array(loaded);
138
+ let offset = 0;
139
+ for (const chunk of chunks) {
140
+ assembled.set(chunk, offset);
141
+ offset += chunk.byteLength;
142
+ }
143
+ emitProgress(onProgress, assembled.byteLength, total ?? assembled.byteLength, rangeSupported, strategy);
144
+ return assembled;
145
+ }
146
+ async function fetchByRangeChunks(url, size, options, onChunk) {
147
+ const chunkSize = Math.max(1, Math.floor(options.rangeChunkSize ?? DEFAULT_RANGE_CHUNK_SIZE));
148
+ const assembled = new Uint8Array(size);
149
+ let loaded = 0;
150
+ for (let start = 0; start < size; start += chunkSize) {
151
+ const end = Math.min(size - 1, start + chunkSize - 1);
152
+ const response = await fetch(url, {
153
+ method: 'GET',
154
+ headers: mergeHeaders(options.headers, { Range: `bytes=${start}-${end}` }),
155
+ signal: options.signal
156
+ });
157
+ if (response.status !== 206 && !(response.ok && start === 0 && end >= size - 1)) {
158
+ throw new Error(`Failed to fetch subtitle range ${start}-${end}: ${response.status}`);
159
+ }
160
+ const buffer = new Uint8Array(await response.arrayBuffer());
161
+ if (buffer.byteLength === 0) {
162
+ throw new Error(`Empty subtitle range response for bytes=${start}-${end}`);
163
+ }
164
+ if (start + buffer.byteLength > size) {
165
+ assembled.set(buffer.subarray(0, size - start), start);
166
+ loaded = size;
167
+ }
168
+ else {
169
+ assembled.set(buffer, start);
170
+ loaded = start + buffer.byteLength;
171
+ }
172
+ const slice = assembled.subarray(start, loaded);
173
+ const progress = {
174
+ loaded,
175
+ total: size,
176
+ ratio: size > 0 ? Math.min(1, loaded / size) : null,
177
+ rangeSupported: true,
178
+ strategy: 'range-chunks'
179
+ };
180
+ await onChunk?.(slice, progress);
181
+ options.onProgress?.(progress);
182
+ }
183
+ return assembled;
184
+ }
185
+ export async function fetchSubtitleAsset(url, options = {}, onChunk) {
186
+ const preferRange = options.preferRange !== false;
187
+ const threshold = options.rangeChunkThreshold ?? DEFAULT_RANGE_CHUNK_THRESHOLD;
188
+ let rangeSupported = false;
189
+ let knownSize = null;
190
+ if (preferRange) {
191
+ const probe = await probeRangeSupport(url, options);
192
+ rangeSupported = probe.supportsRange;
193
+ knownSize = probe.size;
194
+ if (rangeSupported && knownSize != null && knownSize >= threshold) {
195
+ const data = await fetchByRangeChunks(url, knownSize, options, onChunk);
196
+ return { data, strategy: 'range-chunks', rangeSupported: true, total: knownSize };
197
+ }
198
+ }
199
+ const response = await fetch(url, {
200
+ method: 'GET',
201
+ headers: mergeHeaders(options.headers),
202
+ signal: options.signal
203
+ });
204
+ if (!response.ok) {
205
+ throw new Error(`Failed to fetch subtitle: ${response.status}`);
206
+ }
207
+ const total = knownSize ?? parseContentLength(response.headers.get('content-length'));
208
+ const strategy = response.body ? 'stream' : 'basic';
209
+ const data = await readResponseStream(response, total, rangeSupported, strategy, options.onProgress, onChunk);
210
+ return { data, strategy, rangeSupported, total: total ?? data.byteLength };
211
+ }
212
+ export async function fetchSubtitleText(url, options = {}) {
213
+ const { data } = await fetchSubtitleAsset(url, {
214
+ ...options,
215
+ rangeChunkThreshold: Number.POSITIVE_INFINITY,
216
+ preferRange: false
217
+ });
218
+ return new TextDecoder('utf-8').decode(data);
219
+ }
220
+ //# sourceMappingURL=range-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range-loader.js","sourceRoot":"","sources":["../../src/ts/range-loader.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,8 @@
2
2
  * High-level video-integrated subtitle renderers for libbitsub.
3
3
  * Handles canvas overlay, video sync, and subtitle fetching.
4
4
  */
5
- import type { AutoVideoSubtitleOptions, SubtitleCacheStats, SubtitleCueMetadata, SubtitleData, SubtitleDiagnosticWarning, SubtitleDisplaySettings, SubtitleLastRenderInfo, SubtitleParserMetadata, SubtitleRendererBackend, SubtitleRendererEvent, VideoSubtitleOptions, VideoVobSubOptions, WorkerRendererState } from './types';
5
+ import type { AutoVideoSubtitleOptions, LiveSubtitleRenderer, SubtitleCacheStats, SubtitleCueBounds, SubtitleCueMetadata, SubtitleData, SubtitleDiagnosticWarning, SubtitleDisplaySettings, SubtitleLastRenderInfo, SubtitleParserMetadata, SubtitleRendererBackend, SubtitleRendererEvent, SubtitleStreamChunk, SubtitleSynchronizationMode, VideoSubtitleOptions, VideoVobSubOptions, WorkerRendererState } from './types';
6
+ import { type AssetFetchProgress } from './range-loader';
6
7
  import { WebGPURenderer } from './webgpu-renderer';
7
8
  import { WebGL2Renderer } from './webgl2-renderer';
8
9
  interface SubtitleRenderLayout {
@@ -17,6 +18,12 @@ interface RenderFrameOutcome {
17
18
  data: SubtitleData | null;
18
19
  warning: SubtitleDiagnosticWarning | null;
19
20
  }
21
+ interface OffscreenFrameMetadata {
22
+ width: number | null;
23
+ height: number | null;
24
+ bounds: SubtitleCueBounds | null;
25
+ compositionCount: number;
26
+ }
20
27
  /** Performance statistics for subtitle renderer */
21
28
  export interface SubtitleRendererStats {
22
29
  /** Total frames rendered since initialization */
@@ -43,6 +50,8 @@ export interface SubtitleRendererStats {
43
50
  totalEntries: number;
44
51
  /** Current subtitle index being displayed */
45
52
  currentIndex: number;
53
+ /** Active video synchronization clock */
54
+ syncMode: SubtitleSynchronizationMode;
46
55
  }
47
56
  /**
48
57
  * Base class for video-integrated subtitle renderers.
@@ -50,12 +59,18 @@ export interface SubtitleRendererStats {
50
59
  */
51
60
  declare abstract class BaseVideoSubtitleRenderer {
52
61
  protected video: HTMLVideoElement;
53
- protected readonly format: 'pgs' | 'vobsub';
62
+ protected readonly format: 'pgs' | 'vobsub' | 'dvb';
54
63
  protected subUrl?: string;
55
64
  protected subContent?: ArrayBuffer;
56
65
  protected canvas: HTMLCanvasElement | null;
66
+ private readonly providedCanvas;
67
+ private readonly requestedContainer;
68
+ private overlayContainer;
69
+ private ownsCanvas;
70
+ private readonly devicePixelRatioCap;
71
+ private readonly backendOption;
57
72
  protected ctx: CanvasRenderingContext2D | null;
58
- protected animationFrameId: number | null;
73
+ private frameScheduler;
59
74
  protected isLoaded: boolean;
60
75
  protected lastRenderedIndex: number;
61
76
  protected lastRenderedTime: number;
@@ -69,11 +84,12 @@ declare abstract class BaseVideoSubtitleRenderer {
69
84
  protected parserMetadata: SubtitleParserMetadata | null;
70
85
  /** Display settings for subtitle rendering */
71
86
  protected displaySettings: SubtitleDisplaySettings;
72
- /** Time offset in seconds added to video.currentTime for subtitle lookup */
73
- timeOffset: number;
87
+ private _timeOffset;
74
88
  protected cacheLimit: number;
75
89
  protected prefetchBefore: number;
76
90
  protected prefetchAfter: number;
91
+ protected streamingLoad: boolean;
92
+ protected rangeRequests: boolean;
77
93
  protected onEvent?: (event: SubtitleRendererEvent) => void;
78
94
  protected onWarning?: (warning: SubtitleDiagnosticWarning) => void;
79
95
  protected currentRendererBackend: SubtitleRendererBackend | null;
@@ -81,12 +97,25 @@ declare abstract class BaseVideoSubtitleRenderer {
81
97
  protected lastRenderInfo: SubtitleLastRenderInfo | null;
82
98
  private loadedMetadataHandler;
83
99
  private seekedHandler;
100
+ private initPromise;
84
101
  protected webgpuRenderer: WebGPURenderer | null;
85
102
  protected useWebGPU: boolean;
86
103
  protected onWebGPUFallback?: () => void;
87
104
  protected webgl2Renderer: WebGL2Renderer | null;
88
105
  protected useWebGL2: boolean;
89
106
  protected onWebGL2Fallback?: () => void;
107
+ protected readonly offscreenRenderOption: boolean;
108
+ protected readonly frameAwareSync: boolean;
109
+ protected pendingWorkerOffscreen: boolean;
110
+ protected useWorkerOffscreen: boolean;
111
+ protected canvasPixelWidth: number;
112
+ protected canvasPixelHeight: number;
113
+ private presentationToken;
114
+ private offscreenAttachPromise;
115
+ private offscreenTransferPending;
116
+ private offscreenFrameMetadata;
117
+ private lastSynchronizedTime;
118
+ private lastPresentedFrames;
90
119
  protected perfStats: {
91
120
  framesRendered: number;
92
121
  framesDropped: number;
@@ -95,9 +124,15 @@ declare abstract class BaseVideoSubtitleRenderer {
95
124
  fpsTimestamps: number[];
96
125
  lastFrameTime: number;
97
126
  };
98
- constructor(options: VideoSubtitleOptions, format: 'pgs' | 'vobsub');
127
+ constructor(options: VideoSubtitleOptions, format: 'pgs' | 'vobsub' | 'dvb');
128
+ protected emitLoadProgress(format: 'pgs' | 'vobsub' | 'dvb', progress: AssetFetchProgress, indexedCues: number): void;
129
+ protected emitIndexed(format: 'pgs' | 'vobsub' | 'dvb', metadata: SubtitleParserMetadata, partial: boolean): void;
130
+ protected memoryProgress(byteLength: number): AssetFetchProgress;
99
131
  /** Get current display settings */
100
132
  getDisplaySettings(): SubtitleDisplaySettings;
133
+ /** Time offset in seconds added to the active video clock for subtitle lookup. */
134
+ get timeOffset(): number;
135
+ set timeOffset(value: number);
101
136
  /** Get performance statistics */
102
137
  abstract getStats(): SubtitleRendererStats;
103
138
  /** Get cache-related diagnostics for the active renderer session. */
@@ -114,16 +149,39 @@ declare abstract class BaseVideoSubtitleRenderer {
114
149
  getCacheLimit(): number;
115
150
  /** Get base stats common to all renderers */
116
151
  protected getBaseStats(): Omit<SubtitleRendererStats, 'usingWorker' | 'cachedFrames' | 'pendingRenders' | 'totalEntries'>;
152
+ /** Get the active video synchronization clock. */
153
+ getSynchronizationMode(): SubtitleSynchronizationMode;
117
154
  /** Set display settings and force re-render */
118
155
  setDisplaySettings(settings: Partial<SubtitleDisplaySettings>): void;
119
156
  /** Reset display settings to defaults */
120
157
  resetDisplaySettings(): void;
121
158
  /** Start initialization. */
122
159
  protected startInit(): void;
160
+ /** Wait for canvas, parser, and worker initialization before accepting pushed data. */
161
+ protected waitUntilInitialized(): Promise<void>;
162
+ /** Re-run cue selection after a live stream mutation. */
163
+ protected refreshStreamPresentation(): void;
164
+ /** Clear the currently presented cue after a live stream reset. */
165
+ protected clearStreamPresentation(): void;
123
166
  /** Initialize the renderer. */
124
167
  protected init(): Promise<void>;
168
+ protected shouldPreferWorkerOffscreen(): boolean;
169
+ protected isWorkerOffscreenPresent(): boolean;
170
+ private getDefaultContainer;
171
+ private getContainerElement;
172
+ private getCanvasParent;
173
+ private removeOwnedCanvas;
174
+ private mountOverlayCanvas;
175
+ private selectBackend;
125
176
  /** Create the canvas overlay positioned over the video. */
126
177
  protected createCanvas(): void;
178
+ private preferWorkerOffscreenOrCanvas2D;
179
+ protected ensureWorkerOffscreenAttached(): Promise<void>;
180
+ private attachWorkerOffscreen;
181
+ private recreateCanvasForMainThreadFallback;
182
+ private fallbackFromWorkerOffscreen;
183
+ protected getOffscreenFrameMetadata(index: number): OffscreenFrameMetadata | null;
184
+ protected clearOffscreenFrameMetadata(): void;
127
185
  protected emitEvent(event: SubtitleRendererEvent): void;
128
186
  protected emitWarning(warning: SubtitleDiagnosticWarning): void;
129
187
  protected setParserMetadata(metadata: SubtitleParserMetadata | null): void;
@@ -140,6 +198,8 @@ declare abstract class BaseVideoSubtitleRenderer {
140
198
  private initCanvas2D;
141
199
  /** Called when video seeks. */
142
200
  protected onSeek(): void;
201
+ private getDevicePixelRatio;
202
+ private getCanvasMountOffset;
143
203
  /** Calculate the actual video content bounds, accounting for letterboxing/pillarboxing */
144
204
  protected getVideoContentBounds(): {
145
205
  x: number;
@@ -159,8 +219,18 @@ declare abstract class BaseVideoSubtitleRenderer {
159
219
  protected abstract isPendingRender(index: number): boolean;
160
220
  /** Start the render loop. */
161
221
  protected startRenderLoop(): void;
222
+ protected renderPausedFrame(): void;
223
+ private renderSynchronizedFrame;
224
+ protected getCurrentSynchronizationTime(): number;
225
+ protected getPresentationToken(): number;
226
+ protected isCurrentPresentation(token: number): boolean;
227
+ protected invalidatePresentation(): void;
228
+ protected watchPendingRender(index: number, pending: Promise<SubtitleData | null>): void;
229
+ private recordRenderPerformance;
230
+ private recordOffscreenRenderCompletion;
162
231
  /** Render a subtitle frame to the canvas. */
163
232
  protected renderFrame(time: number, index: number): RenderFrameOutcome;
233
+ private renderFrameWorkerOffscreen;
164
234
  protected computeLayout(data: SubtitleData): SubtitleRenderLayout;
165
235
  /** Render using WebGPU. */
166
236
  private renderFrameWebGPU;
@@ -175,14 +245,27 @@ declare abstract class BaseVideoSubtitleRenderer {
175
245
  * High-level PGS subtitle renderer with Web Worker support.
176
246
  * Compatible with the old libpgs-js API.
177
247
  */
178
- export declare class PgsRenderer extends BaseVideoSubtitleRenderer {
248
+ export declare class PgsRenderer extends BaseVideoSubtitleRenderer implements LiveSubtitleRenderer {
179
249
  private pgsParser;
180
250
  private state;
251
+ private streamOperationQueue;
252
+ private streamGeneration;
181
253
  private onLoading?;
182
254
  private onLoaded?;
183
255
  private onError?;
184
256
  constructor(options: VideoSubtitleOptions);
185
257
  protected loadSubtitles(): Promise<void>;
258
+ private applyPgsIndexState;
259
+ private beginPgsPushSession;
260
+ private enqueueStreamOperation;
261
+ /** Append a chunk to the active PGS stream and return the number of newly indexed cues. */
262
+ append(data: SubtitleStreamChunk): Promise<number>;
263
+ /** Flush incomplete trailing PGS input and return the total indexed cue count. */
264
+ flush(): Promise<number>;
265
+ /** Reset the PGS stream while keeping the renderer and canvas ready for more chunks. */
266
+ reset(): Promise<void>;
267
+ private loadPgsBuffer;
268
+ private loadPgsStreaming;
186
269
  private loadOnMainThread;
187
270
  protected getWorkerRendererState(): WorkerRendererState;
188
271
  /** Yield to main thread to prevent UI blocking */
@@ -219,6 +302,11 @@ export declare class VobSubRenderer extends BaseVideoSubtitleRenderer {
219
302
  private pendingIndexLookup;
220
303
  constructor(options: VideoVobSubOptions);
221
304
  protected loadSubtitles(): Promise<void>;
305
+ private applyVobSubIndexState;
306
+ private ensureVobSubWorkerSession;
307
+ private loadVobSubBuffer;
308
+ private loadVobSubMksStreaming;
309
+ private loadVobSubIdxSubStreaming;
222
310
  private loadOnMainThread;
223
311
  protected getWorkerRendererState(): WorkerRendererState;
224
312
  /** Yield to main thread to prevent UI blocking */
@@ -245,7 +333,51 @@ export declare class VobSubRenderer extends BaseVideoSubtitleRenderer {
245
333
  get debandEnabled(): boolean;
246
334
  dispose(): void;
247
335
  }
336
+ export declare class DvbRenderer extends BaseVideoSubtitleRenderer implements LiveSubtitleRenderer {
337
+ private dvbParser;
338
+ private endTimestamps;
339
+ private state;
340
+ private streamOperationQueue;
341
+ private streamGeneration;
342
+ private onLoading?;
343
+ private onLoaded?;
344
+ private onError?;
345
+ constructor(options: VideoSubtitleOptions);
346
+ protected loadSubtitles(): Promise<void>;
347
+ private applyDvbIndexState;
348
+ private beginDvbPushSession;
349
+ private enqueueStreamOperation;
350
+ /** Append a chunk to the active DVB stream and return the number of newly indexed cues. */
351
+ append(data: SubtitleStreamChunk): Promise<number>;
352
+ /** Flush incomplete trailing DVB input and return the total indexed cue count. */
353
+ flush(): Promise<number>;
354
+ /** Reset the DVB stream while keeping the renderer and canvas ready for more chunks. */
355
+ reset(): Promise<void>;
356
+ private loadDvbBuffer;
357
+ private loadDvbStreaming;
358
+ private loadOnMainThread;
359
+ protected getWorkerRendererState(): WorkerRendererState;
360
+ /** Yield to main thread to prevent UI blocking */
361
+ private yieldToMain;
362
+ protected renderAtTime(time: number): SubtitleData | undefined;
363
+ protected findCurrentIndex(time: number): number;
364
+ protected renderAtIndex(index: number): SubtitleData | undefined;
365
+ protected buildCueMetadata(index: number): SubtitleCueMetadata | null;
366
+ protected isPendingRender(index: number): boolean;
367
+ protected onSeek(): void;
368
+ setCacheLimit(limit: number): void;
369
+ clearFrameCache(): void;
370
+ prefetchRange(startIndex: number, endIndex: number): Promise<void>;
371
+ prefetchAroundTime(time: number, before?: number, after?: number): Promise<void>;
372
+ /** Get performance statistics for DVB renderer */
373
+ getStats(): SubtitleRendererStats;
374
+ dispose(): void;
375
+ }
376
+ /**
377
+ * High-level VobSub subtitle renderer with Web Worker support.
378
+ * Compatible with the old libpgs-js API.
379
+ */
248
380
  /** Create a video subtitle renderer with automatic format detection. */
249
- export declare function createAutoSubtitleRenderer(options: AutoVideoSubtitleOptions): PgsRenderer | VobSubRenderer;
381
+ export declare function createAutoSubtitleRenderer(options: AutoVideoSubtitleOptions): PgsRenderer | VobSubRenderer | DvbRenderer;
250
382
  export {};
251
383
  //# sourceMappingURL=renderers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderers.d.ts","sourceRoot":"","sources":["../../src/ts/renderers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderers.d.ts","sourceRoot":"","sources":["../../src/ts/renderers.ts"],"names":[],"mappings":"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"}