mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-23 00:36:51 +00:00
151 lines
4.1 KiB
Text
151 lines
4.1 KiB
Text
public static readonly ulong Second = 1000000000;
|
|
public static readonly ulong MSecond = 1000000;
|
|
public static readonly ulong USecond = 1000;
|
|
public static readonly ulong NSecond = 1;
|
|
public static readonly ulong TimeNone = 0xffffffffffffffff;
|
|
|
|
public static bool TimeIsValid (ulong time) {
|
|
return (time != TimeNone);
|
|
}
|
|
|
|
[DllImport ("gstreamersharpglue-0.10.dll") ]
|
|
extern static uint gstsharp_gst_clock_get_entries_changed_offset ();
|
|
|
|
static uint entries_changed_offset = gstsharp_gst_clock_get_entries_changed_offset ();
|
|
private IntPtr EntriesChangedPtr {
|
|
get {
|
|
unsafe {
|
|
IntPtr* raw_ptr = (IntPtr*) ( ( (byte*) Handle) + entries_changed_offset);
|
|
return (*raw_ptr);
|
|
}
|
|
}
|
|
}
|
|
|
|
[DllImport ("libglib-2.0-0.dll") ]
|
|
static extern void g_cond_wait (IntPtr cond, IntPtr mutex);
|
|
[DllImport ("libglib-2.0-0.dll") ]
|
|
static extern bool g_cond_timed_wait (IntPtr cond, IntPtr mutex, ref _TimeVal abs_time);
|
|
[DllImport ("libglib-2.0-0.dll") ]
|
|
static extern void g_cond_broadcast (IntPtr cond);
|
|
|
|
public void Wait () {
|
|
g_cond_wait (EntriesChangedPtr, LockPtr);
|
|
}
|
|
|
|
[StructLayout (LayoutKind.Sequential) ]
|
|
private struct _TimeVal {
|
|
public IntPtr sec;
|
|
public IntPtr usec;
|
|
}
|
|
|
|
public bool Wait (uint mseconds) {
|
|
_TimeVal tv = new _TimeVal ();
|
|
long sec = mseconds / 1000;
|
|
long usec = 1000 * (mseconds - sec * 1000);
|
|
tv.sec = (IntPtr) (sec);
|
|
tv.usec = (IntPtr) (usec);
|
|
return g_cond_timed_wait (EntriesChangedPtr, LockPtr, ref tv);
|
|
}
|
|
|
|
public bool Wait (TimeSpan timespan) {
|
|
_TimeVal tv = new _TimeVal ();
|
|
long sec = (long) timespan.TotalSeconds;
|
|
long usec = 1000 * ( ( (long) timespan.TotalMilliseconds) - sec * 1000);
|
|
tv.sec = (IntPtr) (sec);
|
|
tv.usec = (IntPtr) (usec);
|
|
return g_cond_timed_wait (EntriesChangedPtr, LockPtr, ref tv);
|
|
}
|
|
|
|
public void Broadcast () {
|
|
g_cond_broadcast (EntriesChangedPtr);
|
|
}
|
|
|
|
[DllImport ("gstreamersharpglue-0.10.dll") ]
|
|
extern static uint gstsharp_gst_clock_get_slave_lock_offset ();
|
|
|
|
static uint slave_lock_offset = gstsharp_gst_clock_get_slave_lock_offset ();
|
|
private IntPtr SlaveLockPtr {
|
|
get {
|
|
unsafe {
|
|
IntPtr* raw_ptr = (IntPtr*) ( ( (byte*) Handle) + slave_lock_offset);
|
|
return (*raw_ptr);
|
|
}
|
|
}
|
|
}
|
|
|
|
[DllImport ("libglib-2.0-0.dll") ]
|
|
static extern void g_mutex_lock (IntPtr mutex);
|
|
[DllImport ("libglib-2.0-0.dll") ]
|
|
static extern void g_mutex_unlock (IntPtr mutex);
|
|
[DllImport ("libglib-2.0-0.dll") ]
|
|
static extern bool g_mutex_trylock (IntPtr mutex);
|
|
|
|
public void SlaveLock () {
|
|
g_mutex_lock (SlaveLockPtr);
|
|
}
|
|
|
|
public void SlaveUnlock () {
|
|
g_mutex_unlock (SlaveLockPtr);
|
|
}
|
|
|
|
public bool TrySlaveLock () {
|
|
return g_mutex_trylock (SlaveLockPtr);
|
|
}
|
|
|
|
[DllImport ("libgstreamer-0.10.dll") ]
|
|
static extern IntPtr gst_clock_get_master (IntPtr raw);
|
|
[DllImport ("libgstreamer-0.10.dll") ]
|
|
static extern bool gst_clock_set_master (IntPtr raw, IntPtr master);
|
|
public Gst.Clock Master {
|
|
get {
|
|
IntPtr raw_ret = gst_clock_get_master (Handle);
|
|
Gst.Clock ret = Gst.GLib.Object.GetObject (raw_ret, true) as Gst.Clock;
|
|
return ret;
|
|
} set {
|
|
if (!gst_clock_set_master (Handle, value == null ? IntPtr.Zero : value.Handle))
|
|
throw new Exception ();
|
|
}
|
|
}
|
|
|
|
[DllImport ("gstreamersharpglue-0.10.dll") ]
|
|
extern static uint gstsharp_gst_clock_get_entries_offset ();
|
|
|
|
static uint entries_offset = gstsharp_gst_clock_get_entries_offset ();
|
|
private IntPtr EntriesPtr {
|
|
get {
|
|
unsafe {
|
|
IntPtr* raw_ptr = (IntPtr*) ( ( (byte*) Handle) + entries_offset);
|
|
return (*raw_ptr);
|
|
}
|
|
}
|
|
}
|
|
|
|
protected Gst.ClockEntry[] Entries {
|
|
get {
|
|
return (Gst.ClockEntry[]) Gst.GLib.Marshaller.ListPtrToArray (EntriesPtr, typeof (Gst.GLib.List), false, false, typeof (Gst.ClockEntry));
|
|
}
|
|
}
|
|
|
|
[DllImport ("gstreamersharpglue-0.10.dll") ]
|
|
extern static uint gstsharp_gst_clock_get_times_offset ();
|
|
|
|
static uint times_offset = gstsharp_gst_clock_get_times_offset ();
|
|
private IntPtr TimesPtr {
|
|
get {
|
|
unsafe {
|
|
IntPtr* raw_ptr = (IntPtr*) ( ( (byte*) Handle) + times_offset);
|
|
return (*raw_ptr);
|
|
}
|
|
}
|
|
}
|
|
|
|
protected ulong[] Times {
|
|
get {
|
|
ulong[] ret = new ulong[4 * WindowSize];
|
|
for (int i = 0; i < 4 * WindowSize; i++)
|
|
ret[i] = (ulong) Marshal.ReadInt64 (TimesPtr, 8 * i);
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|