gstreamer/libs/gst/net/gstptpclock.h
Niels De Graef 09141c6e1f Use G_DEFINE_AUTOPTR_CLEANUP_FUNC unconditionally
Since we started depending on GLib 2.44, we can be sure this macro is
defined (it will be a no-op on compilers that don't support it). For
plugins we should just start using `G_DECLARE_FINAL_TYPE` which means
we no longer need the macro there, but for most types in core we don't
want to break ABI, which means it's better to just keep it like it is
(and use the `#ifdef` instead).
2019-06-04 08:50:59 +02:00

162 lines
6.2 KiB
C

/* GStreamer
* Copyright (C) 2015 Sebastian Dröge <sebastian@centricular.com>
*
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef __GST_PTP_CLOCK_H__
#define __GST_PTP_CLOCK_H__
#include <gst/gst.h>
#include <gst/gstsystemclock.h>
#include <gst/net/net-prelude.h>
G_BEGIN_DECLS
#define GST_TYPE_PTP_CLOCK \
(gst_ptp_clock_get_type())
#define GST_PTP_CLOCK(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_PTP_CLOCK,GstPtpClock))
#define GST_PTP_CLOCK_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_PTP_CLOCK,GstPtpClockClass))
#define GST_IS_PTP_CLOCK(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_PTP_CLOCK))
#define GST_IS_PTP_CLOCK_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_PTP_CLOCK))
typedef struct _GstPtpClock GstPtpClock;
typedef struct _GstPtpClockClass GstPtpClockClass;
typedef struct _GstPtpClockPrivate GstPtpClockPrivate;
/**
* GstPtpClock:
*
* Opaque #GstPtpClock structure.
*/
struct _GstPtpClock {
GstSystemClock clock;
/*< private >*/
GstPtpClockPrivate *priv;
gpointer _gst_reserved[GST_PADDING];
};
/**
* GstPtpClockClass:
* @parent_class: parented to #GstSystemClockClass
*
* Opaque #GstPtpClockClass structure.
*/
struct _GstPtpClockClass {
GstSystemClockClass parent_class;
/*< private >*/
gpointer _gst_reserved[GST_PADDING];
};
/**
* GST_PTP_CLOCK_ID_NONE:
* PTP clock identification that can be passed to gst_ptp_init() to
* automatically select one based on the MAC address of interfaces
*/
#define GST_PTP_CLOCK_ID_NONE ((guint64) -1)
GST_NET_API
GType gst_ptp_clock_get_type (void);
GST_NET_API
gboolean gst_ptp_is_supported (void);
GST_NET_API
gboolean gst_ptp_is_initialized (void);
GST_NET_API
gboolean gst_ptp_init (guint64 clock_id,
gchar ** interfaces);
GST_NET_API
void gst_ptp_deinit (void);
#define GST_PTP_STATISTICS_NEW_DOMAIN_FOUND "GstPtpStatisticsNewDomainFound"
#define GST_PTP_STATISTICS_BEST_MASTER_CLOCK_SELECTED "GstPtpStatisticsBestMasterClockSelected"
#define GST_PTP_STATISTICS_PATH_DELAY_MEASURED "GstPtpStatisticsPathDelayMeasured"
#define GST_PTP_STATISTICS_TIME_UPDATED "GstPtpStatisticsTimeUpdated"
/**
* GstPtpStatisticsCallback:
* @domain: PTP domain identifier
* @stats: New statistics
* @user_data: Data passed to gst_ptp_statistics_callback_add()
*
* The statistics can be the following structures:
*
* GST_PTP_STATISTICS_NEW_DOMAIN_FOUND:
* "domain" G_TYPE_UINT The domain identifier of the domain
* "clock" GST_TYPE_CLOCK The internal clock that is slaved to the
* PTP domain
*
* GST_PTP_STATISTICS_BEST_MASTER_CLOCK_SELECTED:
* "domain" G_TYPE_UINT The domain identifier of the domain
* "master-clock-id" G_TYPE_UINT64 PTP clock identifier of the selected master
* clock
* "master-clock-port" G_TYPE_UINT PTP port number of the selected master clock
* "grandmaster-clock-id" G_TYPE_UINT64 PTP clock identifier of the grandmaster clock
*
* GST_PTP_STATISTICS_PATH_DELAY_MEASURED:
* "domain" G_TYPE_UINT The domain identifier of the domain
* "mean-path-delay-avg" GST_TYPE_CLOCK_TIME Average mean path delay
* "mean-path-delay" GST_TYPE_CLOCK_TIME Latest mean path delay
* "delay-request-delay" GST_TYPE_CLOCK_TIME Delay of DELAY_REQ / DELAY_RESP messages
*
* GST_PTP_STATISTICS_TIME_UPDATED:
* "domain" G_TYPE_UINT The domain identifier of the domain
* "mean-path-delay-avg" GST_TYPE_CLOCK_TIME Average mean path delay
* "local-time" GST_TYPE_CLOCK_TIME Local time that corresponds to ptp-time
* "ptp-time" GST_TYPE_CLOCK_TIME Newly measured PTP time at local-time
* "estimated-ptp-time" GST_TYPE_CLOCK_TIME Estimated PTP time based on previous measurements
* "discontinuity" G_TYPE_INT64 Difference between estimated and measured PTP time
* "synced" G_TYPE_BOOLEAN Currently synced to the remote clock
* "r-squared" G_TYPE_DOUBLE R² of clock estimation regression
* "internal-time" GST_TYPE_CLOCK_TIME Internal time clock parameter
* "external-time" GST_TYPE_CLOCK_TIME External time clock parameter
* "rate-num" G_TYPE_UINT64 Internal/external rate numerator
* "rate-den" G_TYPE_UINT64 Internal/external rate denominator
* "rate" G_TYPE_DOUBLE Internal/external rate
*
* If %FALSE is returned, the callback is removed and never called again.
*
*/
typedef gboolean (*GstPtpStatisticsCallback) (guint8 domain,
const GstStructure * stats,
gpointer user_data);
GST_NET_API
gulong gst_ptp_statistics_callback_add (GstPtpStatisticsCallback callback,
gpointer user_data, GDestroyNotify destroy_data);
GST_NET_API
void gst_ptp_statistics_callback_remove (gulong id);
GST_NET_API
GstClock* gst_ptp_clock_new (const gchar *name,
guint domain);
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstPtpClock, gst_object_unref)
G_END_DECLS
#endif /* __GST_PTP_CLOCK_H__ */