mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 12:11:13 +00:00
element: use flags for require/provide clock
Remove the _require/_provide_clock() methods and use element flags to mark elements instead of looking at the implementation of the vmethod.
This commit is contained in:
parent
d65773b5fa
commit
40616aeb63
4 changed files with 19 additions and 59 deletions
|
@ -1045,7 +1045,7 @@ gst_bin_add_func (GstBin * bin, GstElement * element)
|
||||||
{
|
{
|
||||||
gchar *elem_name;
|
gchar *elem_name;
|
||||||
GstIterator *it;
|
GstIterator *it;
|
||||||
gboolean is_sink, is_source;
|
gboolean is_sink, is_source, provides_clock;
|
||||||
GstMessage *clock_message = NULL, *async_message = NULL;
|
GstMessage *clock_message = NULL, *async_message = NULL;
|
||||||
GstStateChangeReturn ret;
|
GstStateChangeReturn ret;
|
||||||
|
|
||||||
|
@ -1060,6 +1060,8 @@ gst_bin_add_func (GstBin * bin, GstElement * element)
|
||||||
elem_name = g_strdup (GST_ELEMENT_NAME (element));
|
elem_name = g_strdup (GST_ELEMENT_NAME (element));
|
||||||
is_sink = GST_OBJECT_FLAG_IS_SET (element, GST_ELEMENT_FLAG_SINK);
|
is_sink = GST_OBJECT_FLAG_IS_SET (element, GST_ELEMENT_FLAG_SINK);
|
||||||
is_source = GST_OBJECT_FLAG_IS_SET (element, GST_ELEMENT_FLAG_SOURCE);
|
is_source = GST_OBJECT_FLAG_IS_SET (element, GST_ELEMENT_FLAG_SOURCE);
|
||||||
|
provides_clock =
|
||||||
|
GST_OBJECT_FLAG_IS_SET (element, GST_ELEMENT_FLAG_PROVIDE_CLOCK);
|
||||||
GST_OBJECT_UNLOCK (element);
|
GST_OBJECT_UNLOCK (element);
|
||||||
|
|
||||||
GST_OBJECT_LOCK (bin);
|
GST_OBJECT_LOCK (bin);
|
||||||
|
@ -1087,7 +1089,7 @@ gst_bin_add_func (GstBin * bin, GstElement * element)
|
||||||
elem_name);
|
elem_name);
|
||||||
GST_OBJECT_FLAG_SET (bin, GST_ELEMENT_FLAG_SOURCE);
|
GST_OBJECT_FLAG_SET (bin, GST_ELEMENT_FLAG_SOURCE);
|
||||||
}
|
}
|
||||||
if (gst_element_provides_clock (element)) {
|
if (provides_clock) {
|
||||||
GST_DEBUG_OBJECT (bin, "element \"%s\" can provide a clock", elem_name);
|
GST_DEBUG_OBJECT (bin, "element \"%s\" can provide a clock", elem_name);
|
||||||
clock_message =
|
clock_message =
|
||||||
gst_message_new_clock_provide (GST_OBJECT_CAST (element), NULL, TRUE);
|
gst_message_new_clock_provide (GST_OBJECT_CAST (element), NULL, TRUE);
|
||||||
|
|
|
@ -326,54 +326,6 @@ gst_element_release_request_pad (GstElement * element, GstPad * pad)
|
||||||
gst_element_remove_pad (element, pad);
|
gst_element_remove_pad (element, pad);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* gst_element_requires_clock:
|
|
||||||
* @element: a #GstElement to query
|
|
||||||
*
|
|
||||||
* Query if the element requires a clock.
|
|
||||||
*
|
|
||||||
* Returns: %TRUE if the element requires a clock
|
|
||||||
*
|
|
||||||
* MT safe.
|
|
||||||
*/
|
|
||||||
gboolean
|
|
||||||
gst_element_requires_clock (GstElement * element)
|
|
||||||
{
|
|
||||||
gboolean result;
|
|
||||||
|
|
||||||
g_return_val_if_fail (GST_IS_ELEMENT (element), FALSE);
|
|
||||||
|
|
||||||
result = (GST_ELEMENT_GET_CLASS (element)->set_clock != NULL);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* gst_element_provides_clock:
|
|
||||||
* @element: a #GstElement to query
|
|
||||||
*
|
|
||||||
* Query if the element provides a clock. A #GstClock provided by an
|
|
||||||
* element can be used as the global #GstClock for the pipeline.
|
|
||||||
* An element that can provide a clock is only required to do so in the PAUSED
|
|
||||||
* state, this means when it is fully negotiated and has allocated the resources
|
|
||||||
* to operate the clock.
|
|
||||||
*
|
|
||||||
* Returns: %TRUE if the element provides a clock
|
|
||||||
*
|
|
||||||
* MT safe.
|
|
||||||
*/
|
|
||||||
gboolean
|
|
||||||
gst_element_provides_clock (GstElement * element)
|
|
||||||
{
|
|
||||||
gboolean result;
|
|
||||||
|
|
||||||
g_return_val_if_fail (GST_IS_ELEMENT (element), FALSE);
|
|
||||||
|
|
||||||
result = (GST_ELEMENT_GET_CLASS (element)->provide_clock != NULL);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_element_provide_clock:
|
* gst_element_provide_clock:
|
||||||
* @element: a #GstElement to query
|
* @element: a #GstElement to query
|
||||||
|
|
|
@ -330,6 +330,8 @@ typedef enum
|
||||||
GST_ELEMENT_FLAG_LOCKED_STATE = (GST_OBJECT_FLAG_LAST << 1),
|
GST_ELEMENT_FLAG_LOCKED_STATE = (GST_OBJECT_FLAG_LAST << 1),
|
||||||
GST_ELEMENT_FLAG_SINK = (GST_OBJECT_FLAG_LAST << 2),
|
GST_ELEMENT_FLAG_SINK = (GST_OBJECT_FLAG_LAST << 2),
|
||||||
GST_ELEMENT_FLAG_SOURCE = (GST_OBJECT_FLAG_LAST << 3),
|
GST_ELEMENT_FLAG_SOURCE = (GST_OBJECT_FLAG_LAST << 3),
|
||||||
|
GST_ELEMENT_FLAG_PROVIDE_CLOCK = (GST_OBJECT_FLAG_LAST << 4),
|
||||||
|
GST_ELEMENT_FLAG_REQUIRE_CLOCK = (GST_OBJECT_FLAG_LAST << 5),
|
||||||
/* padding */
|
/* padding */
|
||||||
GST_ELEMENT_FLAG_LAST = (GST_OBJECT_FLAG_LAST << 16)
|
GST_ELEMENT_FLAG_LAST = (GST_OBJECT_FLAG_LAST << 16)
|
||||||
} GstElementFlags;
|
} GstElementFlags;
|
||||||
|
@ -725,8 +727,6 @@ GType gst_element_get_type (void);
|
||||||
#define gst_element_set_parent(elem,parent) gst_object_set_parent(GST_OBJECT_CAST(elem),parent)
|
#define gst_element_set_parent(elem,parent) gst_object_set_parent(GST_OBJECT_CAST(elem),parent)
|
||||||
|
|
||||||
/* clocking */
|
/* clocking */
|
||||||
gboolean gst_element_requires_clock (GstElement *element);
|
|
||||||
gboolean gst_element_provides_clock (GstElement *element);
|
|
||||||
GstClock* gst_element_provide_clock (GstElement *element);
|
GstClock* gst_element_provide_clock (GstElement *element);
|
||||||
GstClock* gst_element_get_clock (GstElement *element);
|
GstClock* gst_element_get_clock (GstElement *element);
|
||||||
gboolean gst_element_set_clock (GstElement *element, GstClock *clock);
|
gboolean gst_element_set_clock (GstElement *element, GstClock *clock);
|
||||||
|
|
|
@ -662,9 +662,14 @@ print_implementation_info (GstElement * element)
|
||||||
static void
|
static void
|
||||||
print_clocking_info (GstElement * element)
|
print_clocking_info (GstElement * element)
|
||||||
{
|
{
|
||||||
if (!gst_element_requires_clock (element) &&
|
gboolean requires_clock, provides_clock;
|
||||||
!(gst_element_provides_clock (element) &&
|
|
||||||
gst_element_get_clock (element))) {
|
requires_clock =
|
||||||
|
GST_OBJECT_FLAG_IS_SET (element, GST_ELEMENT_FLAG_REQUIRE_CLOCK);
|
||||||
|
provides_clock =
|
||||||
|
GST_OBJECT_FLAG_IS_SET (element, GST_ELEMENT_FLAG_PROVIDE_CLOCK);
|
||||||
|
|
||||||
|
if (!requires_clock && !provides_clock) {
|
||||||
n_print ("\n");
|
n_print ("\n");
|
||||||
n_print ("Element has no clocking capabilities.");
|
n_print ("Element has no clocking capabilities.");
|
||||||
return;
|
return;
|
||||||
|
@ -672,17 +677,18 @@ print_clocking_info (GstElement * element)
|
||||||
|
|
||||||
n_print ("\n");
|
n_print ("\n");
|
||||||
n_print ("Clocking Interaction:\n");
|
n_print ("Clocking Interaction:\n");
|
||||||
if (gst_element_requires_clock (element)) {
|
if (requires_clock) {
|
||||||
n_print (" element requires a clock\n");
|
n_print (" element requires a clock\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gst_element_provides_clock (element)) {
|
if (provides_clock) {
|
||||||
GstClock *clock;
|
GstClock *clock;
|
||||||
|
|
||||||
clock = gst_element_get_clock (element);
|
clock = gst_element_get_clock (element);
|
||||||
if (clock)
|
if (clock) {
|
||||||
n_print (" element provides a clock: %s\n", GST_OBJECT_NAME (clock));
|
n_print (" element provides a clock: %s\n", GST_OBJECT_NAME (clock));
|
||||||
else
|
gst_object_unref (clock);
|
||||||
|
} else
|
||||||
n_print (" element is supposed to provide a clock but returned NULL\n");
|
n_print (" element is supposed to provide a clock but returned NULL\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue