gstreamer_audio/
audio_ring_buffer_spec.rs

1// Take a look at the license at the top of the repository in the LICENSE file.
2
3use std::fmt;
4
5use glib::translate::*;
6use gst::Caps;
7
8use crate::{ffi, AudioInfo, AudioRingBufferFormatType};
9
10#[repr(transparent)]
11#[doc(alias = "GstAudioRingBufferSpec")]
12pub struct AudioRingBufferSpec(pub(crate) ffi::GstAudioRingBufferSpec);
13
14impl AudioRingBufferSpec {
15    #[doc(alias = "get_type")]
16    #[inline]
17    pub fn type_(&self) -> AudioRingBufferFormatType {
18        unsafe { AudioRingBufferFormatType::from_glib(self.0.type_) }
19    }
20
21    #[inline]
22    pub fn set_type(&mut self, value: AudioRingBufferFormatType) {
23        self.0.type_ = value.into_glib();
24    }
25
26    #[doc(alias = "get_caps")]
27    #[inline]
28    pub fn caps(&self) -> Caps {
29        unsafe { Caps::from_glib_none(self.0.caps) }
30    }
31
32    #[doc(alias = "get_audio_info")]
33    #[inline]
34    pub fn audio_info(&self) -> AudioInfo {
35        unsafe { AudioInfo::from_glib_none(&self.0.info as *const ffi::GstAudioInfo) }
36    }
37
38    #[doc(alias = "get_latency_time")]
39    #[inline]
40    pub fn latency_time(&self) -> u64 {
41        self.0.latency_time
42    }
43
44    #[inline]
45    pub fn set_latency_time(&mut self, value: u64) {
46        self.0.latency_time = value;
47    }
48
49    #[doc(alias = "get_buffer_time")]
50    #[inline]
51    pub fn buffer_time(&self) -> u64 {
52        self.0.buffer_time
53    }
54
55    #[inline]
56    pub fn set_buffer_time(&mut self, value: u64) {
57        self.0.buffer_time = value;
58    }
59
60    #[doc(alias = "get_segsize")]
61    #[inline]
62    pub fn segsize(&self) -> i32 {
63        self.0.segsize
64    }
65
66    #[inline]
67    pub fn set_segsize(&mut self, value: i32) {
68        self.0.segsize = value;
69    }
70
71    #[doc(alias = "get_segtotal")]
72    #[inline]
73    pub fn segtotal(&self) -> i32 {
74        self.0.segtotal
75    }
76
77    #[inline]
78    pub fn set_segtotal(&mut self, value: i32) {
79        self.0.segtotal = value;
80    }
81
82    #[doc(alias = "get_seglatency")]
83    #[inline]
84    pub fn seglatency(&self) -> i32 {
85        self.0.seglatency
86    }
87
88    #[inline]
89    pub fn set_seglatency(&mut self, value: i32) {
90        self.0.seglatency = value;
91    }
92}
93
94impl Clone for AudioRingBufferSpec {
95    #[inline]
96    fn clone(&self) -> Self {
97        unsafe {
98            let spec = self.0;
99            gst::ffi::gst_mini_object_ref(spec.caps as *mut gst::ffi::GstMiniObject);
100
101            Self(spec)
102        }
103    }
104}
105
106impl Drop for AudioRingBufferSpec {
107    #[inline]
108    fn drop(&mut self) {
109        unsafe {
110            gst::ffi::gst_mini_object_unref(self.0.caps as *mut gst::ffi::GstMiniObject);
111        }
112    }
113}
114
115unsafe impl Send for AudioRingBufferSpec {}
116unsafe impl Sync for AudioRingBufferSpec {}
117
118impl fmt::Debug for AudioRingBufferSpec {
119    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
120        f.debug_struct("AudioRingBufferSpec")
121            .field("type", &self.type_())
122            .field("caps", &self.caps())
123            .field("audio_info", &self.audio_info())
124            .field("latency_time", &self.latency_time())
125            .field("buffer_time", &self.buffer_time())
126            .field("segsize", &self.segsize())
127            .field("segtotal", &self.segtotal())
128            .field("seglatency", &self.seglatency())
129            .finish()
130    }
131}