Files
story-studio/remotion/node_modules/@remotion/webcodecs/dist/create/progress-tracker.js
2026-02-21 10:33:18 +01:00

51 lines
1.9 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeProgressTracker = void 0;
const event_emitter_1 = require("./event-emitter");
// Make sure to distinguish null and undefined here
const makeProgressTracker = () => {
const trackNumberProgresses = {};
const eventEmitter = new event_emitter_1.IoEventEmitter();
let startingTimestamp = null;
const setPossibleLowestTimestamp = (timestamp) => {
if (startingTimestamp === null) {
startingTimestamp = timestamp;
}
else {
startingTimestamp = Math.min(startingTimestamp, timestamp);
}
};
const getSmallestProgress = () => {
const progressValues = Object.values(trackNumberProgresses).map((p) => {
if (p !== null) {
return p;
}
// The starting timestamp might not be 0, it might be very huge
// If no sample has arrived yet, we should assume the smallest value
// we know as the progress
if (startingTimestamp === null) {
throw new Error('No progress values to calculate smallest progress from');
}
return startingTimestamp;
});
return Math.min(...progressValues);
};
return {
registerTrack: (trackNumber) => {
trackNumberProgresses[trackNumber] = null;
},
getSmallestProgress,
updateTrackProgress: (trackNumber, progress) => {
if (trackNumberProgresses[trackNumber] === undefined) {
throw new Error(`Tried to update progress for a track that was not registered: ${trackNumber}`);
}
trackNumberProgresses[trackNumber] = progress;
eventEmitter.dispatchEvent('progress', {
smallestProgress: getSmallestProgress(),
});
},
setPossibleLowestTimestamp,
};
};
exports.makeProgressTracker = makeProgressTracker;