Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
pulp::host::PluginSlot Class Referenceabstract

#include <plugin_slot.hpp>

Classes

struct  HostedEditor

Public Types

enum class  ProcessStatus : std::uint8_t { ok , failed }
enum class  LatencyQuery { Available , Unsupported , QueryFailed }
 Whether latency_samples() is a fact from the plugin, or a placeholder. More...
using EditorResizeRequestHandler = std::function<bool(uint32_t width, uint32_t height)>
 Called when the plugin asks the host to resize its editor.

Public Member Functions

virtual ~PluginSlot ()=default
virtual const PluginInfo & info () const =0
virtual bool is_loaded () const =0
virtual bool prepare (double sample_rate, int max_block_size)=0
virtual void release ()=0
virtual void process (audio::BufferView< float > &output, const audio::BufferView< const float > &input, const midi::MidiBuffer &midi_in, midi::MidiBuffer &midi_out, const ParameterEventQueue &param_events, int num_samples)=0
virtual std::vector< HostParamInfo > parameters () const =0
virtual float get_parameter (uint32_t id) const =0
virtual void set_parameter (uint32_t id, float normalized_value)=0
virtual void set_bypass (bool bypassed)=0
virtual bool is_bypassed () const =0
virtual std::vector< uint8_t > save_state () const =0
virtual bool restore_state (const std::vector< uint8_t > &data)=0
virtual bool has_editor () const =0
virtual void * create_editor_view ()=0
virtual void destroy_editor_view ()=0
virtual std::unique_ptr< HostedEditor > create_hosted_editor (void *)
 Create the hosted editor.
virtual void destroy_hosted_editor (std::unique_ptr< HostedEditor > ed)
 Tear down a hosted editor. Default routes to destroy_editor_view().
virtual int latency_samples () const =0
virtual int tail_samples () const =0
virtual void accept (NativeHandleVisitor &visitor) const
virtual void process (format::ProcessBuffers &audio, const midi::MidiBuffer &midi_in, midi::MidiBuffer &midi_out, const ParameterEventQueue &param_events, int num_samples)
virtual bool wants_transport () const
virtual void process (format::ProcessBuffers &audio, const midi::MidiBuffer &midi_in, midi::MidiBuffer &midi_out, const ParameterEventQueue &param_events, int num_samples, const format::ProcessContext &)
virtual LatencyQuery latency_query () const
 Whether latency_samples() is a fact from the plugin, or a placeholder.
virtual void set_editor_resize_request_handler (EditorResizeRequestHandler)
 Install the handler invoked on a plugin-initiated resize request.
virtual bool set_hosted_editor_size (uint32_t &, uint32_t &)
 Host-initiated resize: ask the plugin to adopt (width, height).
virtual BypassSurface bypass_surface () const
 Where this plugin keeps its own bypass control.
virtual void set_preferred_channel_layout (int, int)
virtual std::string retained_history_key () const
 Optional realtime DSP-history carry for a prepared replacement.
virtual std::vector< uint8_t > serialize_dsp_state () const
virtual bool restore_dsp_state (const std::vector< uint8_t > &)
virtual bool reseed_dsp_state (std::uint64_t)
virtual void begin_process () noexcept
virtual ProcessStatus process_status () const noexcept
virtual std::optional< PluginResolvedIdentity > resolved_identity () const
 Detached strict-load receipt; unavailable for legacy or unsupported loaders.

Static Public Member Functions

static std::unique_ptr< PluginSlot > load (const PluginInfo &info)
static PluginLoadResult load_exact (const PluginSelection &selection)
 Explicit strict CLAP selection. Legacy load() keeps best-effort behavior.

Member Typedef Documentation

◆ EditorResizeRequestHandler

using pulp::host::PluginSlot::EditorResizeRequestHandler = std::function<bool(uint32_t width, uint32_t height)>

Called when the plugin asks the host to resize its editor.

Return true if the host honored the request. Refusing is legal in every format — the plugin must cope with a denial.

Member Enumeration Documentation

◆ LatencyQuery

Whether latency_samples() is a fact from the plugin, or a placeholder.

See latency_query(), which is declared at the end of the class so the vtable stays append-only.

Enumerator
Available 

The value is the plugin's own report. Zero means zero.

Unsupported 

This backend cannot ask. The value is meaningless.

QueryFailed 

The backend asked and the plugin errored.

◆ ProcessStatus

enum class pulp::host::PluginSlot::ProcessStatus : std::uint8_t
strong
Enumerator
ok 
failed 

Constructor & Destructor Documentation

◆ ~PluginSlot()

virtual pulp::host::PluginSlot::~PluginSlot ( )
virtualdefault

Member Function Documentation

◆ accept()

virtual void pulp::host::PluginSlot::accept ( NativeHandleVisitor & visitor) const
inlinevirtual

◆ begin_process()

virtual void pulp::host::PluginSlot::begin_process ( )
inlinevirtualnoexcept

◆ bypass_surface()

virtual BypassSurface pulp::host::PluginSlot::bypass_surface ( ) const
inlinevirtual

Where this plugin keeps its own bypass control.

A loader that cannot tell reports none rather than guessing; a wrapper slot reports what it wraps. Appended last to preserve the existing PluginSlot virtual ordering.

Reimplemented in pulp::host::CrossfadePluginSlot.

◆ create_editor_view()

virtual void * pulp::host::PluginSlot::create_editor_view ( )
pure virtual

◆ create_hosted_editor()

virtual std::unique_ptr< HostedEditor > pulp::host::PluginSlot::create_hosted_editor ( void * )
inlinevirtual

Create the hosted editor.

Default implementation preserves the void* path so every slot already compiled against create_editor_view() still works; new slots override this directly.

Reimplemented in pulp::host::CrossfadePluginSlot.

◆ destroy_editor_view()

virtual void pulp::host::PluginSlot::destroy_editor_view ( )
pure virtual

◆ destroy_hosted_editor()

virtual void pulp::host::PluginSlot::destroy_hosted_editor ( std::unique_ptr< HostedEditor > ed)
inlinevirtual

Tear down a hosted editor. Default routes to destroy_editor_view().

Reimplemented in pulp::host::CrossfadePluginSlot.

◆ get_parameter()

virtual float pulp::host::PluginSlot::get_parameter ( uint32_t id) const
pure virtual

◆ has_editor()

virtual bool pulp::host::PluginSlot::has_editor ( ) const
pure virtual

◆ info()

virtual const PluginInfo & pulp::host::PluginSlot::info ( ) const
pure virtual

◆ is_bypassed()

virtual bool pulp::host::PluginSlot::is_bypassed ( ) const
pure virtual

◆ is_loaded()

virtual bool pulp::host::PluginSlot::is_loaded ( ) const
pure virtual

◆ latency_query()

virtual LatencyQuery pulp::host::PluginSlot::latency_query ( ) const
inlinevirtual

Whether latency_samples() is a fact from the plugin, or a placeholder.

Appended last to preserve the existing PluginSlot virtual ordering.

latency_samples() returns an int either way, so on its own it cannot distinguish "this plugin reports zero latency" from "this backend has no way to ask." Those are completely different claims, and collapsing them turns an unanswered question into a confident zero — which a latency proof would then happily certify. Ask this before trusting the number.

Defaults to Available: the CLAP, VST3, and AU backends all read a real value from the plugin. The LV2 backend overrides it, because Pulp's hosted LV2 slot cannot currently read the plugin's latency port.

◆ latency_samples()

virtual int pulp::host::PluginSlot::latency_samples ( ) const
pure virtual

◆ load()

std::unique_ptr< PluginSlot > pulp::host::PluginSlot::load ( const PluginInfo & info)
static

◆ load_exact()

PluginLoadResult pulp::host::PluginSlot::load_exact ( const PluginSelection & selection)
static

Explicit strict CLAP selection. Legacy load() keeps best-effort behavior.

◆ parameters()

virtual std::vector< HostParamInfo > pulp::host::PluginSlot::parameters ( ) const
pure virtual

◆ prepare()

virtual bool pulp::host::PluginSlot::prepare ( double sample_rate,
int max_block_size )
pure virtual

◆ process() [1/3]

virtual void pulp::host::PluginSlot::process ( audio::BufferView< float > & output,
const audio::BufferView< const float > & input,
const midi::MidiBuffer & midi_in,
midi::MidiBuffer & midi_out,
const ParameterEventQueue & param_events,
int num_samples )
pure virtual

◆ process() [2/3]

virtual void pulp::host::PluginSlot::process ( format::ProcessBuffers & audio,
const midi::MidiBuffer & midi_in,
midi::MidiBuffer & midi_out,
const ParameterEventQueue & param_events,
int num_samples )
inlinevirtual

◆ process() [3/3]

virtual void pulp::host::PluginSlot::process ( format::ProcessBuffers & audio,
const midi::MidiBuffer & midi_in,
midi::MidiBuffer & midi_out,
const ParameterEventQueue & param_events,
int num_samples,
const format::ProcessContext &  )
inlinevirtual

◆ process_status()

virtual ProcessStatus pulp::host::PluginSlot::process_status ( ) const
inlinevirtualnoexcept

◆ release()

virtual void pulp::host::PluginSlot::release ( )
pure virtual

◆ reseed_dsp_state()

virtual bool pulp::host::PluginSlot::reseed_dsp_state ( std::uint64_t )
inlinevirtual

◆ resolved_identity()

virtual std::optional< PluginResolvedIdentity > pulp::host::PluginSlot::resolved_identity ( ) const
inlinevirtual

Detached strict-load receipt; unavailable for legacy or unsupported loaders.

◆ restore_dsp_state()

virtual bool pulp::host::PluginSlot::restore_dsp_state ( const std::vector< uint8_t > & )
inlinevirtual

◆ restore_state()

virtual bool pulp::host::PluginSlot::restore_state ( const std::vector< uint8_t > & data)
pure virtual

◆ retained_history_key()

virtual std::string pulp::host::PluginSlot::retained_history_key ( ) const
inlinevirtual

Optional realtime DSP-history carry for a prepared replacement.

This is deliberately separate from save_state()/restore_state(): preset state describes user-facing parameters, while this opaque blob carries delay lines, tails, waveguide state, or physical-model integrators. The default is cold-start safe for every existing slot implementation.

◆ save_state()

virtual std::vector< uint8_t > pulp::host::PluginSlot::save_state ( ) const
pure virtual

◆ serialize_dsp_state()

virtual std::vector< uint8_t > pulp::host::PluginSlot::serialize_dsp_state ( ) const
inlinevirtual

◆ set_bypass()

virtual void pulp::host::PluginSlot::set_bypass ( bool bypassed)
pure virtual

◆ set_editor_resize_request_handler()

virtual void pulp::host::PluginSlot::set_editor_resize_request_handler ( EditorResizeRequestHandler )
inlinevirtual

Install the handler invoked on a plugin-initiated resize request.

Pass a null handler to clear it. The handler must outlive the open editor. Slots that cannot report resize requests ignore this.

◆ set_hosted_editor_size()

virtual bool pulp::host::PluginSlot::set_hosted_editor_size ( uint32_t & ,
uint32_t &  )
inlinevirtual

Host-initiated resize: ask the plugin to adopt (width, height).

The plugin may snap to its own constraints, so the accepted size is written back through width/height. Returns false when the slot has no open editor, the format cannot resize, or the plugin refused.

◆ set_parameter()

virtual void pulp::host::PluginSlot::set_parameter ( uint32_t id,
float normalized_value )
pure virtual

◆ set_preferred_channel_layout()

virtual void pulp::host::PluginSlot::set_preferred_channel_layout ( int ,
int  )
inlinevirtual

◆ tail_samples()

virtual int pulp::host::PluginSlot::tail_samples ( ) const
pure virtual

◆ wants_transport()

virtual bool pulp::host::PluginSlot::wants_transport ( ) const
inlinevirtual

The documentation for this class was generated from the following file: