<!-- ##### SECTION Title ##### -->
GstClock

<!-- ##### SECTION Short_Description ##### -->
Abstract class for global clocks

<!-- ##### SECTION Long_Description ##### -->
<para>
GStreamer uses a global clock to synchronise the plugins in a pipeline.
Different clock implementations are possible by implementing this abstract
base class.
</para>
<para>
The clock time is always measured in nanoseconds, with the clock being set
to 0 when the pipeline goes to READY. Usually all renderers sync to the global
clock so that the clock is always a good measure of the time in the pipeline.
</para>

<!-- ##### SECTION See_Also ##### -->
<para>
#GstSystemClock
</para>

<!-- ##### TYPEDEF GstClockTime ##### -->
<para>
A datatype to hold a time, measured in nanoseconds.
</para>


<!-- ##### TYPEDEF GstClockTimeDiff ##### -->
<para>
A datatype to hold a timedifference, measured in nanoseconds.
</para>


<!-- ##### TYPEDEF GstClockID ##### -->
<para>
A detatype to hold the handle to an outstanding async clock callback
</para>


<!-- ##### MACRO GST_CLOCK_TIME_NONE ##### -->
<para>
Constant to define an undefined clock time
</para>



<!-- ##### MACRO GST_SECOND ##### -->
<para>
Constant that defines one GStreamer second
</para>



<!-- ##### MACRO GST_MSECOND ##### -->
<para>
Constant that defines one GStreamer millisecond
</para>



<!-- ##### MACRO GST_USECOND ##### -->
<para>
Constant that defines one GStreamer microsecond
</para>



<!-- ##### MACRO GST_NSECOND ##### -->
<para>
Constant that defines one GStreamer nanosecond
</para>



<!-- ##### MACRO GST_CLOCK_DIFF ##### -->
<para>
Calculate a difference between to clock times.
</para>

@s: the first time
@e: the second time


<!-- ##### MACRO GST_TIMEVAL_TO_TIME ##### -->
<para>
Convert a GTimeVal to a GstClockTime
</para>

@tv: the timeval to convert


<!-- ##### MACRO GST_TIME_TO_TIMEVAL ##### -->
<para>
Convert a GstClockTime to a GTimeVal
</para>

@t: The GstClockTime to convert
@tv: The target timeval


<!-- ##### STRUCT GstClockEntry ##### -->
<para>
All pending timeouts or periodic notifies are converted into
an entry.
</para>

@clock: 
@type: 
@time: 
@interval: 
@status: 
@func: 
@user_data: 

<!-- ##### USER_FUNCTION GstClockCallback ##### -->
<para>
The function prototype of the callback.
</para>

@clock: The clock that triggered the callback
@time: The time it was triggered
@id: The id that expired
@user_data: user data passed in the async_wait call
@Returns: 


<!-- ##### ENUM GstClockEntryStatus ##### -->
<para>
The status of a clock timeout.
</para>

@GST_CLOCK_ENTRY_OK: timeout happened
@GST_CLOCK_ENTRY_EARLY: request for timout that has been passed
@GST_CLOCK_ENTRY_RESTART: need to restart the timeout request

<!-- ##### ENUM GstClockEntryType ##### -->
<para>
The type of the clock entry
</para>

@GST_CLOCK_ENTRY_SINGLE: a single shot timeout
@GST_CLOCK_ENTRY_PERIODIC: a periodic timeout request

<!-- ##### MACRO GST_CLOCK_ENTRY ##### -->
<para>
Cast to a clock entry
</para>

@entry: the entry to cast


<!-- ##### MACRO GST_CLOCK_ENTRY_CLOCK ##### -->
<para>
Get the owner clock of the entry
</para>

@entry: the entry to query


<!-- ##### MACRO GST_CLOCK_ENTRY_TYPE ##### -->
<para>
Get the type of the clock entry
</para>

@entry: the entry to query


<!-- ##### MACRO GST_CLOCK_ENTRY_TIME ##### -->
<para>
Get the requested time of this entry
</para>

@entry: the entry to query


<!-- ##### MACRO GST_CLOCK_ENTRY_INTERVAL ##### -->
<para>
Get the interval of this periodic entry
</para>

@entry: the entry to query


<!-- ##### MACRO GST_CLOCK_ENTRY_STATUS ##### -->
<para>
The status of the entry
</para>

@entry: the entry to query


<!-- ##### ENUM GstClockReturn ##### -->
<para>
The return value of a clock operation.
</para>

@GST_CLOCK_STOPPED: The clock is stopped.
@GST_CLOCK_TIMEOUT: The operation timed out.
@GST_CLOCK_EARLY: The operation was scheduled too late.
@GST_CLOCK_ERROR: An error occured
@GST_CLOCK_UNSUPPORTED: Operation is not supported

<!-- ##### ENUM GstClockFlags ##### -->
<para>
The capabilities of this clock
</para>

@GST_CLOCK_FLAG_CAN_DO_SINGLE_SYNC: This clock can do a single sync timeut request
@GST_CLOCK_FLAG_CAN_DO_SINGLE_ASYNC: This clock can do a single async timeout request
@GST_CLOCK_FLAG_CAN_DO_PERIODIC_SYNC: This clock can do sync periodic timeout requests
@GST_CLOCK_FLAG_CAN_DO_PERIODIC_ASYNC: This clock can do async periodic timeout callbacks
@GST_CLOCK_FLAG_CAN_SET_RESOLUTION: The resolution of this clock can be changed
@GST_CLOCK_FLAG_CAN_SET_SPEED: The speed of this clock can be changed

<!-- ##### MACRO GST_CLOCK_FLAGS ##### -->
<para>
Get the clock flags
</para>

@clock: the clock to query


<!-- ##### STRUCT GstClock ##### -->
<para>
The GstClock object
</para>


<!-- ##### FUNCTION gst_clock_set_speed ##### -->
<para>

</para>

@clock: 
@speed: 
@Returns: 


<!-- ##### FUNCTION gst_clock_get_speed ##### -->
<para>

</para>

@clock: 
@Returns: 


<!-- ##### FUNCTION gst_clock_set_resolution ##### -->
<para>

</para>

@clock: 
@resolution: 
@Returns: 


<!-- ##### FUNCTION gst_clock_get_resolution ##### -->
<para>

</para>

@clock: 
@Returns: 


<!-- ##### FUNCTION gst_clock_set_active ##### -->
<para>

</para>

@clock: 
@active: 


<!-- ##### FUNCTION gst_clock_is_active ##### -->
<para>

</para>

@clock: 
@Returns: 


<!-- ##### FUNCTION gst_clock_reset ##### -->
<para>

</para>

@clock: 


<!-- ##### FUNCTION gst_clock_handle_discont ##### -->
<para>

</para>

@clock: 
@time: 
@Returns: 


<!-- ##### FUNCTION gst_clock_get_time ##### -->
<para>

</para>

@clock: 
@Returns: 


<!-- ##### FUNCTION gst_clock_get_next_id ##### -->
<para>

</para>

@clock: 
@Returns: 


<!-- ##### FUNCTION gst_clock_new_single_shot_id ##### -->
<para>

</para>

@clock: 
@time: 
@Returns: 


<!-- ##### FUNCTION gst_clock_new_periodic_id ##### -->
<para>

</para>

@clock: 
@start_time: 
@interval: 
@Returns: 


<!-- ##### FUNCTION gst_clock_id_get_time ##### -->
<para>

</para>

@id: 
@Returns: 


<!-- ##### FUNCTION gst_clock_id_wait ##### -->
<para>

</para>

@id: 
@jitter: 
@Returns: 


<!-- ##### FUNCTION gst_clock_id_wait_async ##### -->
<para>

</para>

@id: 
@func: 
@user_data: 
@Returns: 


<!-- ##### FUNCTION gst_clock_id_unschedule ##### -->
<para>

</para>

@id: 


<!-- ##### FUNCTION gst_clock_id_unlock ##### -->
<para>

</para>

@id: 


<!-- ##### FUNCTION gst_clock_id_free ##### -->
<para>

</para>

@id: 


<!-- ##### ARG GstClock:max-diff ##### -->
<para>
Maximum allowed diff for clock sync requests against the real time.
</para>

<!-- ##### ARG GstClock:stats ##### -->
<para>
Boolean property to activate stat generation on the clock.
</para>

