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
// Take a look at the license at the top of the repository in the LICENSE file. use crate::PtpClock; use glib::prelude::*; use glib::translate::*; impl PtpClock { /// Creates a new PTP clock instance that exports the PTP time of the master /// clock in `domain`. This clock can be slaved to other clocks as needed. /// /// If `gst_ptp_init()` was not called before, this will call `gst_ptp_init()` with /// default parameters. /// /// This clock only returns valid timestamps after it received the first /// times from the PTP master clock on the network. Once this happens the /// GstPtpClock::internal-clock property will become non-NULL. You can /// check this with [`crate::gst::prelude::ClockExt::wait_for_sync()`], the GstClock::synced signal and /// [`crate::gst::prelude::ClockExt::is_synced()`]. /// ## `name` /// Name of the clock /// ## `domain` /// PTP domain /// /// # Returns /// /// A new [`crate::gst::Clock`] pub fn new(name: Option<&str>, domain: u32) -> PtpClock { assert_initialized_main_thread!(); let name = name.to_glib_none(); let (major, minor, _, _) = gst::version(); if (major, minor) > (1, 12) { unsafe { gst::Clock::from_glib_full(ffi::gst_ptp_clock_new(name.0, domain)).unsafe_cast() } } else { // Workaround for bad floating reference handling in 1.12. This issue was fixed for 1.13 unsafe { gst::Clock::from_glib_none(ffi::gst_ptp_clock_new(name.0, domain)).unsafe_cast() } } } }