mirror of
https://github.com/webadderallorg/Recordly.git
synced 2026-09-24 14:55:37 +00:00
133 lines
3.2 KiB
TypeScript
133 lines
3.2 KiB
TypeScript
import type { NativeVideoExportAudioMode } from "../nativeVideoExport";
|
|
|
|
export type NativeStaticLayoutRoute =
|
|
| "nvidia-cuda-compositor"
|
|
| "windows-d3d11-compositor"
|
|
| "ffmpeg-static-layout";
|
|
|
|
export interface NativeStaticLayoutRouteDecision {
|
|
route: NativeStaticLayoutRoute;
|
|
status: "selected" | "fallback" | "rejected";
|
|
reasons: string[];
|
|
}
|
|
|
|
export interface NvidiaCudaExportCapabilityProbe {
|
|
platform: NodeJS.Platform;
|
|
appPackaged: boolean;
|
|
explicitEnabled: boolean;
|
|
explicitDisabled: boolean;
|
|
packagedAutoCandidateEnabled: boolean;
|
|
packagedAutoCandidateActive: boolean;
|
|
windowsGpuCompositorEnabled: boolean;
|
|
wrapperPath: string | null;
|
|
hasNvidiaGpu: boolean | null;
|
|
audioMode: NativeVideoExportAudioMode;
|
|
audioSkipReason: string | null;
|
|
stallTimeoutMs: number | null;
|
|
skipReason: string | null;
|
|
}
|
|
|
|
export interface WindowsD3D11ExportCapabilityProbe {
|
|
platform: NodeJS.Platform;
|
|
windowsGpuCompositorEnabled: boolean;
|
|
helperPath: string | null;
|
|
adapterIndexOverride: number | null;
|
|
preferHighPerformanceAdapter: boolean;
|
|
nvencSdkRequested: boolean;
|
|
skipReason: string | null;
|
|
}
|
|
|
|
export interface NativeStaticLayoutRouteSource {
|
|
inputCodec: string;
|
|
proxyCodec?: string;
|
|
proxyCreated: boolean;
|
|
}
|
|
|
|
export interface NativeStaticLayoutRoutePlan {
|
|
selectedRoute: NativeStaticLayoutRoute;
|
|
decisions: NativeStaticLayoutRouteDecision[];
|
|
cuda: NvidiaCudaExportCapabilityProbe;
|
|
d3d11: WindowsD3D11ExportCapabilityProbe;
|
|
source: NativeStaticLayoutRouteSource;
|
|
}
|
|
|
|
export function planNativeStaticLayoutRoutes(options: {
|
|
cuda: NvidiaCudaExportCapabilityProbe;
|
|
d3d11: WindowsD3D11ExportCapabilityProbe;
|
|
source: NativeStaticLayoutRouteSource;
|
|
}): NativeStaticLayoutRoutePlan {
|
|
const { cuda, d3d11, source } = options;
|
|
const decisions: NativeStaticLayoutRouteDecision[] = [];
|
|
|
|
if (!cuda.skipReason) {
|
|
decisions.push({
|
|
route: "nvidia-cuda-compositor",
|
|
status: "selected",
|
|
reasons: ["cuda-wrapper-and-nvidia-gpu-available"],
|
|
});
|
|
decisions.push({
|
|
route: "windows-d3d11-compositor",
|
|
status: d3d11.skipReason ? "rejected" : "fallback",
|
|
reasons: d3d11.skipReason
|
|
? [d3d11.skipReason]
|
|
: ["documented-fallback-if-cuda-runtime-fails"],
|
|
});
|
|
decisions.push({
|
|
route: "ffmpeg-static-layout",
|
|
status: "fallback",
|
|
reasons: ["native-gpu-runtime-fallback"],
|
|
});
|
|
return {
|
|
selectedRoute: "nvidia-cuda-compositor",
|
|
decisions,
|
|
cuda,
|
|
d3d11,
|
|
source,
|
|
};
|
|
}
|
|
|
|
decisions.push({
|
|
route: "nvidia-cuda-compositor",
|
|
status: "rejected",
|
|
reasons: [cuda.skipReason],
|
|
});
|
|
|
|
if (!d3d11.skipReason) {
|
|
decisions.push({
|
|
route: "windows-d3d11-compositor",
|
|
status: "selected",
|
|
reasons: [`documented-fallback-after-cuda-skip:${cuda.skipReason}`],
|
|
});
|
|
decisions.push({
|
|
route: "ffmpeg-static-layout",
|
|
status: "fallback",
|
|
reasons: ["windows-d3d11-runtime-fallback"],
|
|
});
|
|
return {
|
|
selectedRoute: "windows-d3d11-compositor",
|
|
decisions,
|
|
cuda,
|
|
d3d11,
|
|
source,
|
|
};
|
|
}
|
|
|
|
decisions.push({
|
|
route: "windows-d3d11-compositor",
|
|
status: "rejected",
|
|
reasons: [d3d11.skipReason],
|
|
});
|
|
decisions.push({
|
|
route: "ffmpeg-static-layout",
|
|
status: "selected",
|
|
reasons: ["native-gpu-routes-unavailable"],
|
|
});
|
|
return {
|
|
selectedRoute: "ffmpeg-static-layout",
|
|
decisions,
|
|
cuda,
|
|
d3d11,
|
|
source,
|
|
};
|
|
}
|