mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
systemclock: Use mach_time on Apple platforms
On iOS/OSX g_get_current_time was used by default. However, mach_time is the preferred high-resolution monotonic clock to be used on Apple platforms. https://bugzilla.gnome.org/show_bug.cgi?id=758012
This commit is contained in:
parent
9f26e5cc63
commit
d59022f508
1 changed files with 24 additions and 0 deletions
|
@ -55,6 +55,10 @@
|
||||||
# endif
|
# endif
|
||||||
#endif /* G_OS_WIN32 */
|
#endif /* G_OS_WIN32 */
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
#include <mach/mach_time.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#define GET_ENTRY_STATUS(e) ((GstClockReturn) g_atomic_int_get(&GST_CLOCK_ENTRY_STATUS(e)))
|
#define GET_ENTRY_STATUS(e) ((GstClockReturn) g_atomic_int_get(&GST_CLOCK_ENTRY_STATUS(e)))
|
||||||
#define SET_ENTRY_STATUS(e,val) (g_atomic_int_set(&GST_CLOCK_ENTRY_STATUS(e),(val)))
|
#define SET_ENTRY_STATUS(e,val) (g_atomic_int_set(&GST_CLOCK_ENTRY_STATUS(e),(val)))
|
||||||
#define CAS_ENTRY_STATUS(e,old,val) (g_atomic_int_compare_and_exchange(\
|
#define CAS_ENTRY_STATUS(e,old,val) (g_atomic_int_compare_and_exchange(\
|
||||||
|
@ -85,6 +89,9 @@ struct _GstSystemClockPrivate
|
||||||
LARGE_INTEGER start;
|
LARGE_INTEGER start;
|
||||||
LARGE_INTEGER frequency;
|
LARGE_INTEGER frequency;
|
||||||
#endif /* G_OS_WIN32 */
|
#endif /* G_OS_WIN32 */
|
||||||
|
#ifdef __APPLE__
|
||||||
|
struct mach_timebase_info mach_timebase;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#define GST_SYSTEM_CLOCK_GET_PRIVATE(obj) \
|
#define GST_SYSTEM_CLOCK_GET_PRIVATE(obj) \
|
||||||
|
@ -195,6 +202,10 @@ gst_system_clock_init (GstSystemClock * clock)
|
||||||
QueryPerformanceCounter (&priv->start);
|
QueryPerformanceCounter (&priv->start);
|
||||||
#endif /* G_OS_WIN32 */
|
#endif /* G_OS_WIN32 */
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
mach_timebase_info (&priv->mach_timebase);
|
||||||
|
#endif
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* Uncomment this to start the async clock thread straight away */
|
/* Uncomment this to start the async clock thread straight away */
|
||||||
GST_OBJECT_LOCK (clock);
|
GST_OBJECT_LOCK (clock);
|
||||||
|
@ -547,6 +558,12 @@ clock_type_to_posix_id (GstClockType clock_type)
|
||||||
static GstClockTime
|
static GstClockTime
|
||||||
gst_system_clock_get_internal_time (GstClock * clock)
|
gst_system_clock_get_internal_time (GstClock * clock)
|
||||||
{
|
{
|
||||||
|
#if defined __APPLE__
|
||||||
|
GstSystemClock *sysclock = GST_SYSTEM_CLOCK_CAST (clock);
|
||||||
|
uint64_t mach_t = mach_absolute_time ();
|
||||||
|
return gst_util_uint64_scale (mach_t, sysclock->priv->mach_timebase.numer,
|
||||||
|
sysclock->priv->mach_timebase.denom);
|
||||||
|
#else
|
||||||
#ifdef G_OS_WIN32
|
#ifdef G_OS_WIN32
|
||||||
GstSystemClock *sysclock = GST_SYSTEM_CLOCK_CAST (clock);
|
GstSystemClock *sysclock = GST_SYSTEM_CLOCK_CAST (clock);
|
||||||
|
|
||||||
|
@ -582,11 +599,17 @@ gst_system_clock_get_internal_time (GstClock * clock)
|
||||||
return GST_TIMESPEC_TO_TIME (ts);
|
return GST_TIMESPEC_TO_TIME (ts);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* __APPLE__ */
|
||||||
}
|
}
|
||||||
|
|
||||||
static guint64
|
static guint64
|
||||||
gst_system_clock_get_resolution (GstClock * clock)
|
gst_system_clock_get_resolution (GstClock * clock)
|
||||||
{
|
{
|
||||||
|
#if defined __APPLE__
|
||||||
|
GstSystemClock *sysclock = GST_SYSTEM_CLOCK_CAST (clock);
|
||||||
|
return gst_util_uint64_scale (GST_NSECOND,
|
||||||
|
sysclock->priv->mach_timebase.numer, sysclock->priv->mach_timebase.denom);
|
||||||
|
#else
|
||||||
#ifdef G_OS_WIN32
|
#ifdef G_OS_WIN32
|
||||||
GstSystemClock *sysclock = GST_SYSTEM_CLOCK_CAST (clock);
|
GstSystemClock *sysclock = GST_SYSTEM_CLOCK_CAST (clock);
|
||||||
|
|
||||||
|
@ -612,6 +635,7 @@ gst_system_clock_get_resolution (GstClock * clock)
|
||||||
return 1 * GST_USECOND;
|
return 1 * GST_USECOND;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* __APPLE__ */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* synchronously wait on the given GstClockEntry.
|
/* synchronously wait on the given GstClockEntry.
|
||||||
|
|
Loading…
Reference in a new issue