• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* GstTestClock - A deterministic clock for GStreamer unit tests
2  *
3  * Copyright (C) 2008 Ole André Vadla Ravnås <ole.andre.ravnas@tandberg.com>
4  * Copyright (C) 2012 Sebastian Rasmussen <sebastian.rasmussen@axis.com>
5  * Copyright (C) 2012 Havard Graff <havard@pexip.com>
6  * Copyright (C) 2013 Haakon Sporsheim <haakon@pexip.com>
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Library General Public
10  * License as published by the Free Software Foundation; either
11  * version 2 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Library General Public License for more details.
17  *
18  * You should have received a copy of the GNU Library General Public
19  * License along with this library; if not, write to the
20  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21  * Boston, MA 02111-1307, USA.
22  */
23 
24 #ifndef __GST_TEST_CLOCK_H__
25 #define __GST_TEST_CLOCK_H__
26 
27 #include <gst/gst.h>
28 #include <gst/check/check-prelude.h>
29 
30 G_BEGIN_DECLS
31 
32 #define GST_TYPE_TEST_CLOCK (gst_test_clock_get_type ())
33 #define GST_TEST_CLOCK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj),\
34     GST_TYPE_TEST_CLOCK, GstTestClock))
35 #define GST_IS_TEST_CLOCK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj),\
36     GST_TYPE_TEST_CLOCK))
37 #define GST_TEST_CLOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass),\
38     GST_TYPE_TEST_CLOCK, GstTestClockClass))
39 #define GST_IS_TEST_CLOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE (\
40     (klass), GST_TYPE_TEST_CLOCK))
41 #define GST_TEST_CLOCK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS (\
42     (obj), GST_TYPE_TEST_CLOCK, GstTestClockClass))
43 #define GST_TEST_CLOCK_CAST(obj) ((GstTestClock*)(obj))
44 
45 typedef struct _GstTestClock GstTestClock;
46 typedef struct _GstTestClockClass GstTestClockClass;
47 typedef struct _GstTestClockPrivate GstTestClockPrivate;
48 
49 /**
50  * GstTestClock:
51  *
52  * A #GstTestClock structure which is based on a #GstClock along with some
53  * private data.
54  *
55  * Since: 1.2
56  */
57 struct _GstTestClock
58 {
59   GstClock parent;
60 
61   /*< private >*/
62   GstTestClockPrivate *priv;
63 };
64 
65 /**
66  * GstTestClockClass:
67  * @parent_class: the parent class structure
68  *
69  * The class of a #GstTestClock, which has no virtual methods to override.
70  *
71  * Since: 1.2
72  */
73 struct _GstTestClockClass
74 {
75   GstClockClass parent_class;
76 };
77 
78 GST_CHECK_API
79 GType         gst_test_clock_get_type (void);
80 
81 GST_CHECK_API
82 GstClock *    gst_test_clock_new (void);
83 
84 GST_CHECK_API
85 GstClock *    gst_test_clock_new_with_start_time (GstClockTime start_time);
86 
87 GST_CHECK_API
88 void          gst_test_clock_set_time (GstTestClock * test_clock,
89                                       GstClockTime   new_time);
90 
91 GST_CHECK_API
92 void          gst_test_clock_advance_time (GstTestClock *   test_clock,
93                                           GstClockTimeDiff delta);
94 
95 GST_CHECK_API
96 guint         gst_test_clock_peek_id_count (GstTestClock * test_clock);
97 
98 GST_CHECK_API
99 gboolean      gst_test_clock_has_id (GstTestClock * test_clock, GstClockID id);
100 
101 GST_CHECK_API
102 gboolean      gst_test_clock_peek_next_pending_id (GstTestClock * test_clock,
103                                                    GstClockID   * pending_id);
104 
105 GST_CHECK_API
106 void          gst_test_clock_wait_for_next_pending_id (GstTestClock * test_clock,
107                                                        GstClockID   * pending_id);
108 
109 GST_CHECK_DEPRECATED_FOR(gst_test_clock_wait_for_multiple_pending_ids)
110 void          gst_test_clock_wait_for_pending_id_count (GstTestClock * test_clock,
111                                                         guint          count);
112 
113 GST_CHECK_API
114 GstClockID    gst_test_clock_process_next_clock_id (GstTestClock * test_clock);
115 
116 GST_CHECK_API
117 GstClockTime  gst_test_clock_get_next_entry_time   (GstTestClock * test_clock);
118 
119 GST_CHECK_API
120 void          gst_test_clock_wait_for_multiple_pending_ids (GstTestClock * test_clock,
121                                                             guint          count,
122                                                             GList       ** pending_list);
123 
124 GST_CHECK_API
125 gboolean      gst_test_clock_timed_wait_for_multiple_pending_ids (GstTestClock * test_clock,
126                                                                   guint          count,
127                                                                   guint          timeout_ms,
128                                                                   GList       ** pending_list);
129 
130 GST_CHECK_API
131 gboolean      gst_test_clock_process_id (GstTestClock * test_clock,
132                                          GstClockID pending_id);
133 
134 GST_CHECK_API
135 guint         gst_test_clock_process_id_list (GstTestClock * test_clock,
136                                               const GList  * pending_list);
137 
138 GST_CHECK_API
139 GstClockTime  gst_test_clock_id_list_get_latest_time (const GList * pending_list);
140 
141 GST_CHECK_API
142 gboolean      gst_test_clock_crank (GstTestClock * test_clock);
143 
144 G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstTestClock, gst_object_unref)
145 
146 G_END_DECLS
147 
148 #endif /* __GST_TEST_CLOCK_H__ */
149