gstreamer_audio/auto/
stream_volume.rs

1// This file was generated by gir (https://github.com/gtk-rs/gir)
2// from gir-files (https://github.com/gtk-rs/gir-files)
3// from gst-gir-files (https://gitlab.freedesktop.org/gstreamer/gir-files-rs.git)
4// DO NOT EDIT
5
6use crate::{ffi, StreamVolumeFormat};
7use glib::{
8    prelude::*,
9    signal::{connect_raw, SignalHandlerId},
10    translate::*,
11};
12use std::boxed::Box as Box_;
13
14glib::wrapper! {
15    /// This interface is implemented by elements that provide a stream volume. Examples for
16    /// such elements are `volume` and `playbin`.
17    ///
18    /// Applications can use this interface to get or set the current stream volume. For this
19    /// the "volume" [`glib::Object`][crate::glib::Object] property can be used or the helper functions [`StreamVolumeExt::set_volume()`][crate::prelude::StreamVolumeExt::set_volume()]
20    /// and [`StreamVolumeExt::volume()`][crate::prelude::StreamVolumeExt::volume()]. This volume is always a linear factor, i.e. 0.0 is muted
21    /// 1.0 is 100%. For showing the volume in a GUI it might make sense to convert it to
22    /// a different format by using [`convert_volume()`][Self::convert_volume()]. Volume sliders should usually
23    /// use a cubic volume.
24    ///
25    /// Separate from the volume the stream can also be muted by the "mute" [`glib::Object`][crate::glib::Object] property or
26    /// [`StreamVolumeExt::set_mute()`][crate::prelude::StreamVolumeExt::set_mute()] and [`StreamVolumeExt::is_muted()`][crate::prelude::StreamVolumeExt::is_muted()].
27    ///
28    /// Elements that provide some kind of stream volume should implement the "volume" and
29    /// "mute" [`glib::Object`][crate::glib::Object] properties and handle setting and getting of them properly.
30    /// The volume property is defined to be a linear volume factor.
31    ///
32    /// ## Properties
33    ///
34    ///
35    /// #### `mute`
36    ///  Readable | Writeable
37    ///
38    ///
39    /// #### `volume`
40    ///  Readable | Writeable
41    ///
42    /// # Implements
43    ///
44    /// [`StreamVolumeExt`][trait@crate::prelude::StreamVolumeExt]
45    #[doc(alias = "GstStreamVolume")]
46    pub struct StreamVolume(Interface<ffi::GstStreamVolume, ffi::GstStreamVolumeInterface>);
47
48    match fn {
49        type_ => || ffi::gst_stream_volume_get_type(),
50    }
51}
52
53impl StreamVolume {
54    pub const NONE: Option<&'static StreamVolume> = None;
55
56    /// ## `from`
57    /// [`StreamVolumeFormat`][crate::StreamVolumeFormat] to convert from
58    /// ## `to`
59    /// [`StreamVolumeFormat`][crate::StreamVolumeFormat] to convert to
60    /// ## `val`
61    /// Volume in `from` format that should be converted
62    ///
63    /// # Returns
64    ///
65    /// the converted volume
66    #[doc(alias = "gst_stream_volume_convert_volume")]
67    pub fn convert_volume(from: StreamVolumeFormat, to: StreamVolumeFormat, val: f64) -> f64 {
68        assert_initialized_main_thread!();
69        unsafe { ffi::gst_stream_volume_convert_volume(from.into_glib(), to.into_glib(), val) }
70    }
71}
72
73unsafe impl Send for StreamVolume {}
74unsafe impl Sync for StreamVolume {}
75
76/// Trait containing all [`struct@StreamVolume`] methods.
77///
78/// # Implementors
79///
80/// [`StreamVolume`][struct@crate::StreamVolume]
81pub trait StreamVolumeExt: IsA<StreamVolume> + 'static {
82    ///
83    /// # Returns
84    ///
85    /// Returns [`true`] if the stream is muted
86    #[doc(alias = "gst_stream_volume_get_mute")]
87    #[doc(alias = "get_mute")]
88    #[doc(alias = "mute")]
89    fn is_muted(&self) -> bool {
90        unsafe {
91            from_glib(ffi::gst_stream_volume_get_mute(
92                self.as_ref().to_glib_none().0,
93            ))
94        }
95    }
96
97    /// ## `format`
98    /// [`StreamVolumeFormat`][crate::StreamVolumeFormat] which should be returned
99    ///
100    /// # Returns
101    ///
102    /// The current stream volume as linear factor
103    #[doc(alias = "gst_stream_volume_get_volume")]
104    #[doc(alias = "get_volume")]
105    fn volume(&self, format: StreamVolumeFormat) -> f64 {
106        unsafe {
107            ffi::gst_stream_volume_get_volume(self.as_ref().to_glib_none().0, format.into_glib())
108        }
109    }
110
111    /// ## `mute`
112    /// Mute state that should be set
113    #[doc(alias = "gst_stream_volume_set_mute")]
114    #[doc(alias = "mute")]
115    fn set_mute(&self, mute: bool) {
116        unsafe {
117            ffi::gst_stream_volume_set_mute(self.as_ref().to_glib_none().0, mute.into_glib());
118        }
119    }
120
121    /// ## `format`
122    /// [`StreamVolumeFormat`][crate::StreamVolumeFormat] of `val`
123    /// ## `val`
124    /// Linear volume factor that should be set
125    #[doc(alias = "gst_stream_volume_set_volume")]
126    #[doc(alias = "volume")]
127    fn set_volume(&self, format: StreamVolumeFormat, val: f64) {
128        unsafe {
129            ffi::gst_stream_volume_set_volume(
130                self.as_ref().to_glib_none().0,
131                format.into_glib(),
132                val,
133            );
134        }
135    }
136
137    #[doc(alias = "mute")]
138    fn connect_mute_notify<F: Fn(&Self) + Send + Sync + 'static>(&self, f: F) -> SignalHandlerId {
139        unsafe extern "C" fn notify_mute_trampoline<
140            P: IsA<StreamVolume>,
141            F: Fn(&P) + Send + Sync + 'static,
142        >(
143            this: *mut ffi::GstStreamVolume,
144            _param_spec: glib::ffi::gpointer,
145            f: glib::ffi::gpointer,
146        ) {
147            let f: &F = &*(f as *const F);
148            f(StreamVolume::from_glib_borrow(this).unsafe_cast_ref())
149        }
150        unsafe {
151            let f: Box_<F> = Box_::new(f);
152            connect_raw(
153                self.as_ptr() as *mut _,
154                c"notify::mute".as_ptr() as *const _,
155                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
156                    notify_mute_trampoline::<Self, F> as *const (),
157                )),
158                Box_::into_raw(f),
159            )
160        }
161    }
162
163    #[doc(alias = "volume")]
164    fn connect_volume_notify<F: Fn(&Self) + Send + Sync + 'static>(&self, f: F) -> SignalHandlerId {
165        unsafe extern "C" fn notify_volume_trampoline<
166            P: IsA<StreamVolume>,
167            F: Fn(&P) + Send + Sync + 'static,
168        >(
169            this: *mut ffi::GstStreamVolume,
170            _param_spec: glib::ffi::gpointer,
171            f: glib::ffi::gpointer,
172        ) {
173            let f: &F = &*(f as *const F);
174            f(StreamVolume::from_glib_borrow(this).unsafe_cast_ref())
175        }
176        unsafe {
177            let f: Box_<F> = Box_::new(f);
178            connect_raw(
179                self.as_ptr() as *mut _,
180                c"notify::volume".as_ptr() as *const _,
181                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
182                    notify_volume_trampoline::<Self, F> as *const (),
183                )),
184                Box_::into_raw(f),
185            )
186        }
187    }
188}
189
190impl<O: IsA<StreamVolume>> StreamVolumeExt for O {}