49 lines
1.0 KiB
TypeScript
49 lines
1.0 KiB
TypeScript
import type { RetimeConfig } from "@/lib/timeline";
|
|
import { clampRetimeRate } from "@/constants/retime-constants";
|
|
|
|
function getSafeRate({ rate }: { rate: number }): number {
|
|
return clampRetimeRate({ rate });
|
|
}
|
|
|
|
export function getSourceTimeAtClipTime({
|
|
clipTime,
|
|
retime,
|
|
}: {
|
|
clipTime: number;
|
|
retime?: RetimeConfig;
|
|
}): number {
|
|
return clipTime * getSafeRate({ rate: retime?.rate ?? 1 });
|
|
}
|
|
|
|
export function getClipTimeAtSourceTime({
|
|
sourceTime,
|
|
retime,
|
|
}: {
|
|
sourceTime: number;
|
|
retime?: RetimeConfig;
|
|
}): number {
|
|
return sourceTime / getSafeRate({ rate: retime?.rate ?? 1 });
|
|
}
|
|
|
|
export function getEffectiveRateAt({
|
|
retime,
|
|
}: {
|
|
clipTime?: number;
|
|
retime?: RetimeConfig;
|
|
}): number {
|
|
return getSafeRate({ rate: retime?.rate ?? 1 });
|
|
}
|
|
|
|
export function getTimelineDurationForSourceSpan({
|
|
sourceSpan,
|
|
retime,
|
|
}: {
|
|
sourceSpan: number;
|
|
retime?: RetimeConfig;
|
|
}): number {
|
|
if (sourceSpan <= 0) {
|
|
return 0;
|
|
}
|
|
return sourceSpan / getSafeRate({ rate: retime?.rate ?? 1 });
|
|
}
|