use std::ffi::c_void;
use std::os::raw::c_char;
#[repr(C)]
pub struct AuPluginDescriptor {
pub component_type: [u8; 4],
pub component_subtype: [u8; 4],
pub component_manufacturer: [u8; 4],
pub name: *const c_char,
pub vendor: *const c_char,
pub version: u32,
pub num_inputs: u32,
pub num_outputs: u32,
pub bypass_param_id: u32,
pub has_midi_output: i32,
}
#[repr(C)]
pub struct AuParamDescriptor {
pub id: u32,
pub name: *const c_char,
pub min: f64,
pub max: f64,
pub default_value: f64,
pub step_count: u32,
pub unit: *const c_char,
pub group: *const c_char,
}
#[repr(C)]
pub struct AuCallbacks {
pub create: unsafe extern "C" fn() -> *mut c_void,
pub destroy: unsafe extern "C" fn(ctx: *mut c_void),
pub reset: unsafe extern "C" fn(ctx: *mut c_void, sample_rate: f64, max_frames: u32),
pub process: unsafe extern "C" fn(
ctx: *mut c_void,
inputs: *const *const f32,
outputs: *mut *mut f32,
num_input_channels: u32,
num_output_channels: u32,
num_frames: u32,
events: *const AuMidiEvent,
num_events: u32,
events2: *const AuMidi2Event,
num_events2: u32,
param_events: *const AuParamEvent,
num_param_events: u32,
transport: *const AuTransportSnapshot,
),
pub param_count: unsafe extern "C" fn(ctx: *mut c_void) -> u32,
pub param_get_value: unsafe extern "C" fn(ctx: *mut c_void, id: u32) -> f64,
pub param_set_value: unsafe extern "C" fn(ctx: *mut c_void, id: u32, value: f64),
pub param_format_value: unsafe extern "C" fn(
ctx: *mut c_void,
id: u32,
value: f64,
out: *mut c_char,
out_len: u32,
) -> u32,
pub state_save:
unsafe extern "C" fn(ctx: *mut c_void, out_data: *mut *mut u8, out_len: *mut u32),
pub state_load: unsafe extern "C" fn(ctx: *mut c_void, data: *const u8, len: u32),
pub state_free: unsafe extern "C" fn(data: *mut u8, len: u32),
pub output_event_count: unsafe extern "C" fn(ctx: *mut c_void) -> u32,
pub output_event_at: unsafe extern "C" fn(ctx: *mut c_void, index: u32, out: *mut AuMidiEvent),
pub output_sysex_count: unsafe extern "C" fn(ctx: *mut c_void) -> u32,
pub output_sysex_at: unsafe extern "C" fn(
ctx: *mut c_void,
index: u32,
out_delta_frames: *mut u32,
out_bytes: *mut *const u8,
out_len: *mut u32,
),
pub gui_has_editor: unsafe extern "C" fn(ctx: *mut c_void) -> i32,
pub gui_get_size: unsafe extern "C" fn(ctx: *mut c_void, w: *mut u32, h: *mut u32),
pub gui_open: unsafe extern "C" fn(ctx: *mut c_void, parent: *mut c_void),
pub gui_close: unsafe extern "C" fn(ctx: *mut c_void),
pub gui_can_resize: unsafe extern "C" fn(ctx: *mut c_void) -> i32,
pub gui_set_size: unsafe extern "C" fn(ctx: *mut c_void, w: u32, h: u32),
pub factory_preset_count: unsafe extern "C" fn(ctx: *mut c_void) -> u32,
pub factory_preset_name: unsafe extern "C" fn(ctx: *mut c_void, index: u32) -> *const c_char,
pub factory_preset_load: unsafe extern "C" fn(ctx: *mut c_void, index: u32) -> i32,
}
#[repr(C)]
#[derive(Copy, Clone)]
pub struct AuMidiEvent {
pub sample_offset: u32,
pub status: u8,
pub data1: u8,
pub data2: u8,
#[allow(clippy::pub_underscore_fields)]
pub _pad: u8,
}
#[repr(C)]
#[derive(Copy, Clone)]
pub struct AuMidi2Event {
pub sample_offset: u32,
pub words: [u32; 4],
}
#[repr(C)]
#[derive(Copy, Clone)]
pub struct AuParamEvent {
pub sample_offset: u32,
pub param_id: u32,
pub value: f32,
}
#[repr(C)]
#[derive(Default)]
pub struct AuTransportSnapshot {
pub valid: i32,
pub playing: i32,
pub recording: i32,
pub loop_active: i32,
pub time_sig_num: i32,
pub time_sig_den: i32,
pub tempo: f64,
pub position_samples: f64,
pub position_beats: f64,
pub bar_start_beats: f64,
pub loop_start_beats: f64,
pub loop_end_beats: f64,
}
unsafe extern "C" {
pub fn truce_au_register(
descriptor: *const AuPluginDescriptor,
callbacks: *const AuCallbacks,
param_descriptors: *const AuParamDescriptor,
num_params: u32,
);
}