@nodetool-ai/video-nodes 0.8.1 → 0.8.2
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 +12 -0
- package/dist/.nodetool-build-stamp +1 -1
- package/dist/nodes/easeCurve.d.ts +52 -0
- package/dist/nodes/easeCurve.d.ts.map +1 -0
- package/dist/nodes/easeCurve.js +108 -0
- package/dist/nodes/easeCurve.js.map +1 -0
- package/dist/nodes/ffmpeg-helpers.d.ts +4 -0
- package/dist/nodes/ffmpeg-helpers.d.ts.map +1 -1
- package/dist/nodes/ffmpeg-helpers.js +18 -2
- package/dist/nodes/ffmpeg-helpers.js.map +1 -1
- package/dist/nodes/script.d.ts.map +1 -1
- package/dist/nodes/script.js +42 -16
- package/dist/nodes/script.js.map +1 -1
- package/dist/nodes/storyboard.d.ts.map +1 -1
- package/dist/nodes/storyboard.js +66 -64
- package/dist/nodes/storyboard.js.map +1 -1
- package/dist/nodes/timeline/compositeRender.d.ts +17 -1
- package/dist/nodes/timeline/compositeRender.d.ts.map +1 -1
- package/dist/nodes/timeline/compositeRender.js +123 -102
- package/dist/nodes/timeline/compositeRender.js.map +1 -1
- package/dist/nodes/timeline/rawFrames.d.ts +10 -0
- package/dist/nodes/timeline/rawFrames.d.ts.map +1 -1
- package/dist/nodes/timeline/rawFrames.js +88 -4
- package/dist/nodes/timeline/rawFrames.js.map +1 -1
- package/dist/nodes/timeline.d.ts.map +1 -1
- package/dist/nodes/timeline.js +49 -22
- package/dist/nodes/timeline.js.map +1 -1
- package/dist/nodes/video.d.ts +21 -1
- package/dist/nodes/video.d.ts.map +1 -1
- package/dist/nodes/video.js +120 -1
- package/dist/nodes/video.js.map +1 -1
- package/package.json +10 -10
|
@@ -9,11 +9,12 @@
|
|
|
9
9
|
* clip media into RGBA and encodes the composited frames, in place of
|
|
10
10
|
* `<video>`/WebCodecs.
|
|
11
11
|
*/
|
|
12
|
-
import {
|
|
12
|
+
import { ensureGoogleFonts } from "@nodetool-ai/timeline/fonts/google-node";
|
|
13
|
+
import { computeModel3DBakeHash } from "@nodetool-ai/timeline";
|
|
13
14
|
import { HeadlessFrameCompositor, clipSourceTimeSec, computeActiveLayersWithHorizon, createAnimationCompileCache, hasActiveAnimation, measureTextWith, motionBlurSampleTimes, layerShutterTime, resolveFrameMotionBlur, shutterWindowIsStatic, resolveAnimatedLayerProps, resolveTextStaggerContext, trackZ } from "@nodetool-ai/timeline/render";
|
|
14
15
|
import { createCanvas } from "@napi-rs/canvas";
|
|
15
16
|
import { setImmediate } from "node:timers/promises";
|
|
16
|
-
import {
|
|
17
|
+
import { decodeStillRgba, fitWithin, openFrameEncoder, openSourceFrameStream, probeVideoFrameRate, probeVideoSize } from "./rawFrames.js";
|
|
17
18
|
import { openPngSequenceEncoder } from "./pngSequence.js";
|
|
18
19
|
import { resolveTimelineOutput } from "./outputFormats.js";
|
|
19
20
|
import { NodeRasterizer } from "./rasterizers.js";
|
|
@@ -90,6 +91,7 @@ export async function renderTimelineComposited(opts) {
|
|
|
90
91
|
throw abortError();
|
|
91
92
|
const compositor = new HeadlessFrameCompositor(device, width, height);
|
|
92
93
|
compositor.setReferenceSize(referenceWidth, referenceHeight);
|
|
94
|
+
const { unavailable: fontsUnavailable } = await ensureGoogleFonts(sequence);
|
|
93
95
|
const rasterizer = new NodeRasterizer(referenceWidth, referenceHeight);
|
|
94
96
|
const frameIndices = opts.frames
|
|
95
97
|
? [...new Set(opts.frames)]
|
|
@@ -119,6 +121,24 @@ export async function renderTimelineComposited(opts) {
|
|
|
119
121
|
const images = new Map();
|
|
120
122
|
const assetPaths = new Map();
|
|
121
123
|
const skippedClips = new Set();
|
|
124
|
+
const diagnostics = [];
|
|
125
|
+
const latestDiagnostic = new Map();
|
|
126
|
+
const clipsById = new Map(sequence.clips.map((clip) => [clip.id, clip]));
|
|
127
|
+
const diagnose = (clipId, timeMs, reason, detail) => {
|
|
128
|
+
const startMs = Math.max(0, timeMs);
|
|
129
|
+
const endMs = Math.min(durationMs, startMs + frameMs);
|
|
130
|
+
const key = JSON.stringify([clipId, reason, detail]);
|
|
131
|
+
const previous = latestDiagnostic.get(key);
|
|
132
|
+
if (previous && startMs <= previous.endMs + 0.000001) {
|
|
133
|
+
previous.endMs = Math.max(previous.endMs, endMs);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
const diagnostic = { clipId, startMs, endMs, reason, detail };
|
|
137
|
+
diagnostics.push(diagnostic);
|
|
138
|
+
latestDiagnostic.set(key, diagnostic);
|
|
139
|
+
}
|
|
140
|
+
skippedClips.add(clipsById.get(clipId)?.name ?? clipId);
|
|
141
|
+
};
|
|
122
142
|
const closeVideoSources = () => {
|
|
123
143
|
for (const source of videoSources.values())
|
|
124
144
|
source.close();
|
|
@@ -140,13 +160,8 @@ export async function renderTimelineComposited(opts) {
|
|
|
140
160
|
if (signal?.aborted)
|
|
141
161
|
throw abortError();
|
|
142
162
|
let decoded = null;
|
|
143
|
-
if (file)
|
|
144
|
-
|
|
145
|
-
if (signal?.aborted)
|
|
146
|
-
throw abortError();
|
|
147
|
-
if (size)
|
|
148
|
-
decoded = await decodeImageRgba(file, fitWithin(size, frameSize));
|
|
149
|
-
}
|
|
163
|
+
if (file)
|
|
164
|
+
decoded = await decodeStillRgba(file, frameSize);
|
|
150
165
|
if (signal?.aborted)
|
|
151
166
|
throw abortError();
|
|
152
167
|
images.set(assetId, decoded);
|
|
@@ -177,65 +192,36 @@ export async function renderTimelineComposited(opts) {
|
|
|
177
192
|
// shows at the cut.
|
|
178
193
|
const startSec = clipSourceTimeSec(clip, clip.startMs);
|
|
179
194
|
const endMs = clip.startMs + clip.durationMs;
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
rgba,
|
|
211
|
-
version
|
|
212
|
-
};
|
|
213
|
-
},
|
|
214
|
-
close: () => stream.close()
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
else {
|
|
218
|
-
const stream = openVideoFrameStream({
|
|
219
|
-
filePath: file,
|
|
220
|
-
size: decodeSize,
|
|
221
|
-
fps,
|
|
222
|
-
startSec,
|
|
223
|
-
speed: clip.speedBaked ? 1 : Math.max(0.0001, clip.speedMultiplier ?? 1)
|
|
224
|
-
});
|
|
225
|
-
source = {
|
|
226
|
-
width: stream.width,
|
|
227
|
-
height: stream.height,
|
|
228
|
-
endMs,
|
|
229
|
-
async frameAt(timeMs) {
|
|
230
|
-
const index = Math.max(0, Math.round(((timeMs - clip.startMs) * fps) / 1000));
|
|
231
|
-
const rgba = await stream.frameAt(index);
|
|
232
|
-
if (!rgba)
|
|
233
|
-
return null;
|
|
234
|
-
return { rgba, version: `${key}#${index}` };
|
|
235
|
-
},
|
|
236
|
-
close: () => stream.close()
|
|
237
|
-
};
|
|
238
|
-
}
|
|
195
|
+
const nativeFps = await probeVideoFrameRate(file);
|
|
196
|
+
const stream = openSourceFrameStream({
|
|
197
|
+
filePath: file,
|
|
198
|
+
size: decodeSize,
|
|
199
|
+
fps: nativeFps,
|
|
200
|
+
startSec,
|
|
201
|
+
nativeSampling: true
|
|
202
|
+
});
|
|
203
|
+
const frameVersions = new WeakMap();
|
|
204
|
+
let nextFrameVersion = 0;
|
|
205
|
+
const source = {
|
|
206
|
+
width: stream.width,
|
|
207
|
+
height: stream.height,
|
|
208
|
+
endMs,
|
|
209
|
+
async frameAt(timeMs) {
|
|
210
|
+
const sourceSec = clip.model3dStyle?.bake?.assetId === assetId
|
|
211
|
+
? Math.max(0, (timeMs - clip.startMs) / 1000)
|
|
212
|
+
: clipSourceTimeSec(clip, timeMs);
|
|
213
|
+
const rgba = await stream.frameAtSourceSec(sourceSec);
|
|
214
|
+
if (!rgba)
|
|
215
|
+
return null;
|
|
216
|
+
let version = frameVersions.get(rgba);
|
|
217
|
+
if (version === undefined) {
|
|
218
|
+
version = `${key}@${nextFrameVersion++}`;
|
|
219
|
+
frameVersions.set(rgba, version);
|
|
220
|
+
}
|
|
221
|
+
return { rgba, version };
|
|
222
|
+
},
|
|
223
|
+
close: () => stream.close()
|
|
224
|
+
};
|
|
239
225
|
videoSources.set(key, source);
|
|
240
226
|
return source;
|
|
241
227
|
};
|
|
@@ -249,14 +235,18 @@ export async function renderTimelineComposited(opts) {
|
|
|
249
235
|
*/
|
|
250
236
|
const sampleAt = async (timeMs, frameTimeMs = timeMs, sampleIndex = 0, sampleCount = 1) => {
|
|
251
237
|
const layers = [];
|
|
252
|
-
const { layers: active, adjustments, precomposites } = computeActiveLayersWithHorizon(sequence.tracks, sequence.clips, timeMs, {
|
|
238
|
+
const { layers: active, adjustments, precomposites, droppedLayers } = computeActiveLayersWithHorizon(sequence.tracks, sequence.clips, timeMs, {
|
|
253
239
|
canvas,
|
|
240
|
+
model3dBakeHash: (clip) => computeModel3DBakeHash(clip, sequence),
|
|
254
241
|
animationCache: animCache,
|
|
255
242
|
mediaTracks: sequence.mediaTracks,
|
|
256
243
|
camera2d: sequence.camera2d,
|
|
257
244
|
tempo: sequence.tempo,
|
|
258
245
|
layerTimeMs: (clip) => layerShutterTime(clip, frameTimeMs, sampleIndex, sampleCount, frameMs, output.motionBlur)
|
|
259
246
|
});
|
|
247
|
+
for (const dropped of droppedLayers) {
|
|
248
|
+
diagnose(dropped.clipId, frameTimeMs, "scene_drop", dropped.reason);
|
|
249
|
+
}
|
|
260
250
|
/**
|
|
261
251
|
* A resolved layer as something the compositor can upload: its pixels,
|
|
262
252
|
* its own shape mask rasterized at that size, and — for a matted layer —
|
|
@@ -334,38 +324,60 @@ export async function renderTimelineComposited(opts) {
|
|
|
334
324
|
return null;
|
|
335
325
|
return finish({ ...common, id: id("s"), source: raster });
|
|
336
326
|
}
|
|
337
|
-
if (
|
|
327
|
+
if (layer.kind === "model3d") {
|
|
328
|
+
diagnose(layer.clipId, frameTimeMs, "unsupported_layer", "Live or stale-bake 3D requires a fresh bake before server export");
|
|
338
329
|
return null;
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
330
|
+
}
|
|
331
|
+
if (!layer.assetId) {
|
|
332
|
+
diagnose(layer.clipId, frameTimeMs, "missing_asset", "Active layer has no media asset");
|
|
333
|
+
return null;
|
|
334
|
+
}
|
|
335
|
+
if (!(await pathFor(layer.assetId))) {
|
|
336
|
+
diagnose(layer.clipId, frameTimeMs, "unavailable_media", "Media asset has no readable file");
|
|
337
|
+
return null;
|
|
338
|
+
}
|
|
339
|
+
try {
|
|
340
|
+
if (layer.kind === "video") {
|
|
341
|
+
const stream = await videoFor(layer.clip, layer.assetId);
|
|
342
|
+
if (!stream) {
|
|
343
|
+
diagnose(layer.clipId, frameTimeMs, "decode_failure", "Media has no video stream");
|
|
344
|
+
return null;
|
|
345
|
+
}
|
|
346
|
+
const decoded = await stream.frameAt(layerTimeMs);
|
|
347
|
+
if (!decoded) {
|
|
348
|
+
diagnose(layer.clipId, frameTimeMs, "decode_failure", "Video decoder returned no frame");
|
|
349
|
+
return null;
|
|
350
|
+
}
|
|
351
|
+
return finish({
|
|
352
|
+
...common,
|
|
353
|
+
id: id("v"),
|
|
354
|
+
source: {
|
|
355
|
+
rgba: decoded.rgba,
|
|
356
|
+
width: stream.width,
|
|
357
|
+
height: stream.height,
|
|
358
|
+
version: decoded.version
|
|
359
|
+
}
|
|
360
|
+
});
|
|
344
361
|
}
|
|
345
|
-
const
|
|
346
|
-
if (!
|
|
362
|
+
const image = await imageFor(layer.assetId);
|
|
363
|
+
if (!image) {
|
|
364
|
+
diagnose(layer.clipId, frameTimeMs, "decode_failure", "Image decoder returned no frame");
|
|
347
365
|
return null;
|
|
366
|
+
}
|
|
348
367
|
return finish({
|
|
349
368
|
...common,
|
|
350
|
-
id: id("
|
|
351
|
-
source: {
|
|
352
|
-
rgba: decoded.rgba,
|
|
353
|
-
width: stream.width,
|
|
354
|
-
height: stream.height,
|
|
355
|
-
version: decoded.version
|
|
356
|
-
}
|
|
369
|
+
id: id("i"),
|
|
370
|
+
source: { ...image, version: layer.assetId }
|
|
357
371
|
});
|
|
358
372
|
}
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
373
|
+
catch (error) {
|
|
374
|
+
if (signal?.aborted ||
|
|
375
|
+
(error instanceof Error && error.name === "MissingBinaryError")) {
|
|
376
|
+
throw error;
|
|
377
|
+
}
|
|
378
|
+
diagnose(layer.clipId, frameTimeMs, "decode_failure", error instanceof Error ? error.message : String(error));
|
|
362
379
|
return null;
|
|
363
380
|
}
|
|
364
|
-
return finish({
|
|
365
|
-
...common,
|
|
366
|
-
id: id("i"),
|
|
367
|
-
source: { ...image, version: layer.assetId }
|
|
368
|
-
});
|
|
369
381
|
};
|
|
370
382
|
for (let index = 0; index < active.length; index++) {
|
|
371
383
|
if (index > 0 && index % YIELD_EVERY_LAYERS === 0) {
|
|
@@ -383,15 +395,17 @@ export async function renderTimelineComposited(opts) {
|
|
|
383
395
|
const source = await frameLayerFor(layer.matte.layer, "m:");
|
|
384
396
|
if (signal?.aborted)
|
|
385
397
|
throw abortError();
|
|
386
|
-
if (source) {
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
invert: layer.matte.invert,
|
|
390
|
-
layer: source,
|
|
391
|
-
strength: layer.matte.strength,
|
|
392
|
-
featherPx: layer.matte.featherPx
|
|
393
|
-
};
|
|
398
|
+
if (!source) {
|
|
399
|
+
diagnose(layer.clipId, frameTimeMs, "decode_failure", "Required matte source could not be rendered");
|
|
400
|
+
continue;
|
|
394
401
|
}
|
|
402
|
+
built.matte = {
|
|
403
|
+
mode: layer.matte.mode,
|
|
404
|
+
invert: layer.matte.invert,
|
|
405
|
+
layer: source,
|
|
406
|
+
strength: layer.matte.strength,
|
|
407
|
+
featherPx: layer.matte.featherPx
|
|
408
|
+
};
|
|
395
409
|
}
|
|
396
410
|
layers.push(built);
|
|
397
411
|
}
|
|
@@ -403,7 +417,7 @@ export async function renderTimelineComposited(opts) {
|
|
|
403
417
|
opacity: adjustment.opacity,
|
|
404
418
|
effects: adjustment.effects,
|
|
405
419
|
shapeMask: adjustment.mask
|
|
406
|
-
? rasterizer.mask(adjustment.mask, referenceWidth, referenceHeight) ?? undefined
|
|
420
|
+
? (rasterizer.mask(adjustment.mask, referenceWidth, referenceHeight) ?? undefined)
|
|
407
421
|
: undefined,
|
|
408
422
|
wipe: adjustment.wipe,
|
|
409
423
|
precomposeGroupId: adjustment.precomposeGroupId
|
|
@@ -434,6 +448,7 @@ export async function renderTimelineComposited(opts) {
|
|
|
434
448
|
return false;
|
|
435
449
|
const { layers, adjustments } = computeActiveLayersWithHorizon(sequence.tracks, sequence.clips, timeMs, {
|
|
436
450
|
canvas,
|
|
451
|
+
model3dBakeHash: (clip) => computeModel3DBakeHash(clip, sequence),
|
|
437
452
|
animationCache: animCache,
|
|
438
453
|
mediaTracks: sequence.mediaTracks,
|
|
439
454
|
camera2d: sequence.camera2d,
|
|
@@ -493,7 +508,13 @@ export async function renderTimelineComposited(opts) {
|
|
|
493
508
|
throw abortError();
|
|
494
509
|
if (encoder)
|
|
495
510
|
await awaitWithAbort(encoder.finish(), signal);
|
|
496
|
-
return {
|
|
511
|
+
return {
|
|
512
|
+
complete: diagnostics.length === 0,
|
|
513
|
+
diagnostics,
|
|
514
|
+
totalFrames: frameIndices.length,
|
|
515
|
+
skippedClips: [...skippedClips],
|
|
516
|
+
fontsUnavailable
|
|
517
|
+
};
|
|
497
518
|
}
|
|
498
519
|
catch (error) {
|
|
499
520
|
encoder?.abort();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compositeRender.js","sourceRoot":"","sources":["../../../src/nodes/timeline/compositeRender.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAUH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,8BAA8B,EAC9B,2BAA2B,EAC3B,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,EACzB,yBAAyB,EACzB,MAAM,EACP,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EACL,eAAe,EACf,SAAS,EACT,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,EAGf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EACL,qBAAqB,EAEtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AA4ClD,mFAAmF;AACnF,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAE7B,gFAAgF;AAChF,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IACnD,YAAY,KAAc;QACxB,KAAK,CACH,uEAAuE;YACrE,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAC3D,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;QACzC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED,+EAA+E;AAC/E,SAAS,UAAU;IACjB,OAAO,IAAI,YAAY,CAAC,2BAA2B,EAAE,YAAY,CAAC,CAAC;AACrE,CAAC;AAED,KAAK,UAAU,cAAc,CAAI,OAAmB,EAAE,MAAoB;IACxE,IAAI,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC;IAC5B,IAAI,MAAM,CAAC,OAAO;QAAE,MAAM,UAAU,EAAE,CAAC;IACvC,IAAI,OAAiC,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;QACtD,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IACH,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAChD,CAAC;YAAS,CAAC;QACT,IAAI,OAAO;YAAE,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa;IAC1B,IAAI,CAAC;QACH,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QACnE,OAAO,MAAM,gBAAgB,EAAE,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,0BAA0B,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAwBD,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,IAA4B;IAE5B,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC9E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,qBAAqB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACvE,wDAAwD;IACxD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,IAAI,GAAG,GAAG,CAAC;IAC3B,2EAA2E;IAC3E,4EAA4E;IAC5E,0EAA0E;IAC1E,2CAA2C;IAC3C,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACnE,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IACvE,MAAM,SAAS,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG;QACb,KAAK,EAAE,cAAc;QACrB,MAAM,EAAE,eAAe;QACvB,uEAAuE;QACvE,2EAA2E;QAC3E,mEAAmE;QACnE,2DAA2D;QAC3D,WAAW,EAAE,eAAe,CAC1B,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAA+B,CAClE;KACF,CAAC;IAEF,IAAI,MAAM,EAAE,OAAO;QAAE,MAAM,UAAU,EAAE,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;IACrC,IAAI,MAAM,EAAE,OAAO;QAAE,MAAM,UAAU,EAAE,CAAC;IACxC,MAAM,UAAU,GAAG,IAAI,uBAAuB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACtE,UAAU,CAAC,gBAAgB,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,IAAI,cAAc,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;IACvE,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM;QAC9B,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACtB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,WAAW,CAAC;aAC/E,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAC7D,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAC5B,MAAM,OAAO,GAAwB,UAAU;QAC7C,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,cAAc;YAChC,CAAC,CAAC,sBAAsB,CAAC;gBACrB,OAAO;gBACP,KAAK;gBACL,MAAM;gBACN,GAAG;gBACH,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC;YACJ,CAAC,CAAC,gBAAgB,CAAC;gBACf,OAAO;gBACP,KAAK;gBACL,MAAM;gBACN,GAAG;gBACH,WAAW,EAAE,MAAM,CAAC,WAAW;aAChC,CAAC,CAAC;IACT,MAAM,SAAS,GAAG,2BAA2B,EAAE,CAAC;IAEhD,MAAM,YAAY,GAAG,IAAI,GAAG,EAA2B,CAAC;IACxD,MAAM,MAAM,GAAG,IAAI,GAAG,EAA2B,CAAC;IAClD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkC,CAAC;IAC7D,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,MAAM,iBAAiB,GAAG,GAAS,EAAE;QACnC,KAAK,MAAM,MAAM,IAAI,YAAY,CAAC,MAAM,EAAE;YAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QAC3D,YAAY,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC,CAAC;IACF,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAErE,MAAM,OAAO,GAAG,CAAC,OAAe,EAA0B,EAAE;QAC1D,IAAI,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACpC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,KAAK,EAAE,OAAe,EAA4B,EAAE;QACnE,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;QAC5D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,MAAM,EAAE,OAAO;YAAE,MAAM,UAAU,EAAE,CAAC;QACxC,IAAI,OAAO,GAAoB,IAAI,CAAC;QACpC,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,MAAM,EAAE,OAAO;gBAAE,MAAM,UAAU,EAAE,CAAC;YACxC,IAAI,IAAI;gBAAE,OAAO,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,MAAM,EAAE,OAAO;YAAE,MAAM,UAAU,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7B,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,KAAK,EACpB,IAAkB,EAClB,OAAe,EACkB,EAAE;QACnC,uEAAuE;QACvE,4EAA4E;QAC5E,mEAAmE;QACnE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,MAAM,EAAE,OAAO;YAAE,MAAM,UAAU,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,MAAM,EAAE,OAAO;YAAE,MAAM,UAAU,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC9C,0EAA0E;QAC1E,4EAA4E;QAC5E,yEAAyE;QACzE,oBAAoB;QACpB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC;QAC7C,IAAI,MAAuB,CAAC;QAC5B,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,mEAAmE;YACnE,0EAA0E;YAC1E,MAAM,MAAM,GAAG,qBAAqB,CAAC;gBACnC,QAAQ,EAAE,IAAI;gBACd,IAAI,EAAE,UAAU;gBAChB,GAAG;gBACH,QAAQ;aACT,CAAC,CAAC;YACH,MAAM,aAAa,GAAG,IAAI,OAAO,EAAsB,CAAC;YACxD,IAAI,gBAAgB,GAAG,CAAC,CAAC;YACzB,MAAM,GAAG;gBACP,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,KAAK;gBACL,KAAK,CAAC,OAAO,CAAC,MAAc;oBAC1B,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;oBAClD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;oBACtD,IAAI,CAAC,IAAI;wBAAE,OAAO,IAAI,CAAC;oBACvB,mEAAmE;oBACnE,qEAAqE;oBACrE,6BAA6B;oBAC7B,IAAI,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACtC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;wBAC1B,OAAO,GAAG,GAAG,GAAG,IAAI,gBAAgB,EAAE,EAAE,CAAC;wBACzC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oBACnC,CAAC;oBACD,OAAO;wBACL,IAAI;wBACJ,OAAO;qBACR,CAAC;gBACJ,CAAC;gBACD,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE;aAC5B,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,oBAAoB,CAAC;gBAClC,QAAQ,EAAE,IAAI;gBACd,IAAI,EAAE,UAAU;gBAChB,GAAG;gBACH,QAAQ;gBACR,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC;aACzE,CAAC,CAAC;YACH,MAAM,GAAG;gBACP,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,KAAK;gBACL,KAAK,CAAC,OAAO,CAAC,MAAc;oBAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CACnD,CAAC;oBACF,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBACzC,IAAI,CAAC,IAAI;wBAAE,OAAO,IAAI,CAAC;oBACvB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,KAAK,EAAE,EAAE,CAAC;gBAC9C,CAAC;gBACD,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE;aAC5B,CAAC;QACJ,CAAC;QACD,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC9B,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,IAAI,CAAC;QACH;;;;;;WAMG;QACH,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAE,WAAW,GAAG,MAAM,EAAE,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,EAAwB,EAAE;YACtH,MAAM,MAAM,GAAiB,EAAE,CAAC;YAChC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,8BAA8B,CACnF,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,KAAK,EACd,MAAM,EACN;gBACE,MAAM;gBACN,cAAc,EAAE,SAAS;gBACzB,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC;aACjH,CACF,CAAC;YACF;;;;;;;eAOG;YACH,MAAM,aAAa,GAAG,KAAK,EACzB,KAA8B,EAC9B,QAAQ,GAAG,EAAE,EACe,EAAE;gBAC9B,MAAM,WAAW,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;gBACpH,MAAM,IAAI,GAAG,yBAAyB,CACpC,KAAK,EACL,WAAW,EACX,MAAM,EACN,SAAS,EACT,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAC1F,CAAC;gBACF,MAAM,MAAM,GAAG;oBACb,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;oBAChC,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,YAAY,EAAE,KAAK,CAAC,YAAY;oBAChC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;oBAC1C,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY;oBACrD,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO;oBACtC,YAAY,EAAE,KAAK,CAAC,YAAY;oBAChC,UAAU,EAAE,KAAK,CAAC,UAAU;iBAC7B,CAAC;gBAEF,wEAAwE;gBACxE,MAAM,MAAM,GAAG,CAAC,KAAiB,EAAc,EAAE;oBAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC5B,IAAI,CAAC,KAAK;wBAAE,OAAO,KAAK,CAAC;oBACzB,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAC5B,KAAK,EACL,KAAK,CAAC,MAAM,CAAC,KAAK,EAClB,KAAK,CAAC,MAAM,CAAC,MAAM,CACpB,CAAC;oBACF,IAAI,MAAM;wBAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;oBACrC,OAAO,KAAK,CAAC;gBACf,CAAC,CAAC;gBAEF,MAAM,EAAE,GAAG,CAAC,IAAY,EAAU,EAAE,CAClC,GAAG,QAAQ,GAAG,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBAEvC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAC9C,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBACjD,IAAI,CAAC,MAAM;wBAAE,OAAO,IAAI,CAAC;oBACzB,OAAO,MAAM,CAAC;wBACZ,GAAG,MAAM;wBACT,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC;wBACX,MAAM,EAAE,MAAM;wBACd,uDAAuD;wBACvD,8DAA8D;wBAC9D,SAAS,EAAE,SAAS;wBACpB,YAAY,EAAE,SAAS;wBACvB,YAAY,EAAE,SAAS;wBACvB,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,SAAS;wBAClB,YAAY,EAAE,SAAS;wBACvB,iEAAiE;wBACjE,gEAAgE;wBAChE,wCAAwC;wBACxC,UAAU,EAAE,SAAS;qBACtB,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBAC5C,MAAM,OAAO,GAAG,yBAAyB,CACvC,KAAK,CAAC,IAAI,EACV,WAAW,EACX,MAAM,EACN,SAAS,EACT,QAAQ,CAAC,KAAK,CACf,CAAC;oBACF,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBACxD,IAAI,CAAC,MAAM;wBAAE,OAAO,IAAI,CAAC;oBACzB,OAAO,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC5D,CAAC;gBAED,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC3B,oEAAoE;oBACpE,sDAAsD;oBACtD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC;oBACvD,IAAI,CAAC,UAAU;wBAAE,OAAO,IAAI,CAAC;oBAC7B,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;oBAC5C,IAAI,CAAC,MAAM;wBAAE,OAAO,IAAI,CAAC;oBACzB,OAAO,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC5D,CAAC;gBAED,IAAI,CAAC,KAAK,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAC;gBAEhC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC3B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;oBACzD,IAAI,CAAC,MAAM,EAAE,CAAC;wBACZ,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAClC,OAAO,IAAI,CAAC;oBACd,CAAC;oBACD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;oBAClD,IAAI,CAAC,OAAO;wBAAE,OAAO,IAAI,CAAC;oBAC1B,OAAO,MAAM,CAAC;wBACZ,GAAG,MAAM;wBACT,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC;wBACX,MAAM,EAAE;4BACN,IAAI,EAAE,OAAO,CAAC,IAAI;4BAClB,KAAK,EAAE,MAAM,CAAC,KAAK;4BACnB,MAAM,EAAE,MAAM,CAAC,MAAM;4BACrB,OAAO,EAAE,OAAO,CAAC,OAAO;yBACzB;qBACF,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAClC,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO,MAAM,CAAC;oBACZ,GAAG,MAAM;oBACT,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC;oBACX,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;iBAC7C,CAAC,CAAC;YACL,CAAC,CAAC;YAEF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;gBACnD,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,kBAAkB,KAAK,CAAC,EAAE,CAAC;oBAClD,MAAM,YAAY,EAAE,CAAC;gBACvB,CAAC;gBACD,IAAI,MAAM,EAAE,OAAO;oBAAE,MAAM,UAAU,EAAE,CAAC;gBACxC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC5B,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;gBACzC,IAAI,MAAM,EAAE,OAAO;oBAAE,MAAM,UAAU,EAAE,CAAC;gBACxC,IAAI,CAAC,KAAK;oBAAE,SAAS;gBACrB,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAChB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAC5D,IAAI,MAAM,EAAE,OAAO;wBAAE,MAAM,UAAU,EAAE,CAAC;oBACxC,IAAI,MAAM,EAAE,CAAC;wBACX,KAAK,CAAC,KAAK,GAAG;4BACZ,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI;4BACtB,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;4BAC1B,KAAK,EAAE,MAAM;4BACb,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ;4BAC9B,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS;yBACjC,CAAC;oBACJ,CAAC;gBACH,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;YAED,OAAO;gBACL,MAAM;gBACN,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAmB,EAAE,CAAC,CAAC;oBAC7D,EAAE,EAAE,UAAU,CAAC,MAAM;oBACrB,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC;oBACrC,OAAO,EAAE,UAAU,CAAC,OAAO;oBAC3B,OAAO,EAAE,UAAU,CAAC,OAAO;oBAC3B,SAAS,EAAE,UAAU,CAAC,IAAI;wBACxB,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,eAAe,CAAC,IAAI,SAAS;wBAChF,CAAC,CAAC,SAAS;oBACb,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,iBAAiB,EAAE,UAAU,CAAC,iBAAiB;iBAChD,CAAC,CAAC;gBACH,aAAa,EAAE,aAAa,CAAC,GAAG,CAC9B,CAAC,KAAK,EAAqB,EAAE,CAAC,CAAC;oBAC7B,EAAE,EAAE,KAAK,CAAC,MAAM;oBAChB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;oBAChC,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;iBAC3C,CAAC,CACH;aACF,CAAC;QACJ,CAAC,CAAC;QAEF;;;;;;;;WAQG;QACH,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAE,eAAuB,EAAW,EAAE;YACpE,IAAI,eAAe,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAC;YACvC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,8BAA8B,CAC5D,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,KAAK,EACd,MAAM,EACN;gBACE,MAAM;gBACN,cAAc,EAAE,SAAS;gBACzB,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;aACtB,CACF,CAAC;YACF,mEAAmE;YACnE,iEAAiE;YACjE,MAAM,eAAe,GAAG;gBACtB,GAAG,MAAM;gBACT,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;oBAClC,IAAI,EAAE,OAAgB;oBACtB,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,MAAM,EAAE,UAAU,CAAC,MAAM;oBACzB,UAAU,EAAE,UAAU,CAAC,UAAU;oBACjC,SAAS,EAAE,QAAiB;oBAC5B,OAAO,EAAE,UAAU,CAAC,OAAO;oBAC3B,OAAO,EAAE,SAAS;iBACnB,CAAC,CAAC;aACJ,CAAC;YACF,OAAO,qBAAqB,CAC1B,MAAM,EACN,kBAAkB,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAC/F,CAAC;QACJ,CAAC,CAAC;QAEF,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;YACnD,IAAI,MAAM,EAAE,OAAO;gBAAE,MAAM,UAAU,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;YACpC,MAAM,UAAU,GAAG,sBAAsB,CACvC,QAAQ,CAAC,KAAK,EACd,MAAM,CAAC,UAAU,EACjB,MAAM,EACN,OAAO,EACP,QAAQ,CAAC,MAAM,CAChB,CAAC;YAEF,KAAK,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;gBAC/C,IAAI,MAAM,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC;oBAC1B,MAAM,CAAC,KAAK,EAAE,CAAC;oBACf,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;YAED,MAAM,OAAO,GAAkB,EAAE,CAAC;YAClC,wEAAwE;YACxE,oEAAoE;YACpE,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,eAAe,CAAC;gBAC9D,CAAC,CAAC,CAAC,MAAM,CAAC;gBACV,CAAC,CAAC,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;YACvD,KAAK,MAAM,QAAQ,IAAI,WAAW,EAAE,CAAC;gBACnC,sEAAsE;gBACtE,gEAAgE;gBAChE,IAAI,MAAM,EAAE,OAAO;oBAAE,MAAM,UAAU,EAAE,CAAC;gBACxC,OAAO,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;gBACnF,IAAI,MAAM,EAAE,OAAO;oBAAE,MAAM,UAAU,EAAE,CAAC;YAC1C,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,UAAU,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,EAC/D,MAAM,CACP,CAAC;YACF,IAAI,MAAM,EAAE,OAAO;gBAAE,MAAM,UAAU,EAAE,CAAC;YACxC,MAAM,cAAc,CAClB,UAAU;gBACR,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC;gBAC3B,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,EACjD,MAAM,CACP,CAAC;YACF,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,GAAG,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,MAAM,EAAE,OAAO;YAAE,MAAM,UAAU,EAAE,CAAC;QACxC,IAAI,OAAO;YAAE,MAAM,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC;QAC5D,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC;IAC/E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,KAAK,EAAE,CAAC;QACjB,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QACxD,iBAAiB,EAAE,CAAC;QACpB,UAAU,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"compositeRender.js","sourceRoot":"","sources":["../../../src/nodes/timeline/compositeRender.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,8 +31,15 @@ export interface RawImage extends RawSize {
|
|
|
31
31
|
export declare function fitWithin(source: RawSize, canvas: RawSize): RawSize;
|
|
32
32
|
/** Probe a media file's video dimensions, or `null` when it has no video. */
|
|
33
33
|
export declare function probeVideoSize(filePath: string): Promise<RawSize | null>;
|
|
34
|
+
/** Native source rate used only for verified frame-grid caching. */
|
|
35
|
+
export declare function probeVideoFrameRate(filePath: string): Promise<number>;
|
|
34
36
|
/** Decode a still image to straight-alpha RGBA at `size`. */
|
|
35
37
|
export declare function decodeImageRgba(filePath: string, size: RawSize): Promise<RawImage>;
|
|
38
|
+
/**
|
|
39
|
+
* Decode a still fitted inside `canvas`, or `null` when ffprobe finds no
|
|
40
|
+
* picture in it.
|
|
41
|
+
*/
|
|
42
|
+
export declare function decodeStillRgba(filePath: string, canvas: RawSize): Promise<RawImage | null>;
|
|
36
43
|
/**
|
|
37
44
|
* A clip's frames, decoded on demand in timeline order.
|
|
38
45
|
*
|
|
@@ -56,6 +63,7 @@ interface VideoFrameStreamOptions {
|
|
|
56
63
|
startSec: number;
|
|
57
64
|
/** Playback rate: >1 consumes the source faster than the timeline. */
|
|
58
65
|
speed: number;
|
|
66
|
+
nativeSampling?: boolean;
|
|
59
67
|
}
|
|
60
68
|
/**
|
|
61
69
|
* Start decoding `filePath` into RGBA frames at the timeline's frame rate.
|
|
@@ -96,6 +104,8 @@ export declare function openSourceFrameStream(opts: {
|
|
|
96
104
|
size: RawSize;
|
|
97
105
|
fps: number;
|
|
98
106
|
startSec: number;
|
|
107
|
+
/** Preserve native frames instead of resampling onto the requested grid. */
|
|
108
|
+
nativeSampling?: boolean;
|
|
99
109
|
/** Maximum decoded bytes retained in one reverse window. */
|
|
100
110
|
maxWindowBytes?: number;
|
|
101
111
|
/** Maximum source-time span retained in one reverse window. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rawFrames.d.ts","sourceRoot":"","sources":["../../../src/nodes/timeline/rawFrames.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"rawFrames.d.ts","sourceRoot":"","sources":["../../../src/nodes/timeline/rawFrames.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAcH,4CAA4C;AAC5C,UAAU,OAAO;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,2CAA2C;AAC3C,MAAM,WAAW,QAAS,SAAQ,OAAO;IACvC,IAAI,EAAE,UAAU,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAUnE;AAED,6EAA6E;AAC7E,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAe9E;AAED,oEAAoE;AACpE,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgB3E;AAkBD,6DAA6D;AAC7D,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,QAAQ,CAAC,CAyCnB;AAsCD;;;GAGG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAI1B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAiB,SAAQ,OAAO;IAC/C,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACnD,KAAK,IAAI,IAAI,CAAC;CACf;AAKD,UAAU,uBAAuB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,IAAI,EAAE,OAAO,CAAC;IACd,kEAAkE;IAClE,GAAG,EAAE,MAAM,CAAC;IACZ,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,uBAAuB,GAC5B,gBAAgB,CA6DlB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,iBAAkB,SAAQ,OAAO;IAChD,+EAA+E;IAC/E,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAC1D,iCAAiC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,KAAK,IAAI,IAAI,CAAC;CACf;AAyDD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,iBAAiB,CAuIpB;AAsGD,4EAA4E;AAC5E,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,6DAA6D;IAC7D,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAaxE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAiB7C;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,8DAA8D;IAC9D,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC,GAAG,YAAY,CAqFf"}
|
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
* encoder.
|
|
15
15
|
*/
|
|
16
16
|
import { spawn } from "node:child_process";
|
|
17
|
+
import { open, readFile } from "node:fs/promises";
|
|
18
|
+
import { createCanvas, loadImage } from "@napi-rs/canvas";
|
|
17
19
|
import { MissingBinaryError, execFfmpeg, execFfprobe } from "../ffmpeg-helpers.js";
|
|
18
20
|
/**
|
|
19
21
|
* Largest size that fits `source` inside `canvas` without upscaling and
|
|
@@ -46,6 +48,24 @@ export async function probeVideoSize(filePath) {
|
|
|
46
48
|
return null;
|
|
47
49
|
return { width: Number(match[1]), height: Number(match[2]) };
|
|
48
50
|
}
|
|
51
|
+
/** Native source rate used only for verified frame-grid caching. */
|
|
52
|
+
export async function probeVideoFrameRate(filePath) {
|
|
53
|
+
const { stdout } = await execFfprobe([
|
|
54
|
+
"-v",
|
|
55
|
+
"error",
|
|
56
|
+
"-select_streams",
|
|
57
|
+
"v:0",
|
|
58
|
+
"-show_entries",
|
|
59
|
+
"stream=avg_frame_rate",
|
|
60
|
+
"-of",
|
|
61
|
+
"default=noprint_wrappers=1:nokey=1",
|
|
62
|
+
filePath
|
|
63
|
+
]);
|
|
64
|
+
const [numerator, denominator = "1"] = stdout.trim().split("/");
|
|
65
|
+
const rate = Number(numerator) / Number(denominator);
|
|
66
|
+
// An unknown grid disables caching; exact timestamp seeks still work.
|
|
67
|
+
return Number.isFinite(rate) && rate > 0 ? rate : 1;
|
|
68
|
+
}
|
|
49
69
|
function spawnFfmpeg(args) {
|
|
50
70
|
return spawn("ffmpeg", args, { stdio: ["pipe", "pipe", "pipe"] });
|
|
51
71
|
}
|
|
@@ -94,6 +114,52 @@ export async function decodeImageRgba(filePath, size) {
|
|
|
94
114
|
}
|
|
95
115
|
return { rgba: rgba.subarray(0, expected), ...size };
|
|
96
116
|
}
|
|
117
|
+
/** Whether `filePath` holds SVG markup. Stored assets often have no extension. */
|
|
118
|
+
async function isSvgFile(filePath) {
|
|
119
|
+
const handle = await open(filePath, "r");
|
|
120
|
+
try {
|
|
121
|
+
const head = Buffer.alloc(4096);
|
|
122
|
+
const { bytesRead } = await handle.read(head, 0, head.length, 0);
|
|
123
|
+
const text = head.subarray(0, bytesRead).toString("utf8").replace(/^\uFEFF/, "");
|
|
124
|
+
return text.trimStart().startsWith("<") && /<svg[\s>]/i.test(text);
|
|
125
|
+
}
|
|
126
|
+
finally {
|
|
127
|
+
await handle.close();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Rasterize an SVG with Skia. Many ffmpeg builds (Homebrew's default among
|
|
132
|
+
* them) have no SVG decoder, and a logo is the usual SVG on a timeline. The
|
|
133
|
+
* intrinsic size plays the role a raster's pixel size does in {@link fitWithin}.
|
|
134
|
+
*/
|
|
135
|
+
async function rasterizeSvg(filePath, canvas) {
|
|
136
|
+
let image;
|
|
137
|
+
try {
|
|
138
|
+
image = await loadImage(await readFile(filePath));
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
throw new Error(`Could not rasterize SVG ${filePath}: ${error.message}`);
|
|
142
|
+
}
|
|
143
|
+
if (!(image.width > 0 && image.height > 0)) {
|
|
144
|
+
throw new Error(`Could not rasterize SVG ${filePath}: it has no size`);
|
|
145
|
+
}
|
|
146
|
+
const size = fitWithin({ width: image.width, height: image.height }, canvas);
|
|
147
|
+
const surface = createCanvas(size.width, size.height);
|
|
148
|
+
const context = surface.getContext("2d");
|
|
149
|
+
context.drawImage(image, 0, 0, size.width, size.height);
|
|
150
|
+
const { data } = context.getImageData(0, 0, size.width, size.height);
|
|
151
|
+
return { rgba: new Uint8Array(data.buffer, data.byteOffset, data.byteLength), ...size };
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Decode a still fitted inside `canvas`, or `null` when ffprobe finds no
|
|
155
|
+
* picture in it.
|
|
156
|
+
*/
|
|
157
|
+
export async function decodeStillRgba(filePath, canvas) {
|
|
158
|
+
if (await isSvgFile(filePath))
|
|
159
|
+
return rasterizeSvg(filePath, canvas);
|
|
160
|
+
const size = await probeVideoSize(filePath);
|
|
161
|
+
return size ? decodeImageRgba(filePath, fitWithin(size, canvas)) : null;
|
|
162
|
+
}
|
|
97
163
|
/** How many decoded frames ffmpeg may run ahead of the consumer. */
|
|
98
164
|
const READAHEAD_FRAMES = 4;
|
|
99
165
|
/**
|
|
@@ -105,7 +171,7 @@ export function openVideoFrameStream(opts) {
|
|
|
105
171
|
const { filePath, size, fps, startSec, speed } = opts;
|
|
106
172
|
const filters = [
|
|
107
173
|
speed !== 1 ? `setpts=PTS/${speed}` : null,
|
|
108
|
-
`fps=${fps}`,
|
|
174
|
+
opts.nativeSampling ? null : `fps=${fps}`,
|
|
109
175
|
`scale=${size.width}:${size.height}`,
|
|
110
176
|
"format=rgba"
|
|
111
177
|
].filter((f) => f !== null);
|
|
@@ -117,6 +183,7 @@ export function openVideoFrameStream(opts) {
|
|
|
117
183
|
filePath,
|
|
118
184
|
"-vf",
|
|
119
185
|
filters.join(","),
|
|
186
|
+
...(opts.nativeSampling ? ["-fps_mode", "passthrough"] : []),
|
|
120
187
|
"-f",
|
|
121
188
|
"rawvideo",
|
|
122
189
|
"-pix_fmt",
|
|
@@ -160,6 +227,12 @@ export function openVideoFrameStream(opts) {
|
|
|
160
227
|
}
|
|
161
228
|
};
|
|
162
229
|
}
|
|
230
|
+
/**
|
|
231
|
+
* How long the grid probe may run. A miss falls back to a fresh seek per
|
|
232
|
+
* frame, so the budget must hold on a loaded machine: a 1s budget expired on
|
|
233
|
+
* CI for a 60-frame clip and turned every reverse read into a reopen.
|
|
234
|
+
*/
|
|
235
|
+
const GRID_PROBE_TIMEOUT_MS = 10_000;
|
|
163
236
|
/** Only a verified regular source grid can be indexed inside a decode window. */
|
|
164
237
|
async function hasRegularFrameGrid(filePath, fps, signal) {
|
|
165
238
|
if (signal.aborted)
|
|
@@ -184,7 +257,7 @@ async function hasRegularFrameGrid(filePath, fps, signal) {
|
|
|
184
257
|
child.kill("SIGKILL");
|
|
185
258
|
finish(null);
|
|
186
259
|
};
|
|
187
|
-
const deadline = setTimeout(cancel,
|
|
260
|
+
const deadline = setTimeout(cancel, GRID_PROBE_TIMEOUT_MS);
|
|
188
261
|
signal.addEventListener("abort", cancel, { once: true });
|
|
189
262
|
child.stdout.on("data", (chunk) => {
|
|
190
263
|
bytes += chunk.length;
|
|
@@ -243,7 +316,12 @@ export function openSourceFrameStream(opts) {
|
|
|
243
316
|
const probeController = new AbortController();
|
|
244
317
|
const regularGrid = hasRegularFrameGrid(filePath, fps, probeController.signal);
|
|
245
318
|
const openAt = (sec) => openVideoFrameStream({
|
|
246
|
-
filePath,
|
|
319
|
+
filePath,
|
|
320
|
+
size,
|
|
321
|
+
fps,
|
|
322
|
+
startSec: sec,
|
|
323
|
+
speed: 1,
|
|
324
|
+
nativeSampling: opts.nativeSampling
|
|
247
325
|
});
|
|
248
326
|
const replaceStream = (sec) => {
|
|
249
327
|
if (stream) {
|
|
@@ -283,7 +361,13 @@ export function openSourceFrameStream(opts) {
|
|
|
283
361
|
reverseWindow = [];
|
|
284
362
|
decodedIndex = -1;
|
|
285
363
|
}
|
|
286
|
-
|
|
364
|
+
let frame = await active.frameAt(0);
|
|
365
|
+
if (!frame && target > 0) {
|
|
366
|
+
// A fresh seek beyond EOF has no frame to hold. Decode to the end
|
|
367
|
+
// instead of reusing whichever earlier frame the caller requested.
|
|
368
|
+
active = replaceStream(0);
|
|
369
|
+
frame = await active.frameAt(Number.MAX_SAFE_INTEGER);
|
|
370
|
+
}
|
|
287
371
|
if (closed)
|
|
288
372
|
return null;
|
|
289
373
|
if (frame)
|