plugin: abort() must return 0/non-zero, not ReplyYes/No — fixes black frames
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:
@@ -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 参数的最小实例(直接登记进注册表)。
|
||||
|
||||
Reference in New Issue
Block a user