gstfunnel: avoid access of freed pad
[platform/upstream/gstreamer.git] / gst / gst_private.h
index e0c27fe..c15c8fa 100644 (file)
@@ -54,6 +54,9 @@ extern const char             g_log_domain_gstreamer[];
 /* for GstElement */
 #include "gstelement.h"
 
+/* for GstToc */
+#include "gsttoc.h"
+
 G_BEGIN_DECLS
 
 /* used by gstparse.c and grammar.y */
@@ -94,6 +97,7 @@ gboolean _priv_gst_in_valgrind (void);
 
 /* init functions called from gst_init(). */
 void  _priv_gst_quarks_initialize (void);
+void  _priv_gst_mini_object_initialize (void);
 void  _priv_gst_buffer_initialize (void);
 void  _priv_gst_buffer_list_initialize (void);
 void  _priv_gst_structure_initialize (void);
@@ -105,10 +109,20 @@ void  _priv_gst_memory_initialize (void);
 void  _priv_gst_meta_initialize (void);
 void  _priv_gst_plugin_initialize (void);
 void  _priv_gst_query_initialize (void);
+void  _priv_gst_sample_initialize (void);
 void  _priv_gst_tag_initialize (void);
 void  _priv_gst_value_initialize (void);
 void  _priv_gst_debug_init (void);
 
+/* TOC functions */
+/* These functions are used to parse TOC messages, events and queries */
+GstToc*        __gst_toc_from_structure (const GstStructure *toc);
+GstStructure*  __gst_toc_to_structure (const GstToc *toc);
+gboolean       __gst_toc_structure_get_updated (const GstStructure * toc);
+void           __gst_toc_structure_set_updated (GstStructure * toc, gboolean updated);
+gchar*         __gst_toc_structure_get_extend_uid (const GstStructure * toc);
+void           __gst_toc_structure_set_extend_uid (GstStructure * toc, const gchar * extend_uid);
+
 /* Private registry functions */
 gboolean _priv_gst_registry_remove_cache_plugins (GstRegistry *registry);
 void _priv_gst_registry_cleanup (void);
@@ -125,7 +139,7 @@ gboolean  priv_gst_structure_append_to_gstring (const GstStructure * structure,
                                                 GString            * s);
 /* registry cache backends */
 gboolean               priv_gst_registry_binary_read_cache     (GstRegistry * registry, const char *location);
-gboolean               priv_gst_registry_binary_write_cache    (GstRegistry * registry, const char *location);
+gboolean               priv_gst_registry_binary_write_cache    (GstRegistry * registry, GList * plugins, const char *location);
 
 void      __gst_element_factory_add_static_pad_template (GstElementFactory    * elementfactory,
                                                          GstStaticPadTemplate * templ);
@@ -143,7 +157,7 @@ gint priv_gst_date_time_compare (gconstpointer dt1, gconstpointer dt2);
 
 #ifndef GST_DISABLE_REGISTRY
 /* Secret variable to initialise gst without registry cache */
-extern gboolean _gst_disable_registry_cache;
+GST_EXPORT gboolean _gst_disable_registry_cache;
 #endif
 
 /* provide inline gst_g_value_get_foo_unchecked(), used in gststructure.c */
@@ -169,8 +183,7 @@ DEFINE_INLINE_G_VALUE_GET_UNCHECKED(const gchar *,string,v_pointer)
 #ifndef GST_REMOVE_GST_DEBUG
 
 GST_EXPORT GstDebugCategory *GST_CAT_GST_INIT;
-GST_EXPORT GstDebugCategory *GST_CAT_AUTOPLUG; /* FIXME 0.11: remove? */
-GST_EXPORT GstDebugCategory *GST_CAT_AUTOPLUG_ATTEMPT; /* FIXME 0.11: remove? */
+GST_EXPORT GstDebugCategory *GST_CAT_MEMORY;
 GST_EXPORT GstDebugCategory *GST_CAT_PARENTAGE;
 GST_EXPORT GstDebugCategory *GST_CAT_STATES;
 GST_EXPORT GstDebugCategory *GST_CAT_SCHEDULING;
@@ -197,7 +210,7 @@ GST_EXPORT GstDebugCategory *GST_CAT_SIGNAL;
 GST_EXPORT GstDebugCategory *GST_CAT_PROBE;
 GST_EXPORT GstDebugCategory *GST_CAT_REGISTRY;
 GST_EXPORT GstDebugCategory *GST_CAT_QOS;
-GST_EXPORT GstDebugCategory *GST_CAT_TYPES; /* FIXME 0.11: remove? */
+GST_EXPORT GstDebugCategory *GST_CAT_META;
 
 /* Categories that should be completely private to
  * libgstreamer should be done like this: */
@@ -238,9 +251,119 @@ extern GstDebugCategory *_priv_GST_CAT_POLL;
 #define GST_CAT_QOS              NULL
 #define GST_CAT_TYPES            NULL
 #define GST_CAT_POLL             NULL
+#define GST_CAT_META             NULL
 
 #endif
 
 
+/**** objects made opaque until the private bits have been made private ****/
+
+#include <gmodule.h>
+#include <time.h> /* time_t */
+#include <sys/types.h> /* off_t */
+#include <sys/stat.h> /* off_t */
+
+typedef struct _GstPluginPrivate GstPluginPrivate;
+
+struct _GstPlugin {
+  GstObject       object;
+
+  /*< private >*/
+  GstPluginDesc        desc;
+
+  GstPluginDesc *orig_desc;
+
+  gchar *      filename;
+  gchar *      basename;       /* base name (non-dir part) of plugin path */
+
+  GModule *    module;         /* contains the module if plugin is loaded */
+
+  off_t         file_size;
+  time_t        file_mtime;
+  gboolean      registered;     /* TRUE when the registry has seen a filename
+                                 * that matches the plugin's basename */
+
+  GstPluginPrivate *priv;
+
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+struct _GstPluginClass {
+  GstObjectClass  object_class;
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+struct _GstPluginFeature {
+  GstObject      object;
+
+  /*< private >*/
+  gboolean       loaded;
+  guint          rank;
+
+  const gchar   *plugin_name;
+  GstPlugin     *plugin;      /* weak ref */
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+struct _GstPluginFeatureClass {
+  GstObjectClass        parent_class;
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+#include "gsttypefind.h"
+
+struct _GstTypeFindFactory {
+  GstPluginFeature              feature;
+  /* <private> */
+
+  GstTypeFindFunction           function;
+  gchar **                      extensions;
+  GstCaps *                     caps; /* FIXME: not yet saved in registry */
+
+  gpointer                      user_data;
+  GDestroyNotify                user_data_notify;
+
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+struct _GstTypeFindFactoryClass {
+  GstPluginFeatureClass         parent;
+  /* <private> */
+
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+struct _GstElementFactory {
+  GstPluginFeature      parent;
+
+  GType                 type;                   /* unique GType of element or 0 if not loaded */
+
+  gpointer              metadata;
+
+  GList *               staticpadtemplates;     /* GstStaticPadTemplate list */
+  guint                 numpadtemplates;
+
+  /* URI interface stuff */
+  GstURIType            uri_type;
+  gchar **              uri_protocols;
+
+  GList *               interfaces;             /* interface type names this element implements */
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+struct _GstElementFactoryClass {
+  GstPluginFeatureClass parent_class;
+
+  gpointer _gst_reserved[GST_PADDING];
+};
+
 G_END_DECLS
 #endif /* __GST_PRIVATE_H__ */