mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-04 13:32:29 +00:00
Merge branch 'master' into 0.11
This commit is contained in:
commit
f0e3902a37
6 changed files with 222 additions and 50 deletions
|
@ -738,7 +738,7 @@ plugin_init (GstPlugin *plugin)
|
|||
property does not guarantee in <emphasis>any</emphasis> way that
|
||||
it will actually come close to this value. If you need a fixed
|
||||
framerate, please use an element that provides that (such as
|
||||
<quote>videodrop</quote>). 0 means a variable framerate.
|
||||
<quote>videorate</quote>). 0 means a variable framerate.
|
||||
</entry>
|
||||
</row>
|
||||
|
||||
|
|
191
gst/gstutils.c
191
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,41 +1285,7 @@ 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))
|
||||
return TRUE;
|
||||
}
|
||||
templates = g_list_next (templates);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
GList *templates;
|
||||
|
||||
g_return_val_if_fail (factory != NULL, FALSE);
|
||||
g_return_val_if_fail (caps != NULL, FALSE);
|
||||
|
||||
templates = factory->staticpadtemplates;
|
||||
|
||||
while (templates) {
|
||||
GstStaticPadTemplate *template = (GstStaticPadTemplate *) templates->data;
|
||||
|
||||
if (template->direction == GST_PAD_SINK) {
|
||||
if (template->direction == direction) {
|
||||
if (gst_caps_is_always_compatible (caps,
|
||||
gst_static_caps_get (&template->static_caps)))
|
||||
return TRUE;
|
||||
|
@ -1339,6 +1296,146 @@ gst_element_factory_can_sink_caps (GstElementFactory * factory,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_element_factory_can_accept_any_caps_in_direction (GstElementFactory *
|
||||
factory, const GstCaps * caps, GstPadDirection direction)
|
||||
{
|
||||
GList *templates;
|
||||
|
||||
g_return_val_if_fail (factory != NULL, FALSE);
|
||||
g_return_val_if_fail (caps != NULL, FALSE);
|
||||
|
||||
templates = factory->staticpadtemplates;
|
||||
|
||||
while (templates) {
|
||||
GstStaticPadTemplate *template = (GstStaticPadTemplate *) templates->data;
|
||||
|
||||
if (template->direction == direction) {
|
||||
if (gst_caps_can_intersect (caps,
|
||||
gst_static_caps_get (&template->static_caps)))
|
||||
return TRUE;
|
||||
}
|
||||
templates = g_list_next (templates);
|
||||
}
|
||||
|
||||
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 */
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -795,6 +795,26 @@ GST_START_TEST (test_normalize)
|
|||
|
||||
GST_END_TEST;
|
||||
|
||||
GST_START_TEST (test_broken)
|
||||
{
|
||||
GstCaps *c1;
|
||||
|
||||
/* NULL is not valid for media_type */
|
||||
ASSERT_CRITICAL (c1 =
|
||||
gst_caps_new_simple (NULL, "field", G_TYPE_INT, 1, NULL));
|
||||
fail_if (c1);
|
||||
|
||||
#ifndef G_DISABLE_CHECKS
|
||||
/* such a name is not valid, see gst_structure_validate_name() */
|
||||
ASSERT_CRITICAL (c1 =
|
||||
gst_caps_new_simple ("1#@abc", "field", G_TYPE_INT, 1, NULL));
|
||||
fail_if (c1);
|
||||
#endif
|
||||
}
|
||||
|
||||
GST_END_TEST;
|
||||
|
||||
|
||||
static Suite *
|
||||
gst_caps_suite (void)
|
||||
{
|
||||
|
@ -815,6 +835,7 @@ gst_caps_suite (void)
|
|||
tcase_add_test (tc_chain, test_intersect);
|
||||
tcase_add_test (tc_chain, test_intersect2);
|
||||
tcase_add_test (tc_chain, test_normalize);
|
||||
tcase_add_test (tc_chain, test_broken);
|
||||
|
||||
return s;
|
||||
}
|
||||
|
|
|
@ -77,6 +77,48 @@ GST_START_TEST (test_create)
|
|||
|
||||
GST_END_TEST;
|
||||
|
||||
/* test if the factory can accept some caps */
|
||||
GST_START_TEST (test_can_sink_any_caps)
|
||||
{
|
||||
GstElementFactory *factory;
|
||||
GstCaps *caps;
|
||||
gboolean res;
|
||||
|
||||
factory = setup_factory ();
|
||||
fail_if (factory == NULL);
|
||||
|
||||
caps = gst_caps_new_simple ("audio/x-raw-int", NULL);
|
||||
fail_if (caps == NULL);
|
||||
res = gst_element_factory_can_sink_any_caps (factory, caps);
|
||||
fail_if (!res);
|
||||
gst_caps_unref (caps);
|
||||
|
||||
g_object_unref (factory);
|
||||
}
|
||||
|
||||
GST_END_TEST;
|
||||
|
||||
/* test if the factory is compabible with some caps */
|
||||
GST_START_TEST (test_can_sink_all_caps)
|
||||
{
|
||||
GstElementFactory *factory;
|
||||
GstCaps *caps;
|
||||
gboolean res;
|
||||
|
||||
factory = setup_factory ();
|
||||
fail_if (factory == NULL);
|
||||
|
||||
caps = gst_caps_new_simple ("audio/x-raw-int", NULL);
|
||||
fail_if (caps == NULL);
|
||||
res = gst_element_factory_can_sink_all_caps (factory, caps);
|
||||
fail_if (res);
|
||||
gst_caps_unref (caps);
|
||||
|
||||
g_object_unref (factory);
|
||||
}
|
||||
|
||||
GST_END_TEST;
|
||||
|
||||
/* check if the elementfactory of a class is filled (see #131079) */
|
||||
GST_START_TEST (test_class)
|
||||
{
|
||||
|
@ -131,6 +173,8 @@ gst_element_factory_suite (void)
|
|||
suite_add_tcase (s, tc_chain);
|
||||
tcase_add_test (tc_chain, test_class);
|
||||
tcase_add_test (tc_chain, test_create);
|
||||
tcase_add_test (tc_chain, test_can_sink_any_caps);
|
||||
tcase_add_test (tc_chain, test_can_sink_all_caps);
|
||||
|
||||
return s;
|
||||
}
|
||||
|
|
|
@ -305,6 +305,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_element_type
|
||||
|
|
Loading…
Reference in a new issue