mirror of
https://github.com/OpenCut-app/OpenCut.git
synced 2026-07-13 21:52:53 +02:00
new utility, less duplicated code
This commit is contained in:
@@ -619,6 +619,15 @@ time-utils.ts
|
|||||||
time: number;␍
|
time: number;␍
|
||||||
fps: number;␍
|
fps: number;␍
|
||||||
}): number
|
}): number
|
||||||
|
export function getSnappedSeekTime({␍
|
||||||
|
rawTime,␍
|
||||||
|
duration,␍
|
||||||
|
fps,␍
|
||||||
|
}: {␍
|
||||||
|
rawTime: number;␍
|
||||||
|
duration: number;␍
|
||||||
|
fps: number;␍
|
||||||
|
}): number
|
||||||
|
|
||||||
transcription-utils.ts
|
transcription-utils.ts
|
||||||
export function isTranscriptionConfigured()
|
export function isTranscriptionConfigured()
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { useCallback, useRef } from "react";
|
import { useCallback, useRef } from "react";
|
||||||
import type { MutableRefObject, RefObject } from "react";
|
import type { MutableRefObject, RefObject } from "react";
|
||||||
import { TIMELINE_CONSTANTS } from "@/constants/timeline-constants";
|
import { TIMELINE_CONSTANTS } from "@/constants/timeline-constants";
|
||||||
import { snapTimeToFrame } from "@/lib/time-utils";
|
import { getSnappedSeekTime } from "@/lib/time-utils";
|
||||||
import { useEditor } from "../use-editor";
|
import { useEditor } from "../use-editor";
|
||||||
|
|
||||||
interface UseTimelineInteractionsProps {
|
interface UseTimelineInteractionsProps {
|
||||||
@@ -139,7 +139,11 @@ export function useTimelineInteractions({
|
|||||||
);
|
);
|
||||||
|
|
||||||
const projectFps = activeProject?.settings.fps || 30;
|
const projectFps = activeProject?.settings.fps || 30;
|
||||||
const time = snapTimeToFrame({ time: rawTime, fps: projectFps });
|
const time = getSnappedSeekTime({
|
||||||
|
rawTime,
|
||||||
|
duration,
|
||||||
|
fps: projectFps,
|
||||||
|
});
|
||||||
seek(time);
|
seek(time);
|
||||||
},
|
},
|
||||||
[
|
[
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { snapTimeToFrame } from "@/lib/time-utils";
|
import { getSnappedSeekTime } from "@/lib/time-utils";
|
||||||
import { useState, useEffect, useCallback, useRef } from "react";
|
import { useState, useEffect, useCallback, useRef } from "react";
|
||||||
import { useEdgeAutoScroll } from "@/hooks/timeline/use-edge-auto-scroll";
|
import { useEdgeAutoScroll } from "@/hooks/timeline/use-edge-auto-scroll";
|
||||||
import { useEditor } from "../use-editor";
|
import { useEditor } from "../use-editor";
|
||||||
@@ -89,7 +89,7 @@ export function useTimelinePlayhead({
|
|||||||
);
|
);
|
||||||
// use frame snapping for playhead scrubbing
|
// use frame snapping for playhead scrubbing
|
||||||
const fps = activeProject.settings.fps;
|
const fps = activeProject.settings.fps;
|
||||||
const time = snapTimeToFrame({ time: rawTime, fps });
|
const time = getSnappedSeekTime({ rawTime, duration, fps });
|
||||||
|
|
||||||
setScrubTime(time);
|
setScrubTime(time);
|
||||||
seek(time); // update video preview in real time
|
seek(time); // update video preview in real time
|
||||||
|
|||||||
@@ -182,3 +182,19 @@ export function snapTimeToFrame({
|
|||||||
const frame = timeToFrame({ time, fps });
|
const frame = timeToFrame({ time, fps });
|
||||||
return frameToTime({ frame, fps });
|
return frameToTime({ frame, fps });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getSnappedSeekTime({
|
||||||
|
rawTime,
|
||||||
|
duration,
|
||||||
|
fps,
|
||||||
|
}: {
|
||||||
|
rawTime: number;
|
||||||
|
duration: number;
|
||||||
|
fps: number;
|
||||||
|
}): number {
|
||||||
|
const snappedTime = snapTimeToFrame({ time: rawTime, fps });
|
||||||
|
const frameOffset = fps > 0 ? 1 / fps : 0;
|
||||||
|
const maxSeekTime =
|
||||||
|
frameOffset > 0 ? Math.max(0, duration - frameOffset) : duration;
|
||||||
|
return Math.max(0, Math.min(maxSeekTime, snappedTime));
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user