use std::ffi::c_int;
use fmod_sys::*;
use crate::{ChannelControl, Dsp};
use crate::{FmodResultExt, Result};
impl ChannelControl {
pub const DSP_HEAD: FMOD_CHANNELCONTROL_DSP_INDEX = FMOD_CHANNELCONTROL_DSP_HEAD;
pub const DSP_TAIL: FMOD_CHANNELCONTROL_DSP_INDEX = FMOD_CHANNELCONTROL_DSP_TAIL;
pub const DSP_FADER: FMOD_CHANNELCONTROL_DSP_INDEX = FMOD_CHANNELCONTROL_DSP_FADER;
pub fn add_dsp(&self, index: c_int, dsp: Dsp) -> Result<()> {
unsafe {
FMOD_ChannelControl_AddDSP(self.inner.as_ptr(), index, dsp.inner.as_ptr()).to_result()
}
}
pub fn remove_dsp(&self, dsp: Dsp) -> Result<()> {
unsafe {
FMOD_ChannelControl_RemoveDSP(self.inner.as_ptr(), dsp.inner.as_ptr()).to_result()
}
}
pub fn get_dsp_count(&self) -> Result<c_int> {
let mut count = 0;
unsafe {
FMOD_ChannelControl_GetNumDSPs(self.inner.as_ptr(), &raw mut count).to_result()?;
}
Ok(count)
}
pub fn get_dsp(&self, index: c_int) -> Result<Dsp> {
let mut dsp = std::ptr::null_mut();
unsafe {
FMOD_ChannelControl_GetDSP(self.inner.as_ptr(), index, &raw mut dsp).to_result()?;
Ok(Dsp::from_ffi(dsp))
}
}
pub fn set_dsp_index(&self, dsp: Dsp, index: c_int) -> Result<()> {
unsafe {
FMOD_ChannelControl_SetDSPIndex(self.inner.as_ptr(), dsp.inner.as_ptr(), index)
.to_result()
}
}
pub fn get_dsp_index(&self, dsp: Dsp) -> Result<c_int> {
let mut index = 0;
unsafe {
FMOD_ChannelControl_GetDSPIndex(
self.inner.as_ptr(),
dsp.inner.as_ptr(),
&raw mut index,
)
.to_result()?;
}
Ok(index)
}
}