libobs_wrapper\data/
audio.rs

1use libobs::obs_audio_info2;
2
3use crate::{enums::{ObsSamplesPerSecond, ObsSpeakerLayout}, unsafe_send::Sendable};
4
5
6
7/// Information passed to libobs when attempting to
8/// reset the audio context using `obs_reset_audio2`.
9#[repr(C)]
10#[derive(Clone, Debug, PartialEq, Eq)]
11pub struct ObsAudioInfo {
12    samples_per_sec: ObsSamplesPerSecond,
13    speakers: ObsSpeakerLayout,
14    max_buffering_ms: u32,
15    fixed_buffering: bool
16}
17
18impl ObsAudioInfo {
19    pub fn new(samples_per_second: ObsSamplesPerSecond, speakers: ObsSpeakerLayout, max_buffering_ms: u32, fixed_buffering: bool) -> Self {
20        Self {
21            samples_per_sec: samples_per_second,
22            speakers,
23            max_buffering_ms,
24            fixed_buffering
25        }
26    }
27
28    pub fn new_low_latency(samples_per_second: ObsSamplesPerSecond, speakers: ObsSpeakerLayout) -> Self {
29        Self::new(samples_per_second, speakers, 20, true)
30    }
31
32    pub fn as_ptr(&self) -> Sendable<*const obs_audio_info2> {
33        Sendable(self as *const Self as *const obs_audio_info2)
34    }
35}
36
37impl Default for ObsAudioInfo {
38    fn default() -> Self {
39        Self {
40            samples_per_sec: ObsSamplesPerSecond::F44100,
41            speakers: ObsSpeakerLayout::Stereo,
42            max_buffering_ms: 0,
43            fixed_buffering: false
44        }
45    }
46}