return clock;
}
+static void
+gst_test_clock_set_time_unlocked (GstTestClock * test_clock,
+ GstClockTime new_time)
+{
+ GstTestClockPrivate *priv = GST_TEST_CLOCK_GET_PRIVATE (test_clock);
+
+ g_assert_cmpuint (new_time, >=, priv->internal_time);
+
+ priv->internal_time = new_time;
+ GST_CAT_DEBUG_OBJECT (GST_CAT_TEST_CLOCK, test_clock,
+ "clock set to %" GST_TIME_FORMAT, GST_TIME_ARGS (new_time));
+}
+
/**
* gst_test_clock_set_time:
* @test_clock: a #GstTestClock of which to set the time
void
gst_test_clock_set_time (GstTestClock * test_clock, GstClockTime new_time)
{
- GstTestClockPrivate *priv;
-
g_return_if_fail (GST_IS_TEST_CLOCK (test_clock));
- priv = GST_TEST_CLOCK_GET_PRIVATE (test_clock);
-
g_assert_cmpuint (new_time, !=, GST_CLOCK_TIME_NONE);
GST_OBJECT_LOCK (test_clock);
- g_assert_cmpuint (new_time, >=, priv->internal_time);
-
- priv->internal_time = new_time;
- GST_CAT_DEBUG_OBJECT (GST_CAT_TEST_CLOCK, test_clock,
- "clock set to %" GST_TIME_FORMAT, GST_TIME_ARGS (new_time));
+ gst_test_clock_set_time_unlocked (test_clock, new_time);
GST_OBJECT_UNLOCK (test_clock);
}
return result;
}
+static void
+gst_test_clock_wait_for_next_pending_id_unlocked (GstTestClock * test_clock,
+ GstClockID * pending_id)
+{
+ GstTestClockPrivate *priv = GST_TEST_CLOCK_GET_PRIVATE (test_clock);
+
+ while (priv->entry_contexts == NULL)
+ g_cond_wait (&priv->entry_added_cond, GST_OBJECT_GET_LOCK (test_clock));
+
+ if (!gst_test_clock_peek_next_pending_id_unlocked (test_clock, pending_id))
+ g_assert_not_reached ();
+}
+
/**
* gst_test_clock_wait_for_next_pending_id:
* @test_clock: #GstTestClock for which to get the pending clock notification
gst_test_clock_wait_for_next_pending_id (GstTestClock * test_clock,
GstClockID * pending_id)
{
- GstTestClockPrivate *priv;
-
g_return_if_fail (GST_IS_TEST_CLOCK (test_clock));
- priv = GST_TEST_CLOCK_GET_PRIVATE (test_clock);
-
GST_OBJECT_LOCK (test_clock);
- while (priv->entry_contexts == NULL)
- g_cond_wait (&priv->entry_added_cond, GST_OBJECT_GET_LOCK (test_clock));
-
- if (!gst_test_clock_peek_next_pending_id_unlocked (test_clock, pending_id))
- g_assert_not_reached ();
+ gst_test_clock_wait_for_next_pending_id_unlocked (test_clock, pending_id);
GST_OBJECT_UNLOCK (test_clock);
}
}
#endif
+static GstClockID
+gst_test_clock_process_next_clock_id_unlocked (GstTestClock * test_clock)
+{
+ GstTestClockPrivate *priv;
+ GstClockID result = NULL;
+ GstClockEntryContext *ctx = NULL;
+ GList *cur;
+
+ priv = GST_TEST_CLOCK_GET_PRIVATE (test_clock);
+
+ for (cur = priv->entry_contexts; cur != NULL && result == NULL;
+ cur = cur->next) {
+ ctx = cur->data;
+
+ if (priv->internal_time >= GST_CLOCK_ENTRY_TIME (ctx->clock_entry))
+ result = gst_clock_id_ref (ctx->clock_entry);
+ }
+
+ if (result != NULL)
+ process_entry_context_unlocked (test_clock, ctx);
+
+ return result;
+}
+
/**
* gst_test_clock_process_next_clock_id:
* @test_clock: a #GstTestClock for which to retrieve the next pending clock
GstClockID
gst_test_clock_process_next_clock_id (GstTestClock * test_clock)
{
- GstTestClockPrivate *priv;
- GstClockID result = NULL;
- GstClockEntryContext *ctx = NULL;
- GList *cur;
+ GstClockID result;
g_return_val_if_fail (GST_IS_TEST_CLOCK (test_clock), NULL);
- priv = GST_TEST_CLOCK_GET_PRIVATE (test_clock);
-
GST_OBJECT_LOCK (test_clock);
- for (cur = priv->entry_contexts; cur != NULL && result == NULL;
- cur = cur->next) {
- ctx = cur->data;
-
- if (priv->internal_time >= GST_CLOCK_ENTRY_TIME (ctx->clock_entry))
- result = gst_clock_id_ref (ctx->clock_entry);
- }
-
- if (result != NULL)
- process_entry_context_unlocked (test_clock, ctx);
+ result = gst_test_clock_process_next_clock_id_unlocked (test_clock);
GST_OBJECT_UNLOCK (test_clock);
GstClockTime now;
gboolean result;
- gst_test_clock_wait_for_next_pending_id (test_clock, &pending);
- now = gst_clock_get_time (GST_CLOCK (test_clock));
+ g_return_val_if_fail (GST_IS_TEST_CLOCK (test_clock), FALSE);
+
+ GST_OBJECT_LOCK (test_clock);
+
+ gst_test_clock_wait_for_next_pending_id_unlocked (test_clock, &pending);
+ now = test_clock->priv->internal_time;
if (gst_clock_id_get_time (pending) > now)
- gst_test_clock_set_time (test_clock, gst_clock_id_get_time (pending));
- res = gst_test_clock_process_next_clock_id (test_clock);
- if (G_LIKELY (res == pending)) {
- GST_CAT_DEBUG_OBJECT (GST_CAT_TEST_CLOCK, test_clock,
- "cranked to time %" GST_TIME_FORMAT,
- GST_TIME_ARGS (gst_clock_get_time (GST_CLOCK (test_clock))));
- result = TRUE;
- } else {
- GST_CAT_WARNING_OBJECT (GST_CAT_TEST_CLOCK, test_clock,
- "testclock next id != pending (%p != %p)", res, pending);
- result = FALSE;
- }
+ gst_test_clock_set_time_unlocked (test_clock,
+ gst_clock_id_get_time (pending));
+ res = gst_test_clock_process_next_clock_id_unlocked (test_clock);
+ g_assert (res == pending);
+ GST_CAT_DEBUG_OBJECT (GST_CAT_TEST_CLOCK, test_clock,
+ "cranked to time %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (test_clock->priv->internal_time));
+ result = TRUE;
+
+ GST_OBJECT_UNLOCK (test_clock);
if (G_LIKELY (res != NULL))
gst_clock_id_unref (res);