#![allow(clippy::missing_safety_doc)]
use crate::{c, AudioSample};
use core::mem::size_of_val;
use corevm_types::{flags::ReadAudioFrames, AudioMode};
#[inline]
pub fn audio_input_mode() -> Option<AudioMode> {
let regs = unsafe { c::audio_input_mode() };
AudioMode::from_regs(regs).ok()
}
#[inline]
pub fn try_read_audio_frames_into<T: AudioSample>(buf: &mut [T]) -> Option<usize> {
let buf_len_in_bytes = size_of_val(buf) as u64;
let len_in_bytes = unsafe {
c::read_audio_frames(
buf.as_mut_ptr() as u64,
buf_len_in_bytes,
ReadAudioFrames::NON_BLOCKING.bits(),
)
};
if len_in_bytes == u64::MAX {
return None;
}
let len = len_in_bytes as usize / size_of::<T>();
Some(len)
}
#[inline]
pub fn read_audio_frames_into<T: AudioSample>(buf: &mut [T]) -> usize {
let len_bytes =
unsafe { c::read_audio_frames(buf.as_mut_ptr() as u64, size_of_val(buf) as u64, 0) };
len_bytes as usize / size_of::<T>()
}