1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
// This file was generated by gir (https://github.com/gtk-rs/gir)
// from gir-files (https://github.com/gtk-rs/gir-files)
// from gst-gir-files (https://gitlab.freedesktop.org/gstreamer/gir-files-rs.git)
// DO NOT EDIT
use crate::{ffi, Clock, ClockType, Object};
use glib::{
prelude::*,
signal::{connect_raw, SignalHandlerId},
translate::*,
};
use std::boxed::Box as Box_;
glib::wrapper! {
/// The GStreamer core provides a GstSystemClock based on the system time.
/// Asynchronous callbacks are scheduled from an internal thread.
///
/// Clock implementors are encouraged to subclass this systemclock as it
/// implements the async notification.
///
/// Subclasses can however override all of the important methods for sync and
/// async notifications to implement their own callback methods or blocking
/// wait operations.
///
/// ## Properties
///
///
/// #### `clock-type`
/// Readable | Writeable
/// <details><summary><h4>Clock</h4></summary>
///
///
/// #### `timeout`
/// Readable | Writeable
///
///
/// #### `window-size`
/// Readable | Writeable
///
///
/// #### `window-threshold`
/// Readable | Writeable
/// </details>
/// <details><summary><h4>Object</h4></summary>
///
///
/// #### `name`
/// Readable | Writeable | Construct
///
///
/// #### `parent`
/// The parent of the object. Please note, that when changing the 'parent'
/// property, we don't emit [`notify`][struct@crate::glib::Object#notify] and [`deep-notify`][struct@crate::Object#deep-notify]
/// signals due to locking issues. In some cases one can use
/// [`element-added`][struct@crate::Bin#element-added] or [`element-removed`][struct@crate::Bin#element-removed] signals on the parent to
/// achieve a similar effect.
///
/// Readable | Writeable
/// </details>
///
/// # Implements
///
/// [`SystemClockExt`][trait@crate::prelude::SystemClockExt], [`ClockExt`][trait@crate::prelude::ClockExt], [`GstObjectExt`][trait@crate::prelude::GstObjectExt], [`trait@glib::ObjectExt`], [`ClockExtManual`][trait@crate::prelude::ClockExtManual]
#[doc(alias = "GstSystemClock")]
pub struct SystemClock(Object<ffi::GstSystemClock, ffi::GstSystemClockClass>) @extends Clock, Object;
match fn {
type_ => || ffi::gst_system_clock_get_type(),
}
}
impl SystemClock {
pub const NONE: Option<&'static SystemClock> = None;
/// Get a handle to the default system clock. The refcount of the
/// clock will be increased so you need to unref the clock after
/// usage.
///
/// # Returns
///
/// the default clock.
///
/// MT safe.
#[doc(alias = "gst_system_clock_obtain")]
pub fn obtain() -> Clock {
assert_initialized_main_thread!();
unsafe { from_glib_full(ffi::gst_system_clock_obtain()) }
}
/// Sets the default system clock that can be obtained with
/// [`obtain()`][Self::obtain()].
///
/// This is mostly used for testing and debugging purposes when you
/// want to have control over the time reported by the default system
/// clock.
///
/// MT safe.
/// ## `new_clock`
/// a [`Clock`][crate::Clock]
#[doc(alias = "gst_system_clock_set_default")]
pub fn set_default(new_clock: Option<&impl IsA<Clock>>) {
assert_initialized_main_thread!();
unsafe {
ffi::gst_system_clock_set_default(new_clock.map(|p| p.as_ref()).to_glib_none().0);
}
}
}
unsafe impl Send for SystemClock {}
unsafe impl Sync for SystemClock {}
mod sealed {
pub trait Sealed {}
impl<T: super::IsA<super::SystemClock>> Sealed for T {}
}
/// Trait containing all [`struct@SystemClock`] methods.
///
/// # Implementors
///
/// [`SystemClock`][struct@crate::SystemClock]
pub trait SystemClockExt: IsA<SystemClock> + sealed::Sealed + 'static {
#[doc(alias = "clock-type")]
fn clock_type(&self) -> ClockType {
ObjectExt::property(self.as_ref(), "clock-type")
}
#[doc(alias = "clock-type")]
fn set_clock_type(&self, clock_type: ClockType) {
ObjectExt::set_property(self.as_ref(), "clock-type", clock_type)
}
#[doc(alias = "clock-type")]
fn connect_clock_type_notify<F: Fn(&Self) + Send + Sync + 'static>(
&self,
f: F,
) -> SignalHandlerId {
unsafe extern "C" fn notify_clock_type_trampoline<
P: IsA<SystemClock>,
F: Fn(&P) + Send + Sync + 'static,
>(
this: *mut ffi::GstSystemClock,
_param_spec: glib::ffi::gpointer,
f: glib::ffi::gpointer,
) {
let f: &F = &*(f as *const F);
f(SystemClock::from_glib_borrow(this).unsafe_cast_ref())
}
unsafe {
let f: Box_<F> = Box_::new(f);
connect_raw(
self.as_ptr() as *mut _,
b"notify::clock-type\0".as_ptr() as *const _,
Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
notify_clock_type_trampoline::<Self, F> as *const (),
)),
Box_::into_raw(f),
)
}
}
}
impl<O: IsA<SystemClock>> SystemClockExt for O {}