From dbc21e01741d13d96548f42e3bd648577f69295d Mon Sep 17 00:00:00 2001 From: Thijs Vermeir Date: Wed, 23 Jun 2010 22:00:04 +0200 Subject: [PATCH] gstutils: replace gst_element_factory_can_{sink,src}_caps Add new functions to clarify how the caps are compared to the template caps of the element factory. Improve the docs to point out the difference. Deprecate: gst_element_factory_can_{src|sink}_caps API: add gst_element_factory_can_{src|sink}_{any|all}_capps https://bugzilla.gnome.org/show_bug.cgi?id=402141 --- gst/gstutils.c | 155 ++++++++++++++++++++++++++++++++++-------- gst/gstutils.h | 10 ++- win32/common/libgstreamer.def | 4 ++ 3 files changed, 138 insertions(+), 31 deletions(-) diff --git a/gst/gstutils.c b/gst/gstutils.c index 3e8ef11..f517d55 100644 --- a/gst/gstutils.c +++ b/gst/gstutils.c @@ -1271,18 +1271,9 @@ gst_element_state_change_return_get_name (GstStateChangeReturn state_ret) } -/** - * gst_element_factory_can_src_caps: - * @factory: factory to query - * @caps: the caps to check - * - * Checks if the factory can source the given capability. - * - * Returns: true if it can src the capabilities - */ -gboolean -gst_element_factory_can_src_caps (GstElementFactory * factory, - const GstCaps * caps) +static gboolean +gst_element_factory_can_accept_all_caps_in_direction (GstElementFactory * + factory, const GstCaps * caps, GstPadDirection direction) { GList *templates; @@ -1294,9 +1285,9 @@ gst_element_factory_can_src_caps (GstElementFactory * factory, while (templates) { GstStaticPadTemplate *template = (GstStaticPadTemplate *) templates->data; - if (template->direction == GST_PAD_SRC) { - if (gst_caps_is_always_compatible (gst_static_caps_get - (&template->static_caps), caps)) + if (template->direction == direction) { + if (gst_caps_is_always_compatible (caps, + gst_static_caps_get (&template->static_caps))) return TRUE; } templates = g_list_next (templates); @@ -1305,18 +1296,9 @@ gst_element_factory_can_src_caps (GstElementFactory * factory, return FALSE; } -/** - * gst_element_factory_can_sink_caps: - * @factory: factory to query - * @caps: the caps to check - * - * Checks if the factory can sink the given capability. - * - * Returns: true if it can sink the capabilities - */ -gboolean -gst_element_factory_can_sink_caps (GstElementFactory * factory, - const GstCaps * caps) +static gboolean +gst_element_factory_can_accept_any_caps_in_direction (GstElementFactory * + factory, const GstCaps * caps, GstPadDirection direction) { GList *templates; @@ -1328,8 +1310,8 @@ gst_element_factory_can_sink_caps (GstElementFactory * factory, while (templates) { GstStaticPadTemplate *template = (GstStaticPadTemplate *) templates->data; - if (template->direction == GST_PAD_SINK) { - if (gst_caps_is_always_compatible (caps, + if (template->direction == direction) { + if (gst_caps_can_intersect (caps, gst_static_caps_get (&template->static_caps))) return TRUE; } @@ -1339,6 +1321,121 @@ gst_element_factory_can_sink_caps (GstElementFactory * factory, return FALSE; } +#ifndef GST_DISABLE_DEPRECATED +/** + * gst_element_factory_can_src_caps: + * @factory: factory to query + * @caps: the caps to check + * + * Checks if the factory can source the given capability. + * + * Returns: %TRUE if it can src the capabilities + * + * Deprecated: use gst_element_factory_can_src_all_caps() instead. + */ +gboolean +gst_element_factory_can_src_caps (GstElementFactory * factory, + const GstCaps * caps) +{ + return gst_element_factory_can_accept_all_caps_in_direction (factory, caps, + GST_PAD_SRC); +} + +/** + * gst_element_factory_can_sink_caps: + * @factory: factory to query + * @caps: the caps to check + * + * Checks if the factory can sink the given capability. + * + * Returns: %TRUE if it can sink the capabilities + * + * Deprecated: use gst_element_factory_can_sink_all_caps() instead. + */ +gboolean +gst_element_factory_can_sink_caps (GstElementFactory * factory, + const GstCaps * caps) +{ + return gst_element_factory_can_accept_all_caps_in_direction (factory, caps, + GST_PAD_SINK); +} +#endif /* GST_DISABLE_DEPRECATED */ + +/** + * gst_element_factory_can_sink_all_caps: + * @factory: factory to query + * @caps: the caps to check + * + * Checks if the factory can sink all possible capabilities. + * + * Returns: %TRUE if the caps are fully compatible. + * + * Since: 0.10.33 + */ +gboolean +gst_element_factory_can_sink_all_caps (GstElementFactory * factory, + const GstCaps * caps) +{ + return gst_element_factory_can_accept_all_caps_in_direction (factory, caps, + GST_PAD_SINK); +} + +/** + * gst_element_factory_can_src_all_caps: + * @factory: factory to query + * @caps: the caps to check + * + * Checks if the factory can src all possible capabilities. + * + * Returns: %TRUE if the caps are fully compatible. + * + * Since: 0.10.33 + */ +gboolean +gst_element_factory_can_src_all_caps (GstElementFactory * factory, + const GstCaps * caps) +{ + return gst_element_factory_can_accept_all_caps_in_direction (factory, caps, + GST_PAD_SRC); +} + +/** + * gst_element_factory_can_sink_any_caps: + * @factory: factory to query + * @caps: the caps to check + * + * Checks if the factory can sink any possible capability. + * + * Returns: %TRUE if the caps have a common subset. + * + * Since: 0.10.33 + */ +gboolean +gst_element_factory_can_sink_any_caps (GstElementFactory * factory, + const GstCaps * caps) +{ + return gst_element_factory_can_accept_any_caps_in_direction (factory, caps, + GST_PAD_SINK); +} + +/** + * gst_element_factory_can_src_any_caps: + * @factory: factory to query + * @caps: the caps to check + * + * Checks if the factory can src any possible capability. + * + * Returns: %TRUE if the caps have a common subset. + * + * Since: 0.10.33 + */ +gboolean +gst_element_factory_can_src_any_caps (GstElementFactory * factory, + const GstCaps * caps) +{ + return gst_element_factory_can_accept_any_caps_in_direction (factory, caps, + GST_PAD_SRC); +} /* if return val is true, *direct_child is a caller-owned ref on the direct * child of ancestor that is part of object's ancestry */ diff --git a/gst/gstutils.h b/gst/gstutils.h index 1c28f1e..dd93658 100644 --- a/gst/gstutils.h +++ b/gst/gstutils.h @@ -1034,8 +1034,14 @@ gboolean gst_element_seek_simple (GstElement *element, gint64 seek_pos); /* util elementfactory functions */ -gboolean gst_element_factory_can_src_caps(GstElementFactory *factory, const GstCaps *caps); -gboolean gst_element_factory_can_sink_caps(GstElementFactory *factory, const GstCaps *caps); +#ifndef GST_DISABLE_DEPRECATED +gboolean gst_element_factory_can_src_caps (GstElementFactory *factory, const GstCaps *caps); +gboolean gst_element_factory_can_sink_caps (GstElementFactory *factory, const GstCaps *caps); +#endif /* GST_DISABLE_DEPRECATED */ +gboolean gst_element_factory_can_sink_all_caps (GstElementFactory *factory, const GstCaps *caps); +gboolean gst_element_factory_can_src_all_caps (GstElementFactory *factory, const GstCaps *caps); +gboolean gst_element_factory_can_sink_any_caps (GstElementFactory *factory, const GstCaps *caps); +gboolean gst_element_factory_can_src_any_caps (GstElementFactory *factory, const GstCaps *caps); /* util query functions */ gboolean gst_element_query_position (GstElement *element, GstFormat *format, diff --git a/win32/common/libgstreamer.def b/win32/common/libgstreamer.def index aae5e2e..1b567bb 100644 --- a/win32/common/libgstreamer.def +++ b/win32/common/libgstreamer.def @@ -303,6 +303,10 @@ EXPORTS gst_element_create_all_pads gst_element_factory_can_sink_caps gst_element_factory_can_src_caps + gst_element_factory_can_sink_all_caps + gst_element_factory_can_sink_any_caps + gst_element_factory_can_src_all_caps + gst_element_factory_can_src_any_caps gst_element_factory_create gst_element_factory_find gst_element_factory_get_author -- 2.7.4