Prepared sample-timed input¶
prepare_parameters reserves the native pool and selects the companion for the
existing scoped Audio owner. The control provider stays on main; the audio owner
carries the exact table borrow and can move into one joined worker scope. Ordinary
prepare selects ordinary audio processing again. No raw SDK interface escapes.
Audio::process_parameters admits at most 2048 copied normalized points across
64 distinct writable IDs. Source offsets are globally nondecreasing and strictly
increasing for each ID. Offsets lie inside the current block; a zero-frame block
accepts offset zero. SDK per-ID queues do not define cross-ID ordering at equal
offsets. Complete point, channel, report and protected owner/storage ranges are
checked before copying input, invoking DSP or touching caller outputs. A late
malformed point, unknown ID, alias or exhausted pool rejects the entire block
without consuming DSP history or changing output prefixes or backing tails.
Each prepared child borrows one core-owned pool: 16 fixed batches, each with 64 queue objects and 2048 points. Per-core admission is bounded to 16 pools and 64 MiB. Pool and queue storage is created on CONTROL. Processing copies into a host-owned batch without allocation, deallocation, locks, controller calls or registry operations. Queue data is readable only on the admitted audio thread during the synchronous native process call, then freezes on return or exception. Mutation methods, wrong-thread access and malformed queue reads refuse effects; an observed admitted protocol fault is distinct from the plug-in's returned code. Known native DSP faults silence supported output prefixes and close processing; backing tails remain unchanged.
Reports preserve original SDK results only when returned_status() is present.
Exceptions have threw()==true and no returned status. A swallowed queue fault
can accompany an actual native zero. Owned metadata rejection can carry a
synthetic diagnostic without advertising a returned SDK code. Raw C stage and
failure constants are declared in RavetVst3Parameters.h; successful CONTROL
reports do not expose a result for every individual SDK getter. A successful
process report must prove the actual process return and absence of queue faults.
Raw C admission rejection preserves the report buffer. Initialize it for each
call and do not interpret a previous call's fields as new facts. Rust supplies
a fresh owned report for each operation.