Browse Source

删除冗余代码

feature/video-erase
Luckyu_js 1 week ago
parent
commit
11b617e14a
  1. 4
      src/components/media/CustomVideoPlayer.tsx
  2. 2
      src/components/nodes/GenerateVideoNode.tsx
  3. 2
      src/components/nodes/VideoInputNode.tsx
  4. 5
      src/store/execution/derivedImageExecutor.ts
  5. 1
      src/types/nodes.ts
  6. 3
      src/utils/__tests__/videoFrameNode.test.ts
  7. 2
      src/utils/videoFrameCapture.ts
  8. 5
      src/utils/videoFrameNode.ts

4
src/components/media/CustomVideoPlayer.tsx

@ -20,7 +20,7 @@ interface CustomVideoPlayerProps {
duration: number | null;
dimensions: { width: number; height: number } | null;
}) => void;
onCaptureFrame?: (frame: { time: number; mode: CaptureFrameMode }) => Promise<void> | void;
onCaptureFrame?: (frame: { time: number }) => Promise<void> | void;
onError?: () => void;
}
@ -228,7 +228,7 @@ export function CustomVideoPlayer({
: mode === "last"
? Math.max(0, videoDuration - 0.1)
: video.currentTime;
await onCaptureFrame({ time, mode });
await onCaptureFrame({ time });
} finally {
setIsCaptureLoading(false);
}

2
src/components/nodes/GenerateVideoNode.tsx

@ -335,14 +335,12 @@ export function GenerateVideoNodeView({ id, data, selected, suppressEmptyStateDe
const handleCaptureFrame = useCallback(async (frame: {
time: number;
mode: "first" | "last" | "current";
}) => {
const currentNode = getNodeById(id);
if (!currentNode) return;
await createVideoFrameSmartImageNode({
sourceNode: currentNode,
time: frame.time,
mode: frame.mode,
addNode,
onConnect,
selectSingleNode,

2
src/components/nodes/VideoInputNode.tsx

@ -253,14 +253,12 @@ export function VideoInputNodeView({ id, data, selected }: VideoInputNodeViewPro
const hasVideoAsset = Boolean(nodeData.video || previewVideoPoster);
const handleCaptureFrame = useCallback(async (frame: {
time: number;
mode: "first" | "last" | "current";
}) => {
const currentNode = getNodeById(id);
if (!currentNode) return;
await createVideoFrameSmartImageNode({
sourceNode: currentNode,
time: frame.time,
mode: frame.mode,
addNode,
onConnect,
selectSingleNode,

5
src/store/execution/derivedImageExecutor.ts

@ -13,7 +13,6 @@ import type { NodeExecutionContext } from "./types";
type VideoFrameDerivedTask = {
time: number;
mode: "first" | "last" | "current";
};
function isCropTask(value: unknown): value is DerivedImageCropTask {
@ -40,9 +39,7 @@ function isSplitGridTask(value: unknown): value is DerivedImageSplitGridTask {
function isVideoFrameTask(value: unknown): value is VideoFrameDerivedTask {
if (!value || typeof value !== "object") return false;
const task = value as VideoFrameDerivedTask;
return typeof task.time === "number" &&
Number.isFinite(task.time) &&
(task.mode === "first" || task.mode === "last" || task.mode === "current");
return typeof task.time === "number" && Number.isFinite(task.time);
}
async function createSplitGridCellBlob(

1
src/types/nodes.ts

@ -94,7 +94,6 @@ export interface DerivedMediaInfo {
operation: "videoFrame";
task?: {
time: number;
mode: "first" | "last" | "current";
};
}

3
src/utils/__tests__/videoFrameNode.test.ts

@ -22,7 +22,6 @@ describe("createVideoFrameSmartImageNode", () => {
style: { width: 300 },
} as any,
time: 1.25,
mode: "current",
addNode,
onConnect,
selectSingleNode,
@ -39,7 +38,6 @@ describe("createVideoFrameSmartImageNode", () => {
operation: "videoFrame",
task: {
time: 1.25,
mode: "current",
},
},
}));
@ -50,7 +48,6 @@ describe("createVideoFrameSmartImageNode", () => {
operation: "videoFrame",
task: {
time: 1.25,
mode: "current",
},
});
expect(onConnect).toHaveBeenCalledWith({

2
src/utils/videoFrameCapture.ts

@ -15,7 +15,7 @@ function canvasToBlob(canvas: HTMLCanvasElement): Promise<Blob> {
});
}
export async function captureFrameFromVideoElement(video: HTMLVideoElement): Promise<CapturedVideoFrame> {
async function captureFrameFromVideoElement(video: HTMLVideoElement): Promise<CapturedVideoFrame> {
if (!video.videoWidth || !video.videoHeight) {
throw new Error("Video frame is not ready");
}

5
src/utils/videoFrameNode.ts

@ -2,8 +2,6 @@ import type { NodeType, SmartImageNodeData, WorkflowNode } from "@/types";
import type { Connection } from "@xyflow/react";
import { SINGLE_INPUT_HANDLE_ID, SINGLE_OUTPUT_HANDLE_ID } from "@/utils/nodeHandles";
export type VideoFrameCaptureMode = "first" | "last" | "current";
type AddNode = (
type: NodeType,
position: { x: number; y: number },
@ -18,7 +16,6 @@ function getNodeWidth(node: WorkflowNode): number {
export async function createVideoFrameSmartImageNode({
sourceNode,
time,
mode,
addNode,
onConnect,
selectSingleNode,
@ -26,7 +23,6 @@ export async function createVideoFrameSmartImageNode({
}: {
sourceNode: WorkflowNode;
time: number;
mode: VideoFrameCaptureMode;
addNode: AddNode;
onConnect: (connection: Connection) => void;
selectSingleNode: (nodeId: string) => void;
@ -50,7 +46,6 @@ export async function createVideoFrameSmartImageNode({
operation: "videoFrame",
task: {
time,
mode,
},
},
status: "loading",

Loading…
Cancel
Save