mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-19 00:01:23 +00:00
datetime: Add constructor for timestamps in microseconds
This commit is contained in:
parent
fa8312472f
commit
47c50b086e
3 changed files with 104 additions and 0 deletions
|
@ -449,6 +449,54 @@ gst_date_time_new_from_unix_epoch_utc (gint64 secs)
|
||||||
return datetime;
|
return datetime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_date_time_new_from_unix_epoch_local_time_usecs:
|
||||||
|
* @usecs: microseconds from the Unix epoch
|
||||||
|
*
|
||||||
|
* Creates a new #GstDateTime using the time since Jan 1, 1970 specified by
|
||||||
|
* @usecs. The #GstDateTime is in the local timezone.
|
||||||
|
*
|
||||||
|
* Returns: (transfer full): a newly created #GstDateTime
|
||||||
|
*
|
||||||
|
* Since: 1.18
|
||||||
|
*/
|
||||||
|
GstDateTime *
|
||||||
|
gst_date_time_new_from_unix_epoch_local_time_usecs (gint64 usecs)
|
||||||
|
{
|
||||||
|
GDateTime *dt, *datetime;
|
||||||
|
gint64 secs = usecs / G_USEC_PER_SEC;
|
||||||
|
gint64 usec_part = usecs % G_USEC_PER_SEC;
|
||||||
|
|
||||||
|
dt = g_date_time_new_from_unix_local (secs);
|
||||||
|
datetime = g_date_time_add_seconds (dt, (gdouble) usec_part / G_USEC_PER_SEC);
|
||||||
|
g_date_time_unref (dt);
|
||||||
|
return gst_date_time_new_from_g_date_time (datetime);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_date_time_new_from_unix_epoch_utc_usecs:
|
||||||
|
* @usecs: microseconds from the Unix epoch
|
||||||
|
*
|
||||||
|
* Creates a new #GstDateTime using the time since Jan 1, 1970 specified by
|
||||||
|
* @usecs. The #GstDateTime is in UTC.
|
||||||
|
*
|
||||||
|
* Returns: (transfer full): a newly created #GstDateTime
|
||||||
|
*
|
||||||
|
* Since: 1.18
|
||||||
|
*/
|
||||||
|
GstDateTime *
|
||||||
|
gst_date_time_new_from_unix_epoch_utc_usecs (gint64 usecs)
|
||||||
|
{
|
||||||
|
GDateTime *dt, *datetime;
|
||||||
|
gint64 secs = usecs / G_USEC_PER_SEC;
|
||||||
|
gint64 usec_part = usecs % G_USEC_PER_SEC;
|
||||||
|
|
||||||
|
dt = g_date_time_new_from_unix_utc (secs);
|
||||||
|
datetime = g_date_time_add_seconds (dt, (gdouble) usec_part / G_USEC_PER_SEC);
|
||||||
|
g_date_time_unref (dt);
|
||||||
|
return gst_date_time_new_from_g_date_time (datetime);
|
||||||
|
}
|
||||||
|
|
||||||
static GstDateTimeFields
|
static GstDateTimeFields
|
||||||
gst_date_time_check_fields (gint * year, gint * month, gint * day,
|
gst_date_time_check_fields (gint * year, gint * month, gint * day,
|
||||||
gint * hour, gint * minute, gdouble * seconds)
|
gint * hour, gint * minute, gdouble * seconds)
|
||||||
|
|
|
@ -105,6 +105,12 @@ GstDateTime * gst_date_time_new_from_unix_epoch_local_time (gint64 secs) G_GNU
|
||||||
GST_API
|
GST_API
|
||||||
GstDateTime * gst_date_time_new_from_unix_epoch_utc (gint64 secs) G_GNUC_MALLOC;
|
GstDateTime * gst_date_time_new_from_unix_epoch_utc (gint64 secs) G_GNUC_MALLOC;
|
||||||
|
|
||||||
|
GST_API
|
||||||
|
GstDateTime * gst_date_time_new_from_unix_epoch_local_time_usecs (gint64 usecs) G_GNUC_MALLOC;
|
||||||
|
|
||||||
|
GST_API
|
||||||
|
GstDateTime * gst_date_time_new_from_unix_epoch_utc_usecs (gint64 usecs) G_GNUC_MALLOC;
|
||||||
|
|
||||||
GST_API
|
GST_API
|
||||||
GstDateTime * gst_date_time_new_local_time (gint year,
|
GstDateTime * gst_date_time_new_local_time (gint year,
|
||||||
gint month,
|
gint month,
|
||||||
|
|
|
@ -131,6 +131,53 @@ GST_START_TEST (test_GstDateTime_new_from_unix_epoch_utc)
|
||||||
|
|
||||||
GST_END_TEST;
|
GST_END_TEST;
|
||||||
|
|
||||||
|
GST_START_TEST (test_GstDateTime_new_from_unix_epoch_local_time_usecs)
|
||||||
|
{
|
||||||
|
GstDateTime *dt;
|
||||||
|
struct tm tm;
|
||||||
|
/* 2007-01-01T20:00:00.500000Z */
|
||||||
|
gint64 time = G_GINT64_CONSTANT (1167681600500000);
|
||||||
|
time_t t = (time_t) (time / G_USEC_PER_SEC);
|
||||||
|
|
||||||
|
#ifdef HAVE_LOCALTIME_R
|
||||||
|
localtime_r (&t, &tm);
|
||||||
|
#else
|
||||||
|
memcpy (&tm, localtime (&t), sizeof (struct tm));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
dt = gst_date_time_new_from_unix_epoch_local_time_usecs (time);
|
||||||
|
assert_equals_int (gst_date_time_get_year (dt), 1900 + tm.tm_year);
|
||||||
|
assert_equals_int (gst_date_time_get_month (dt), 1 + tm.tm_mon);
|
||||||
|
assert_equals_int (gst_date_time_get_day (dt), tm.tm_mday);
|
||||||
|
assert_equals_int (gst_date_time_get_hour (dt), tm.tm_hour);
|
||||||
|
assert_equals_int (gst_date_time_get_minute (dt), tm.tm_min);
|
||||||
|
assert_equals_int (gst_date_time_get_second (dt), tm.tm_sec);
|
||||||
|
assert_equals_int (gst_date_time_get_microsecond (dt), 500000);
|
||||||
|
gst_date_time_unref (dt);
|
||||||
|
}
|
||||||
|
|
||||||
|
GST_END_TEST;
|
||||||
|
|
||||||
|
GST_START_TEST (test_GstDateTime_new_from_unix_epoch_utc_usecs)
|
||||||
|
{
|
||||||
|
GstDateTime *dt;
|
||||||
|
/* 2007-01-01T20:00:00.500000Z */
|
||||||
|
gint64 time = G_GINT64_CONSTANT (1167681600500000);
|
||||||
|
|
||||||
|
dt = gst_date_time_new_from_unix_epoch_utc_usecs (time);
|
||||||
|
assert_equals_int (gst_date_time_get_year (dt), 2007);
|
||||||
|
assert_equals_int (gst_date_time_get_month (dt), 1);
|
||||||
|
assert_equals_int (gst_date_time_get_day (dt), 1);
|
||||||
|
assert_equals_int (gst_date_time_get_hour (dt), 20);
|
||||||
|
assert_equals_int (gst_date_time_get_minute (dt), 0);
|
||||||
|
assert_equals_int (gst_date_time_get_second (dt), 0);
|
||||||
|
assert_equals_int (gst_date_time_get_microsecond (dt), 500000);
|
||||||
|
assert_equals_int (gst_date_time_get_time_zone_offset (dt), 0);
|
||||||
|
gst_date_time_unref (dt);
|
||||||
|
}
|
||||||
|
|
||||||
|
GST_END_TEST;
|
||||||
|
|
||||||
GST_START_TEST (test_GstDateTime_get_dmy)
|
GST_START_TEST (test_GstDateTime_get_dmy)
|
||||||
{
|
{
|
||||||
GstDateTime *dt;
|
GstDateTime *dt;
|
||||||
|
@ -776,6 +823,9 @@ gst_date_time_suite (void)
|
||||||
tcase_add_test (tc_chain, test_GstDateTime_get_utc_offset);
|
tcase_add_test (tc_chain, test_GstDateTime_get_utc_offset);
|
||||||
tcase_add_test (tc_chain, test_GstDateTime_new_from_unix_epoch_local_time);
|
tcase_add_test (tc_chain, test_GstDateTime_new_from_unix_epoch_local_time);
|
||||||
tcase_add_test (tc_chain, test_GstDateTime_new_from_unix_epoch_utc);
|
tcase_add_test (tc_chain, test_GstDateTime_new_from_unix_epoch_utc);
|
||||||
|
tcase_add_test (tc_chain,
|
||||||
|
test_GstDateTime_new_from_unix_epoch_local_time_usecs);
|
||||||
|
tcase_add_test (tc_chain, test_GstDateTime_new_from_unix_epoch_utc_usecs);
|
||||||
tcase_add_test (tc_chain, test_GstDateTime_new_full);
|
tcase_add_test (tc_chain, test_GstDateTime_new_full);
|
||||||
tcase_add_test (tc_chain, test_GstDateTime_now);
|
tcase_add_test (tc_chain, test_GstDateTime_now);
|
||||||
tcase_add_test (tc_chain, test_GstDateTime_utc_now);
|
tcase_add_test (tc_chain, test_GstDateTime_utc_now);
|
||||||
|
|
Loading…
Reference in a new issue