use fmod_sys::*;
use std::ffi::c_int;
use crate::{ChannelMask, Dsp, SpeakerMode};
use crate::{FmodResultExt, Result};
impl Dsp {
pub fn set_channel_format(
&self,
channel_mask: ChannelMask,
channel_count: c_int,
source_speaker_mode: SpeakerMode,
) -> Result<()> {
unsafe {
FMOD_DSP_SetChannelFormat(
self.inner.as_ptr(),
channel_mask.into(),
channel_count,
source_speaker_mode.into(),
)
.to_result()
}
}
pub fn get_channel_format(&self) -> Result<(ChannelMask, c_int, SpeakerMode)> {
let mut channel_mask = 0;
let mut channel_count = 0;
let mut source_speaker_mode = 0;
unsafe {
FMOD_DSP_GetChannelFormat(
self.inner.as_ptr(),
&raw mut channel_mask,
&raw mut channel_count,
&raw mut source_speaker_mode,
)
.to_result()?;
}
let source_speaker_mode = source_speaker_mode.try_into()?;
Ok((channel_mask.into(), channel_count, source_speaker_mode))
}
pub fn get_output_channel_format(
&self,
in_mask: ChannelMask,
in_channels: c_int,
in_speaker_mode: SpeakerMode,
) -> Result<(ChannelMask, c_int, SpeakerMode)> {
let mut out_mask = 0;
let mut out_channels = 0;
let mut out_speaker_mode = 0;
unsafe {
FMOD_DSP_GetOutputChannelFormat(
self.inner.as_ptr(),
in_mask.into(),
in_channels,
in_speaker_mode.into(),
&raw mut out_mask,
&raw mut out_channels,
&raw mut out_speaker_mode,
)
.to_result()?;
}
let out_speaker_mode = out_speaker_mode.try_into()?;
Ok((out_mask.into(), out_channels, out_speaker_mode))
}
}