Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
wavelab.hpp File Reference

Per-host quirks for Steinberg Wavelab (macOS plan item 5.6). More...

Go to the source code of this file.

Namespaces

namespace  pulp
namespace  pulp::format
 What the product grants a device: the quota table indexed by capability tier and live thermal state.
namespace  pulp::format::host_quirks

Functions

void pulp::format::host_quirks::apply_wavelab (HostQuirks &q, HostVersion v)
 Populate Wavelab host-gated flags onto q based on v.

Detailed Description

Per-host quirks for Steinberg Wavelab (macOS plan item 5.6).

DAW-quirks rows 10 + 11 (VST3):

  • row 10: Wavelab 11.1+ calls setBusArrangements() re-entrantly from inside the prepareToPlay stack when the plugin invokes setLatencySamples(). Without a deferral, the plugin can deadlock or corrupt its activation state. The adapter must defer activation-side effects (layout commit, latency report) until the current stack unwinds.
  • row 11: Wavelab's state-blob format diverges from standard VST3 enough that strict error reporting on a MemoryStream read failure causes Wavelab to drop the session's parameter set. The adapter must return success with a logged warning rather than propagating the error — let the host believe the load worked and present a clean parameter set.
  • row 12 (VST2 editor-thread dispatch) is in Pulp's Deferred list.

Additional VST3 state-read tolerance: Wavelab's IBStream::read can return a non-kResultTrue status at end-of-stream while still having populated the supplied buffer. Strict callers that propagate the status reject the load and lose the parameter set. The VST3 adapter accepts the populated buffer when the read count matches the request even if the status is not kResultTrue. Version-invariant across the Wavelab versions Pulp targets.

Version handling: row 10 is documented as Wavelab 11.1+. We fire it on major >= 11 (the underlying re-entrancy was observed throughout the 11.x line; minor 11.0 is also affected per the reproducer). Row 11 is version-invariant — Wavelab's state-blob divergence predates the 11.x window and remains in the latest release as of the macOS plan, so we fire it unconditionally.

Reference-Lineage: independent reproducer=macos-plan-item-5.6 docs=https://steinbergmedia.github.io/vst3_dev_portal/pages/Technical+Documentation/Bus+Arrangement+Setup.html