mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-08 18:39:54 +00:00
remove deprecated symbols and methods
This commit is contained in:
parent
b38d4ed6dd
commit
993eda5004
29 changed files with 8 additions and 2232 deletions
|
@ -65,7 +65,6 @@ gst_bin_recalculate_latency
|
|||
gst_bin_add_many
|
||||
gst_bin_remove_many
|
||||
gst_bin_find_unlinked_pad
|
||||
gst_bin_find_unconnected_pad
|
||||
|
||||
<SUBSECTION>
|
||||
GstBinFlags
|
||||
|
@ -191,7 +190,6 @@ gst_buffer_create_sub
|
|||
gst_buffer_is_span_fast
|
||||
gst_buffer_span
|
||||
|
||||
gst_buffer_stamp
|
||||
gst_buffer_join
|
||||
gst_buffer_merge
|
||||
|
||||
|
@ -275,7 +273,6 @@ GST_CAPS_REFCOUNT_VALUE
|
|||
GST_STATIC_CAPS_ANY
|
||||
GST_STATIC_CAPS_NONE
|
||||
GST_CAPS_IS_SIMPLE
|
||||
GST_DEBUG_CAPS
|
||||
GST_STATIC_CAPS
|
||||
|
||||
gst_caps_new_empty
|
||||
|
@ -309,8 +306,6 @@ gst_caps_intersect
|
|||
gst_caps_union
|
||||
gst_caps_normalize
|
||||
gst_caps_do_simplify
|
||||
gst_caps_save_thyself
|
||||
gst_caps_load_thyself
|
||||
gst_caps_replace
|
||||
gst_caps_to_string
|
||||
gst_caps_from_string
|
||||
|
@ -510,14 +505,12 @@ gst_element_class_add_pad_template
|
|||
gst_element_class_get_pad_template
|
||||
gst_element_class_get_pad_template_list
|
||||
gst_element_class_install_std_props
|
||||
gst_element_class_set_details
|
||||
gst_element_class_set_details_simple
|
||||
gst_element_class_set_documentation_uri
|
||||
gst_element_class_set_icon_name
|
||||
|
||||
<SUBSECTION element-pads>
|
||||
gst_element_add_pad
|
||||
gst_element_get_pad
|
||||
gst_element_create_all_pads
|
||||
gst_element_get_compatible_pad
|
||||
gst_element_get_compatible_pad_template
|
||||
|
@ -1351,14 +1344,10 @@ gst_object_get_name
|
|||
gst_object_set_parent
|
||||
gst_object_get_parent
|
||||
gst_object_unparent
|
||||
gst_object_get_name_prefix
|
||||
gst_object_set_name_prefix
|
||||
gst_object_default_deep_notify
|
||||
gst_object_default_error
|
||||
gst_object_check_uniqueness
|
||||
gst_object_has_ancestor
|
||||
gst_object_save_thyself
|
||||
gst_object_restore_thyself
|
||||
gst_object_ref
|
||||
gst_object_unref
|
||||
gst_object_ref_sink
|
||||
|
@ -1366,7 +1355,6 @@ gst_object_sink
|
|||
gst_object_replace
|
||||
gst_object_get_path_string
|
||||
gst_class_signal_connect
|
||||
gst_class_signal_emit_by_name
|
||||
<SUBSECTION Standard>
|
||||
GST_OBJECT
|
||||
GST_IS_OBJECT
|
||||
|
@ -1380,7 +1368,6 @@ GST_OBJECT_CLASS_CAST
|
|||
<SUBSECTION Private>
|
||||
gst_object_get_type
|
||||
gst_object_flags_get_type
|
||||
GstXmlNodePtr
|
||||
</SECTION>
|
||||
|
||||
|
||||
|
@ -1532,13 +1519,6 @@ GstPadIterIntLinkFunction
|
|||
gst_pad_iterate_internal_links
|
||||
gst_pad_iterate_internal_links_default
|
||||
|
||||
gst_pad_set_internal_link_function
|
||||
GstPadIntLinkFunction
|
||||
gst_pad_get_internal_links
|
||||
gst_pad_get_internal_links_default
|
||||
|
||||
gst_pad_load_and_link
|
||||
|
||||
gst_pad_dispatcher
|
||||
GstPadDispatcherFunction
|
||||
|
||||
|
@ -1564,9 +1544,6 @@ GST_PAD_STREAM_TRYLOCK
|
|||
GST_PAD_STREAM_UNLOCK
|
||||
GST_PAD_STREAM_UNLOCK_FULL
|
||||
|
||||
GST_FLOW_IS_FATAL
|
||||
GST_FLOW_IS_SUCCESS
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GstPadClass
|
||||
GstPadPrivate
|
||||
|
@ -1631,7 +1608,6 @@ GST_PAD_EVENTFUNC
|
|||
GST_PAD_FIXATECAPSFUNC
|
||||
GST_PAD_GETCAPSFUNC
|
||||
GST_PAD_GETRANGEFUNC
|
||||
GST_PAD_INTLINKFUNC
|
||||
GST_PAD_ITERINTLINKFUNC
|
||||
GST_PAD_IS_FLUSHING
|
||||
GST_PAD_LINKFUNC
|
||||
|
@ -1757,9 +1733,6 @@ gst_pipeline_get_clock
|
|||
gst_pipeline_use_clock
|
||||
gst_pipeline_auto_clock
|
||||
|
||||
gst_pipeline_set_new_stream_time
|
||||
gst_pipeline_get_last_stream_time
|
||||
|
||||
gst_pipeline_set_auto_flush_bus
|
||||
gst_pipeline_get_auto_flush_bus
|
||||
|
||||
|
@ -2064,8 +2037,6 @@ GST_MAGIC_BINARY_VERSION_STR
|
|||
GST_MAGIC_BINARY_VERSION_LEN
|
||||
gst_registry_get_type
|
||||
GstRegistryPrivate
|
||||
gst_registry_xml_read_cache
|
||||
gst_registry_xml_write_cache
|
||||
</SECTION>
|
||||
|
||||
|
||||
|
@ -2614,7 +2585,6 @@ GST_ROUND_DOWN_16
|
|||
GST_ROUND_DOWN_32
|
||||
GST_ROUND_DOWN_64
|
||||
|
||||
gst_atomic_int_set
|
||||
gst_flow_get_name
|
||||
gst_flow_to_quark
|
||||
gst_print_element_args
|
||||
|
@ -2823,29 +2793,3 @@ GST_VERSION_NANO
|
|||
GST_CHECK_VERSION
|
||||
</SECTION>
|
||||
|
||||
|
||||
<SECTION>
|
||||
<FILE>gstxml</FILE>
|
||||
<TITLE>GstXML</TITLE>
|
||||
GstXML
|
||||
|
||||
gst_xml_write
|
||||
gst_xml_write_file
|
||||
gst_xml_new
|
||||
gst_xml_parse_doc
|
||||
gst_xml_parse_file
|
||||
gst_xml_parse_memory
|
||||
gst_xml_get_element
|
||||
gst_xml_get_topelements
|
||||
gst_xml_make_element
|
||||
<SUBSECTION Standard>
|
||||
GstXMLClass
|
||||
GST_XML
|
||||
GST_IS_XML
|
||||
GST_XML_CLASS
|
||||
GST_IS_XML_CLASS
|
||||
GST_XML_GET_CLASS
|
||||
GST_TYPE_XML
|
||||
<SUBSECTION Private>
|
||||
gst_xml_get_type
|
||||
</SECTION>
|
||||
|
|
|
@ -30,7 +30,6 @@ gst_tag_setter_get_type
|
|||
gst_task_get_type
|
||||
gst_type_find_factory_get_type
|
||||
gst_uri_handler_get_type
|
||||
@GST_LOADSAVE_DOC_TYPES@gst_xml_get_type
|
||||
|
||||
% these are not GObject derived types
|
||||
% this works with gtk-doc 1.10 at least
|
||||
|
|
|
@ -894,7 +894,7 @@
|
|||
<RANGE>[0,100]</RANGE>
|
||||
<FLAGS>rw</FLAGS>
|
||||
<NICK>High percent</NICK>
|
||||
<BLURB>High threshold for buffering to finish.</BLURB>
|
||||
<BLURB>High threshold for buffering to finish. Only used if use-buffering is True.</BLURB>
|
||||
<DEFAULT>99</DEFAULT>
|
||||
</ARG>
|
||||
|
||||
|
@ -904,7 +904,7 @@
|
|||
<RANGE>[0,100]</RANGE>
|
||||
<FLAGS>rw</FLAGS>
|
||||
<NICK>Low percent</NICK>
|
||||
<BLURB>Low threshold for buffering to start.</BLURB>
|
||||
<BLURB>Low threshold for buffering to start. Only used if use-buffering is True.</BLURB>
|
||||
<DEFAULT>10</DEFAULT>
|
||||
</ARG>
|
||||
|
||||
|
|
|
@ -1,11 +1,5 @@
|
|||
lib_LTLIBRARIES = libgstreamer-@GST_MAJORMINOR@.la
|
||||
|
||||
if GST_DISABLE_LOADSAVE
|
||||
GST_LOADSAVE_SRC =
|
||||
else
|
||||
GST_LOADSAVE_SRC = gstxml.c
|
||||
endif
|
||||
|
||||
if GST_DISABLE_REGISTRY
|
||||
GST_REGISTRY_SRC =
|
||||
else
|
||||
|
@ -44,7 +38,7 @@ built_header_make = gstenumtypes.h gstmarshal.h
|
|||
built_source_make = gstenumtypes.c gstmarshal.c
|
||||
|
||||
EXTRA_libgstreamer_@GST_MAJORMINOR@_la_SOURCES = \
|
||||
gstmarshal.list gsttrace.c gstxml.c \
|
||||
gstmarshal.list gsttrace.c \
|
||||
gstregistrybinary.c
|
||||
|
||||
|
||||
|
@ -104,8 +98,7 @@ libgstreamer_@GST_MAJORMINOR@_la_SOURCES = \
|
|||
gstutils.c \
|
||||
gstvalue.c \
|
||||
gstparse.c \
|
||||
$(GST_REGISTRY_SRC) \
|
||||
$(GST_LOADSAVE_SRC)
|
||||
$(GST_REGISTRY_SRC)
|
||||
|
||||
# do not put files in the distribution that are generated
|
||||
nodist_libgstreamer_@GST_MAJORMINOR@_la_SOURCES = $(built_source_make)
|
||||
|
@ -193,8 +186,7 @@ gst_headers = \
|
|||
gstutils.h \
|
||||
gstvalue.h \
|
||||
gstregistry.h \
|
||||
gstparse.h \
|
||||
gstxml.h
|
||||
gstparse.h
|
||||
|
||||
libgstreamer_@GST_MAJORMINOR@include_HEADERS = $(gst_headers) math-compat.h
|
||||
|
||||
|
@ -263,13 +255,11 @@ Gst-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstreamer-@GST_MAJORMINOR@
|
|||
--include=GLib-2.0 \
|
||||
--include=GObject-2.0 \
|
||||
--include=GModule-2.0 \
|
||||
--include=libxml2-2.0 \
|
||||
--libtool="$(top_builddir)/libtool" \
|
||||
--pkg glib-2.0 \
|
||||
--pkg gobject-2.0 \
|
||||
--pkg gmodule-no-export-2.0 \
|
||||
--pkg gthread-2.0 \
|
||||
--pkg libxml-2.0 \
|
||||
--pkg-export gstreamer-0.11 \
|
||||
--output $@ \
|
||||
$(gir_headers) \
|
||||
|
|
|
@ -73,7 +73,6 @@
|
|||
#include <gst/gsturi.h>
|
||||
#include <gst/gstutils.h>
|
||||
#include <gst/gstvalue.h>
|
||||
#include <gst/gstxml.h>
|
||||
|
||||
#include <gst/gstparse.h>
|
||||
|
||||
|
|
82
gst/gstbin.c
82
gst/gstbin.c
|
@ -162,7 +162,6 @@
|
|||
#include "gstevent.h"
|
||||
#include "gstbin.h"
|
||||
#include "gstmarshal.h"
|
||||
#include "gstxml.h"
|
||||
#include "gstinfo.h"
|
||||
#include "gsterror.h"
|
||||
|
||||
|
@ -171,18 +170,6 @@
|
|||
#include "gstutils.h"
|
||||
#include "gstchildproxy.h"
|
||||
|
||||
#ifdef GST_DISABLE_DEPRECATED
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
#undef GstXmlNodePtr
|
||||
#define GstXmlNodePtr xmlNodePtr
|
||||
#include <libxml/parser.h>
|
||||
GstXmlNodePtr gst_object_save_thyself (GstObject * object,
|
||||
GstXmlNodePtr parent);
|
||||
void gst_object_restore_thyself (GstObject * object, GstXmlNodePtr parent);
|
||||
GstElement *gst_xml_make_element (xmlNodePtr cur, GstObject * parent);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* enable for DURATION caching.
|
||||
* FIXME currently too many elements don't update
|
||||
* their duration when it changes so we return inaccurate values. */
|
||||
|
@ -262,11 +249,6 @@ static gboolean gst_bin_query (GstElement * element, GstQuery * query);
|
|||
|
||||
static gboolean gst_bin_do_latency_func (GstBin * bin);
|
||||
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
static xmlNodePtr gst_bin_save_thyself (GstObject * object, xmlNodePtr parent);
|
||||
static void gst_bin_restore_thyself (GstObject * object, xmlNodePtr self);
|
||||
#endif
|
||||
|
||||
static void bin_remove_messages (GstBin * bin, GstObject * src,
|
||||
GstMessageType types);
|
||||
static void gst_bin_continue_func (BinContinueData * data);
|
||||
|
@ -491,15 +473,6 @@ gst_bin_class_init (GstBinClass * klass)
|
|||
|
||||
gobject_class->dispose = gst_bin_dispose;
|
||||
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
gstobject_class->save_thyself =
|
||||
((gpointer (*)(GstObject * object,
|
||||
gpointer self)) * GST_DEBUG_FUNCPTR (gst_bin_save_thyself));
|
||||
gstobject_class->restore_thyself =
|
||||
((void (*)(GstObject * object,
|
||||
gpointer self)) *GST_DEBUG_FUNCPTR (gst_bin_restore_thyself));
|
||||
#endif
|
||||
|
||||
gstelement_class->change_state =
|
||||
GST_DEBUG_FUNCPTR (gst_bin_change_state_func);
|
||||
gstelement_class->get_state = GST_DEBUG_FUNCPTR (gst_bin_get_state_func);
|
||||
|
@ -3831,58 +3804,3 @@ gst_bin_iterate_all_by_interface (GstBin * bin, GType iface)
|
|||
|
||||
return result;
|
||||
}
|
||||
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
static xmlNodePtr
|
||||
gst_bin_save_thyself (GstObject * object, xmlNodePtr parent)
|
||||
{
|
||||
GstBin *bin = GST_BIN_CAST (object);
|
||||
xmlNodePtr childlist, elementnode;
|
||||
GList *children;
|
||||
GstElement *child;
|
||||
|
||||
if (GST_OBJECT_CLASS (parent_class)->save_thyself)
|
||||
GST_OBJECT_CLASS (parent_class)->save_thyself (GST_OBJECT (bin), parent);
|
||||
|
||||
childlist = xmlNewChild (parent, NULL, (xmlChar *) "children", NULL);
|
||||
|
||||
GST_CAT_INFO (GST_CAT_XML, "[%s]: saving %d children",
|
||||
GST_ELEMENT_NAME (bin), bin->numchildren);
|
||||
|
||||
children = g_list_last (bin->children);
|
||||
while (children) {
|
||||
child = GST_ELEMENT_CAST (children->data);
|
||||
elementnode = xmlNewChild (childlist, NULL, (xmlChar *) "element", NULL);
|
||||
gst_object_save_thyself (GST_OBJECT (child), elementnode);
|
||||
children = g_list_previous (children);
|
||||
}
|
||||
return childlist;
|
||||
}
|
||||
|
||||
static void
|
||||
gst_bin_restore_thyself (GstObject * object, xmlNodePtr self)
|
||||
{
|
||||
GstBin *bin = GST_BIN_CAST (object);
|
||||
xmlNodePtr field = self->xmlChildrenNode;
|
||||
xmlNodePtr childlist;
|
||||
|
||||
while (field) {
|
||||
if (!strcmp ((char *) field->name, "children")) {
|
||||
GST_CAT_INFO (GST_CAT_XML, "[%s]: loading children",
|
||||
GST_ELEMENT_NAME (object));
|
||||
childlist = field->xmlChildrenNode;
|
||||
while (childlist) {
|
||||
if (!strcmp ((char *) childlist->name, "element")) {
|
||||
/* gst_xml_make_element will gst_bin_add() the element to ourself */
|
||||
gst_xml_make_element (childlist, GST_OBJECT (bin));
|
||||
}
|
||||
childlist = childlist->next;
|
||||
}
|
||||
}
|
||||
|
||||
field = field->next;
|
||||
}
|
||||
if (GST_OBJECT_CLASS (parent_class)->restore_thyself)
|
||||
(GST_OBJECT_CLASS (parent_class)->restore_thyself) (object, self);
|
||||
}
|
||||
#endif /* GST_DISABLE_LOADSAVE */
|
||||
|
|
|
@ -73,14 +73,6 @@
|
|||
#include <gst/gst.h>
|
||||
#include <gobject/gvaluecollector.h>
|
||||
|
||||
#ifdef GST_DISABLE_DEPRECATED
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
#include <libxml/parser.h>
|
||||
xmlNodePtr gst_caps_save_thyself (const GstCaps * caps, xmlNodePtr parent);
|
||||
GstCaps *gst_caps_load_thyself (xmlNodePtr parent);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define DEBUG_REFCOUNT
|
||||
|
||||
#define CAPS_POISON(caps) G_STMT_START{ \
|
||||
|
@ -1960,47 +1952,6 @@ gst_caps_do_simplify (GstCaps * caps)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
/* persistence */
|
||||
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
/**
|
||||
* gst_caps_save_thyself:
|
||||
* @caps: a #GstCaps structure
|
||||
* @parent: a XML parent node
|
||||
*
|
||||
* Serializes a #GstCaps to XML and adds it as a child node of @parent.
|
||||
*
|
||||
* Returns: a XML node pointer
|
||||
*/
|
||||
xmlNodePtr
|
||||
gst_caps_save_thyself (const GstCaps * caps, xmlNodePtr parent)
|
||||
{
|
||||
char *s = gst_caps_to_string (caps);
|
||||
|
||||
xmlNewChild (parent, NULL, (xmlChar *) "caps", (xmlChar *) s);
|
||||
g_free (s);
|
||||
return parent;
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_caps_load_thyself:
|
||||
* @parent: a XML node
|
||||
*
|
||||
* Creates a #GstCaps from its XML serialization.
|
||||
*
|
||||
* Returns: a new #GstCaps structure
|
||||
*/
|
||||
GstCaps *
|
||||
gst_caps_load_thyself (xmlNodePtr parent)
|
||||
{
|
||||
if (strcmp ("caps", (char *) parent->name) == 0) {
|
||||
return gst_caps_from_string ((gchar *) xmlNodeGetContent (parent));
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* utility */
|
||||
|
||||
/**
|
||||
|
|
|
@ -82,21 +82,6 @@ typedef enum {
|
|||
*/
|
||||
#define GST_CAPS_IS_SIMPLE(caps) (gst_caps_get_size(caps) == 1)
|
||||
|
||||
#ifndef GST_DISABLE_DEPRECATED
|
||||
/**
|
||||
* GST_DEBUG_CAPS:
|
||||
* @string: a string that should be prepended to the caps data.
|
||||
* @caps: the #GstCaps instance to print
|
||||
*
|
||||
* Convenience macro for printing out the contents of caps with GST_DEBUG().
|
||||
*
|
||||
* Deprecated: do not use anymore
|
||||
*/
|
||||
#define GST_DEBUG_CAPS(string, caps) \
|
||||
GST_DEBUG ( string "%s: " GST_PTR_FORMAT, caps)
|
||||
|
||||
#endif /* GST_DISABLE_DEPRECATED */
|
||||
|
||||
/**
|
||||
* GST_STATIC_CAPS:
|
||||
* @string: the string describing the caps
|
||||
|
@ -244,12 +229,6 @@ GstCaps * gst_caps_union (const GstCaps *caps1,
|
|||
GstCaps * gst_caps_normalize (const GstCaps *caps);
|
||||
gboolean gst_caps_do_simplify (GstCaps *caps);
|
||||
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_DISABLE_DEPRECATED)
|
||||
xmlNodePtr gst_caps_save_thyself (const GstCaps *caps,
|
||||
xmlNodePtr parent);
|
||||
GstCaps * gst_caps_load_thyself (xmlNodePtr parent);
|
||||
#endif
|
||||
|
||||
/* utility */
|
||||
void gst_caps_replace (GstCaps **caps,
|
||||
GstCaps *newcaps);
|
||||
|
|
|
@ -194,9 +194,6 @@
|
|||
/* FIXME: move include to where we need it */
|
||||
/*#if (! (defined(GST_DISABLE_LOADSAVE) && defined(GST_DISABLE_REGISTRY)) )*/
|
||||
#ifndef GST_DISABLE_XML
|
||||
#ifndef GST_DISABLE_DEPRECATED
|
||||
# include <libxml/parser.h>
|
||||
#endif
|
||||
#else
|
||||
/* FIXME: 0.11 (replace by GST_DISABLE_XML) */
|
||||
# define GST_DISABLE_LOADSAVE_REGISTRY
|
||||
|
|
233
gst/gstelement.c
233
gst/gstelement.c
|
@ -109,16 +109,6 @@ enum
|
|||
/* FILL ME */
|
||||
};
|
||||
|
||||
#ifdef GST_DISABLE_DEPRECATED
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
#include <libxml/parser.h>
|
||||
xmlNodePtr gst_object_save_thyself (const GstObject * object,
|
||||
xmlNodePtr parent);
|
||||
GstObject *gst_object_load_thyself (xmlNodePtr parent);
|
||||
void gst_pad_load_and_link (xmlNodePtr self, GstObject * parent);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static void gst_element_class_init (GstElementClass * klass);
|
||||
static void gst_element_init (GstElement * element);
|
||||
static void gst_element_base_class_init (gpointer g_class);
|
||||
|
@ -144,12 +134,6 @@ static GstPadTemplate
|
|||
* gst_element_class_get_request_pad_template (GstElementClass *
|
||||
element_class, const gchar * name);
|
||||
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
static xmlNodePtr gst_element_save_thyself (GstObject * object,
|
||||
xmlNodePtr parent);
|
||||
static void gst_element_restore_thyself (GstObject * parent, xmlNodePtr self);
|
||||
#endif
|
||||
|
||||
static GstObjectClass *parent_class = NULL;
|
||||
static guint gst_element_signals[LAST_SIGNAL] = { 0 };
|
||||
|
||||
|
@ -233,15 +217,6 @@ gst_element_class_init (GstElementClass * klass)
|
|||
gobject_class->dispose = gst_element_dispose;
|
||||
gobject_class->finalize = gst_element_finalize;
|
||||
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
gstobject_class->save_thyself =
|
||||
((gpointer (*)(GstObject * object,
|
||||
gpointer self)) * GST_DEBUG_FUNCPTR (gst_element_save_thyself));
|
||||
gstobject_class->restore_thyself =
|
||||
((void (*)(GstObject * object,
|
||||
gpointer self)) *GST_DEBUG_FUNCPTR (gst_element_restore_thyself));
|
||||
#endif
|
||||
|
||||
klass->change_state = GST_DEBUG_FUNCPTR (gst_element_change_state_func);
|
||||
klass->set_state = GST_DEBUG_FUNCPTR (gst_element_set_state_func);
|
||||
klass->get_state = GST_DEBUG_FUNCPTR (gst_element_get_state_func);
|
||||
|
@ -1072,42 +1047,6 @@ gst_element_get_request_pad (GstElement * element, const gchar * name)
|
|||
return pad;
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_element_get_pad:
|
||||
* @element: a #GstElement.
|
||||
* @name: the name of the pad to retrieve.
|
||||
*
|
||||
* Retrieves a pad from @element by name. Tries gst_element_get_static_pad()
|
||||
* first, then gst_element_get_request_pad().
|
||||
*
|
||||
* Deprecated: This function is deprecated as it's unclear if the reference
|
||||
* to the result pad should be released with gst_object_unref() in case of a static pad
|
||||
* or gst_element_release_request_pad() in case of a request pad.
|
||||
* Use gst_element_get_static_pad() or gst_element_get_request_pad() instead.
|
||||
*
|
||||
* Returns: the #GstPad if found, otherwise %NULL. Unref or Release after usage,
|
||||
* depending on the type of the pad.
|
||||
*/
|
||||
#ifndef GST_REMOVE_DEPRECATED
|
||||
#ifdef GST_DISABLE_DEPRECATED
|
||||
GstPad *gst_element_get_pad (GstElement * element, const gchar * name);
|
||||
#endif
|
||||
GstPad *
|
||||
gst_element_get_pad (GstElement * element, const gchar * name)
|
||||
{
|
||||
GstPad *pad;
|
||||
|
||||
g_return_val_if_fail (GST_IS_ELEMENT (element), NULL);
|
||||
g_return_val_if_fail (name != NULL, NULL);
|
||||
|
||||
pad = gst_element_get_static_pad (element, name);
|
||||
if (!pad)
|
||||
pad = gst_element_get_request_pad (element, name);
|
||||
|
||||
return pad;
|
||||
}
|
||||
#endif /* GST_REMOVE_DEPRECATED */
|
||||
|
||||
static GstIteratorItem
|
||||
iterate_pad (GstIterator * it, GstPad * pad)
|
||||
{
|
||||
|
@ -1270,36 +1209,6 @@ gst_element_class_set_icon_name (GstElementClass * klass, const gchar * name)
|
|||
gst_element_class_add_meta_data (klass, "icon-name", name);
|
||||
}
|
||||
|
||||
/* FIXME-0.11: deprecate and remove gst_element_class_set_details*() */
|
||||
/**
|
||||
* gst_element_class_set_details:
|
||||
* @klass: class to set details for
|
||||
* @details: details to set
|
||||
*
|
||||
* Sets the detailed information for a #GstElementClass.
|
||||
* <note>This function is for use in _base_init functions only.</note>
|
||||
*
|
||||
* The @details are copied.
|
||||
*
|
||||
* Deprecated: Use gst_element_class_set_details_simple() instead.
|
||||
*/
|
||||
#ifndef GST_REMOVE_DEPRECATED
|
||||
#ifdef GST_DISABLE_DEPRECATED
|
||||
void
|
||||
gst_element_class_set_details (GstElementClass * klass,
|
||||
const GstElementDetails * details);
|
||||
#endif
|
||||
void
|
||||
gst_element_class_set_details (GstElementClass * klass,
|
||||
const GstElementDetails * details)
|
||||
{
|
||||
g_return_if_fail (GST_IS_ELEMENT_CLASS (klass));
|
||||
g_return_if_fail (GST_IS_ELEMENT_DETAILS (details));
|
||||
|
||||
__gst_element_details_copy (&klass->details, details);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* gst_element_class_set_details_simple:
|
||||
* @klass: class to set details for
|
||||
|
@ -2977,148 +2886,6 @@ gst_element_finalize (GObject * object)
|
|||
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
/**
|
||||
* gst_element_save_thyself:
|
||||
* @element: a #GstElement to save.
|
||||
* @parent: the xml parent node.
|
||||
*
|
||||
* Saves the element as part of the given XML structure.
|
||||
*
|
||||
* Returns: the new #xmlNodePtr.
|
||||
*/
|
||||
static xmlNodePtr
|
||||
gst_element_save_thyself (GstObject * object, xmlNodePtr parent)
|
||||
{
|
||||
GList *pads;
|
||||
GstElementClass *oclass;
|
||||
GParamSpec **specs, *spec;
|
||||
guint nspecs;
|
||||
guint i;
|
||||
GValue value = { 0, };
|
||||
GstElement *element;
|
||||
|
||||
g_return_val_if_fail (GST_IS_ELEMENT (object), parent);
|
||||
|
||||
element = GST_ELEMENT_CAST (object);
|
||||
|
||||
oclass = GST_ELEMENT_GET_CLASS (element);
|
||||
|
||||
xmlNewChild (parent, NULL, (xmlChar *) "name",
|
||||
(xmlChar *) GST_ELEMENT_NAME (element));
|
||||
|
||||
if (oclass->elementfactory != NULL) {
|
||||
GstElementFactory *factory = (GstElementFactory *) oclass->elementfactory;
|
||||
|
||||
xmlNewChild (parent, NULL, (xmlChar *) "type",
|
||||
(xmlChar *) GST_PLUGIN_FEATURE (factory)->name);
|
||||
}
|
||||
|
||||
/* params */
|
||||
specs = g_object_class_list_properties (G_OBJECT_GET_CLASS (object), &nspecs);
|
||||
|
||||
for (i = 0; i < nspecs; i++) {
|
||||
spec = specs[i];
|
||||
if (spec->flags & G_PARAM_READABLE) {
|
||||
xmlNodePtr param;
|
||||
char *contents;
|
||||
|
||||
g_value_init (&value, spec->value_type);
|
||||
|
||||
g_object_get_property (G_OBJECT (element), spec->name, &value);
|
||||
param = xmlNewChild (parent, NULL, (xmlChar *) "param", NULL);
|
||||
xmlNewChild (param, NULL, (xmlChar *) "name", (xmlChar *) spec->name);
|
||||
|
||||
if (G_IS_PARAM_SPEC_STRING (spec))
|
||||
contents = g_value_dup_string (&value);
|
||||
else if (G_IS_PARAM_SPEC_ENUM (spec))
|
||||
contents = g_strdup_printf ("%d", g_value_get_enum (&value));
|
||||
else if (G_IS_PARAM_SPEC_INT64 (spec))
|
||||
contents = g_strdup_printf ("%" G_GINT64_FORMAT,
|
||||
g_value_get_int64 (&value));
|
||||
else if (GST_VALUE_HOLDS_STRUCTURE (&value)) {
|
||||
if (g_value_get_boxed (&value) != NULL) {
|
||||
contents = g_strdup_value_contents (&value);
|
||||
} else {
|
||||
contents = g_strdup ("NULL");
|
||||
}
|
||||
} else
|
||||
contents = g_strdup_value_contents (&value);
|
||||
|
||||
xmlNewChild (param, NULL, (xmlChar *) "value", (xmlChar *) contents);
|
||||
g_free (contents);
|
||||
|
||||
g_value_unset (&value);
|
||||
}
|
||||
}
|
||||
|
||||
g_free (specs);
|
||||
|
||||
pads = g_list_last (GST_ELEMENT_PADS (element));
|
||||
|
||||
while (pads) {
|
||||
GstPad *pad = GST_PAD_CAST (pads->data);
|
||||
|
||||
/* figure out if it's a direct pad or a ghostpad */
|
||||
if (GST_ELEMENT_CAST (GST_OBJECT_PARENT (pad)) == element) {
|
||||
xmlNodePtr padtag = xmlNewChild (parent, NULL, (xmlChar *) "pad", NULL);
|
||||
|
||||
gst_object_save_thyself (GST_OBJECT_CAST (pad), padtag);
|
||||
}
|
||||
pads = g_list_previous (pads);
|
||||
}
|
||||
|
||||
return parent;
|
||||
}
|
||||
|
||||
static void
|
||||
gst_element_restore_thyself (GstObject * object, xmlNodePtr self)
|
||||
{
|
||||
xmlNodePtr children;
|
||||
GstElement *element;
|
||||
gchar *name = NULL;
|
||||
gchar *value = NULL;
|
||||
|
||||
element = GST_ELEMENT_CAST (object);
|
||||
g_return_if_fail (element != NULL);
|
||||
|
||||
/* parameters */
|
||||
children = self->xmlChildrenNode;
|
||||
while (children) {
|
||||
if (!strcmp ((char *) children->name, "param")) {
|
||||
xmlNodePtr child = children->xmlChildrenNode;
|
||||
|
||||
while (child) {
|
||||
if (!strcmp ((char *) child->name, "name")) {
|
||||
name = (gchar *) xmlNodeGetContent (child);
|
||||
} else if (!strcmp ((char *) child->name, "value")) {
|
||||
value = (gchar *) xmlNodeGetContent (child);
|
||||
}
|
||||
child = child->next;
|
||||
}
|
||||
/* FIXME: can this just be g_object_set ? */
|
||||
gst_util_set_object_arg (G_OBJECT (element), name, value);
|
||||
/* g_object_set (G_OBJECT (element), name, value, NULL); */
|
||||
g_free (name);
|
||||
g_free (value);
|
||||
}
|
||||
children = children->next;
|
||||
}
|
||||
|
||||
/* pads */
|
||||
children = self->xmlChildrenNode;
|
||||
while (children) {
|
||||
if (!strcmp ((char *) children->name, "pad")) {
|
||||
gst_pad_load_and_link (children, GST_OBJECT_CAST (element));
|
||||
}
|
||||
children = children->next;
|
||||
}
|
||||
|
||||
if (GST_OBJECT_CLASS (parent_class)->restore_thyself)
|
||||
(GST_OBJECT_CLASS (parent_class)->restore_thyself) (object, self);
|
||||
}
|
||||
#endif /* GST_DISABLE_LOADSAVE */
|
||||
|
||||
static void
|
||||
gst_element_set_bus_func (GstElement * element, GstBus * bus)
|
||||
{
|
||||
|
|
|
@ -673,9 +673,6 @@ GList* gst_element_class_get_pad_template_list (GstElementClass
|
|||
/* element class meta data */
|
||||
void gst_element_class_set_documentation_uri (GstElementClass * klass, const gchar *uri);
|
||||
void gst_element_class_set_icon_name (GstElementClass * klass, const gchar *name);
|
||||
#ifndef GST_DISABLE_DEPRECATED
|
||||
void gst_element_class_set_details (GstElementClass *klass, const GstElementDetails *details);
|
||||
#endif
|
||||
void gst_element_class_set_details_simple (GstElementClass *klass,
|
||||
const gchar *longname,
|
||||
const gchar *classification,
|
||||
|
@ -752,9 +749,6 @@ gboolean gst_element_add_pad (GstElement *element, Gs
|
|||
gboolean gst_element_remove_pad (GstElement *element, GstPad *pad);
|
||||
void gst_element_no_more_pads (GstElement *element);
|
||||
|
||||
#ifndef GST_DISABLE_DEPRECATED
|
||||
GstPad* gst_element_get_pad (GstElement *element, const gchar *name);
|
||||
#endif /* GST_DISABLE_DEPRECATED */
|
||||
GstPad* gst_element_get_static_pad (GstElement *element, const gchar *name);
|
||||
GstPad* gst_element_get_request_pad (GstElement *element, const gchar *name);
|
||||
void gst_element_release_request_pad (GstElement *element, GstPad *pad);
|
||||
|
|
|
@ -77,14 +77,6 @@ static GstPad *gst_proxy_pad_get_target (GstPad * pad);
|
|||
static void gst_proxy_pad_dispose (GObject * object);
|
||||
static void gst_proxy_pad_finalize (GObject * object);
|
||||
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
#ifdef GST_DISABLE_DEPRECATED
|
||||
#include <libxml/parser.h>
|
||||
#endif
|
||||
static xmlNodePtr gst_proxy_pad_save_thyself (GstObject * object,
|
||||
xmlNodePtr parent);
|
||||
#endif
|
||||
|
||||
static void on_src_target_notify (GstPad * target,
|
||||
GParamSpec * unused, gpointer user_data);
|
||||
|
||||
|
@ -384,16 +376,6 @@ gst_proxy_pad_class_init (GstProxyPadClass * klass)
|
|||
gobject_class->dispose = gst_proxy_pad_dispose;
|
||||
gobject_class->finalize = gst_proxy_pad_finalize;
|
||||
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
{
|
||||
GstObjectClass *gstobject_class = (GstObjectClass *) klass;
|
||||
|
||||
gstobject_class->save_thyself =
|
||||
((gpointer (*)(GstObject * object,
|
||||
gpointer self)) *
|
||||
GST_DEBUG_FUNCPTR (gst_proxy_pad_save_thyself));
|
||||
}
|
||||
#endif
|
||||
/* Register common function pointer descriptions */
|
||||
GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_query_type);
|
||||
GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_event);
|
||||
|
@ -462,60 +444,6 @@ gst_proxy_pad_init (GstProxyPad * ppad)
|
|||
gst_pad_set_unlink_function (pad, gst_proxy_pad_do_unlink);
|
||||
}
|
||||
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
/**
|
||||
* gst_proxy_pad_save_thyself:
|
||||
* @pad: a ghost #GstPad to save.
|
||||
* @parent: the parent #xmlNodePtr to save the description in.
|
||||
*
|
||||
* Saves the ghost pad into an xml representation.
|
||||
*
|
||||
* Returns: the #xmlNodePtr representation of the pad.
|
||||
*/
|
||||
static xmlNodePtr
|
||||
gst_proxy_pad_save_thyself (GstObject * object, xmlNodePtr parent)
|
||||
{
|
||||
xmlNodePtr self;
|
||||
GstProxyPad *proxypad;
|
||||
GstPad *pad;
|
||||
GstPad *peer;
|
||||
|
||||
g_return_val_if_fail (GST_IS_PROXY_PAD (object), NULL);
|
||||
|
||||
self = xmlNewChild (parent, NULL, (xmlChar *) "ghostpad", NULL);
|
||||
xmlNewChild (self, NULL, (xmlChar *) "name",
|
||||
(xmlChar *) GST_OBJECT_NAME (object));
|
||||
xmlNewChild (self, NULL, (xmlChar *) "parent",
|
||||
(xmlChar *) GST_OBJECT_NAME (GST_OBJECT_PARENT (object)));
|
||||
|
||||
proxypad = GST_PROXY_PAD_CAST (object);
|
||||
pad = GST_PAD_CAST (proxypad);
|
||||
peer = GST_PAD_CAST (pad->peer);
|
||||
|
||||
if (GST_IS_PAD (pad)) {
|
||||
if (GST_PAD_IS_SRC (pad))
|
||||
xmlNewChild (self, NULL, (xmlChar *) "direction", (xmlChar *) "source");
|
||||
else if (GST_PAD_IS_SINK (pad))
|
||||
xmlNewChild (self, NULL, (xmlChar *) "direction", (xmlChar *) "sink");
|
||||
else
|
||||
xmlNewChild (self, NULL, (xmlChar *) "direction", (xmlChar *) "unknown");
|
||||
} else {
|
||||
xmlNewChild (self, NULL, (xmlChar *) "direction", (xmlChar *) "unknown");
|
||||
}
|
||||
if (GST_IS_PAD (peer)) {
|
||||
gchar *content = g_strdup_printf ("%s.%s",
|
||||
GST_OBJECT_NAME (GST_PAD_PARENT (peer)), GST_PAD_NAME (peer));
|
||||
|
||||
xmlNewChild (self, NULL, (xmlChar *) "peer", (xmlChar *) content);
|
||||
g_free (content);
|
||||
} else {
|
||||
xmlNewChild (self, NULL, (xmlChar *) "peer", NULL);
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
#endif /* GST_DISABLE_LOADSAVE */
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* Ghost pads, implemented as a pair of proxy pads (sort of)
|
||||
|
|
205
gst/gstobject.c
205
gst/gstobject.c
|
@ -104,9 +104,6 @@ enum
|
|||
{
|
||||
PARENT_SET,
|
||||
PARENT_UNSET,
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
OBJECT_SAVED,
|
||||
#endif
|
||||
DEEP_NOTIFY,
|
||||
LAST_SIGNAL
|
||||
};
|
||||
|
@ -134,10 +131,6 @@ typedef struct _GstSignalObjectClass GstSignalObjectClass;
|
|||
|
||||
static GType gst_signal_object_get_type (void);
|
||||
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
static guint gst_signal_object_signals[SO_LAST_SIGNAL] = { 0 };
|
||||
#endif
|
||||
|
||||
static void gst_object_set_property (GObject * object, guint prop_id,
|
||||
const GValue * value, GParamSpec * pspec);
|
||||
static void gst_object_get_property (GObject * object, guint prop_id,
|
||||
|
@ -150,24 +143,6 @@ static void gst_object_finalize (GObject * object);
|
|||
|
||||
static gboolean gst_object_set_name_default (GstObject * object);
|
||||
|
||||
#ifdef GST_DISABLE_DEPRECATED
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
#undef GstXmlNodePtr
|
||||
#define GstXmlNodePtr xmlNodePtr
|
||||
#include <libxml/parser.h>
|
||||
GstXmlNodePtr gst_object_save_thyself (GstObject * object,
|
||||
GstXmlNodePtr parent);
|
||||
void gst_object_restore_thyself (GstObject * object, GstXmlNodePtr parent);
|
||||
void gst_class_signal_emit_by_name (GstObject * object, const gchar * name,
|
||||
GstXmlNodePtr self);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
static void gst_object_real_restore_thyself (GstObject * object,
|
||||
GstXmlNodePtr self);
|
||||
#endif
|
||||
|
||||
static GObjectClass *parent_class = NULL;
|
||||
static guint gst_object_signals[LAST_SIGNAL] = { 0 };
|
||||
|
||||
|
@ -216,28 +191,6 @@ gst_object_class_init (GstObjectClass * klass)
|
|||
G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstObjectClass, parent_unset), NULL,
|
||||
NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GST_TYPE_OBJECT);
|
||||
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
/**
|
||||
* GstObject::object-saved:
|
||||
* @gstobject: a #GstObject
|
||||
* @xml_node: the xmlNodePtr of the parent node
|
||||
*
|
||||
* Trigered whenever a new object is saved to XML. You can connect to this
|
||||
* signal to insert custom XML tags into the core XML.
|
||||
*/
|
||||
/* FIXME This should be the GType of xmlNodePtr instead of G_TYPE_POINTER
|
||||
* (if libxml would use GObject)
|
||||
*/
|
||||
gst_object_signals[OBJECT_SAVED] =
|
||||
g_signal_new ("object-saved", G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstObjectClass, object_saved), NULL,
|
||||
NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER);
|
||||
|
||||
klass->restore_thyself =
|
||||
((void (*)(GstObject * object,
|
||||
gpointer self)) *gst_object_real_restore_thyself);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* GstObject::deep-notify:
|
||||
* @gstobject: a #GstObject
|
||||
|
@ -745,71 +698,6 @@ gst_object_get_name (GstObject * object)
|
|||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_object_set_name_prefix:
|
||||
* @object: a #GstObject
|
||||
* @name_prefix: new name prefix of @object
|
||||
*
|
||||
* Sets the name prefix of @object to @name_prefix.
|
||||
* This function makes a copy of the provided name prefix, so the caller
|
||||
* retains ownership of the name prefix it sent.
|
||||
*
|
||||
* MT safe. This function grabs and releases @object's LOCK.
|
||||
*
|
||||
* Deprecated: deprecated because the name prefix has never actually been used
|
||||
* for anything.
|
||||
*/
|
||||
#ifndef GST_REMOVE_DEPRECATED
|
||||
#ifdef GST_DISABLE_DEPRECATED
|
||||
void gst_object_set_name_prefix (GstObject * object, const gchar * name_prefix);
|
||||
#endif
|
||||
void
|
||||
gst_object_set_name_prefix (GstObject * object, const gchar * name_prefix)
|
||||
{
|
||||
g_return_if_fail (GST_IS_OBJECT (object));
|
||||
|
||||
GST_OBJECT_LOCK (object);
|
||||
g_free (object->name_prefix);
|
||||
object->name_prefix = g_strdup (name_prefix); /* NULL gives NULL */
|
||||
GST_OBJECT_UNLOCK (object);
|
||||
}
|
||||
#endif /* GST_REMOVE_DEPRECATED */
|
||||
|
||||
/**
|
||||
* gst_object_get_name_prefix:
|
||||
* @object: a #GstObject
|
||||
*
|
||||
* Returns a copy of the name prefix of @object.
|
||||
* Caller should g_free() the return value after usage.
|
||||
* For a prefixless object, this returns NULL, which you can safely g_free()
|
||||
* as well.
|
||||
*
|
||||
* Returns: the name prefix of @object. g_free() after usage.
|
||||
*
|
||||
* MT safe. This function grabs and releases @object's LOCK.
|
||||
*
|
||||
* Deprecated: deprecated because the name prefix has never actually been used
|
||||
* for anything.
|
||||
*/
|
||||
#ifndef GST_REMOVE_DEPRECATED
|
||||
#ifdef GST_DISABLE_DEPRECATED
|
||||
gchar *gst_object_get_name_prefix (GstObject * object);
|
||||
#endif
|
||||
gchar *
|
||||
gst_object_get_name_prefix (GstObject * object)
|
||||
{
|
||||
gchar *result = NULL;
|
||||
|
||||
g_return_val_if_fail (GST_IS_OBJECT (object), NULL);
|
||||
|
||||
GST_OBJECT_LOCK (object);
|
||||
result = g_strdup (object->name_prefix);
|
||||
GST_OBJECT_UNLOCK (object);
|
||||
|
||||
return result;
|
||||
}
|
||||
#endif /* GST_REMOVE_DEPRECATED */
|
||||
|
||||
/**
|
||||
* gst_object_set_parent:
|
||||
* @object: a #GstObject
|
||||
|
@ -1005,65 +893,6 @@ gst_object_check_uniqueness (GList * list, const gchar * name)
|
|||
}
|
||||
|
||||
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
/**
|
||||
* gst_object_save_thyself:
|
||||
* @object: a #GstObject to save
|
||||
* @parent: The parent XML node to save @object into
|
||||
*
|
||||
* Saves @object into the parent XML node.
|
||||
*
|
||||
* Returns: the new xmlNodePtr with the saved object
|
||||
*/
|
||||
GstXmlNodePtr
|
||||
gst_object_save_thyself (GstObject * object, GstXmlNodePtr parent)
|
||||
{
|
||||
GstObjectClass *oclass;
|
||||
|
||||
g_return_val_if_fail (GST_IS_OBJECT (object), parent);
|
||||
g_return_val_if_fail (parent != NULL, parent);
|
||||
|
||||
oclass = GST_OBJECT_GET_CLASS (object);
|
||||
|
||||
if (oclass->save_thyself)
|
||||
oclass->save_thyself (object, parent);
|
||||
|
||||
g_signal_emit (object, gst_object_signals[OBJECT_SAVED], 0, parent);
|
||||
|
||||
return parent;
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_object_restore_thyself:
|
||||
* @object: a #GstObject to load into
|
||||
* @self: The XML node to load @object from
|
||||
*
|
||||
* Restores @object with the data from the parent XML node.
|
||||
*/
|
||||
void
|
||||
gst_object_restore_thyself (GstObject * object, GstXmlNodePtr self)
|
||||
{
|
||||
GstObjectClass *oclass;
|
||||
|
||||
g_return_if_fail (GST_IS_OBJECT (object));
|
||||
g_return_if_fail (self != NULL);
|
||||
|
||||
oclass = GST_OBJECT_GET_CLASS (object);
|
||||
|
||||
if (oclass->restore_thyself)
|
||||
oclass->restore_thyself (object, self);
|
||||
}
|
||||
|
||||
static void
|
||||
gst_object_real_restore_thyself (GstObject * object, GstXmlNodePtr self)
|
||||
{
|
||||
g_return_if_fail (GST_IS_OBJECT (object));
|
||||
g_return_if_fail (self != NULL);
|
||||
|
||||
gst_class_signal_emit_by_name (object, "object_loaded", self);
|
||||
}
|
||||
#endif /* GST_DISABLE_LOADSAVE */
|
||||
|
||||
static void
|
||||
gst_object_set_property (GObject * object, guint prop_id,
|
||||
const GValue * value, GParamSpec * pspec)
|
||||
|
@ -1194,11 +1023,6 @@ struct _GstSignalObjectClass
|
|||
{
|
||||
GObjectClass parent_class;
|
||||
|
||||
/* signals */
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
void (*object_loaded) (GstSignalObject * object, GstObject * new,
|
||||
GstXmlNodePtr self);
|
||||
#endif
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (GstSignalObject, gst_signal_object, G_TYPE_OBJECT);
|
||||
|
@ -1208,13 +1032,6 @@ gst_signal_object_class_init (GstSignalObjectClass * klass)
|
|||
{
|
||||
parent_class = g_type_class_peek_parent (klass);
|
||||
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
gst_signal_object_signals[SO_OBJECT_LOADED] =
|
||||
g_signal_new ("object-loaded", G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstSignalObjectClass, object_loaded),
|
||||
NULL, NULL, gst_marshal_VOID__OBJECT_POINTER, G_TYPE_NONE, 2,
|
||||
G_TYPE_OBJECT, G_TYPE_POINTER);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1242,25 +1059,3 @@ gst_class_signal_connect (GstObjectClass * klass,
|
|||
return g_signal_connect (klass->signal_object, name, G_CALLBACK (func),
|
||||
func_data);
|
||||
}
|
||||
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
/**
|
||||
* gst_class_signal_emit_by_name:
|
||||
* @object: a #GstObject that emits the signal
|
||||
* @name: the name of the signal to emit
|
||||
* @self: data for the signal
|
||||
*
|
||||
* emits the named class signal.
|
||||
*/
|
||||
void
|
||||
gst_class_signal_emit_by_name (GstObject * object,
|
||||
const gchar * name, GstXmlNodePtr self)
|
||||
{
|
||||
GstObjectClass *oclass;
|
||||
|
||||
oclass = GST_OBJECT_GET_CLASS (object);
|
||||
|
||||
g_signal_emit_by_name (oclass->signal_object, name, object, self);
|
||||
}
|
||||
|
||||
#endif /* GST_DISABLE_LOADSAVE */
|
||||
|
|
|
@ -39,14 +39,6 @@ G_BEGIN_DECLS
|
|||
#define GST_OBJECT_CAST(obj) ((GstObject*)(obj))
|
||||
#define GST_OBJECT_CLASS_CAST(klass) ((GstObjectClass*)(klass))
|
||||
|
||||
/* make sure we don't change the object size but still make it compile
|
||||
* without libxml */
|
||||
#if defined(GST_DISABLE_LOADSAVE) || defined(GST_DISABLE_DEPRECATED)
|
||||
#define GstXmlNodePtr gpointer
|
||||
#else
|
||||
#define GstXmlNodePtr xmlNodePtr
|
||||
#endif
|
||||
|
||||
/**
|
||||
* GstObjectFlags:
|
||||
* @GST_OBJECT_DISPOSING: the object is been destroyed, don't use it anymore
|
||||
|
@ -247,10 +239,7 @@ struct _GstObject {
|
|||
* @lock: class lock to be used with GST_CLASS_GET_LOCK(), GST_CLASS_LOCK(), GST_CLASS_UNLOCK() and others.
|
||||
* @parent_set: default signal handler
|
||||
* @parent_unset: default signal handler
|
||||
* @object_saved: default signal handler
|
||||
* @deep_notify: default signal handler
|
||||
* @save_thyself: xml serialisation
|
||||
* @restore_thyself: xml de-serialisation
|
||||
*
|
||||
* GStreamer base object class.
|
||||
*/
|
||||
|
@ -267,15 +256,10 @@ struct _GstObjectClass {
|
|||
/* FIXME-0.11: remove, and pass NULL in g_signal_new(), we never used them */
|
||||
void (*parent_set) (GstObject * object, GstObject * parent);
|
||||
void (*parent_unset) (GstObject * object, GstObject * parent);
|
||||
/* FIXME 0.11: Remove this, it's deprecated */
|
||||
void (*object_saved) (GstObject * object, GstXmlNodePtr parent);
|
||||
void (*deep_notify) (GstObject * object, GstObject * orig, GParamSpec * pspec);
|
||||
|
||||
/*< public >*/
|
||||
/* virtual methods for subclasses */
|
||||
/* FIXME 0.11: Remove this, it's deprecated */
|
||||
GstXmlNodePtr (*save_thyself) (GstObject * object, GstXmlNodePtr parent);
|
||||
void (*restore_thyself) (GstObject * object, GstXmlNodePtr self);
|
||||
|
||||
/*< private >*/
|
||||
gpointer _gst_reserved[GST_PADDING];
|
||||
|
@ -288,11 +272,6 @@ GType gst_object_get_type (void);
|
|||
gboolean gst_object_set_name (GstObject *object, const gchar *name);
|
||||
gchar* gst_object_get_name (GstObject *object);
|
||||
|
||||
#ifndef GST_DISABLE_DEPRECATED
|
||||
void gst_object_set_name_prefix (GstObject *object, const gchar *name_prefix);
|
||||
gchar* gst_object_get_name_prefix (GstObject *object);
|
||||
#endif
|
||||
|
||||
/* parentage routines */
|
||||
gboolean gst_object_set_parent (GstObject *object, GstObject *parent);
|
||||
GstObject* gst_object_get_parent (GstObject *object);
|
||||
|
@ -317,37 +296,12 @@ gchar * gst_object_get_path_string (GstObject *object);
|
|||
/* misc utils */
|
||||
gboolean gst_object_check_uniqueness (GList *list, const gchar *name);
|
||||
|
||||
/* load/save */
|
||||
#ifndef GST_DISABLE_DEPRECATED
|
||||
#ifndef GST_DISABLE_LOADSAVE
|
||||
GstXmlNodePtr gst_object_save_thyself (GstObject *object, GstXmlNodePtr parent);
|
||||
void gst_object_restore_thyself (GstObject *object, GstXmlNodePtr self);
|
||||
#else
|
||||
#if defined __GNUC__ && __GNUC__ >= 3
|
||||
#pragma GCC poison gst_object_save_thyself
|
||||
#pragma GCC poison gst_object_restore_thyself
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* class signal stuff */
|
||||
guint gst_class_signal_connect (GstObjectClass *klass,
|
||||
const gchar *name,
|
||||
gpointer func,
|
||||
gpointer func_data);
|
||||
|
||||
#ifndef GST_DISABLE_DEPRECATED
|
||||
#ifndef GST_DISABLE_LOADSAVE
|
||||
void gst_class_signal_emit_by_name (GstObject * object,
|
||||
const gchar * name,
|
||||
GstXmlNodePtr self);
|
||||
#else
|
||||
#if defined __GNUC__ && __GNUC__ >= 3
|
||||
#pragma GCC poison gst_class_signal_emit_by_name
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GST_OBJECT_H__ */
|
||||
|
|
398
gst/gstpad.c
398
gst/gstpad.c
|
@ -132,23 +132,6 @@ static void gst_pad_set_pad_template (GstPad * pad, GstPadTemplate * templ);
|
|||
static gboolean gst_pad_activate_default (GstPad * pad);
|
||||
static gboolean gst_pad_acceptcaps_default (GstPad * pad, GstCaps * caps);
|
||||
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
#ifdef GST_DISABLE_DEPRECATED
|
||||
#include <libxml/parser.h>
|
||||
#endif
|
||||
static xmlNodePtr gst_pad_save_thyself (GstObject * object, xmlNodePtr parent);
|
||||
void gst_pad_load_and_link (xmlNodePtr self, GstObject * parent);
|
||||
#endif
|
||||
|
||||
/* Some deprecated stuff that we need inside here for
|
||||
* backwards compatibility */
|
||||
#ifdef GST_DISABLE_DEPRECATED
|
||||
#ifndef GST_REMOVE_DEPRECATED
|
||||
#define GST_PAD_INTLINKFUNC(pad) (GST_PAD_CAST(pad)->intlinkfunc)
|
||||
GList *gst_pad_get_internal_links_default (GstPad * pad);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static GstObjectClass *parent_class = NULL;
|
||||
static guint gst_pad_signals[LAST_SIGNAL] = { 0 };
|
||||
|
||||
|
@ -344,11 +327,6 @@ gst_pad_class_init (GstPadClass * klass)
|
|||
"The GstPadTemplate of this pad", GST_TYPE_PAD_TEMPLATE,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
gstobject_class->save_thyself =
|
||||
((gpointer (*)(GstObject * object,
|
||||
gpointer self)) * GST_DEBUG_FUNCPTR (gst_pad_save_thyself));
|
||||
#endif
|
||||
gstobject_class->path_string_separator = ".";
|
||||
|
||||
/* Register common function pointer descriptions */
|
||||
|
@ -356,9 +334,6 @@ gst_pad_class_init (GstPadClass * klass)
|
|||
GST_DEBUG_REGISTER_FUNCPTR (gst_pad_event_default);
|
||||
GST_DEBUG_REGISTER_FUNCPTR (gst_pad_get_query_types_default);
|
||||
GST_DEBUG_REGISTER_FUNCPTR (gst_pad_query_default);
|
||||
#ifndef GST_REMOVE_DEPRECATED
|
||||
GST_DEBUG_REGISTER_FUNCPTR (gst_pad_get_internal_links_default);
|
||||
#endif
|
||||
GST_DEBUG_REGISTER_FUNCPTR (gst_pad_iterate_internal_links_default);
|
||||
GST_DEBUG_REGISTER_FUNCPTR (gst_pad_acceptcaps_default);
|
||||
|
||||
|
@ -384,9 +359,6 @@ gst_pad_init (GstPad * pad)
|
|||
GST_PAD_EVENTFUNC (pad) = gst_pad_event_default;
|
||||
GST_PAD_QUERYTYPEFUNC (pad) = gst_pad_get_query_types_default;
|
||||
GST_PAD_QUERYFUNC (pad) = gst_pad_query_default;
|
||||
#ifndef GST_REMOVE_DEPRECATED
|
||||
GST_PAD_INTLINKFUNC (pad) = gst_pad_get_internal_links_default;
|
||||
#endif
|
||||
GST_PAD_ITERINTLINKFUNC (pad) = gst_pad_iterate_internal_links_default;
|
||||
|
||||
GST_PAD_ACCEPTCAPSFUNC (pad) = gst_pad_acceptcaps_default;
|
||||
|
@ -1490,32 +1462,6 @@ gst_pad_set_iterate_internal_links_function (GstPad * pad,
|
|||
GST_DEBUG_FUNCPTR_NAME (iterintlink));
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_pad_set_internal_link_function:
|
||||
* @pad: a #GstPad of either direction.
|
||||
* @intlink: the #GstPadIntLinkFunction to set.
|
||||
*
|
||||
* Sets the given internal link function for the pad.
|
||||
*
|
||||
* Deprecated: Use the thread-safe gst_pad_set_iterate_internal_links_function()
|
||||
*/
|
||||
#ifndef GST_REMOVE_DEPRECATED
|
||||
#ifdef GST_DISABLE_DEPRECATED
|
||||
void
|
||||
gst_pad_set_internal_link_function (GstPad * pad,
|
||||
GstPadIntLinkFunction intlink);
|
||||
#endif
|
||||
void
|
||||
gst_pad_set_internal_link_function (GstPad * pad, GstPadIntLinkFunction intlink)
|
||||
{
|
||||
g_return_if_fail (GST_IS_PAD (pad));
|
||||
|
||||
GST_PAD_INTLINKFUNC (pad) = intlink;
|
||||
GST_CAT_DEBUG_OBJECT (GST_CAT_PADS, pad, "internal link set to %s",
|
||||
GST_DEBUG_FUNCPTR_NAME (intlink));
|
||||
}
|
||||
#endif /* GST_REMOVE_DEPRECATED */
|
||||
|
||||
/**
|
||||
* gst_pad_set_link_function:
|
||||
* @pad: a #GstPad.
|
||||
|
@ -3200,21 +3146,6 @@ gst_pad_alloc_buffer_and_set_caps (GstPad * pad, guint64 offset, gint size,
|
|||
}
|
||||
|
||||
|
||||
#ifndef GST_REMOVE_DEPRECATED
|
||||
typedef struct
|
||||
{
|
||||
GList *list;
|
||||
guint32 cookie;
|
||||
} IntLinkIterData;
|
||||
|
||||
static void
|
||||
int_link_iter_data_free (IntLinkIterData * data)
|
||||
{
|
||||
g_list_free (data->list);
|
||||
g_slice_free (IntLinkIterData, data);
|
||||
}
|
||||
#endif
|
||||
|
||||
static GstIteratorItem
|
||||
iterate_pad (GstIterator * it, GstPad * pad)
|
||||
{
|
||||
|
@ -3250,35 +3181,6 @@ gst_pad_iterate_internal_links_default (GstPad * pad)
|
|||
|
||||
g_return_val_if_fail (GST_IS_PAD (pad), NULL);
|
||||
|
||||
#ifndef GST_REMOVE_DEPRECATED
|
||||
/* when we get here, the default handler for the iterate links is called,
|
||||
* which means that the user has not installed a custom one. We first check if
|
||||
* there is maybe a custom legacy function we can call. */
|
||||
if (GST_PAD_INTLINKFUNC (pad) &&
|
||||
GST_PAD_INTLINKFUNC (pad) != gst_pad_get_internal_links_default) {
|
||||
IntLinkIterData *data;
|
||||
|
||||
/* make an iterator for the list. We can't protect the list with a
|
||||
* cookie. If we would take the cookie of the parent element, we need to
|
||||
* have a parent, which is not required for GST_PAD_INTLINKFUNC(). We could
|
||||
* cache the per-pad list and invalidate the list when a new call to
|
||||
* INTLINKFUNC() returned a different list but then this would only work if
|
||||
* two concurrent iterators were used and the last iterator would still be
|
||||
* thread-unsafe. Just don't use this method anymore. */
|
||||
data = g_slice_new (IntLinkIterData);
|
||||
data->list = GST_PAD_INTLINKFUNC (pad) (pad);
|
||||
data->cookie = 0;
|
||||
|
||||
GST_WARNING_OBJECT (pad, "Making unsafe iterator");
|
||||
|
||||
cookie = &data->cookie;
|
||||
padlist = &data->list;
|
||||
owner = data;
|
||||
dispose = (GstIteratorDisposeFunction) int_link_iter_data_free;
|
||||
/* reuse the pad lock, it's all we have here */
|
||||
lock = GST_OBJECT_GET_LOCK (pad);
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
GstElement *parent;
|
||||
|
||||
|
@ -3346,151 +3248,6 @@ gst_pad_iterate_internal_links (GstPad * pad)
|
|||
return res;
|
||||
}
|
||||
|
||||
#ifndef GST_REMOVE_DEPRECATED
|
||||
static void
|
||||
add_unref_pad_to_list (GstPad * pad, GList ** list)
|
||||
{
|
||||
*list = g_list_prepend (*list, pad);
|
||||
gst_object_unref (pad);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* gst_pad_get_internal_links_default:
|
||||
* @pad: the #GstPad to get the internal links of.
|
||||
*
|
||||
* Gets a list of pads to which the given pad is linked to
|
||||
* inside of the parent element.
|
||||
* This is the default handler, and thus returns a list of all of the
|
||||
* pads inside the parent element with opposite direction.
|
||||
*
|
||||
* The caller must free this list after use with g_list_free().
|
||||
*
|
||||
* Returns: a newly allocated #GList of pads, or NULL if the pad has no parent.
|
||||
*
|
||||
* Not MT safe.
|
||||
*
|
||||
* Deprecated: This function does not ref the pads in the list so that they
|
||||
* could become invalid by the time the application accesses them. It's also
|
||||
* possible that the list changes while handling the pads, which the caller of
|
||||
* this function is unable to know. Use the thread-safe
|
||||
* gst_pad_iterate_internal_links_default() instead.
|
||||
*/
|
||||
#ifndef GST_REMOVE_DEPRECATED
|
||||
GList *
|
||||
gst_pad_get_internal_links_default (GstPad * pad)
|
||||
{
|
||||
GList *res = NULL;
|
||||
GstElement *parent;
|
||||
|
||||
g_return_val_if_fail (GST_IS_PAD (pad), NULL);
|
||||
|
||||
GST_WARNING_OBJECT (pad, "Unsafe internal links used");
|
||||
|
||||
/* when we get here, the default handler for get_internal_links is called,
|
||||
* which means that the user has not installed a custom one. We first check if
|
||||
* there is maybe a custom iterate function we can call. */
|
||||
if (GST_PAD_ITERINTLINKFUNC (pad) &&
|
||||
GST_PAD_ITERINTLINKFUNC (pad) != gst_pad_iterate_internal_links_default) {
|
||||
GstIterator *it;
|
||||
GstIteratorResult ires;
|
||||
gboolean done = FALSE;
|
||||
|
||||
it = gst_pad_iterate_internal_links (pad);
|
||||
/* loop over the iterator and put all elements into a list, we also
|
||||
* immediatly unref them, which is bad. */
|
||||
do {
|
||||
ires = gst_iterator_foreach (it, (GFunc) add_unref_pad_to_list, &res);
|
||||
switch (ires) {
|
||||
case GST_ITERATOR_OK:
|
||||
case GST_ITERATOR_DONE:
|
||||
case GST_ITERATOR_ERROR:
|
||||
done = TRUE;
|
||||
break;
|
||||
case GST_ITERATOR_RESYNC:
|
||||
/* restart, discard previous list */
|
||||
gst_iterator_resync (it);
|
||||
g_list_free (res);
|
||||
res = NULL;
|
||||
break;
|
||||
}
|
||||
} while (!done);
|
||||
|
||||
gst_iterator_free (it);
|
||||
} else {
|
||||
/* lock pad, check and ref parent */
|
||||
GST_OBJECT_LOCK (pad);
|
||||
parent = GST_PAD_PARENT (pad);
|
||||
if (!parent || !GST_IS_ELEMENT (parent))
|
||||
goto no_parent;
|
||||
|
||||
parent = gst_object_ref (parent);
|
||||
GST_OBJECT_UNLOCK (pad);
|
||||
|
||||
/* now lock the parent while we copy the pads */
|
||||
GST_OBJECT_LOCK (parent);
|
||||
if (pad->direction == GST_PAD_SRC)
|
||||
res = g_list_copy (parent->sinkpads);
|
||||
else
|
||||
res = g_list_copy (parent->srcpads);
|
||||
GST_OBJECT_UNLOCK (parent);
|
||||
|
||||
gst_object_unref (parent);
|
||||
}
|
||||
|
||||
/* At this point pads can be changed and unreffed. Nothing we can do about it
|
||||
* because for compatibility reasons this function cannot ref the pads or
|
||||
* notify the app that the list changed. */
|
||||
|
||||
return res;
|
||||
|
||||
no_parent:
|
||||
{
|
||||
GST_DEBUG_OBJECT (pad, "no parent");
|
||||
GST_OBJECT_UNLOCK (pad);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
#endif /* GST_REMOVE_DEPRECATED */
|
||||
|
||||
/**
|
||||
* gst_pad_get_internal_links:
|
||||
* @pad: the #GstPad to get the internal links of.
|
||||
*
|
||||
* Gets a list of pads to which the given pad is linked to
|
||||
* inside of the parent element.
|
||||
* The caller must free this list after use.
|
||||
*
|
||||
* Not MT safe.
|
||||
*
|
||||
* Returns: a newly allocated #GList of pads, free with g_list_free().
|
||||
*
|
||||
* Deprecated: This function does not ref the pads in the list so that they
|
||||
* could become invalid by the time the application accesses them. It's also
|
||||
* possible that the list changes while handling the pads, which the caller of
|
||||
* this function is unable to know. Use the thread-safe
|
||||
* gst_pad_iterate_internal_links() instead.
|
||||
*/
|
||||
#ifndef GST_REMOVE_DEPRECATED
|
||||
#ifdef GST_DISABLE_DEPRECATED
|
||||
GList *gst_pad_get_internal_links (GstPad * pad);
|
||||
#endif
|
||||
GList *
|
||||
gst_pad_get_internal_links (GstPad * pad)
|
||||
{
|
||||
GList *res = NULL;
|
||||
|
||||
g_return_val_if_fail (GST_IS_PAD (pad), NULL);
|
||||
|
||||
GST_WARNING_OBJECT (pad, "Calling unsafe internal links");
|
||||
|
||||
if (GST_PAD_INTLINKFUNC (pad))
|
||||
res = GST_PAD_INTLINKFUNC (pad) (pad);
|
||||
|
||||
return res;
|
||||
}
|
||||
#endif /* GST_REMOVE_DEPRECATED */
|
||||
|
||||
static gboolean
|
||||
gst_pad_event_default_dispatch (GstPad * pad, GstEvent * event)
|
||||
{
|
||||
|
@ -3802,161 +3559,6 @@ gst_pad_query_default (GstPad * pad, GstQuery * query)
|
|||
}
|
||||
}
|
||||
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
/* FIXME: why isn't this on a GstElement ? */
|
||||
/**
|
||||
* gst_pad_load_and_link:
|
||||
* @self: an #xmlNodePtr to read the description from.
|
||||
* @parent: the #GstObject element that owns the pad.
|
||||
*
|
||||
* Reads the pad definition from the XML node and links the given pad
|
||||
* in the element to a pad of an element up in the hierarchy.
|
||||
*/
|
||||
void
|
||||
gst_pad_load_and_link (xmlNodePtr self, GstObject * parent)
|
||||
{
|
||||
xmlNodePtr field = self->xmlChildrenNode;
|
||||
GstPad *pad = NULL, *targetpad;
|
||||
GstPadTemplate *tmpl;
|
||||
gchar *peer = NULL;
|
||||
gchar **split;
|
||||
GstElement *target;
|
||||
GstObject *grandparent;
|
||||
gchar *name = NULL;
|
||||
|
||||
while (field) {
|
||||
if (!strcmp ((char *) field->name, "name")) {
|
||||
name = (gchar *) xmlNodeGetContent (field);
|
||||
pad = gst_element_get_static_pad (GST_ELEMENT (parent), name);
|
||||
if ((!pad) || ((tmpl = gst_pad_get_pad_template (pad))
|
||||
&& (GST_PAD_REQUEST == GST_PAD_TEMPLATE_PRESENCE (tmpl))))
|
||||
pad = gst_element_get_request_pad (GST_ELEMENT (parent), name);
|
||||
g_free (name);
|
||||
} else if (!strcmp ((char *) field->name, "peer")) {
|
||||
peer = (gchar *) xmlNodeGetContent (field);
|
||||
}
|
||||
field = field->next;
|
||||
}
|
||||
g_return_if_fail (pad != NULL);
|
||||
|
||||
if (peer == NULL)
|
||||
return;
|
||||
|
||||
split = g_strsplit (peer, ".", 2);
|
||||
|
||||
if (split[0] == NULL || split[1] == NULL) {
|
||||
GST_CAT_DEBUG_OBJECT (GST_CAT_XML, pad,
|
||||
"Could not parse peer '%s', leaving unlinked", peer);
|
||||
|
||||
g_free (peer);
|
||||
return;
|
||||
}
|
||||
g_free (peer);
|
||||
|
||||
g_return_if_fail (split[0] != NULL);
|
||||
g_return_if_fail (split[1] != NULL);
|
||||
|
||||
grandparent = gst_object_get_parent (parent);
|
||||
|
||||
if (grandparent && GST_IS_BIN (grandparent)) {
|
||||
target = gst_bin_get_by_name_recurse_up (GST_BIN (grandparent), split[0]);
|
||||
} else
|
||||
goto cleanup;
|
||||
|
||||
if (target == NULL)
|
||||
goto cleanup;
|
||||
|
||||
targetpad = gst_element_get_static_pad (target, split[1]);
|
||||
if (!targetpad)
|
||||
targetpad = gst_element_get_request_pad (target, split[1]);
|
||||
|
||||
if (targetpad == NULL)
|
||||
goto cleanup;
|
||||
|
||||
if (gst_pad_get_direction (pad) == GST_PAD_SRC)
|
||||
gst_pad_link (pad, targetpad);
|
||||
else
|
||||
gst_pad_link (targetpad, pad);
|
||||
|
||||
cleanup:
|
||||
g_strfreev (split);
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_pad_save_thyself:
|
||||
* @pad: a #GstPad to save.
|
||||
* @parent: the parent #xmlNodePtr to save the description in.
|
||||
*
|
||||
* Saves the pad into an xml representation.
|
||||
*
|
||||
* Returns: the #xmlNodePtr representation of the pad.
|
||||
*/
|
||||
static xmlNodePtr
|
||||
gst_pad_save_thyself (GstObject * object, xmlNodePtr parent)
|
||||
{
|
||||
GstPad *pad;
|
||||
GstPad *peer;
|
||||
|
||||
g_return_val_if_fail (GST_IS_PAD (object), NULL);
|
||||
|
||||
pad = GST_PAD_CAST (object);
|
||||
|
||||
xmlNewChild (parent, NULL, (xmlChar *) "name",
|
||||
(xmlChar *) GST_PAD_NAME (pad));
|
||||
|
||||
if (GST_PAD_IS_SRC (pad)) {
|
||||
xmlNewChild (parent, NULL, (xmlChar *) "direction", (xmlChar *) "source");
|
||||
} else if (GST_PAD_IS_SINK (pad)) {
|
||||
xmlNewChild (parent, NULL, (xmlChar *) "direction", (xmlChar *) "sink");
|
||||
} else {
|
||||
xmlNewChild (parent, NULL, (xmlChar *) "direction", (xmlChar *) "unknown");
|
||||
}
|
||||
|
||||
if (GST_PAD_PEER (pad) != NULL) {
|
||||
gchar *content;
|
||||
|
||||
peer = GST_PAD_PEER (pad);
|
||||
/* first check to see if the peer's parent's parent is the same */
|
||||
/* we just save it off */
|
||||
content = g_strdup_printf ("%s.%s",
|
||||
GST_OBJECT_NAME (GST_PAD_PARENT (peer)), GST_PAD_NAME (peer));
|
||||
xmlNewChild (parent, NULL, (xmlChar *) "peer", (xmlChar *) content);
|
||||
g_free (content);
|
||||
} else
|
||||
xmlNewChild (parent, NULL, (xmlChar *) "peer", NULL);
|
||||
|
||||
return parent;
|
||||
}
|
||||
|
||||
#if 0
|
||||
/**
|
||||
* gst_ghost_pad_save_thyself:
|
||||
* @pad: a ghost #GstPad to save.
|
||||
* @parent: the parent #xmlNodePtr to save the description in.
|
||||
*
|
||||
* Saves the ghost pad into an xml representation.
|
||||
*
|
||||
* Returns: the #xmlNodePtr representation of the pad.
|
||||
*/
|
||||
xmlNodePtr
|
||||
gst_ghost_pad_save_thyself (GstPad * pad, xmlNodePtr parent)
|
||||
{
|
||||
xmlNodePtr self;
|
||||
|
||||
g_return_val_if_fail (GST_IS_GHOST_PAD (pad), NULL);
|
||||
|
||||
self = xmlNewChild (parent, NULL, (xmlChar *) "ghostpad", NULL);
|
||||
xmlNewChild (self, NULL, (xmlChar *) "name", (xmlChar *) GST_PAD_NAME (pad));
|
||||
xmlNewChild (self, NULL, (xmlChar *) "parent",
|
||||
(xmlChar *) GST_OBJECT_NAME (GST_PAD_PARENT (pad)));
|
||||
|
||||
/* FIXME FIXME FIXME! */
|
||||
|
||||
return self;
|
||||
}
|
||||
#endif /* 0 */
|
||||
#endif /* GST_DISABLE_LOADSAVE */
|
||||
|
||||
/*
|
||||
* should be called with pad OBJECT_LOCK and STREAM_LOCK held.
|
||||
* GST_PAD_IS_BLOCKED (pad) == TRUE when this function is
|
||||
|
|
48
gst/gstpad.h
48
gst/gstpad.h
|
@ -149,41 +149,6 @@ typedef enum {
|
|||
GST_FLOW_CUSTOM_ERROR_2 = -102
|
||||
} GstFlowReturn;
|
||||
|
||||
/**
|
||||
* GST_FLOW_IS_FATAL:
|
||||
* @ret: a #GstFlowReturn value
|
||||
*
|
||||
* Macro to test if the given #GstFlowReturn value indicates a fatal
|
||||
* error. This macro is mainly used in elements driving the pipeline to decide
|
||||
* whether an error message should be posted on the bus. Note that such
|
||||
* elements may also need to post an error message in the #GST_FLOW_NOT_LINKED
|
||||
* case which is not caught by this macro.
|
||||
*
|
||||
* Deprecated: This macro is badly named and can't be used in any real
|
||||
* scenarios without additional checks.
|
||||
*/
|
||||
#ifndef GST_DISABLE_DEPRECATED
|
||||
#define GST_FLOW_IS_FATAL(ret) ((ret) <= GST_FLOW_UNEXPECTED)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* GST_FLOW_IS_SUCCESS:
|
||||
* @ret: a #GstFlowReturn value
|
||||
*
|
||||
* Macro to test if the given #GstFlowReturn value indicates a
|
||||
* successfull result
|
||||
* This macro is mainly used in elements to decide if the processing
|
||||
* of a buffer was successfull.
|
||||
*
|
||||
* Since: 0.10.7
|
||||
*
|
||||
* Deprecated: This macro is badly named and can't be used in any real
|
||||
* scenarios without additional checks.
|
||||
*/
|
||||
#ifndef GST_DISABLE_DEPRECATED
|
||||
#define GST_FLOW_IS_SUCCESS(ret) ((ret) >= GST_FLOW_OK)
|
||||
#endif
|
||||
|
||||
G_CONST_RETURN gchar* gst_flow_get_name (GstFlowReturn ret);
|
||||
GQuark gst_flow_to_quark (GstFlowReturn ret);
|
||||
|
||||
|
@ -767,9 +732,6 @@ struct _GstPadClass {
|
|||
#define GST_PAD_EVENTFUNC(pad) (GST_PAD_CAST(pad)->eventfunc)
|
||||
#define GST_PAD_QUERYTYPEFUNC(pad) (GST_PAD_CAST(pad)->querytypefunc)
|
||||
#define GST_PAD_QUERYFUNC(pad) (GST_PAD_CAST(pad)->queryfunc)
|
||||
#ifndef GST_DISABLE_DEPRECATED
|
||||
#define GST_PAD_INTLINKFUNC(pad) (GST_PAD_CAST(pad)->intlinkfunc)
|
||||
#endif
|
||||
#define GST_PAD_ITERINTLINKFUNC(pad) (GST_PAD_CAST(pad)->iterintlinkfunc)
|
||||
|
||||
#define GST_PAD_PEER(pad) (GST_PAD_CAST(pad)->peer)
|
||||
|
@ -997,12 +959,6 @@ gboolean gst_pad_pause_task (GstPad *pad);
|
|||
gboolean gst_pad_stop_task (GstPad *pad);
|
||||
|
||||
/* internal links */
|
||||
#ifndef GST_DISABLE_DEPRECATED
|
||||
void gst_pad_set_internal_link_function (GstPad *pad, GstPadIntLinkFunction intlink);
|
||||
GList* gst_pad_get_internal_links (GstPad *pad);
|
||||
GList* gst_pad_get_internal_links_default (GstPad *pad);
|
||||
#endif
|
||||
|
||||
void gst_pad_set_iterate_internal_links_function (GstPad * pad,
|
||||
GstPadIterIntLinkFunction iterintlink);
|
||||
GstIterator * gst_pad_iterate_internal_links (GstPad * pad);
|
||||
|
@ -1025,10 +981,6 @@ gboolean gst_pad_query_default (GstPad *pad, GstQuery *query);
|
|||
gboolean gst_pad_dispatcher (GstPad *pad, GstPadDispatcherFunction dispatch,
|
||||
gpointer data);
|
||||
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_DISABLE_DEPRECATED)
|
||||
void gst_pad_load_and_link (xmlNodePtr self, GstObject *parent);
|
||||
#endif
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GST_PAD_H__ */
|
||||
|
|
|
@ -604,80 +604,6 @@ gst_pipeline_get_bus (GstPipeline * pipeline)
|
|||
return gst_element_get_bus (GST_ELEMENT_CAST (pipeline));
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_pipeline_set_new_stream_time:
|
||||
* @pipeline: a #GstPipeline
|
||||
* @time: the new running time to set
|
||||
*
|
||||
* Set the new start time of @pipeline to @time. The start time is used to
|
||||
* set the base time on the elements (see gst_element_set_base_time())
|
||||
* in the PAUSED->PLAYING state transition.
|
||||
*
|
||||
* Setting @time to #GST_CLOCK_TIME_NONE will disable the pipeline's management
|
||||
* of element base time. The application will then be responsible for
|
||||
* performing base time distribution. This is sometimes useful if you want to
|
||||
* synchronize capture from multiple pipelines, and you can also ensure that the
|
||||
* pipelines have the same clock.
|
||||
*
|
||||
* MT safe.
|
||||
*
|
||||
* Deprecated: This function has the wrong name and is equivalent to
|
||||
* gst_element_set_start_time().
|
||||
*/
|
||||
#ifndef GST_REMOVE_DEPRECATED
|
||||
#ifdef GST_DISABLE_DEPRECATED
|
||||
void
|
||||
gst_pipeline_set_new_stream_time (GstPipeline * pipeline, GstClockTime time);
|
||||
#endif
|
||||
void
|
||||
gst_pipeline_set_new_stream_time (GstPipeline * pipeline, GstClockTime time)
|
||||
{
|
||||
g_return_if_fail (GST_IS_PIPELINE (pipeline));
|
||||
|
||||
gst_element_set_start_time (GST_ELEMENT_CAST (pipeline), time);
|
||||
|
||||
if (time == GST_CLOCK_TIME_NONE)
|
||||
GST_DEBUG_OBJECT (pipeline, "told not to adjust base_time");
|
||||
}
|
||||
#endif /* GST_REMOVE_DEPRECATED */
|
||||
|
||||
/**
|
||||
* gst_pipeline_get_last_stream_time:
|
||||
* @pipeline: a #GstPipeline
|
||||
*
|
||||
* Gets the last running time of @pipeline. If the pipeline is PLAYING,
|
||||
* the returned time is the running time used to configure the element's
|
||||
* base time in the PAUSED->PLAYING state. If the pipeline is PAUSED, the
|
||||
* returned time is the running time when the pipeline was paused.
|
||||
*
|
||||
* This function returns #GST_CLOCK_TIME_NONE if the pipeline was
|
||||
* configured to not handle the management of the element's base time
|
||||
* (see gst_pipeline_set_new_stream_time()).
|
||||
*
|
||||
* MT safe.
|
||||
*
|
||||
* Returns: a #GstClockTime.
|
||||
*
|
||||
* Deprecated: This function has the wrong name and is equivalent to
|
||||
* gst_element_get_start_time().
|
||||
*/
|
||||
#ifndef GST_REMOVE_DEPRECATED
|
||||
#ifdef GST_DISABLE_DEPRECATED
|
||||
GstClockTime gst_pipeline_get_last_stream_time (GstPipeline * pipeline);
|
||||
#endif
|
||||
GstClockTime
|
||||
gst_pipeline_get_last_stream_time (GstPipeline * pipeline)
|
||||
{
|
||||
GstClockTime result;
|
||||
|
||||
g_return_val_if_fail (GST_IS_PIPELINE (pipeline), GST_CLOCK_TIME_NONE);
|
||||
|
||||
result = gst_element_get_start_time (GST_ELEMENT_CAST (pipeline));
|
||||
|
||||
return result;
|
||||
}
|
||||
#endif /* GST_REMOVE_DEPRECATED */
|
||||
|
||||
static GstClock *
|
||||
gst_pipeline_provide_clock_func (GstElement * element)
|
||||
{
|
||||
|
|
|
@ -93,11 +93,6 @@ GstElement* gst_pipeline_new (const gchar *name);
|
|||
|
||||
GstBus* gst_pipeline_get_bus (GstPipeline *pipeline);
|
||||
|
||||
#ifndef GST_DISABLE_DEPRECATED
|
||||
void gst_pipeline_set_new_stream_time (GstPipeline *pipeline, GstClockTime time);
|
||||
GstClockTime gst_pipeline_get_last_stream_time (GstPipeline *pipeline);
|
||||
#endif
|
||||
|
||||
void gst_pipeline_use_clock (GstPipeline *pipeline, GstClock *clock);
|
||||
gboolean gst_pipeline_set_clock (GstPipeline *pipeline, GstClock *clock);
|
||||
GstClock* gst_pipeline_get_clock (GstPipeline *pipeline);
|
||||
|
|
|
@ -164,38 +164,6 @@ gst_plugin_error_quark (void)
|
|||
return quark;
|
||||
}
|
||||
|
||||
#ifndef GST_REMOVE_DEPRECATED
|
||||
#ifdef GST_DISABLE_DEPRECATED
|
||||
void _gst_plugin_register_static (GstPluginDesc * desc);
|
||||
#endif
|
||||
/* this function can be called in the GCC constructor extension, before
|
||||
* the _gst_plugin_initialize() was called. In that case, we store the
|
||||
* plugin description in a list to initialize it when we open the main
|
||||
* module later on.
|
||||
* When the main module is known, we can register the plugin right away.
|
||||
*/
|
||||
void
|
||||
_gst_plugin_register_static (GstPluginDesc * desc)
|
||||
{
|
||||
g_return_if_fail (desc != NULL);
|
||||
|
||||
if (!_gst_plugin_inited) {
|
||||
/* We can't use any GLib functions here, since g_thread_init hasn't been
|
||||
* called yet, and we can't call it here either, or programs that don't
|
||||
* guard their g_thread_init calls in main() will just abort */
|
||||
++_num_static_plugins;
|
||||
_static_plugins =
|
||||
realloc (_static_plugins, _num_static_plugins * sizeof (GstPluginDesc));
|
||||
/* assume strings in the GstPluginDesc are static const or live forever */
|
||||
_static_plugins[_num_static_plugins - 1] = *desc;
|
||||
} else {
|
||||
gst_plugin_register_static (desc->major_version, desc->minor_version,
|
||||
desc->name, desc->description, desc->plugin_init, desc->version,
|
||||
desc->license, desc->source, desc->package, desc->origin);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* gst_plugin_register_static:
|
||||
* @major_version: the major version number of the GStreamer core that the
|
||||
|
@ -1568,7 +1536,7 @@ gst_plugin_ext_dep_scan_dir_and_match_names (GstPlugin * plugin,
|
|||
GDir *dir;
|
||||
guint hash = 0;
|
||||
|
||||
recurse_dirs = ! !(flags & GST_PLUGIN_DEPENDENCY_FLAG_RECURSE);
|
||||
recurse_dirs = !!(flags & GST_PLUGIN_DEPENDENCY_FLAG_RECURSE);
|
||||
|
||||
dir = g_dir_open (path, 0, &err);
|
||||
if (dir == NULL) {
|
||||
|
@ -1630,8 +1598,8 @@ gst_plugin_ext_dep_scan_path_with_filenames (GstPlugin * plugin,
|
|||
if (filenames == NULL || *filenames == NULL)
|
||||
filenames = empty_filenames;
|
||||
|
||||
recurse_into_dirs = ! !(flags & GST_PLUGIN_DEPENDENCY_FLAG_RECURSE);
|
||||
partial_names = ! !(flags & GST_PLUGIN_DEPENDENCY_FLAG_FILE_NAME_IS_SUFFIX);
|
||||
recurse_into_dirs = !!(flags & GST_PLUGIN_DEPENDENCY_FLAG_RECURSE);
|
||||
partial_names = !!(flags & GST_PLUGIN_DEPENDENCY_FLAG_FILE_NAME_IS_SUFFIX);
|
||||
|
||||
/* if we can construct the exact paths to check with the data we have, just
|
||||
* stat them one by one; this is more efficient than opening the directory
|
||||
|
|
|
@ -344,10 +344,6 @@ typedef gboolean (*GstPluginFilter) (GstPlugin *plugin,
|
|||
|
||||
GType gst_plugin_get_type (void);
|
||||
|
||||
#ifndef GST_DISABLE_DEPRECATED
|
||||
void _gst_plugin_register_static (GstPluginDesc *desc);
|
||||
#endif
|
||||
|
||||
gboolean gst_plugin_register_static (gint major_version,
|
||||
gint minor_version,
|
||||
const gchar *name,
|
||||
|
|
|
@ -115,14 +115,6 @@ GstPluginFeature* gst_registry_find_feature (GstRegistry *registry, const gchar
|
|||
GstPlugin * gst_registry_lookup (GstRegistry *registry, const char *filename);
|
||||
GstPluginFeature * gst_registry_lookup_feature (GstRegistry *registry, const char *name);
|
||||
|
||||
/* These are only here because at some point they were in a public header
|
||||
* (even though they should have been private) and we can't really remove
|
||||
* them now (FIXME: 0.11). They don't do anything other than return FALSE. */
|
||||
#ifndef GST_DISABLE_DEPRECATED
|
||||
gboolean gst_registry_xml_read_cache (GstRegistry * registry, const char *location);
|
||||
gboolean gst_registry_xml_write_cache (GstRegistry * registry, const char *location);
|
||||
#endif
|
||||
|
||||
/* convinience defines for the default registry */
|
||||
|
||||
/**
|
||||
|
|
|
@ -630,27 +630,3 @@ Error:
|
|||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
#ifndef GST_REMOVE_DEPRECATED
|
||||
#ifdef GST_DISABLE_DEPRECATED
|
||||
gboolean
|
||||
gst_registry_xml_read_cache (GstRegistry * registry, const char *location);
|
||||
#endif
|
||||
/* FIXME 0.11: these symbols are here for backwards compatibility and should
|
||||
* be removed or made private */
|
||||
gboolean
|
||||
gst_registry_xml_read_cache (GstRegistry * registry, const char *location)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#ifdef GST_DISABLE_DEPRECATED
|
||||
gboolean
|
||||
gst_registry_xml_write_cache (GstRegistry * registry, const char *location);
|
||||
#endif
|
||||
gboolean
|
||||
gst_registry_xml_write_cache (GstRegistry * registry, const char *location)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
#endif /* GST_REMOVE_DEPRECATED */
|
||||
|
|
|
@ -2673,31 +2673,6 @@ gst_buffer_join (GstBuffer * buf1, GstBuffer * buf2)
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* gst_buffer_stamp:
|
||||
* @dest: buffer to stamp
|
||||
* @src: buffer to stamp from
|
||||
*
|
||||
* Copies additional information (the timestamp, duration, and offset start
|
||||
* and end) from one buffer to the other.
|
||||
*
|
||||
* This function does not copy any buffer flags or caps and is equivalent to
|
||||
* gst_buffer_copy_metadata(@dest, @src, GST_BUFFER_COPY_TIMESTAMPS).
|
||||
*
|
||||
* Deprecated: use gst_buffer_copy_metadata() instead, it provides more
|
||||
* control.
|
||||
*/
|
||||
#ifndef GST_REMOVE_DEPRECATED
|
||||
#ifdef GST_DISABLE_DEPRECATED
|
||||
void gst_buffer_stamp (GstBuffer * dest, const GstBuffer * src);
|
||||
#endif
|
||||
void
|
||||
gst_buffer_stamp (GstBuffer * dest, const GstBuffer * src)
|
||||
{
|
||||
gst_buffer_copy_metadata (dest, src, GST_BUFFER_COPY_TIMESTAMPS);
|
||||
}
|
||||
#endif /* GST_REMOVE_DEPRECATED */
|
||||
|
||||
static gboolean
|
||||
getcaps_fold_func (GstPad * pad, GValue * ret, GstPad * orig)
|
||||
{
|
||||
|
@ -3121,27 +3096,6 @@ gst_pad_query_peer_convert (GstPad * pad, GstFormat src_format, gint64 src_val,
|
|||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_atomic_int_set:
|
||||
* @atomic_int: pointer to an atomic integer
|
||||
* @value: value to set
|
||||
*
|
||||
* Unconditionally sets the atomic integer to @value.
|
||||
*
|
||||
* Deprecated: Use g_atomic_int_set().
|
||||
*
|
||||
*/
|
||||
#ifndef GST_REMOVE_DEPRECATED
|
||||
#ifdef GST_DISABLE_DEPRECATED
|
||||
void gst_atomic_int_set (gint * atomic_int, gint value);
|
||||
#endif
|
||||
void
|
||||
gst_atomic_int_set (gint * atomic_int, gint value)
|
||||
{
|
||||
g_atomic_int_set (atomic_int, value);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* gst_pad_add_data_probe:
|
||||
* @pad: pad to add the data probe handler to
|
||||
|
@ -3602,34 +3556,6 @@ gst_bin_find_unlinked_pad (GstBin * bin, GstPadDirection direction)
|
|||
return pad;
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_bin_find_unconnected_pad:
|
||||
* @bin: bin in which to look for elements with unlinked pads
|
||||
* @direction: whether to look for an unlinked source or sink pad
|
||||
*
|
||||
* Recursively looks for elements with an unlinked pad of the given
|
||||
* direction within the specified bin and returns an unlinked pad
|
||||
* if one is found, or NULL otherwise. If a pad is found, the caller
|
||||
* owns a reference to it and should use gst_object_unref() on the
|
||||
* pad when it is not needed any longer.
|
||||
*
|
||||
* Returns: unlinked pad of the given direction, or NULL.
|
||||
*
|
||||
* Since: 0.10.3
|
||||
*
|
||||
* Deprecated: use gst_bin_find_unlinked_pad() instead.
|
||||
*/
|
||||
#ifndef GST_REMOVE_DEPRECATED
|
||||
#ifdef GST_DISABLE_DEPRECATED
|
||||
GstPad *gst_bin_find_unconnected_pad (GstBin * bin, GstPadDirection direction);
|
||||
#endif
|
||||
GstPad *
|
||||
gst_bin_find_unconnected_pad (GstBin * bin, GstPadDirection direction)
|
||||
{
|
||||
return gst_bin_find_unlinked_pad (bin, direction);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* gst_parse_bin_from_description:
|
||||
* @bin_description: command line describing the bin
|
||||
|
|
|
@ -1075,21 +1075,10 @@ gboolean gst_pad_query_peer_convert (GstPad *pad, GstFormat
|
|||
void gst_bin_add_many (GstBin *bin, GstElement *element_1, ...) G_GNUC_NULL_TERMINATED;
|
||||
void gst_bin_remove_many (GstBin *bin, GstElement *element_1, ...) G_GNUC_NULL_TERMINATED;
|
||||
GstPad * gst_bin_find_unlinked_pad (GstBin *bin, GstPadDirection direction);
|
||||
#ifndef GST_DISABLE_DEPRECATED
|
||||
GstPad * gst_bin_find_unconnected_pad (GstBin *bin, GstPadDirection direction);
|
||||
#endif
|
||||
|
||||
/* buffer functions */
|
||||
GstBuffer * gst_buffer_merge (GstBuffer * buf1, GstBuffer * buf2);
|
||||
GstBuffer * gst_buffer_join (GstBuffer * buf1, GstBuffer * buf2);
|
||||
#ifndef GST_DISABLE_DEPRECATED
|
||||
void gst_buffer_stamp (GstBuffer * dest, const GstBuffer * src);
|
||||
#endif /* GST_DISABLE_DEPRECATED */
|
||||
|
||||
/* atomic functions */
|
||||
#ifndef GST_DISABLE_DEPRECATED
|
||||
void gst_atomic_int_set (gint * atomic_int, gint value);
|
||||
#endif
|
||||
|
||||
/* probes */
|
||||
gulong gst_pad_add_data_probe (GstPad * pad,
|
||||
|
|
541
gst/gstxml.c
541
gst/gstxml.c
|
@ -1,541 +0,0 @@
|
|||
/* GStreamer
|
||||
* Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
|
||||
* 2000 Wim Taymans <wtay@chello.be>
|
||||
*
|
||||
* gstxml.c: XML save/restore of pipelines
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* SECTION:gstxml
|
||||
* @short_description: XML save/restore operations of pipelines
|
||||
*
|
||||
* GStreamer pipelines can be saved to xml files using gst_xml_write_file().
|
||||
* They can be loaded back using gst_xml_parse_doc() / gst_xml_parse_file() /
|
||||
* gst_xml_parse_memory().
|
||||
* Additionally one can load saved pipelines into the gst-editor to inspect the
|
||||
* graph.
|
||||
*
|
||||
* #GstElement implementations need to override the #GstObjectClass.save_thyself()
|
||||
* and #GstObjectClass.restore_thyself() virtual functions of #GstObject.
|
||||
*
|
||||
* Deprecated: This feature is deprecated pipeline serialization to XML is
|
||||
* broken for all but the most simple pipelines. It will most likely be
|
||||
* removed in future. Don't use it.
|
||||
*/
|
||||
|
||||
#include "gst_private.h"
|
||||
|
||||
#include "gstxml.h"
|
||||
#include "gstmarshal.h"
|
||||
#include "gstinfo.h"
|
||||
#include "gstbin.h"
|
||||
|
||||
#ifdef GST_DISABLE_DEPRECATED
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
#include <libxml/parser.h>
|
||||
xmlNodePtr gst_object_save_thyself (const GstObject * object,
|
||||
xmlNodePtr parent);
|
||||
GstObject *gst_object_load_thyself (xmlNodePtr parent);
|
||||
void gst_object_restore_thyself (GstObject * object, GstXmlNodePtr self);
|
||||
|
||||
#define GST_TYPE_XML (gst_xml_get_type ())
|
||||
#define GST_XML(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_XML, GstXML))
|
||||
#define GST_IS_XML(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_XML))
|
||||
#define GST_XML_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_XML, GstXMLClass))
|
||||
#define GST_IS_XML_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_XML))
|
||||
#define GST_XML_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_XML, GstXMLClass))
|
||||
|
||||
typedef struct _GstXML GstXML;
|
||||
typedef struct _GstXMLClass GstXMLClass;
|
||||
|
||||
struct _GstXML
|
||||
{
|
||||
GstObject object;
|
||||
|
||||
/*< public > */
|
||||
GList *topelements;
|
||||
|
||||
xmlNsPtr ns;
|
||||
|
||||
/*< private > */
|
||||
gpointer _gst_reserved[GST_PADDING];
|
||||
};
|
||||
|
||||
struct _GstXMLClass
|
||||
{
|
||||
GstObjectClass parent_class;
|
||||
|
||||
/* signal callbacks */
|
||||
void (*object_loaded) (GstXML * xml, GstObject * object, xmlNodePtr self);
|
||||
void (*object_saved) (GstXML * xml, GstObject * object, xmlNodePtr self);
|
||||
|
||||
gpointer _gst_reserved[GST_PADDING];
|
||||
};
|
||||
|
||||
GType gst_xml_get_type (void);
|
||||
xmlDocPtr gst_xml_write (GstElement * element);
|
||||
gint gst_xml_write_file (GstElement * element, FILE * out);
|
||||
GstXML *gst_xml_new (void);
|
||||
gboolean gst_xml_parse_doc (GstXML * xml, xmlDocPtr doc, const guchar * root);
|
||||
gboolean gst_xml_parse_file (GstXML * xml, const guchar * fname,
|
||||
const guchar * root);
|
||||
gboolean gst_xml_parse_memory (GstXML * xml, guchar * buffer, guint size,
|
||||
const gchar * root);
|
||||
GstElement *gst_xml_get_element (GstXML * xml, const guchar * name);
|
||||
GList *gst_xml_get_topelements (GstXML * xml);
|
||||
GstElement *gst_xml_make_element (xmlNodePtr cur, GstObject * parent);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
|
||||
enum
|
||||
{
|
||||
OBJECT_LOADED,
|
||||
LAST_SIGNAL
|
||||
};
|
||||
|
||||
static void gst_xml_dispose (GObject * object);
|
||||
|
||||
static void gst_xml_object_loaded (GstObject * private, GstObject * object,
|
||||
xmlNodePtr self, gpointer data);
|
||||
|
||||
static GstObjectClass *parent_class = NULL;
|
||||
static guint gst_xml_signals[LAST_SIGNAL] = { 0 };
|
||||
|
||||
G_DEFINE_TYPE (GstXML, gst_xml, GST_TYPE_OBJECT);
|
||||
|
||||
static void
|
||||
gst_xml_class_init (GstXMLClass * klass)
|
||||
{
|
||||
GObjectClass *gobject_class = (GObjectClass *) klass;
|
||||
|
||||
parent_class = g_type_class_peek_parent (klass);
|
||||
|
||||
gobject_class->dispose = gst_xml_dispose;
|
||||
|
||||
/* FIXME G_TYPE_POINTER should be GType of xmlNodePtr
|
||||
* (ensonic) can't be fixed, as libxml does not use GObject (unfortunately)
|
||||
*/
|
||||
/**
|
||||
* GstXML::object-loaded:
|
||||
* @xml: the xml persistence instance
|
||||
* @object: the object that has been loaded
|
||||
* @xml_node: the related xml_node pointer to the document tree
|
||||
*
|
||||
* Signals that a new object has been deserialized.
|
||||
*/
|
||||
gst_xml_signals[OBJECT_LOADED] =
|
||||
g_signal_new ("object-loaded", G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstXMLClass, object_loaded), NULL,
|
||||
NULL, gst_marshal_VOID__OBJECT_POINTER, G_TYPE_NONE, 2, GST_TYPE_OBJECT,
|
||||
G_TYPE_POINTER);
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
gst_xml_init (GstXML * xml)
|
||||
{
|
||||
xml->topelements = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
gst_xml_dispose (GObject * object)
|
||||
{
|
||||
GstXML *xml = GST_XML (object);
|
||||
|
||||
g_list_foreach (xml->topelements, (GFunc) gst_object_unref, NULL);
|
||||
g_list_free (xml->topelements);
|
||||
xml->topelements = NULL;
|
||||
|
||||
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_xml_new:
|
||||
*
|
||||
* Create a new GstXML parser object.
|
||||
*
|
||||
* Returns: a pointer to a new GstXML object.
|
||||
*/
|
||||
GstXML *
|
||||
gst_xml_new (void)
|
||||
{
|
||||
return GST_XML (g_object_newv (GST_TYPE_XML, 0, NULL));
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_xml_write:
|
||||
* @element: The element to write out
|
||||
*
|
||||
* Converts the given element into an XML presentation.
|
||||
*
|
||||
* Returns: a pointer to an XML document
|
||||
*/
|
||||
xmlDocPtr
|
||||
gst_xml_write (GstElement * element)
|
||||
{
|
||||
xmlDocPtr doc;
|
||||
xmlNodePtr elementnode;
|
||||
xmlNsPtr gst_ns;
|
||||
|
||||
doc = xmlNewDoc ((xmlChar *) "1.0");
|
||||
|
||||
doc->xmlRootNode = xmlNewDocNode (doc, NULL, (xmlChar *) "gstreamer", NULL);
|
||||
|
||||
gst_ns =
|
||||
xmlNewNs (doc->xmlRootNode,
|
||||
(xmlChar *) "http://gstreamer.net/gst-core/1.0/", (xmlChar *) "gst");
|
||||
|
||||
elementnode = xmlNewChild (doc->xmlRootNode, gst_ns, (xmlChar *) "element",
|
||||
NULL);
|
||||
|
||||
gst_object_save_thyself (GST_OBJECT (element), elementnode);
|
||||
|
||||
return doc;
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_xml_write_file:
|
||||
* @element: The element to write out
|
||||
* @out: an open file, like stdout
|
||||
*
|
||||
* Converts the given element into XML and writes the formatted XML to an open
|
||||
* file.
|
||||
*
|
||||
* Returns: number of bytes written on success, -1 otherwise.
|
||||
*/
|
||||
gint
|
||||
gst_xml_write_file (GstElement * element, FILE * out)
|
||||
{
|
||||
xmlDocPtr cur;
|
||||
|
||||
#ifdef HAVE_LIBXML2
|
||||
xmlOutputBufferPtr buf;
|
||||
#endif
|
||||
const char *encoding;
|
||||
xmlCharEncodingHandlerPtr handler = NULL;
|
||||
int indent;
|
||||
gboolean ret;
|
||||
|
||||
cur = gst_xml_write (element);
|
||||
if (!cur)
|
||||
return -1;
|
||||
|
||||
#ifdef HAVE_LIBXML2
|
||||
encoding = (const char *) cur->encoding;
|
||||
|
||||
if (encoding != NULL) {
|
||||
xmlCharEncoding enc;
|
||||
|
||||
enc = xmlParseCharEncoding (encoding);
|
||||
|
||||
if (cur->charset != XML_CHAR_ENCODING_UTF8) {
|
||||
xmlGenericError (xmlGenericErrorContext,
|
||||
"xmlDocDump: document not in UTF8\n");
|
||||
return -1;
|
||||
}
|
||||
if (enc != XML_CHAR_ENCODING_UTF8) {
|
||||
handler = xmlFindCharEncodingHandler (encoding);
|
||||
if (handler == NULL) {
|
||||
xmlFree ((char *) cur->encoding);
|
||||
cur->encoding = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
buf = xmlOutputBufferCreateFile (out, handler);
|
||||
|
||||
indent = xmlIndentTreeOutput;
|
||||
xmlIndentTreeOutput = 1;
|
||||
ret = xmlSaveFormatFileTo (buf, cur, NULL, 1);
|
||||
xmlIndentTreeOutput = indent;
|
||||
#else
|
||||
/* apparently this doesn't return anything in libxml1 */
|
||||
xmlDocDump (out, cur);
|
||||
ret = 1;
|
||||
#endif
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_xml_parse_doc:
|
||||
* @xml: a pointer to a GstXML object
|
||||
* @doc: a pointer to an xml document to parse
|
||||
* @root: The name of the root object to build
|
||||
*
|
||||
* Fills the GstXML object with the elements from the
|
||||
* xmlDocPtr.
|
||||
*
|
||||
* Returns: TRUE on success, FALSE otherwise
|
||||
*/
|
||||
gboolean
|
||||
gst_xml_parse_doc (GstXML * xml, xmlDocPtr doc, const guchar * root)
|
||||
{
|
||||
xmlNodePtr field, cur;
|
||||
xmlNsPtr ns;
|
||||
|
||||
cur = xmlDocGetRootElement (doc);
|
||||
if (cur == NULL) {
|
||||
g_warning ("gstxml: empty document\n");
|
||||
return FALSE;
|
||||
}
|
||||
ns = xmlSearchNsByHref (doc, cur,
|
||||
(xmlChar *) "http://gstreamer.net/gst-core/1.0/");
|
||||
if (ns == NULL) {
|
||||
g_warning ("gstxml: document of wrong type, core namespace not found\n");
|
||||
return FALSE;
|
||||
}
|
||||
if (strcmp ((char *) cur->name, "gstreamer")) {
|
||||
g_warning ("gstxml: XML file is in wrong format\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gst_class_signal_connect (GST_OBJECT_CLASS (G_OBJECT_GET_CLASS (xml)),
|
||||
"object_loaded", (gpointer) gst_xml_object_loaded, xml);
|
||||
|
||||
xml->ns = ns;
|
||||
|
||||
field = cur->xmlChildrenNode;
|
||||
|
||||
while (field) {
|
||||
if (!strcmp ((char *) field->name, "element") && (field->ns == xml->ns)) {
|
||||
GstElement *element;
|
||||
|
||||
element = gst_xml_make_element (field, NULL);
|
||||
|
||||
xml->topelements = g_list_prepend (xml->topelements, element);
|
||||
}
|
||||
field = field->next;
|
||||
}
|
||||
|
||||
xml->topelements = g_list_reverse (xml->topelements);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* FIXME 0.9: Why guchar*? */
|
||||
/**
|
||||
* gst_xml_parse_file:
|
||||
* @xml: a pointer to a GstXML object
|
||||
* @fname: The filename with the xml description
|
||||
* @root: The name of the root object to build
|
||||
*
|
||||
* Fills the GstXML object with the corresponding elements from
|
||||
* the XML file fname. Optionally it will only build the element from
|
||||
* the element node root (if it is not NULL). This feature is useful
|
||||
* if you only want to build a specific element from an XML file
|
||||
* but not the pipeline it is embedded in.
|
||||
*
|
||||
* Pass "-" as fname to read from stdin. You can also pass a URI
|
||||
* of any format that libxml supports, including http.
|
||||
*
|
||||
* Returns: TRUE on success, FALSE otherwise
|
||||
*/
|
||||
gboolean
|
||||
gst_xml_parse_file (GstXML * xml, const guchar * fname, const guchar * root)
|
||||
{
|
||||
xmlDocPtr doc;
|
||||
gboolean ret;
|
||||
|
||||
g_return_val_if_fail (fname != NULL, FALSE);
|
||||
|
||||
doc = xmlParseFile ((char *) fname);
|
||||
|
||||
if (!doc) {
|
||||
g_warning ("gstxml: XML file \"%s\" could not be read\n", fname);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
ret = gst_xml_parse_doc (xml, doc, root);
|
||||
|
||||
xmlFreeDoc (doc);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* FIXME 0.9: guchar* */
|
||||
/**
|
||||
* gst_xml_parse_memory:
|
||||
* @xml: a pointer to a GstXML object
|
||||
* @buffer: a pointer to the in memory XML buffer
|
||||
* @size: the size of the buffer
|
||||
* @root: the name of the root objects to build
|
||||
*
|
||||
* Fills the GstXML object with the corresponding elements from
|
||||
* an in memory XML buffer.
|
||||
*
|
||||
* Returns: TRUE on success
|
||||
*/
|
||||
gboolean
|
||||
gst_xml_parse_memory (GstXML * xml, guchar * buffer, guint size,
|
||||
const gchar * root)
|
||||
{
|
||||
xmlDocPtr doc;
|
||||
gboolean ret;
|
||||
|
||||
g_return_val_if_fail (buffer != NULL, FALSE);
|
||||
|
||||
doc = xmlParseMemory ((char *) buffer, size);
|
||||
|
||||
ret = gst_xml_parse_doc (xml, doc, (const xmlChar *) root);
|
||||
|
||||
xmlFreeDoc (doc);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
gst_xml_object_loaded (GstObject * private, GstObject * object, xmlNodePtr self,
|
||||
gpointer data)
|
||||
{
|
||||
GstXML *xml = GST_XML (data);
|
||||
|
||||
/* FIXME check that this element was created from the same xmlDocPtr... */
|
||||
g_signal_emit (xml, gst_xml_signals[OBJECT_LOADED], 0, object, self);
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_xml_get_topelements:
|
||||
* @xml: The GstXML to get the elements from
|
||||
*
|
||||
* Retrieve a list of toplevel elements.
|
||||
*
|
||||
* Returns: a GList of top-level elements. The caller does not own a copy
|
||||
* of the list and must not free or modify the list. The caller also does not
|
||||
* own a reference to any of the elements in the list and should obtain its own
|
||||
* reference using gst_object_ref() if necessary.
|
||||
*/
|
||||
GList *
|
||||
gst_xml_get_topelements (GstXML * xml)
|
||||
{
|
||||
g_return_val_if_fail (xml != NULL, NULL);
|
||||
|
||||
return xml->topelements;
|
||||
}
|
||||
|
||||
/* FIXME 0.11: why is the arg guchar* instead of gchar*? */
|
||||
/**
|
||||
* gst_xml_get_element:
|
||||
* @xml: The GstXML to get the element from
|
||||
* @name: The name of element to retrieve
|
||||
*
|
||||
* This function is used to get a pointer to the GstElement corresponding
|
||||
* to name in the pipeline description. You would use this if you have
|
||||
* to do anything to the element after loading.
|
||||
*
|
||||
* Returns: a pointer to a new GstElement, caller owns returned reference.
|
||||
*/
|
||||
GstElement *
|
||||
gst_xml_get_element (GstXML * xml, const guchar * name)
|
||||
{
|
||||
GstElement *element;
|
||||
GList *topelements;
|
||||
|
||||
g_return_val_if_fail (xml != NULL, NULL);
|
||||
g_return_val_if_fail (name != NULL, NULL);
|
||||
|
||||
GST_DEBUG ("gstxml: getting element \"%s\"", name);
|
||||
|
||||
topelements = gst_xml_get_topelements (xml);
|
||||
|
||||
while (topelements) {
|
||||
GstElement *top = GST_ELEMENT (topelements->data);
|
||||
|
||||
GST_DEBUG ("gstxml: getting element \"%s\"", name);
|
||||
if (!strcmp (GST_ELEMENT_NAME (top), (char *) name)) {
|
||||
return GST_ELEMENT_CAST (gst_object_ref (top));
|
||||
} else {
|
||||
if (GST_IS_BIN (top)) {
|
||||
element = gst_bin_get_by_name (GST_BIN (top), (gchar *) name);
|
||||
|
||||
if (element)
|
||||
return element;
|
||||
}
|
||||
}
|
||||
topelements = g_list_next (topelements);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_xml_make_element:
|
||||
* @cur: the xml node
|
||||
* @parent: the parent of this object when it's loaded
|
||||
*
|
||||
* Load the element from the XML description
|
||||
*
|
||||
* Returns: the new element
|
||||
*/
|
||||
GstElement *
|
||||
gst_xml_make_element (xmlNodePtr cur, GstObject * parent)
|
||||
{
|
||||
xmlNodePtr children = cur->xmlChildrenNode;
|
||||
GstElement *element;
|
||||
gchar *name = NULL;
|
||||
gchar *type = NULL;
|
||||
|
||||
/* first get the needed tags to construct the element */
|
||||
while (children) {
|
||||
if (!strcmp ((char *) children->name, "name")) {
|
||||
name = (gchar *) xmlNodeGetContent (children);
|
||||
} else if (!strcmp ((char *) children->name, "type")) {
|
||||
type = (gchar *) xmlNodeGetContent (children);
|
||||
}
|
||||
children = children->next;
|
||||
}
|
||||
g_return_val_if_fail (name != NULL, NULL);
|
||||
g_return_val_if_fail (type != NULL, NULL);
|
||||
|
||||
GST_CAT_INFO (GST_CAT_XML, "loading \"%s\" of type \"%s\"", name, type);
|
||||
|
||||
element = gst_element_factory_make (type, name);
|
||||
|
||||
g_return_val_if_fail (element != NULL, NULL);
|
||||
|
||||
g_free (type);
|
||||
g_free (name);
|
||||
|
||||
/* ne need to set the parent on this object bacause the pads */
|
||||
/* will go through the hierarchy to link to their peers */
|
||||
if (parent) {
|
||||
if (GST_IS_BIN (parent)) {
|
||||
gst_bin_add (GST_BIN (parent), element);
|
||||
} else {
|
||||
gst_object_set_parent (GST_OBJECT (element), parent);
|
||||
}
|
||||
}
|
||||
|
||||
gst_object_restore_thyself (GST_OBJECT (element), cur);
|
||||
|
||||
return element;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
/* FIXME: keep this dummy _get_type function around for now, so
|
||||
* gobject-introspection doesn't fail in the GST_REMOVE_DEPRECATED and
|
||||
* GST_DISABLE_LOADSAVE case */
|
||||
GType gst_xml_get_type (void);
|
||||
|
||||
GType
|
||||
gst_xml_get_type (void)
|
||||
{
|
||||
return g_pointer_type_register_static ("GstXML");
|
||||
}
|
||||
|
||||
#endif
|
113
gst/gstxml.h
113
gst/gstxml.h
|
@ -1,113 +0,0 @@
|
|||
/* GStreamer
|
||||
* Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
|
||||
* 2000 Wim Taymans <wim.taymans@chello.be>
|
||||
*
|
||||
* gstxml.h: Header for XML save/restore operations of pipelines
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef __GST_XML_H__
|
||||
#define __GST_XML_H__
|
||||
|
||||
#include <gst/gstconfig.h>
|
||||
|
||||
#ifndef GST_DISABLE_DEPRECATED
|
||||
#ifndef GST_DISABLE_LOADSAVE
|
||||
|
||||
#include <gst/gstelement.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GST_TYPE_XML (gst_xml_get_type ())
|
||||
#define GST_XML(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_XML, GstXML))
|
||||
#define GST_IS_XML(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_XML))
|
||||
#define GST_XML_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_XML, GstXMLClass))
|
||||
#define GST_IS_XML_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_XML))
|
||||
#define GST_XML_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_XML, GstXMLClass))
|
||||
|
||||
typedef struct _GstXML GstXML;
|
||||
typedef struct _GstXMLClass GstXMLClass;
|
||||
|
||||
/**
|
||||
* GstXML:
|
||||
* @topelements: list of element nodes
|
||||
* @ns: name space
|
||||
*
|
||||
* XML parser object
|
||||
*/
|
||||
struct _GstXML {
|
||||
GstObject object;
|
||||
|
||||
/*< public >*/
|
||||
GList *topelements;
|
||||
|
||||
xmlNsPtr ns;
|
||||
|
||||
/*< private >*/
|
||||
gpointer _gst_reserved[GST_PADDING];
|
||||
};
|
||||
|
||||
struct _GstXMLClass {
|
||||
GstObjectClass parent_class;
|
||||
|
||||
/* signal callbacks */
|
||||
void (*object_loaded) (GstXML *xml, GstObject *object, xmlNodePtr self);
|
||||
void (*object_saved) (GstXML *xml, GstObject *object, xmlNodePtr self);
|
||||
|
||||
gpointer _gst_reserved[GST_PADDING];
|
||||
};
|
||||
|
||||
GType gst_xml_get_type (void);
|
||||
|
||||
|
||||
/* create an XML document out of a pipeline */
|
||||
xmlDocPtr gst_xml_write (GstElement *element);
|
||||
|
||||
/* write a formatted representation of a pipeline to an open file */
|
||||
gint gst_xml_write_file (GstElement *element, FILE *out);
|
||||
|
||||
GstXML* gst_xml_new (void);
|
||||
|
||||
gboolean gst_xml_parse_doc (GstXML *xml, xmlDocPtr doc, const guchar *root);
|
||||
gboolean gst_xml_parse_file (GstXML *xml, const guchar *fname, const guchar *root);
|
||||
gboolean gst_xml_parse_memory (GstXML *xml, guchar *buffer, guint size, const gchar *root);
|
||||
|
||||
|
||||
GstElement* gst_xml_get_element (GstXML *xml, const guchar *name);
|
||||
GList* gst_xml_get_topelements (GstXML *xml);
|
||||
|
||||
GstElement* gst_xml_make_element (xmlNodePtr cur, GstObject *parent);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#else /* GST_DISABLE_LOADSAVE */
|
||||
|
||||
#if defined __GNUC__ && __GNUC__ >= 3
|
||||
#pragma GCC poison gst_xml_write
|
||||
#pragma GCC poison gst_xml_new
|
||||
#pragma GCC poison gst_xml_parse_doc
|
||||
#pragma GCC poison gst_xml_parse_file
|
||||
#pragma GCC poison gst_xml_parse_memory
|
||||
#pragma GCC poison gst_xml_get_element
|
||||
#pragma GCC poison gst_xml_get_topelements
|
||||
#endif
|
||||
|
||||
#endif /* GST_DISABLE_LOADSAVE */
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* __GST_XML_H__ */
|
|
@ -709,12 +709,6 @@ print_implementation_info (GstElement * element)
|
|||
|
||||
n_print (" Has change_state() function: %s\n",
|
||||
GST_DEBUG_FUNCPTR_NAME (gstelement_class->change_state));
|
||||
#ifndef GST_DISABLE_LOADSAVE
|
||||
n_print (" Has custom save_thyself() function: %s\n",
|
||||
GST_DEBUG_FUNCPTR_NAME (gstobject_class->save_thyself));
|
||||
n_print (" Has custom restore_thyself() function: %s\n",
|
||||
GST_DEBUG_FUNCPTR_NAME (gstobject_class->restore_thyself));
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -76,79 +76,6 @@ static gboolean waiting_eos = FALSE;
|
|||
/* convenience macro so we don't have to litter the code with if(!quiet) */
|
||||
#define PRINT if(!quiet)g_print
|
||||
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
static GstElement *
|
||||
xmllaunch_parse_cmdline (const gchar ** argv)
|
||||
{
|
||||
GstElement *pipeline = NULL, *e;
|
||||
GstXML *xml;
|
||||
gboolean err;
|
||||
const gchar *arg;
|
||||
gchar *element, *property, *value;
|
||||
GList *l;
|
||||
gint i = 0;
|
||||
|
||||
if (!(arg = argv[0])) {
|
||||
g_printerr ("%s",
|
||||
_("Usage: gst-xmllaunch <file.xml> [ element.property=value ... ]\n"));
|
||||
exit (1);
|
||||
}
|
||||
|
||||
xml = gst_xml_new ();
|
||||
/* FIXME guchar from gstxml.c */
|
||||
err = gst_xml_parse_file (xml, (guchar *) arg, NULL);
|
||||
|
||||
if (err != TRUE) {
|
||||
g_printerr (_("ERROR: parse of xml file '%s' failed.\n"), arg);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
l = gst_xml_get_topelements (xml);
|
||||
if (!l) {
|
||||
g_printerr (_("ERROR: no toplevel pipeline element in file '%s'.\n"), arg);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
if (l->next) {
|
||||
g_printerr ("%s",
|
||||
_("WARNING: only one toplevel element is supported at this time.\n"));
|
||||
}
|
||||
|
||||
pipeline = GST_ELEMENT (l->data);
|
||||
|
||||
while ((arg = argv[++i])) {
|
||||
element = g_strdup (arg);
|
||||
property = strchr (element, '.');
|
||||
value = strchr (element, '=');
|
||||
|
||||
if (!(element < property && property < value)) {
|
||||
g_printerr (_("ERROR: could not parse command line argument %d: %s.\n"),
|
||||
i, element);
|
||||
g_free (element);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
*property++ = '\0';
|
||||
*value++ = '\0';
|
||||
|
||||
e = gst_bin_get_by_name (GST_BIN (pipeline), element);
|
||||
if (!e) {
|
||||
g_printerr (_("WARNING: element named '%s' not found.\n"), element);
|
||||
} else {
|
||||
gst_util_set_object_arg (G_OBJECT (e), property, value);
|
||||
}
|
||||
g_free (element);
|
||||
}
|
||||
|
||||
if (!l)
|
||||
return NULL;
|
||||
|
||||
gst_object_ref (pipeline);
|
||||
gst_object_unref (xml);
|
||||
return pipeline;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef DISABLE_FAULT_HANDLER
|
||||
#ifndef USE_SIGINFO
|
||||
static void
|
||||
|
@ -730,10 +657,6 @@ main (int argc, char *argv[])
|
|||
N_("Output messages"), NULL},
|
||||
{"exclude", 'X', 0, G_OPTION_ARG_NONE, &exclude_args,
|
||||
N_("Do not output status information of TYPE"), N_("TYPE1,TYPE2,...")},
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
{"output", 'o', 0, G_OPTION_ARG_STRING, &savefile,
|
||||
N_("Save xml representation of pipeline to FILE and exit"), N_("FILE")},
|
||||
#endif
|
||||
{"no-fault", 'f', 0, G_OPTION_ARG_NONE, &no_fault,
|
||||
N_("Do not install a fault handler"), NULL},
|
||||
{"no-sigusr-handler", '\0', 0, G_OPTION_ARG_NONE, &no_sigusr_handler,
|
||||
|
@ -804,15 +727,6 @@ main (int argc, char *argv[])
|
|||
/* make a null-terminated version of argv */
|
||||
argvn = g_new0 (char *, argc);
|
||||
memcpy (argvn, argv + 1, sizeof (char *) * (argc - 1));
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
if (strstr (argv[0], "gst-xmllaunch")) {
|
||||
/* FIXME 0.11: remove xmllaunch entirely */
|
||||
g_warning ("gst-xmllaunch is deprecated and broken for all but the most "
|
||||
"simple pipelines. It will most likely be removed in future. Don't "
|
||||
"use it.\n");
|
||||
pipeline = xmllaunch_parse_cmdline ((const gchar **) argvn);
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
pipeline =
|
||||
(GstElement *) gst_parse_launchv ((const gchar **) argvn, &error);
|
||||
|
@ -841,15 +755,6 @@ main (int argc, char *argv[])
|
|||
g_signal_connect (pipeline, "deep-notify",
|
||||
G_CALLBACK (gst_object_default_deep_notify), exclude_list);
|
||||
}
|
||||
#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
|
||||
if (savefile) {
|
||||
g_warning ("Pipeline serialization to XML is deprecated and broken for "
|
||||
"all but the most simple pipelines. It will most likely be removed "
|
||||
"in future. Don't use it.\n");
|
||||
|
||||
gst_xml_write_file (GST_ELEMENT (pipeline), fopen (savefile, "w"));
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!savefile) {
|
||||
GstState state, pending;
|
||||
|
|
|
@ -516,12 +516,6 @@ print_element_info (GstElementFactory * factory)
|
|||
PUT_STRING (2, "<state-change function=\"%s\"/>",
|
||||
GST_DEBUG_FUNCPTR_NAME (gstelement_class->change_state));
|
||||
|
||||
#ifndef GST_DISABLE_LOADSAVE
|
||||
PUT_STRING (2, "<save function=\"%s\"/>",
|
||||
GST_DEBUG_FUNCPTR_NAME (gstobject_class->save_thyself));
|
||||
PUT_STRING (2, "<load function=\"%s\"/>",
|
||||
GST_DEBUG_FUNCPTR_NAME (gstobject_class->restore_thyself));
|
||||
#endif
|
||||
PUT_END_TAG (1, "element-implementation");
|
||||
|
||||
PUT_START_TAG (1, "clocking-interaction");
|
||||
|
|
Loading…
Reference in a new issue