Skip to content

Commit fb4e2d9

Browse files
authored
Merge pull request #558 from webadderallorg/fix/cuda-inline-audio-validation
fix(export): reject silent cuda inline audio
2 parents d7dde21 + 61bbaab commit fb4e2d9

2 files changed

Lines changed: 49 additions & 0 deletions

File tree

electron/ipc/export/native-video.test.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1078,6 +1078,47 @@ describe("validateNvidiaCudaExportSummary", () => {
10781078
expect(issues).toEqual([]);
10791079
});
10801080

1081+
it("rejects inline-audio CUDA output when the helper does not produce audio", () => {
1082+
const issues = validateNvidiaCudaExportSummary(
1083+
{
1084+
success: true,
1085+
targetFrames: 300,
1086+
durationSec: 10,
1087+
nativeSummary: {
1088+
success: true,
1089+
frames: 300,
1090+
sourceTimestampMode: "pts",
1091+
selectionStage: "timestamp-mapped-callback",
1092+
},
1093+
outputVideo: { duration: "9.999900", nb_frames: "300" },
1094+
},
1095+
{ durationSec: 10, targetFrames: 300, requiresTimelineSync: true },
1096+
);
1097+
1098+
expect(issues).toEqual(["missing output audio stream"]);
1099+
});
1100+
1101+
it("rejects inline-audio CUDA output when the probed audio stream is empty", () => {
1102+
const issues = validateNvidiaCudaExportSummary(
1103+
{
1104+
success: true,
1105+
targetFrames: 300,
1106+
durationSec: 10,
1107+
nativeSummary: {
1108+
success: true,
1109+
frames: 300,
1110+
sourceTimestampMode: "pts",
1111+
selectionStage: "timestamp-mapped-callback",
1112+
},
1113+
outputVideo: { duration: "9.999900", nb_frames: "300" },
1114+
outputAudio: { duration: "0.000000" },
1115+
},
1116+
{ durationSec: 10, targetFrames: 300, requiresTimelineSync: true },
1117+
);
1118+
1119+
expect(issues).toEqual(["output audio duration is not positive"]);
1120+
});
1121+
10811122
it("accepts audio CUDA output when the helper reports PTS-aligned selection", () => {
10821123
const issues = validateNvidiaCudaExportSummary(
10831124
{

electron/ipc/export/native-video.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,13 @@ export function validateNvidiaCudaExportSummary(
433433
if (expected.requiresTimelineSync && !isNvidiaCudaTimestampAlignedSummary(summary)) {
434434
issues.push("CUDA timeline mode is not timestamp-aligned for audio export");
435435
}
436+
if (expected.requiresTimelineSync) {
437+
if (!summary.outputAudio) {
438+
issues.push("missing output audio stream");
439+
} else if (outputAudioDurationSec !== null && outputAudioDurationSec <= 0) {
440+
issues.push("output audio duration is not positive");
441+
}
442+
}
436443
if (nativeFrames === null) {
437444
issues.push("missing native frame count");
438445
} else if (nativeFrames < minimumFrames) {
@@ -455,6 +462,7 @@ export function validateNvidiaCudaExportSummary(
455462
}
456463
if (
457464
outputAudioDurationSec !== null &&
465+
outputAudioDurationSec > 0 &&
458466
Math.abs(outputAudioDurationSec - expectedDurationSec) > durationToleranceSec
459467
) {
460468
issues.push(

0 commit comments

Comments
 (0)