mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-11 01:45:33 +00:00
testclock: replace newly-added GstTestClockIDList structure with a simple GList
Keep it simple. Likely also makes things easier for bindings, and efficiency clearly has not been a consideration given how the existing code handled these lists.
This commit is contained in:
parent
2e4900ba94
commit
ed9d0381b2
4 changed files with 37 additions and 79 deletions
|
@ -107,8 +107,7 @@ LIBGSTCHECK_EXPORTED_FUNCS = \
|
||||||
gst_test_clock_get_next_entry_time \
|
gst_test_clock_get_next_entry_time \
|
||||||
gst_test_clock_wait_for_multiple_pending_ids \
|
gst_test_clock_wait_for_multiple_pending_ids \
|
||||||
gst_test_clock_process_id_list \
|
gst_test_clock_process_id_list \
|
||||||
gst_test_clock_id_list_get_latest_time \
|
gst_test_clock_id_list_get_latest_time
|
||||||
gst_test_clock_id_list_free
|
|
||||||
|
|
||||||
|
|
||||||
LIBGSTCHECK_EXPORTED_SYMBOLS = \
|
LIBGSTCHECK_EXPORTED_SYMBOLS = \
|
||||||
|
|
|
@ -624,24 +624,20 @@ process_entry_context_unlocked (GstTestClock * test_clock,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstTestClockIDList *
|
static GList *
|
||||||
gst_test_clock_get_pending_id_list_unlocked (GstTestClock * test_clock)
|
gst_test_clock_get_pending_id_list_unlocked (GstTestClock * test_clock)
|
||||||
{
|
{
|
||||||
GstTestClockPrivate *priv = GST_TEST_CLOCK_GET_PRIVATE (test_clock);
|
GstTestClockPrivate *priv = GST_TEST_CLOCK_GET_PRIVATE (test_clock);
|
||||||
GstTestClockIDList *result = g_new0 (GstTestClockIDList, 1);
|
GQueue queue = G_QUEUE_INIT;
|
||||||
|
GList *cur;
|
||||||
|
|
||||||
if (priv->entry_contexts != NULL) {
|
for (cur = priv->entry_contexts; cur != NULL; cur = cur->next) {
|
||||||
GList *cur;
|
GstClockEntryContext *ctx = cur->data;
|
||||||
for (cur = priv->entry_contexts; cur != NULL; cur = cur->next) {
|
|
||||||
GstClockEntryContext *ctx = cur->data;
|
|
||||||
|
|
||||||
result->cur =
|
g_queue_push_tail (&queue, gst_clock_id_ref (ctx->clock_entry));
|
||||||
g_list_append (result->cur, gst_clock_id_ref (ctx->clock_entry));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
result->length = g_list_length (result->cur);
|
|
||||||
|
|
||||||
return result;
|
return queue.head;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -987,7 +983,9 @@ gst_test_clock_get_next_entry_time (GstTestClock * test_clock)
|
||||||
* gst_test_clock_wait_for_multiple_pending_ids:
|
* gst_test_clock_wait_for_multiple_pending_ids:
|
||||||
* @test_clock: #GstTestClock for which to await having enough pending clock
|
* @test_clock: #GstTestClock for which to await having enough pending clock
|
||||||
* @count: the number of pending clock notifications to wait for
|
* @count: the number of pending clock notifications to wait for
|
||||||
* @pending_list: A #GstTestClockIDList with pending #GstClockIDs
|
* @pending_list: (out) (element-type Gst.ClockID) (transfer full) (allow-none): Address
|
||||||
|
* of a #GList pointer variable to store the list of pending #GstClockIDs
|
||||||
|
* that expired, or NULL
|
||||||
*
|
*
|
||||||
* Blocks until at least @count clock notifications have been requested from
|
* 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
|
* @test_clock. There is no timeout for this wait, see the main description of
|
||||||
|
@ -999,7 +997,7 @@ gst_test_clock_get_next_entry_time (GstTestClock * test_clock)
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
gst_test_clock_wait_for_multiple_pending_ids (GstTestClock * test_clock,
|
gst_test_clock_wait_for_multiple_pending_ids (GstTestClock * test_clock,
|
||||||
guint count, GstTestClockIDList ** pending_list)
|
guint count, GList ** pending_list)
|
||||||
{
|
{
|
||||||
GstTestClockPrivate *priv;
|
GstTestClockPrivate *priv;
|
||||||
|
|
||||||
|
@ -1020,9 +1018,10 @@ gst_test_clock_wait_for_multiple_pending_ids (GstTestClock * test_clock,
|
||||||
/**
|
/**
|
||||||
* gst_test_clock_process_id_list:
|
* gst_test_clock_process_id_list:
|
||||||
* @test_clock: #GstTestClock for which to process the pending IDs
|
* @test_clock: #GstTestClock for which to process the pending IDs
|
||||||
* @pending_list: A #GstTestClockIDList with pending #GstClockIDs
|
* @pending_list: (element-type Gst.ClockID) (transfer none) (allow-none): List
|
||||||
|
* of pending #GstClockIDs
|
||||||
*
|
*
|
||||||
* Processes and releases the pending IDs in #GstTestClockIDList
|
* Processes and releases the pending IDs in the list.
|
||||||
*
|
*
|
||||||
* MT safe.
|
* MT safe.
|
||||||
*
|
*
|
||||||
|
@ -1030,16 +1029,16 @@ gst_test_clock_wait_for_multiple_pending_ids (GstTestClock * test_clock,
|
||||||
*/
|
*/
|
||||||
guint
|
guint
|
||||||
gst_test_clock_process_id_list (GstTestClock * test_clock,
|
gst_test_clock_process_id_list (GstTestClock * test_clock,
|
||||||
GstTestClockIDList * pending_list)
|
const GList * pending_list)
|
||||||
{
|
{
|
||||||
GList *cur;
|
const GList *cur;
|
||||||
guint result = 0;
|
guint result = 0;
|
||||||
|
|
||||||
g_return_val_if_fail (GST_IS_TEST_CLOCK (test_clock), 0);
|
g_return_val_if_fail (GST_IS_TEST_CLOCK (test_clock), 0);
|
||||||
|
|
||||||
GST_OBJECT_LOCK (test_clock);
|
GST_OBJECT_LOCK (test_clock);
|
||||||
|
|
||||||
for (cur = pending_list->cur; cur != NULL; cur = cur->next) {
|
for (cur = pending_list; cur != NULL; cur = cur->next) {
|
||||||
GstClockID pending_id = cur->data;
|
GstClockID pending_id = cur->data;
|
||||||
GstClockEntryContext *ctx =
|
GstClockEntryContext *ctx =
|
||||||
gst_test_clock_lookup_entry_context (test_clock, pending_id);
|
gst_test_clock_lookup_entry_context (test_clock, pending_id);
|
||||||
|
@ -1055,21 +1054,22 @@ gst_test_clock_process_id_list (GstTestClock * test_clock,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_test_clock_id_list_get_latest_time:
|
* gst_test_clock_id_list_get_latest_time:
|
||||||
* @pending_list: A #GstTestClockIDList with pending #GstClockIDs
|
* @pending_list: (element-type Gst.ClockID) (transfer none) (allow-none): List
|
||||||
|
* of of pending #GstClockIDs
|
||||||
*
|
*
|
||||||
* Finds the latest time inside the #GstTestClockIDList
|
* Finds the latest time inside the list.
|
||||||
*
|
*
|
||||||
* MT safe.
|
* MT safe.
|
||||||
*
|
*
|
||||||
* Since: 1.4
|
* Since: 1.4
|
||||||
*/
|
*/
|
||||||
GstClockTime
|
GstClockTime
|
||||||
gst_test_clock_id_list_get_latest_time (GstTestClockIDList * pending_list)
|
gst_test_clock_id_list_get_latest_time (const GList * pending_list)
|
||||||
{
|
{
|
||||||
GList *cur;
|
const GList *cur;
|
||||||
GstClockTime result = 0;
|
GstClockTime result = 0;
|
||||||
|
|
||||||
for (cur = pending_list->cur; cur != NULL; cur = cur->next) {
|
for (cur = pending_list; cur != NULL; cur = cur->next) {
|
||||||
GstClockID *pending_id = cur->data;
|
GstClockID *pending_id = cur->data;
|
||||||
GstClockTime time = gst_clock_id_get_time (pending_id);
|
GstClockTime time = gst_clock_id_get_time (pending_id);
|
||||||
if (time > result)
|
if (time > result)
|
||||||
|
@ -1078,27 +1078,3 @@ gst_test_clock_id_list_get_latest_time (GstTestClockIDList * pending_list)
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* gst_test_clock_id_list_free:
|
|
||||||
* @pending_list: A #GstTestClockIDList with pending #GstClockIDs
|
|
||||||
*
|
|
||||||
* Free the supplied #GstTestClockIDList
|
|
||||||
*
|
|
||||||
* MT safe.
|
|
||||||
*
|
|
||||||
* Since: 1.4
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
gst_test_clock_id_list_free (GstTestClockIDList * pending_list)
|
|
||||||
{
|
|
||||||
GList *cur;
|
|
||||||
|
|
||||||
for (cur = pending_list->cur; cur != NULL; cur = cur->next) {
|
|
||||||
GstClockID *pending_id = cur->data;
|
|
||||||
gst_clock_id_unref (pending_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_list_free (pending_list->cur);
|
|
||||||
g_free (pending_list);
|
|
||||||
}
|
|
||||||
|
|
|
@ -45,8 +45,6 @@ typedef struct _GstTestClock GstTestClock;
|
||||||
typedef struct _GstTestClockClass GstTestClockClass;
|
typedef struct _GstTestClockClass GstTestClockClass;
|
||||||
typedef struct _GstTestClockPrivate GstTestClockPrivate;
|
typedef struct _GstTestClockPrivate GstTestClockPrivate;
|
||||||
|
|
||||||
typedef struct _GstTestClockIDList GstTestClockIDList;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GstTestClock:
|
* GstTestClock:
|
||||||
*
|
*
|
||||||
|
@ -76,21 +74,6 @@ struct _GstTestClockClass
|
||||||
GstClockClass parent_class;
|
GstClockClass parent_class;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* GstTestClockIDList:
|
|
||||||
* @cur: A #GList with all pending #GstClockID
|
|
||||||
* @length: A #guint with the length of the list
|
|
||||||
*
|
|
||||||
* A #GstTestClockIDList structure, which is returned when waiting for multiple IDs
|
|
||||||
*
|
|
||||||
* Since: 1.4
|
|
||||||
*/
|
|
||||||
struct _GstTestClockIDList
|
|
||||||
{
|
|
||||||
GList * cur;
|
|
||||||
guint length;
|
|
||||||
};
|
|
||||||
|
|
||||||
GType gst_test_clock_get_type (void);
|
GType gst_test_clock_get_type (void);
|
||||||
|
|
||||||
GstClock * gst_test_clock_new (void);
|
GstClock * gst_test_clock_new (void);
|
||||||
|
@ -122,16 +105,14 @@ GstClockID gst_test_clock_process_next_clock_id (GstTestClock * test_clock);
|
||||||
|
|
||||||
GstClockTime gst_test_clock_get_next_entry_time (GstTestClock * test_clock);
|
GstClockTime gst_test_clock_get_next_entry_time (GstTestClock * test_clock);
|
||||||
|
|
||||||
void gst_test_clock_wait_for_multiple_pending_ids (GstTestClock * test_clock,
|
void gst_test_clock_wait_for_multiple_pending_ids (GstTestClock * test_clock,
|
||||||
guint count,
|
guint count,
|
||||||
GstTestClockIDList ** pending_list);
|
GList ** pending_list);
|
||||||
|
|
||||||
guint gst_test_clock_process_id_list (GstTestClock * test_clock,
|
guint gst_test_clock_process_id_list (GstTestClock * test_clock,
|
||||||
GstTestClockIDList * pending_list);
|
const GList * pending_list);
|
||||||
|
|
||||||
GstClockTime gst_test_clock_id_list_get_latest_time (GstTestClockIDList * list);
|
GstClockTime gst_test_clock_id_list_get_latest_time (const GList * pending_list);
|
||||||
|
|
||||||
void gst_test_clock_id_list_free (GstTestClockIDList * list);
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
|
|
@ -690,6 +690,7 @@ GST_START_TEST (test_single_shot_sync_simultaneous_no_timeout)
|
||||||
|
|
||||||
gst_object_unref (clock);
|
gst_object_unref (clock);
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_END_TEST;
|
GST_END_TEST;
|
||||||
|
|
||||||
GST_START_TEST (test_processing_multiple_ids)
|
GST_START_TEST (test_processing_multiple_ids)
|
||||||
|
@ -702,7 +703,7 @@ GST_START_TEST (test_processing_multiple_ids)
|
||||||
SyncClockWaitContext context_b;
|
SyncClockWaitContext context_b;
|
||||||
GThread *worker_thread_a;
|
GThread *worker_thread_a;
|
||||||
GThread *worker_thread_b;
|
GThread *worker_thread_b;
|
||||||
GstTestClockIDList * pending_list;
|
GList *pending_list = NULL;
|
||||||
|
|
||||||
clock = gst_test_clock_new_with_start_time (GST_SECOND);
|
clock = gst_test_clock_new_with_start_time (GST_SECOND);
|
||||||
test_clock = GST_TEST_CLOCK (clock);
|
test_clock = GST_TEST_CLOCK (clock);
|
||||||
|
@ -727,10 +728,10 @@ GST_START_TEST (test_processing_multiple_ids)
|
||||||
gst_test_clock_wait_for_multiple_pending_ids (test_clock, 2, &pending_list);
|
gst_test_clock_wait_for_multiple_pending_ids (test_clock, 2, &pending_list);
|
||||||
|
|
||||||
/* assert they are correct */
|
/* assert they are correct */
|
||||||
assert_pending_id (pending_list->cur->data, clock_id_a, GST_CLOCK_ENTRY_SINGLE,
|
assert_pending_id (pending_list->data, clock_id_a, GST_CLOCK_ENTRY_SINGLE,
|
||||||
5 * GST_SECOND);
|
5 * GST_SECOND);
|
||||||
assert_pending_id (pending_list->cur->next->data, clock_id_b, GST_CLOCK_ENTRY_SINGLE,
|
assert_pending_id (pending_list->next->data, clock_id_b,
|
||||||
6 * GST_SECOND);
|
GST_CLOCK_ENTRY_SINGLE, 6 * GST_SECOND);
|
||||||
|
|
||||||
/* verify we are waiting for 6 seconds as the latest time */
|
/* verify we are waiting for 6 seconds as the latest time */
|
||||||
fail_unless_equals_int64 (6 * GST_SECOND,
|
fail_unless_equals_int64 (6 * GST_SECOND,
|
||||||
|
@ -738,7 +739,7 @@ GST_START_TEST (test_processing_multiple_ids)
|
||||||
|
|
||||||
/* process both ID's at the same time */
|
/* process both ID's at the same time */
|
||||||
gst_test_clock_process_id_list (test_clock, pending_list);
|
gst_test_clock_process_id_list (test_clock, pending_list);
|
||||||
gst_test_clock_id_list_free (pending_list);
|
g_list_free_full (pending_list, (GDestroyNotify) gst_clock_id_unref);
|
||||||
|
|
||||||
g_thread_join (worker_thread_a);
|
g_thread_join (worker_thread_a);
|
||||||
g_thread_join (worker_thread_b);
|
g_thread_join (worker_thread_b);
|
||||||
|
@ -754,6 +755,7 @@ GST_START_TEST (test_processing_multiple_ids)
|
||||||
|
|
||||||
gst_object_unref (clock);
|
gst_object_unref (clock);
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_END_TEST;
|
GST_END_TEST;
|
||||||
|
|
||||||
GST_START_TEST (test_single_shot_async_past)
|
GST_START_TEST (test_single_shot_async_past)
|
||||||
|
|
Loading…
Reference in a new issue