plugin: abort() must return 0/non-zero, not ReplyYes/No — fixes black frames
CI / Build & test (Linux) (push) Successful in 18m37s
CI / Build & test (Windows) (push) Successful in 44m45s

The OFX abort contract is "0 = keep rendering, anything else = stop"
and the ofxs support library literally checks abort(...) != 0. Our
host answered kOfxStatReplyNo (13) for "not cancelled", so every
openfx-misc processor aborted its pixel loop before writing a single
row: the render action returned OK with the output buffer untouched —
a solid black frame everywhere an effect was applied (the previous
smoke test only asserted "not the purple failure frame", which let
this slip through as a fake pass).

- image-effect abort: return 0 when not cancelled, 1 when cancelled
  (instance cancel flag or progress cancellation), BadHandle for
  descriptor handles as before
- strengthen the real-plugin smoke tests to also reject an all-zero
  output frame, so a silent no-write can no longer pass
- more trace-gated [ofx] diagnostics (value dumps for propGetN /
  propGetPointer / clipGetImage fetches, multiThread entry, render
  output buffer address) — the tooling that pinned this down

Verified with lldb watchpoints: the AddOFX/ChromaKeyerOFX processors
now write the real pixels through the executor path.
This commit is contained in:
2026-08-25 20:30:37 +08:00
parent 3bf914a2b8
commit 3792c49854
5 changed files with 56 additions and 19 deletions
+2
View File
@@ -1200,7 +1200,9 @@ mod tests {
for i in 0..4 {
px[i] = f32::from_le_bytes(out_frame.data[i * 4..i * 4 + 4].try_into().unwrap());
}
eprintln!("[smoke] {identifier} first pixel out = {px:?}");
assert_ne!(px, [1.0, 0.0, 1.0, 1.0], "must not be the purple failure frame");
assert_ne!(px, [0.0, 0.0, 0.0, 0.0], "must not be a black empty frame");
}
/// 构造一个只含 push-button 参数的最小实例(直接登记进注册表)。