#include "gstutils.h"
#include "gstchildproxy.h"
+#ifdef GST_DISABLE_DEPRECATED
+#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
+#undef GstXmlNodePtr
+#define GstXmlNodePtr xmlNodePtr
+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. */
static gboolean gst_bin_do_latency_func (GstBin * bin);
-#ifndef GST_DISABLE_LOADSAVE
+#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
gobject_class->dispose = gst_bin_dispose;
-#ifndef GST_DISABLE_LOADSAVE
- gstobject_class->save_thyself = GST_DEBUG_FUNCPTR (gst_bin_save_thyself);
+#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 =
- GST_DEBUG_FUNCPTR (gst_bin_restore_thyself);
+ ((void (*)(GstObject * object,
+ gpointer self)) *GST_DEBUG_FUNCPTR (gst_bin_restore_thyself));
#endif
gstelement_class->change_state =
return result;
}
-#ifndef GST_DISABLE_LOADSAVE
+#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
static xmlNodePtr
gst_bin_save_thyself (GstObject * object, xmlNodePtr parent)
{
#include <gst/gst.h>
#include <gobject/gvaluecollector.h>
+#ifdef GST_DISABLE_DEPRECATED
+#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
+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{ \
/* persistence */
-#ifndef GST_DISABLE_LOADSAVE
+#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
/**
* gst_caps_save_thyself:
* @caps: a #GstCaps structure
GstCaps * gst_caps_normalize (const GstCaps *caps);
gboolean gst_caps_do_simplify (GstCaps *caps);
-#ifndef GST_DISABLE_LOADSAVE
+#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);
/* FILL ME */
};
+#ifdef GST_DISABLE_DEPRECATED
+#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
+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);
* gst_element_class_get_request_pad_template (GstElementClass *
element_class, const gchar * name);
-#ifndef GST_DISABLE_LOADSAVE
+#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);
gobject_class->dispose = gst_element_dispose;
gobject_class->finalize = gst_element_finalize;
-#ifndef GST_DISABLE_LOADSAVE
- gstobject_class->save_thyself = GST_DEBUG_FUNCPTR (gst_element_save_thyself);
+#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 =
- GST_DEBUG_FUNCPTR (gst_element_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);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
-#ifndef GST_DISABLE_LOADSAVE
+#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
/**
* gst_element_save_thyself:
* @element: a #GstElement to save.
static void gst_proxy_pad_dispose (GObject * object);
static void gst_proxy_pad_finalize (GObject * object);
-#ifndef GST_DISABLE_LOADSAVE
+#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
static xmlNodePtr gst_proxy_pad_save_thyself (GstObject * object,
xmlNodePtr parent);
#endif
gobject_class->dispose = gst_proxy_pad_dispose;
gobject_class->finalize = gst_proxy_pad_finalize;
-#ifndef GST_DISABLE_LOADSAVE
+#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
{
GstObjectClass *gstobject_class = (GstObjectClass *) klass;
gstobject_class->save_thyself =
- GST_DEBUG_FUNCPTR (gst_proxy_pad_save_thyself);
+ ((gpointer (*)(GstObject * object,
+ gpointer self)) *
+ GST_DEBUG_FUNCPTR (gst_proxy_pad_save_thyself));
}
#endif
/* Register common function pointer descriptions */
gst_pad_set_unlink_function (pad, gst_proxy_pad_do_unlink);
}
-#ifndef GST_DISABLE_LOADSAVE
+#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
/**
* gst_proxy_pad_save_thyself:
* @pad: a ghost #GstPad to save.
{
PARENT_SET,
PARENT_UNSET,
-#ifndef GST_DISABLE_LOADSAVE
+#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
OBJECT_SAVED,
#endif
DEEP_NOTIFY,
static GType gst_signal_object_get_type (void);
-#ifndef GST_DISABLE_LOADSAVE
+#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
static guint gst_signal_object_signals[SO_LAST_SIGNAL] = { 0 };
#endif
static gboolean gst_object_set_name_default (GstObject * object);
-#ifndef GST_DISABLE_LOADSAVE
+#ifdef GST_DISABLE_DEPRECATED
+#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
+#undef GstXmlNodePtr
+#define GstXmlNodePtr xmlNodePtr
+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,
- xmlNodePtr self);
+ GstXmlNodePtr self);
#endif
static GObjectClass *parent_class = NULL;
G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstObjectClass, parent_unset), NULL,
NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GST_TYPE_OBJECT);
-#ifndef GST_DISABLE_LOADSAVE
+#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
/**
* GstObject::object-saved:
* @gstobject: a #GstObject
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 = gst_object_real_restore_thyself;
+ klass->restore_thyself =
+ ((void (*)(GstObject * object,
+ gpointer self)) *gst_object_real_restore_thyself);
#endif
/**
}
-#ifndef GST_DISABLE_LOADSAVE
+#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
/**
* gst_object_save_thyself:
* @object: a #GstObject to save
*
* Returns: the new xmlNodePtr with the saved object
*/
-xmlNodePtr
-gst_object_save_thyself (GstObject * object, xmlNodePtr parent)
+GstXmlNodePtr
+gst_object_save_thyself (GstObject * object, GstXmlNodePtr parent)
{
GstObjectClass *oclass;
* Restores @object with the data from the parent XML node.
*/
void
-gst_object_restore_thyself (GstObject * object, xmlNodePtr self)
+gst_object_restore_thyself (GstObject * object, GstXmlNodePtr self)
{
GstObjectClass *oclass;
}
static void
-gst_object_real_restore_thyself (GstObject * object, xmlNodePtr self)
+gst_object_real_restore_thyself (GstObject * object, GstXmlNodePtr self)
{
g_return_if_fail (GST_IS_OBJECT (object));
g_return_if_fail (self != NULL);
GObjectClass parent_class;
/* signals */
-#ifndef GST_DISABLE_LOADSAVE
+#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
void (*object_loaded) (GstSignalObject * object, GstObject * new,
- xmlNodePtr self);
+ GstXmlNodePtr self);
#endif
};
{
parent_class = g_type_class_peek_parent (klass);
-#ifndef GST_DISABLE_LOADSAVE
+#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),
func_data);
}
-#ifndef GST_DISABLE_LOADSAVE
+#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
/**
* gst_class_signal_emit_by_name:
* @object: a #GstObject that emits the signal
*/
void
gst_class_signal_emit_by_name (GstObject * object,
- const gchar * name, xmlNodePtr self)
+ const gchar * name, GstXmlNodePtr self)
{
GstObjectClass *oclass;
/* make sure we don't change the object size but still make it compile
* without libxml */
-#ifdef GST_DISABLE_LOADSAVE
+#if defined(GST_DISABLE_LOADSAVE) || defined(GST_DISABLE_DEPRECATED)
#define GstXmlNodePtr gpointer
#else
#define GstXmlNodePtr xmlNodePtr
/* 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);
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);
#pragma GCC poison gst_object_restore_thyself
#endif
#endif
+#endif
/* class signal stuff */
guint gst_class_signal_connect (GstObjectClass *klass,
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,
#pragma GCC poison gst_class_signal_emit_by_name
#endif
#endif
-
+#endif
G_END_DECLS
static gboolean gst_pad_activate_default (GstPad * pad);
static gboolean gst_pad_acceptcaps_default (GstPad * pad, GstCaps * caps);
-#ifndef GST_DISABLE_LOADSAVE
+#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
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
"The GstPadTemplate of this pad", GST_TYPE_PAD_TEMPLATE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-#ifndef GST_DISABLE_LOADSAVE
- gstobject_class->save_thyself = GST_DEBUG_FUNCPTR (gst_pad_save_thyself);
+#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 = ".";
}
}
-#ifndef GST_DISABLE_LOADSAVE
+#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
/* FIXME: why isn't this on a GstElement ? */
/**
* gst_pad_load_and_link:
gboolean gst_pad_dispatcher (GstPad *pad, GstPadDispatcherFunction dispatch,
gpointer data);
-#ifndef GST_DISABLE_LOADSAVE
+#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_DISABLE_DEPRECATED)
void gst_pad_load_and_link (xmlNodePtr self, GstObject *parent);
#endif
*
* #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 "gstinfo.h"
#include "gstbin.h"
+#ifdef GST_DISABLE_DEPRECATED
+#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
+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,
return element;
}
+
+#endif
#include <gst/gstconfig.h>
+#ifndef GST_DISABLE_DEPRECATED
#ifndef GST_DISABLE_LOADSAVE
#include <gst/gstelement.h>
#endif /* GST_DISABLE_LOADSAVE */
+#endif
+
#endif /* __GST_XML_H__ */
-if GST_DISABLE_LOADSAVE
-GST_LOADSAVE_DIRS =
-else
-GST_LOADSAVE_DIRS = xml typefind
-endif
-
if GST_DISABLE_PARSE
GST_PARSE_DIRS =
else
metadata \
queue \
stepping \
- streams
+ streams \
+ typefind
#appreader
#cutter
SUBDIRS = \
$(always_dirs) \
$(ADAPTER_TEST_DIR) \
- $(GST_PARSE_DIRS) \
- $(GST_LOADSAVE_DIRS)
+ $(GST_PARSE_DIRS)
-DIST_SUBDIRS = $(always_dirs) adapter xml typefind launch
+DIST_SUBDIRS = $(always_dirs) adapter launch
include $(top_srcdir)/common/parallel-subdirs.mak
GNOME =
# endif
-if GST_DISABLE_LOADSAVE
-GST_LOADSAVE_SRC =
-else
-GST_LOADSAVE_SRC = xml-mp3
-endif
-
-
# gnome_LDADD = $(GST_OBJ_LIBS) $(LIBGNOMEUI_LIBS)
# gnome_CFLAGS = $(GST_OBJ_CFLAGS) $(LIBGNOMEUI_CFLAGS)
# make sure each versioned tool has the right source file and flags
if !GST_DISABLE_LOADSAVE
gst_xmllaunch_@GST_MAJORMINOR@_SOURCES = gst-launch.c tools.h
-gst_xmllaunch_@GST_MAJORMINOR@_CFLAGS = $(GST_OBJ_CFLAGS)
+gst_xmllaunch_@GST_MAJORMINOR@_CFLAGS = $(GST_OBJ_CFLAGS) -UGST_DISABLE_DEPRECATED
gst_xmllaunch_@GST_MAJORMINOR@_LDADD = $(GST_OBJ_LIBS)
endif
if !GST_DISABLE_PARSE
gst_launch_@GST_MAJORMINOR@_SOURCES = gst-launch.c tools.h
-gst_launch_@GST_MAJORMINOR@_CFLAGS = $(GST_OBJ_CFLAGS)
+gst_launch_@GST_MAJORMINOR@_CFLAGS = $(GST_OBJ_CFLAGS) -UGST_DISABLE_DEPRECATED
gst_launch_@GST_MAJORMINOR@_LDADD = $(GST_OBJ_LIBS)
endif
/* convenience macro so we don't have to litter the code with if(!quiet) */
#define PRINT if(!quiet)g_print
-#ifndef GST_DISABLE_LOADSAVE
+#if !defined(GST_DISABLE_LOADSAVE) && !defined(GST_REMOVE_DEPRECATED)
static GstElement *
xmllaunch_parse_cmdline (const gchar ** 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,...")},
-#ifndef GST_DISABLE_LOADSAVE
+#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
/* make a null-terminated version of argv */
argvn = g_new0 (char *, argc);
memcpy (argvn, argv + 1, sizeof (char *) * (argc - 1));
-#ifndef GST_DISABLE_LOADSAVE
+#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 "
g_signal_connect (pipeline, "deep-notify",
G_CALLBACK (gst_object_default_deep_notify), exclude_list);
}
-#ifndef GST_DISABLE_LOADSAVE
+#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 "