⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gstelement.c

📁 gnash 在pc和嵌入式下开发需要的源码
💻 C
字号:
/* GStreamer * Copyright (C) 2005 Thomas Vander Stichele <thomas at apestaart dot org> * * gstelement.c: Unit test for GstElement * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */#include <gst/check/gstcheck.h>GST_START_TEST (test_add_remove_pad){  GstElement *e;  GstPad *p;  /* getting an existing element class is cheating, but easier */  e = gst_element_factory_make ("fakesrc", "source");  /* create a new floating pad with refcount 1 */  p = gst_pad_new ("source", GST_PAD_SRC);  ASSERT_OBJECT_REFCOUNT (p, "pad", 1);  /* ref it for ourselves */  gst_object_ref (p);  ASSERT_OBJECT_REFCOUNT (p, "pad", 2);  /* adding it sinks the pad -> not floating, same refcount */  gst_element_add_pad (e, p);  ASSERT_OBJECT_REFCOUNT (p, "pad", 2);  /* removing it reduces the refcount */  gst_element_remove_pad (e, p);  ASSERT_OBJECT_REFCOUNT (p, "pad", 1);  /* clean up our own reference */  gst_object_unref (p);  gst_object_unref (e);}GST_END_TEST;GST_START_TEST (test_add_pad_unref_element){  GstElement *e;  GstPad *p;  /* getting an existing element class is cheating, but easier */  e = gst_element_factory_make ("fakesrc", "source");  /* create a new floating pad with refcount 1 */  p = gst_pad_new ("source", GST_PAD_SRC);  ASSERT_OBJECT_REFCOUNT (p, "pad", 1);  /* ref it for ourselves */  gst_object_ref (p);  ASSERT_OBJECT_REFCOUNT (p, "pad", 2);  /* adding it sinks the pad -> not floating, same refcount */  gst_element_add_pad (e, p);  ASSERT_OBJECT_REFCOUNT (p, "pad", 2);  /* unreffing the element should clean it up */  gst_object_unref (GST_OBJECT (e));  ASSERT_OBJECT_REFCOUNT (p, "pad", 1);  /* clean up our own reference */  gst_object_unref (p);}GST_END_TEST;GST_START_TEST (test_error_no_bus){  GstElement *e;  GstBus *bus;  e = gst_element_factory_make ("fakesrc", "source");  /* get the bus, should be NULL */  bus = gst_element_get_bus (e);  fail_if (bus != NULL);  /* I don't want errors shown */  gst_debug_set_default_threshold (GST_LEVEL_NONE);  GST_ELEMENT_ERROR (e, RESOURCE, OPEN_READ, ("I could not read"), ("debug"));  gst_object_unref (e);}GST_END_TEST;/* link and run two elements without putting them in a pipeline */GST_START_TEST (test_link){  GstElement *src, *sink;  src = gst_element_factory_make ("fakesrc", "source");  sink = gst_element_factory_make ("fakesink", "sink");  fail_unless (gst_element_link_pads (src, "src", sink, "sink"));  /* do sink to source state change */  gst_element_set_state (sink, GST_STATE_PAUSED);  gst_element_set_state (src, GST_STATE_PAUSED);  /* wait for preroll */  gst_element_get_state (sink, NULL, NULL, GST_CLOCK_TIME_NONE);  /* play some more */  gst_element_set_state (sink, GST_STATE_PLAYING);  gst_element_set_state (src, GST_STATE_PLAYING);  g_usleep (G_USEC_PER_SEC);  /* and stop */  gst_element_set_state (sink, GST_STATE_PAUSED);  gst_element_set_state (src, GST_STATE_PAUSED);  /* wait for preroll */  gst_element_get_state (sink, NULL, NULL, GST_CLOCK_TIME_NONE);  gst_element_set_state (sink, GST_STATE_NULL);  gst_element_set_state (src, GST_STATE_NULL);  gst_element_get_state (sink, NULL, NULL, GST_CLOCK_TIME_NONE);  g_usleep (G_USEC_PER_SEC / 2);  ASSERT_OBJECT_REFCOUNT (sink, "sink", 1);  ASSERT_OBJECT_REFCOUNT (src, "src", 1);  gst_element_unlink_pads (src, "src", sink, "sink");  ASSERT_OBJECT_REFCOUNT (sink, "sink", 1);  ASSERT_OBJECT_REFCOUNT (src, "src", 1);  gst_object_unref (src);  gst_object_unref (sink);}GST_END_TEST;/* linking two elements without pads should fail */GST_START_TEST (test_link_no_pads){  GstElement *src, *sink;  src = gst_bin_new ("src");  sink = gst_bin_new ("sink");  fail_if (gst_element_link (src, sink));  gst_object_unref (src);  gst_object_unref (sink);}GST_END_TEST;/* check if the elementfactory of a class is filled (see #131079) */GST_START_TEST (test_class){  GstElementClass *klass;  GstElementFactory *factory, *tmp;  GType type;  GST_DEBUG ("finding factory for queue");  factory = gst_element_factory_find ("queue");  fail_if (factory == NULL);  GST_DEBUG ("getting the type");  /* feature is not loaded, should return 0 as the type */  type = gst_element_factory_get_element_type (factory);  fail_if (type != 0);  GST_DEBUG ("now loading the plugin");  tmp =      GST_ELEMENT_FACTORY (gst_plugin_feature_load (GST_PLUGIN_FEATURE          (factory)));  fail_if (tmp == NULL);  gst_object_unref (factory);  factory = tmp;  /* feature is now loaded */  type = gst_element_factory_get_element_type (factory);  fail_if (type == 0);  klass = g_type_class_ref (factory->type);  fail_if (klass == NULL);  GST_DEBUG ("checking the element factory class field");  /* and elementfactory is filled in */  fail_if (klass->elementfactory == NULL);  fail_if (klass->elementfactory != factory);}GST_END_TEST;Suite *gst_element_suite (void){  Suite *s = suite_create ("GstElement");  TCase *tc_chain = tcase_create ("element tests");  suite_add_tcase (s, tc_chain);  tcase_add_test (tc_chain, test_add_remove_pad);  tcase_add_test (tc_chain, test_add_pad_unref_element);  tcase_add_test (tc_chain, test_error_no_bus);  tcase_add_test (tc_chain, test_link);  tcase_add_test (tc_chain, test_link_no_pads);  tcase_add_test (tc_chain, test_class);  return s;}GST_CHECK_MAIN (gst_element);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -