# GstTestClock

GstTestClock is an implementation of GstClock which has different behaviour compared to GstSystemClock. Time for GstSystemClock advances according to the system time, while time for GstTestClock changes only when gst_test_clock_set_time or gst_test_clock_advance_time are called. GstTestClock provides unit tests with the possibility to precisely advance the time in a deterministic manner, independent of the system time or any other external factors.

## Advancing the time of a GstTestClock

       #include <gst/gst.h>
       #include <gst/check/gsttestclock.h>

       GstClock *clock;
       GstTestClock *test_clock;

       clock = gst_test_clock_new ();
       test_clock = GST_TEST_CLOCK (clock);
       GST_INFO ("Time: %" GST_TIME_FORMAT, GST_TIME_ARGS (gst_clock_get_time (clock)));
       gst_test_clock_advance_time ( test_clock, 1 * GST_SECOND);
       GST_INFO ("Time: %" GST_TIME_FORMAT, GST_TIME_ARGS (gst_clock_get_time (clock)));
       g_usleep (10 * G_USEC_PER_SEC);
       GST_INFO ("Time: %" GST_TIME_FORMAT, GST_TIME_ARGS (gst_clock_get_time (clock)));
       gst_test_clock_set_time (test_clock, 42 * GST_SECOND);
       GST_INFO ("Time: %" GST_TIME_FORMAT, GST_TIME_ARGS (gst_clock_get_time (clock)));
       ...

GstClock allows for setting up single shot or periodic clock notifications as well as waiting for these notifications synchronously (using gst_clock_id_wait) or asynchronously (using gst_clock_id_wait_async or gst_clock_id_wait_async). This is used by many GStreamer elements, among them GstBaseSrc and GstBaseSink.

GstTestClock keeps track of these clock notifications. By calling gst_test_clock_wait_for_next_pending_id or gst_test_clock_wait_for_multiple_pending_ids a unit tests may wait for the next one or several clock notifications to be requested. Additionally unit tests may release blocked waits in a controlled fashion by calling gst_test_clock_process_next_clock_id. This way a unit test can control the inaccuracy (jitter) of clock notifications, since the test can decide to release blocked waits when the clock time has advanced exactly to, or past, the requested clock notification time.

There are also interfaces for determining if a notification belongs to a GstTestClock or not, as well as getting the number of requested clock notifications so far.

N.B.: When a unit test waits for a certain amount of clock notifications to be requested in gst_test_clock_wait_for_next_pending_id or gst_test_clock_wait_for_multiple_pending_ids then these functions may block for a long time. If they block forever then the expected clock notifications were never requested from GstTestClock, and so the assumptions in the code of the unit test are wrong. The unit test case runner in gstcheck is expected to catch these cases either by the default test case timeout or the one set for the unit test by calling tcase_set_timeout().

The sample code below assumes that the element under test will delay a buffer pushed on the source pad by some latency until it arrives on the sink pad. Moreover it is assumed that the element will at some point call gst_clock_id_wait to synchronously wait for a specific time. The first buffer sent will arrive exactly on time only delayed by the latency. The second buffer will arrive a little late (7ms) due to simulated jitter in the clock notification.

## Demonstration of how to work with clock notifications and GstTestClock

       #include <gst/gst.h>
       #include <gst/check/gstcheck.h>
       #include <gst/check/gsttestclock.h>

       GstClockTime latency;
       GstElement *element;
       GstPad *srcpad;
       GstClock *clock;
       GstTestClock *test_clock;
       GstBuffer buf;
       GstClockID pending_id;
       GstClockID processed_id;

       latency = 42 * GST_MSECOND;
       element = create_element (latency, ...);
       srcpad = get_source_pad (element);

       clock = gst_test_clock_new ();
       test_clock = GST_TEST_CLOCK (clock);
       gst_element_set_clock (element, clock);

       GST_INFO ("Set time, create and push the first buffer\n");
       gst_test_clock_set_time (test_clock, 0);
       buf = create_test_buffer (gst_clock_get_time (clock), ...);
       gst_assert_cmpint (gst_pad_push (srcpad, buf), ==, GST_FLOW_OK);

       GST_INFO ("Block until element is waiting for a clock notification\n");
       gst_test_clock_wait_for_next_pending_id (test_clock, &pending_id);
       GST_INFO ("Advance to the requested time of the clock notification\n");
       gst_test_clock_advance_time (test_clock, latency);
       GST_INFO ("Release the next blocking wait and make sure it is the one from element\n");
       processed_id = gst_test_clock_process_next_clock_id (test_clock);
       g_assert (processed_id == pending_id);
       g_assert_cmpint (GST_CLOCK_ENTRY_STATUS (processed_id), ==, GST_CLOCK_OK);
       gst_clock_id_unref (pending_id);
       gst_clock_id_unref (processed_id);

       GST_INFO ("Validate that element produced an output buffer and check its timestamp\n");
       g_assert_cmpint (get_number_of_output_buffer (...), ==, 1);
       buf = get_buffer_pushed_by_element (element, ...);
       g_assert_cmpint (GST_BUFFER_TIMESTAMP (buf), ==, latency);
       gst_buffer_unref (buf);
       GST_INFO ("Check that element does not wait for any clock notification\n");
       g_assert (!gst_test_clock_peek_next_pending_id (test_clock, NULL));

       GST_INFO ("Set time, create and push the second buffer\n");
       gst_test_clock_advance_time (test_clock, 10 * GST_SECOND);
       buf = create_test_buffer (gst_clock_get_time (clock), ...);
       gst_assert_cmpint (gst_pad_push (srcpad, buf), ==, GST_FLOW_OK);

       GST_INFO ("Block until element is waiting for a new clock notification\n");
       (gst_test_clock_wait_for_next_pending_id (test_clock, &pending_id);
       GST_INFO ("Advance past 7ms beyond the requested time of the clock notification\n");
       gst_test_clock_advance_time (test_clock, latency + 7 * GST_MSECOND);
       GST_INFO ("Release the next blocking wait and make sure it is the one from element\n");
       processed_id = gst_test_clock_process_next_clock_id (test_clock);
       g_assert (processed_id == pending_id);
       g_assert_cmpint (GST_CLOCK_ENTRY_STATUS (processed_id), ==, GST_CLOCK_OK);
       gst_clock_id_unref (pending_id);
       gst_clock_id_unref (processed_id);

       GST_INFO ("Validate that element produced an output buffer and check its timestamp\n");
       g_assert_cmpint (get_number_of_output_buffer (...), ==, 1);
       buf = get_buffer_pushed_by_element (element, ...);
       g_assert_cmpint (GST_BUFFER_TIMESTAMP (buf), ==,
           10 * GST_SECOND + latency + 7 * GST_MSECOND);
       gst_buffer_unref (buf);
       GST_INFO ("Check that element does not wait for any clock notification\n");
       g_assert (!gst_test_clock_peek_next_pending_id (test_clock, NULL));
       ...

Since GstTestClock is only supposed to be used in unit tests it calls g_assert, g_assert_cmpint or g_assert_cmpuint to validate all function arguments. This will highlight any issues with the unit test code itself.

## GstTestClock

    GObject
        ╰──GInitiallyUnowned
            ╰──GstObject
                ╰──GstClock
                    ╰──GstTestClock

A GstTestClock structure which is based on a GstClock along with some private data.

### Members

`parent` (GstClock) –
No description available

Since : 1.2

### Class structure

#### GstTestClockClass

The class of a GstTestClock, which has no virtual methods to override.

##### Fields

`parent_class` (GstClockClass) –

the parent class structure

Since : 1.2

### GstCheck.TestClockClass

The class of a GstCheck.TestClock, which has no virtual methods to override.

##### Attributes

`parent_class` (Gst.ClockClass) –

the parent class structure

Since : 1.2

### GstCheck.TestClockClass

The class of a GstCheck.TestClock, which has no virtual methods to override.

##### Attributes

`parent_class` (Gst.ClockClass) –

the parent class structure

Since : 1.2

## GstCheck.TestClock

    GObject.Object
        ╰──GObject.InitiallyUnowned
            ╰──Gst.Object
                ╰──Gst.Clock
                    ╰──GstCheck.TestClock

A GstCheck.TestClock structure which is based on a Gst.Clock along with some private data.

### Members

`parent` (Gst.Clock) –
No description available

Since : 1.2

## GstCheck.TestClock

    GObject.Object
        ╰──GObject.InitiallyUnowned
            ╰──Gst.Object
                ╰──Gst.Clock
                    ╰──GstCheck.TestClock

A GstCheck.TestClock structure which is based on a Gst.Clock along with some private data.

### Members

`parent` (Gst.Clock) –
No description available

Since : 1.2

### Constructors

#### gst_test_clock_new

    GstClock *
    gst_test_clock_new ()

Creates a new test clock with its time set to zero.

MT safe.

Returns ( [transfer: full]) –

a GstTestClock cast to GstClock.

Since : 1.2

#### GstCheck.TestClock.prototype.new

    function GstCheck.TestClock.prototype.new(): {
        // javascript wrapper for 'gst_test_clock_new'
    }

Creates a new test clock with its time set to zero.

MT safe.

Returns (Gst.Clock) –

a GstCheck.TestClock cast to Gst.Clock.

Since : 1.2

#### GstCheck.TestClock.new

    def GstCheck.TestClock.new ():
        #python wrapper for 'gst_test_clock_new'

Creates a new test clock with its time set to zero.

MT safe.

Returns (Gst.Clock) –

a GstCheck.TestClock cast to Gst.Clock.

Since : 1.2

#### gst_test_clock_new_with_start_time

    GstClock *
    gst_test_clock_new_with_start_time (GstClockTime start_time)

Creates a new test clock with its time set to the specified time.

MT safe.

Parameters:

`start_time` –

a GstClockTime set to the desired start time of the clock.

Returns ( [transfer: full]) –

a GstTestClock cast to GstClock.

Since : 1.2

#### GstCheck.TestClock.prototype.new_with_start_time

    function GstCheck.TestClock.prototype.new_with_start_time(start_time: Number): {
        // javascript wrapper for 'gst_test_clock_new_with_start_time'
    }

Creates a new test clock with its time set to the specified time.

MT safe.

Parameters:

`start_time` (Number) –

a Number set to the desired start time of the clock.

Returns (Gst.Clock) –

a GstCheck.TestClock cast to Gst.Clock.

Since : 1.2

#### GstCheck.TestClock.new_with_start_time

    def GstCheck.TestClock.new_with_start_time (start_time):
        #python wrapper for 'gst_test_clock_new_with_start_time'

Creates a new test clock with its time set to the specified time.

MT safe.

Parameters:

`start_time` (int) –

a int set to the desired start time of the clock.

Returns (Gst.Clock) –

a GstCheck.TestClock cast to Gst.Clock.

Since : 1.2

### Methods

#### gst_test_clock_advance_time

    gst_test_clock_advance_time (GstTestClock * test_clock,
                                 GstClockTimeDiff delta)

Advances the time of the test_clock by the amount given by delta. The time of test_clock is monotonically increasing, therefore providing a delta which is negative or zero is a programming error.

MT safe.

Parameters:

`test_clock` –

a GstTestClock for which to increase the time

`delta` –

a positive GstClockTimeDiff to be added to the time of the clock

Since : 1.2

#### GstCheck.TestClock.prototype.advance_time

    function GstCheck.TestClock.prototype.advance_time(delta: Number): {
        // javascript wrapper for 'gst_test_clock_advance_time'
    }

Advances the time of the test_clock by the amount given by delta. The time of test_clock is monotonically increasing, therefore providing a delta which is negative or zero is a programming error.

MT safe.

Parameters:

`test_clock` (GstCheck.TestClock) –

a GstCheck.TestClock for which to increase the time

`delta` (Number) –

a positive Number to be added to the time of the clock

Since : 1.2

#### GstCheck.TestClock.advance_time

    def GstCheck.TestClock.advance_time (self, delta):
        #python wrapper for 'gst_test_clock_advance_time'

Advances the time of the test_clock by the amount given by delta. The time of test_clock is monotonically increasing, therefore providing a delta which is negative or zero is a programming error.

MT safe.

Parameters:

`test_clock` (GstCheck.TestClock) –

a GstCheck.TestClock for which to increase the time

`delta` (int) –

a positive int to be added to the time of the clock

Since : 1.2

#### gst_test_clock_crank

    gboolean
    gst_test_clock_crank (GstTestClock * test_clock)

A "crank" consists of three steps: 1: Wait for a GstClockID to be registered with the GstTestClock. 2: Advance the GstTestClock to the time the GstClockID is waiting, unless the clock time is already passed the clock id (Since: 1.18). 3: Release the GstClockID wait. A "crank" can be though of as the notion of manually driving the clock forward to its next logical step.

Return: TRUE if the crank was successful, FALSE otherwise.

MT safe.

Parameters:

`test_clock` –

GstTestClock to crank

Returns –
No description available

Since : 1.8

#### GstCheck.TestClock.prototype.crank

    function GstCheck.TestClock.prototype.crank(): {
        // javascript wrapper for 'gst_test_clock_crank'
    }

A "crank" consists of three steps: 1: Wait for a Object to be registered with the GstCheck.TestClock. 2: Advance the GstCheck.TestClock to the time the Object is waiting, unless the clock time is already passed the clock id (Since: 1.18). 3: Release the Object wait. A "crank" can be though of as the notion of manually driving the clock forward to its next logical step.

Return: TRUE if the crank was successful, FALSE otherwise.

MT safe.

Parameters:

`test_clock` (GstCheck.TestClock) –

GstCheck.TestClock to crank

Returns (Number) –
No description available

Since : 1.8

#### GstCheck.TestClock.crank

    def GstCheck.TestClock.crank (self):
        #python wrapper for 'gst_test_clock_crank'

A "crank" consists of three steps: 1: Wait for a object to be registered with the GstCheck.TestClock. 2: Advance the GstCheck.TestClock to the time the object is waiting, unless the clock time is already passed the clock id (Since: 1.18). 3: Release the object wait. A "crank" can be though of as the notion of manually driving the clock forward to its next logical step.

Return: TRUE if the crank was successful, FALSE otherwise.

MT safe.

Parameters:

`test_clock` (GstCheck.TestClock) –

GstCheck.TestClock to crank

Returns (bool) –
No description available

Since : 1.8

#### gst_test_clock_get_next_entry_time

    GstClockTime
    gst_test_clock_get_next_entry_time (GstTestClock * test_clock)

Retrieve the requested time for the next pending clock notification.

MT safe.

Parameters:

`test_clock` –

a GstTestClock to fetch the next clock notification time for

Returns –

a GstClockTime set to the time of the next pending clock notification. If no clock notifications have been requested GST_CLOCK_TIME_NONE will be returned.

Since : 1.2

#### GstCheck.TestClock.prototype.get_next_entry_time

    function GstCheck.TestClock.prototype.get_next_entry_time(): {
        // javascript wrapper for 'gst_test_clock_get_next_entry_time'
    }

Retrieve the requested time for the next pending clock notification.

MT safe.

Parameters:

`test_clock` (GstCheck.TestClock) –

a GstCheck.TestClock to fetch the next clock notification time for

Returns (Number) –

a Number set to the time of the next pending clock notification. If no clock notifications have been requested Gst.CLOCK_TIME_NONE will be returned.

Since : 1.2

#### GstCheck.TestClock.get_next_entry_time

    def GstCheck.TestClock.get_next_entry_time (self):
        #python wrapper for 'gst_test_clock_get_next_entry_time'

Retrieve the requested time for the next pending clock notification.

MT safe.

Parameters:

`test_clock` (GstCheck.TestClock) –

a GstCheck.TestClock to fetch the next clock notification time for

Returns (int) –

a int set to the time of the next pending clock notification. If no clock notifications have been requested Gst.CLOCK_TIME_NONE will be returned.

Since : 1.2

#### gst_test_clock_has_id

    gboolean
    gst_test_clock_has_id (GstTestClock * test_clock,
                           GstClockID id)

Checks whether test_clock was requested to provide the clock notification given by id.

MT safe.

Parameters:

`test_clock` –

a GstTestClock to ask if it provided the notification

`id` ( [transfer: none]) –

a GstClockID clock notification

Returns –

TRUE if the clock has been asked to provide the given clock notification, FALSE otherwise.

Since : 1.2

#### GstCheck.TestClock.prototype.has_id

    function GstCheck.TestClock.prototype.has_id(id: Object): {
        // javascript wrapper for 'gst_test_clock_has_id'
    }

Checks whether test_clock was requested to provide the clock notification given by id.

MT safe.

Parameters:

`test_clock` (GstCheck.TestClock) –

a GstCheck.TestClock to ask if it provided the notification

`id` (Object) –

a Object clock notification

Returns (Number) –

TRUE if the clock has been asked to provide the given clock notification, FALSE otherwise.

Since : 1.2

#### GstCheck.TestClock.has_id

    def GstCheck.TestClock.has_id (self, id):
        #python wrapper for 'gst_test_clock_has_id'

Checks whether test_clock was requested to provide the clock notification given by id.

MT safe.

Parameters:

`test_clock` (GstCheck.TestClock) –

a GstCheck.TestClock to ask if it provided the notification

`id` (object) –

a object clock notification

Returns (bool) –

TRUE if the clock has been asked to provide the given clock notification, FALSE otherwise.

Since : 1.2

#### gst_test_clock_peek_id_count

    guint
    gst_test_clock_peek_id_count (GstTestClock * test_clock)

Determine the number of pending clock notifications that have been requested from the test_clock.

MT safe.

Parameters:

`test_clock` –

a GstTestClock for which to count notifications

Returns –

the number of pending clock notifications.

Since : 1.2

#### GstCheck.TestClock.prototype.peek_id_count

    function GstCheck.TestClock.prototype.peek_id_count(): {
        // javascript wrapper for 'gst_test_clock_peek_id_count'
    }

Determine the number of pending clock notifications that have been requested from the test_clock.

MT safe.

Parameters:

`test_clock` (GstCheck.TestClock) –

a GstCheck.TestClock for which to count notifications

Returns (Number) –

the number of pending clock notifications.

Since : 1.2

#### GstCheck.TestClock.peek_id_count

    def GstCheck.TestClock.peek_id_count (self):
        #python wrapper for 'gst_test_clock_peek_id_count'

Determine the number of pending clock notifications that have been requested from the test_clock.

MT safe.

Parameters:

`test_clock` (GstCheck.TestClock) –

a GstCheck.TestClock for which to count notifications

Returns (int) –

the number of pending clock notifications.

Since : 1.2

#### gst_test_clock_peek_next_pending_id

    gboolean
    gst_test_clock_peek_next_pending_id (GstTestClock * test_clock,
                                         GstClockID * pending_id)

Determines if the pending_id is the next clock notification scheduled to be triggered given the current time of the test_clock.

MT safe.

Return: TRUE if pending_id is the next clock notification to be triggered, FALSE otherwise.

Parameters:

`test_clock` –

a GstTestClock to check the clock notifications for

`pending_id` ( [allow-none][out][transfer: full]) –

a GstClockID clock notification to look for

Returns –
No description available

Since : 1.2

#### GstCheck.TestClock.prototype.peek_next_pending_id

    function GstCheck.TestClock.prototype.peek_next_pending_id(): {
        // javascript wrapper for 'gst_test_clock_peek_next_pending_id'
    }

Determines if the pending_id is the next clock notification scheduled to be triggered given the current time of the test_clock.

MT safe.

Return: TRUE if pending_id is the next clock notification to be triggered, FALSE otherwise.

Parameters:

`test_clock` (GstCheck.TestClock) –

a GstCheck.TestClock to check the clock notifications for

Returns a tuple made of:

(Number ) –
No description available
`pending_id` (Object ) –
No description available

Since : 1.2

#### GstCheck.TestClock.peek_next_pending_id

    def GstCheck.TestClock.peek_next_pending_id (self):
        #python wrapper for 'gst_test_clock_peek_next_pending_id'

Determines if the pending_id is the next clock notification scheduled to be triggered given the current time of the test_clock.

MT safe.

Return: TRUE if pending_id is the next clock notification to be triggered, FALSE otherwise.

Parameters:

`test_clock` (GstCheck.TestClock) –

a GstCheck.TestClock to check the clock notifications for

Returns a tuple made of:

(bool ) –
No description available
`pending_id` (object ) –
No description available

Since : 1.2

#### gst_test_clock_process_id

    gboolean
    gst_test_clock_process_id (GstTestClock * test_clock,
                               GstClockID pending_id)

Processes and releases the pending ID.

MT safe.

Parameters:

`test_clock` –

GstTestClock for which to process the pending IDs

`pending_id` ( [transfer: full]) –

GstClockID

Returns –
No description available

Since : 1.18

#### GstCheck.TestClock.prototype.process_id

    function GstCheck.TestClock.prototype.process_id(pending_id: Object): {
        // javascript wrapper for 'gst_test_clock_process_id'
    }

Processes and releases the pending ID.

MT safe.

Parameters:

`test_clock` (GstCheck.TestClock) –

GstCheck.TestClock for which to process the pending IDs

`pending_id` (Object) –

Object

Returns (Number) –
No description available

Since : 1.18

#### GstCheck.TestClock.process_id

    def GstCheck.TestClock.process_id (self, pending_id):
        #python wrapper for 'gst_test_clock_process_id'

Processes and releases the pending ID.

MT safe.

Parameters:

`test_clock` (GstCheck.TestClock) –

GstCheck.TestClock for which to process the pending IDs

`pending_id` (object) –

object

Returns (bool) –
No description available

Since : 1.18

#### gst_test_clock_process_id_list

    guint
    gst_test_clock_process_id_list (GstTestClock * test_clock,
                                    const GList * pending_list)

Processes and releases the pending IDs in the list.

MT safe.

Parameters:

`test_clock` –

GstTestClock for which to process the pending IDs

`pending_list` ( [element-typeGst.ClockID][transfer: none][allow-none]) –

List of pending GstClockID

Returns –
No description available

Since : 1.4

#### GstCheck.TestClock.prototype.process_id_list

    function GstCheck.TestClock.prototype.process_id_list(pending_list: [ Object ]): {
        // javascript wrapper for 'gst_test_clock_process_id_list'
    }

Processes and releases the pending IDs in the list.

MT safe.

Parameters:

`test_clock` (GstCheck.TestClock) –

GstCheck.TestClock for which to process the pending IDs

`pending_list` ([ Object ]) –

List of pending Object

Returns (Number) –
No description available

Since : 1.4

#### GstCheck.TestClock.process_id_list

    def GstCheck.TestClock.process_id_list (self, pending_list):
        #python wrapper for 'gst_test_clock_process_id_list'

Processes and releases the pending IDs in the list.

MT safe.

Parameters:

`test_clock` (GstCheck.TestClock) –

GstCheck.TestClock for which to process the pending IDs

`pending_list` ([ object ]) –

List of pending object

Returns (int) –
No description available

Since : 1.4

#### gst_test_clock_process_next_clock_id

    GstClockID
    gst_test_clock_process_next_clock_id (GstTestClock * test_clock)

MT safe.

Parameters:

`test_clock` –

a GstTestClock for which to retrieve the next pending clock notification

Returns ( [transfer: full][nullable]) –

a GstClockID containing the next pending clock notification.

Since : 1.2

#### GstCheck.TestClock.prototype.process_next_clock_id

    function GstCheck.TestClock.prototype.process_next_clock_id(): {
        // javascript wrapper for 'gst_test_clock_process_next_clock_id'
    }

MT safe.

Parameters:

`test_clock` (GstCheck.TestClock) –

a GstCheck.TestClock for which to retrieve the next pending clock notification

Returns (Object) –

a Object containing the next pending clock notification.

Since : 1.2

#### GstCheck.TestClock.process_next_clock_id

    def GstCheck.TestClock.process_next_clock_id (self):
        #python wrapper for 'gst_test_clock_process_next_clock_id'

MT safe.

Parameters:

`test_clock` (GstCheck.TestClock) –

a GstCheck.TestClock for which to retrieve the next pending clock notification

Returns (object) –

a object containing the next pending clock notification.

Since : 1.2

#### gst_test_clock_set_time

    gst_test_clock_set_time (GstTestClock * test_clock,
                             GstClockTime new_time)

Sets the time of test_clock to the time given by new_time. The time of test_clock is monotonically increasing, therefore providing a new_time which is earlier or equal to the time of the clock as given by gst_clock_get_time is a programming error.

MT safe.

Parameters:

`test_clock` –

a GstTestClock of which to set the time

`new_time` –

a GstClockTime later than that returned by gst_clock_get_time

Since : 1.2

#### GstCheck.TestClock.prototype.set_time

    function GstCheck.TestClock.prototype.set_time(new_time: Number): {
        // javascript wrapper for 'gst_test_clock_set_time'
    }

Sets the time of test_clock to the time given by new_time. The time of test_clock is monotonically increasing, therefore providing a new_time which is earlier or equal to the time of the clock as given by Gst.Clock.prototype.get_time is a programming error.

MT safe.

Parameters:

`test_clock` (GstCheck.TestClock) –

a GstCheck.TestClock of which to set the time

`new_time` (Number) –

a Number later than that returned by Gst.Clock.prototype.get_time

Since : 1.2

#### GstCheck.TestClock.set_time

    def GstCheck.TestClock.set_time (self, new_time):
        #python wrapper for 'gst_test_clock_set_time'

Sets the time of test_clock to the time given by new_time. The time of test_clock is monotonically increasing, therefore providing a new_time which is earlier or equal to the time of the clock as given by Gst.Clock.get_time is a programming error.

MT safe.

Parameters:

`test_clock` (GstCheck.TestClock) –

a GstCheck.TestClock of which to set the time

`new_time` (int) –

a int later than that returned by Gst.Clock.get_time

Since : 1.2

#### gst_test_clock_timed_wait_for_multiple_pending_ids

    gboolean
    gst_test_clock_timed_wait_for_multiple_pending_ids (GstTestClock * test_clock,
                                                        guint count,
                                                        guint timeout_ms,
                                                        GList ** pending_list)

Blocks until at least count clock notifications have been requested from test_clock, or the timeout expires.

MT safe.

Parameters:

`test_clock` –

GstTestClock for which to await having enough pending clock

`count` –

the number of pending clock notifications to wait for

`timeout_ms` –

the timeout in milliseconds

`pending_list` ( [out][element-typeGst.ClockID][transfer: full][allow-none]) –

Address of a GList pointer variable to store the list of pending GstClockID that expired, or NULL

Returns –

a gboolean TRUE if the waits have been registered, FALSE if not. (Could be that it timed out waiting or that more waits than waits was found)

Since : 1.16

#### GstCheck.TestClock.prototype.timed_wait_for_multiple_pending_ids

    function GstCheck.TestClock.prototype.timed_wait_for_multiple_pending_ids(count: Number, timeout_ms: Number): {
        // javascript wrapper for 'gst_test_clock_timed_wait_for_multiple_pending_ids'
    }

Blocks until at least count clock notifications have been requested from test_clock, or the timeout expires.

MT safe.

Parameters:

`test_clock` (GstCheck.TestClock) –

GstCheck.TestClock for which to await having enough pending clock

`count` (Number) –

the number of pending clock notifications to wait for

`timeout_ms` (Number) –

the timeout in milliseconds

Returns a tuple made of:

(Number ) –

a gboolean TRUE if the waits have been registered, FALSE if not. (Could be that it timed out waiting or that more waits than waits was found)

`pending_list` ([ Object ] ) –

a gboolean TRUE if the waits have been registered, FALSE if not. (Could be that it timed out waiting or that more waits than waits was found)

Since : 1.16

#### GstCheck.TestClock.timed_wait_for_multiple_pending_ids

    def GstCheck.TestClock.timed_wait_for_multiple_pending_ids (self, count, timeout_ms):
        #python wrapper for 'gst_test_clock_timed_wait_for_multiple_pending_ids'

Blocks until at least count clock notifications have been requested from test_clock, or the timeout expires.

MT safe.

Parameters:

`test_clock` (GstCheck.TestClock) –

GstCheck.TestClock for which to await having enough pending clock

`count` (int) –

the number of pending clock notifications to wait for

`timeout_ms` (int) –

the timeout in milliseconds

Returns a tuple made of:

(bool ) –

a gboolean TRUE if the waits have been registered, FALSE if not. (Could be that it timed out waiting or that more waits than waits was found)

`pending_list` ([ object ] ) –

a gboolean TRUE if the waits have been registered, FALSE if not. (Could be that it timed out waiting or that more waits than waits was found)

Since : 1.16

#### gst_test_clock_wait_for_multiple_pending_ids

    gst_test_clock_wait_for_multiple_pending_ids (GstTestClock * test_clock,
                                                  guint count,
                                                  GList ** pending_list)

Blocks until at least count clock notifications have been requested from test_clock. There is no timeout for this wait, see the main description of GstTestClock.

MT safe.

Parameters:

`test_clock` –

GstTestClock for which to await having enough pending clock

`count` –

the number of pending clock notifications to wait for

`pending_list` ( [out][element-typeGst.ClockID][transfer: full][allow-none]) –

Address of a GList pointer variable to store the list of pending GstClockID that expired, or NULL

Since : 1.4

#### GstCheck.TestClock.prototype.wait_for_multiple_pending_ids

    function GstCheck.TestClock.prototype.wait_for_multiple_pending_ids(count: Number): {
        // javascript wrapper for 'gst_test_clock_wait_for_multiple_pending_ids'
    }

Blocks until at least count clock notifications have been requested from test_clock. There is no timeout for this wait, see the main description of GstCheck.TestClock.

MT safe.

Parameters:

`test_clock` (GstCheck.TestClock) –

GstCheck.TestClock for which to await having enough pending clock

`count` (Number) –

the number of pending clock notifications to wait for

Since : 1.4

#### GstCheck.TestClock.wait_for_multiple_pending_ids

    def GstCheck.TestClock.wait_for_multiple_pending_ids (self, count):
        #python wrapper for 'gst_test_clock_wait_for_multiple_pending_ids'

Blocks until at least count clock notifications have been requested from test_clock. There is no timeout for this wait, see the main description of GstCheck.TestClock.

MT safe.

Parameters:

`test_clock` (GstCheck.TestClock) –

GstCheck.TestClock for which to await having enough pending clock

`count` (int) –

the number of pending clock notifications to wait for

Since : 1.4

#### gst_test_clock_wait_for_next_pending_id

    gst_test_clock_wait_for_next_pending_id (GstTestClock * test_clock,
                                             GstClockID * pending_id)

Waits until a clock notification is requested from test_clock. There is no timeout for this wait, see the main description of GstTestClock. A reference to the pending clock notification is stored in pending_id.

MT safe.

Parameters:

`test_clock` –

GstTestClock for which to get the pending clock notification

`pending_id` ( [allow-none][out][transfer: full]) –

GstClockID with information about the pending clock notification

Since : 1.2

#### GstCheck.TestClock.prototype.wait_for_next_pending_id

    function GstCheck.TestClock.prototype.wait_for_next_pending_id(): {
        // javascript wrapper for 'gst_test_clock_wait_for_next_pending_id'
    }

Waits until a clock notification is requested from test_clock. There is no timeout for this wait, see the main description of GstCheck.TestClock. A reference to the pending clock notification is stored in pending_id.

MT safe.

Parameters:

`test_clock` (GstCheck.TestClock) –

GstCheck.TestClock for which to get the pending clock notification

Since : 1.2

#### GstCheck.TestClock.wait_for_next_pending_id

    def GstCheck.TestClock.wait_for_next_pending_id (self):
        #python wrapper for 'gst_test_clock_wait_for_next_pending_id'

Waits until a clock notification is requested from test_clock. There is no timeout for this wait, see the main description of GstCheck.TestClock. A reference to the pending clock notification is stored in pending_id.

MT safe.

Parameters:

`test_clock` (GstCheck.TestClock) –

GstCheck.TestClock for which to get the pending clock notification

Since : 1.2

#### gst_test_clock_wait_for_pending_id_count

    gst_test_clock_wait_for_pending_id_count (GstTestClock * test_clock,
                                              guint count)

Blocks until at least count clock notifications have been requested from test_clock. There is no timeout for this wait, see the main description of GstTestClock.

Parameters:

`test_clock` –

GstTestClock for which to await having enough pending clock

`count` –

the number of pending clock notifications to wait for

Since : 1.2

deprecated : use gst_test_clock_wait_for_multiple_pending_ids() instead.

#### GstCheck.TestClock.prototype.wait_for_pending_id_count

    function GstCheck.TestClock.prototype.wait_for_pending_id_count(count: Number): {
        // javascript wrapper for 'gst_test_clock_wait_for_pending_id_count'
    }

Blocks until at least count clock notifications have been requested from test_clock. There is no timeout for this wait, see the main description of GstCheck.TestClock.

Parameters:

`test_clock` (GstCheck.TestClock) –

GstCheck.TestClock for which to await having enough pending clock

`count` (Number) –

the number of pending clock notifications to wait for

Since : 1.2

deprecated : use gst_test_clock_wait_for_multiple_pending_ids() instead.

#### GstCheck.TestClock.wait_for_pending_id_count

    def GstCheck.TestClock.wait_for_pending_id_count (self, count):
        #python wrapper for 'gst_test_clock_wait_for_pending_id_count'

Blocks until at least count clock notifications have been requested from test_clock. There is no timeout for this wait, see the main description of GstCheck.TestClock.

Parameters:

`test_clock` (GstCheck.TestClock) –

GstCheck.TestClock for which to await having enough pending clock

`count` (int) –

the number of pending clock notifications to wait for

Since : 1.2

deprecated : use gst_test_clock_wait_for_multiple_pending_ids() instead.

### Functions

#### gst_test_clock_id_list_get_latest_time

    GstClockTime
    gst_test_clock_id_list_get_latest_time (const GList * pending_list)

Finds the latest time inside the list.

MT safe.

Parameters:

`pending_list` ( [element-typeGst.ClockID][transfer: none][allow-none]) –

List of of pending GstClockID

Returns –
No description available

Since : 1.4

#### GstCheck.TestClock.prototype.id_list_get_latest_time

    function GstCheck.TestClock.prototype.id_list_get_latest_time(pending_list: [ Object ]): {
        // javascript wrapper for 'gst_test_clock_id_list_get_latest_time'
    }

Finds the latest time inside the list.

MT safe.

Parameters:

`pending_list` ([ Object ]) –

List of of pending Object

Returns (Number) –
No description available

Since : 1.4

#### GstCheck.TestClock.id_list_get_latest_time

    def GstCheck.TestClock.id_list_get_latest_time (pending_list):
        #python wrapper for 'gst_test_clock_id_list_get_latest_time'

Finds the latest time inside the list.

MT safe.

Parameters:

`pending_list` ([ object ]) –

List of of pending object

Returns (int) –
No description available

Since : 1.4

### Properties

#### clock-type

    “clock-type” GstClockType *

Flags : Read / Write

#### clock-type

    “clock-type” Gst.ClockType

Flags : Read / Write

#### clock_type

    “self.props.clock_type” Gst.ClockType

Flags : Read / Write

#### start-time

    “start-time” guint64

When a GstTestClock is constructed it will have a certain start time set. If the clock was created using gst_test_clock_new_with_start_time then this property contains the value of the start_time argument. If gst_test_clock_new was called the clock started at time zero, and thus this property contains the value 0.

Flags : Read / Write / Construct Only

#### start-time

    “start-time” Number

When a GstCheck.TestClock is constructed it will have a certain start time set. If the clock was created using GstCheck.TestClock.prototype.new_with_start_time then this property contains the value of the start_time argument. If GstCheck.TestClock.prototype.new was called the clock started at time zero, and thus this property contains the value 0.

Flags : Read / Write / Construct Only

#### start_time

    “self.props.start_time” int

When a GstCheck.TestClock is constructed it will have a certain start time set. If the clock was created using GstCheck.TestClock.new_with_start_time then this property contains the value of the start_time argument. If GstCheck.TestClock.new was called the clock started at time zero, and thus this property contains the value 0.

Flags : Read / Write / Construct Only

## Function Macros

### GST_TEST_CLOCK_CAST

    #define GST_TEST_CLOCK_CAST(obj) ((GstTestClock*)(obj))

The results of the search are