libobs_wrapper\data/
audio.rs

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