element: Enforce that elements created by gst_element_factory_create/make() are floating
[platform/upstream/gstreamer.git] / gst / gst_private.h
index 049142c..b4567d6 100644 (file)
@@ -38,7 +38,7 @@ extern const char             g_log_domain_gstreamer[];
 #include <stdlib.h>
 #include <string.h>
 
-/* Needed for GST_EXPORT */
+/* Needed for GST_API */
 #include "gst/gstconfig.h"
 
 /* Needed for GstRegistry * */
@@ -92,12 +92,20 @@ struct _GstPluginPrivate {
   GstStructure *cache_data;
 };
 
+/* Needed by GstMeta (to access meta seq) and GstBuffer (create/free/iterate) */
+typedef struct _GstMetaItem GstMetaItem;
+struct _GstMetaItem {
+  GstMetaItem *next;
+  guint64 seq_num;
+  GstMeta meta;
+};
+
 /* FIXME: could rename all priv_gst_* functions to __gst_* now */
 G_GNUC_INTERNAL  gboolean priv_gst_plugin_loading_have_whitelist (void);
 
 G_GNUC_INTERNAL  guint32  priv_gst_plugin_loading_get_whitelist_hash (void);
 
-G_GNUC_INTERNAL  gboolean priv_gst_plugin_desc_is_whitelisted (GstPluginDesc * desc,
+G_GNUC_INTERNAL  gboolean priv_gst_plugin_desc_is_whitelisted (const GstPluginDesc * desc,
                                                                const gchar   * filename);
 
 G_GNUC_INTERNAL  gboolean _priv_plugin_deps_env_vars_changed (GstPlugin * plugin);
@@ -134,6 +142,7 @@ G_GNUC_INTERNAL  void  _priv_gst_date_time_initialize (void);
 G_GNUC_INTERNAL  void  _priv_gst_allocator_cleanup (void);
 G_GNUC_INTERNAL  void  _priv_gst_caps_features_cleanup (void);
 G_GNUC_INTERNAL  void  _priv_gst_caps_cleanup (void);
+G_GNUC_INTERNAL  void  _priv_gst_debug_cleanup (void);
 
 /* called from gst_task_cleanup_all(). */
 G_GNUC_INTERNAL  void  _priv_gst_element_cleanup (void);
@@ -144,12 +153,22 @@ gboolean _priv_gst_registry_remove_cache_plugins (GstRegistry *registry);
 
 G_GNUC_INTERNAL  void _priv_gst_registry_cleanup (void);
 
+GST_API
 gboolean _gst_plugin_loader_client_run (void);
 
 G_GNUC_INTERNAL  GstPlugin * _priv_gst_plugin_load_file_for_registry (const gchar *filename,
                                                                       GstRegistry * registry,
                                                                       GError** error);
 
+/* GValue serialization/deserialization */
+
+G_GNUC_INTERNAL const char * _priv_gst_value_gtype_to_abbr (GType type);
+
+G_GNUC_INTERNAL gboolean _priv_gst_value_parse_string (gchar * s, gchar ** end, gchar ** next, gboolean unescape);
+G_GNUC_INTERNAL gboolean _priv_gst_value_parse_simple_string (gchar * str, gchar ** end);
+G_GNUC_INTERNAL gboolean _priv_gst_value_parse_value (gchar * str, gchar ** after, GValue * value, GType default_type);
+G_GNUC_INTERNAL gchar * _priv_gst_value_serialize_any_list (const GValue * value, const gchar * begin, const gchar * end, gboolean print_type);
+
 /* Used in GstBin for manual state handling */
 G_GNUC_INTERNAL  void _priv_gst_element_state_changed (GstElement *element,
                       GstState oldstate, GstState newstate, GstState pending);
@@ -209,21 +228,20 @@ gint __gst_date_time_compare (const GstDateTime * dt1, const GstDateTime * dt2);
 G_GNUC_INTERNAL
 gchar * __gst_date_time_serialize (GstDateTime * datetime, gboolean with_usecs);
 
-/* Non-static, for access from the testsuite, but not for external use */
-gboolean
-_priv_gst_do_linear_regression (GstClockTime *times, guint n,
-    GstClockTime * m_num, GstClockTime * m_denom, GstClockTime * b,
-    GstClockTime * xbase, gdouble * r_squared);
-
 /* For use in gstdebugutils */
 G_GNUC_INTERNAL
 GstCapsFeatures * __gst_caps_get_features_unchecked (const GstCaps * caps, guint idx);
 
 #ifndef GST_DISABLE_REGISTRY
 /* Secret variable to initialise gst without registry cache */
-GST_EXPORT gboolean _gst_disable_registry_cache;
+
+GST_API gboolean _gst_disable_registry_cache;
 #endif
 
+/* Secret variable to let the plugin scanner use the same base path
+ * as the main application in order to determine dependencies */
+GST_API gchar *_gst_executable_path;
+
 /* provide inline gst_g_value_get_foo_unchecked(), used in gststructure.c */
 #define DEFINE_INLINE_G_VALUE_GET_UNCHECKED(ret_type,name_type,v_field) \
 static inline ret_type                                                  \
@@ -246,37 +264,37 @@ 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_MEMORY;
-GST_EXPORT GstDebugCategory *GST_CAT_PARENTAGE;
-GST_EXPORT GstDebugCategory *GST_CAT_STATES;
-GST_EXPORT GstDebugCategory *GST_CAT_SCHEDULING;
-GST_EXPORT GstDebugCategory *GST_CAT_BUFFER;
-GST_EXPORT GstDebugCategory *GST_CAT_BUFFER_LIST;
-GST_EXPORT GstDebugCategory *GST_CAT_BUS;
-GST_EXPORT GstDebugCategory *GST_CAT_CAPS;
-GST_EXPORT GstDebugCategory *GST_CAT_CLOCK;
-GST_EXPORT GstDebugCategory *GST_CAT_ELEMENT_PADS;
-GST_EXPORT GstDebugCategory *GST_CAT_PADS;
-GST_EXPORT GstDebugCategory *GST_CAT_PERFORMANCE;
-GST_EXPORT GstDebugCategory *GST_CAT_PIPELINE;
-GST_EXPORT GstDebugCategory *GST_CAT_PLUGIN_LOADING;
-GST_EXPORT GstDebugCategory *GST_CAT_PLUGIN_INFO;
-GST_EXPORT GstDebugCategory *GST_CAT_PROPERTIES;
-GST_EXPORT GstDebugCategory *GST_CAT_NEGOTIATION;
-GST_EXPORT GstDebugCategory *GST_CAT_REFCOUNTING;
-GST_EXPORT GstDebugCategory *GST_CAT_ERROR_SYSTEM;
-GST_EXPORT GstDebugCategory *GST_CAT_EVENT;
-GST_EXPORT GstDebugCategory *GST_CAT_MESSAGE;
-GST_EXPORT GstDebugCategory *GST_CAT_PARAMS;
-GST_EXPORT GstDebugCategory *GST_CAT_CALL_TRACE;
-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_META;
-GST_EXPORT GstDebugCategory *GST_CAT_LOCKING;
-GST_EXPORT GstDebugCategory *GST_CAT_CONTEXT;
+GST_API GstDebugCategory *GST_CAT_GST_INIT;
+GST_API GstDebugCategory *GST_CAT_MEMORY;
+GST_API GstDebugCategory *GST_CAT_PARENTAGE;
+GST_API GstDebugCategory *GST_CAT_STATES;
+GST_API GstDebugCategory *GST_CAT_SCHEDULING;
+GST_API GstDebugCategory *GST_CAT_BUFFER;
+GST_API GstDebugCategory *GST_CAT_BUFFER_LIST;
+GST_API GstDebugCategory *GST_CAT_BUS;
+GST_API GstDebugCategory *GST_CAT_CAPS;
+GST_API GstDebugCategory *GST_CAT_CLOCK;
+GST_API GstDebugCategory *GST_CAT_ELEMENT_PADS;
+GST_API GstDebugCategory *GST_CAT_PADS;
+GST_API GstDebugCategory *GST_CAT_PERFORMANCE;
+GST_API GstDebugCategory *GST_CAT_PIPELINE;
+GST_API GstDebugCategory *GST_CAT_PLUGIN_LOADING;
+GST_API GstDebugCategory *GST_CAT_PLUGIN_INFO;
+GST_API GstDebugCategory *GST_CAT_PROPERTIES;
+GST_API GstDebugCategory *GST_CAT_NEGOTIATION;
+GST_API GstDebugCategory *GST_CAT_REFCOUNTING;
+GST_API GstDebugCategory *GST_CAT_ERROR_SYSTEM;
+GST_API GstDebugCategory *GST_CAT_EVENT;
+GST_API GstDebugCategory *GST_CAT_MESSAGE;
+GST_API GstDebugCategory *GST_CAT_PARAMS;
+GST_API GstDebugCategory *GST_CAT_CALL_TRACE;
+GST_API GstDebugCategory *GST_CAT_SIGNAL;
+GST_API GstDebugCategory *GST_CAT_PROBE;
+GST_API GstDebugCategory *GST_CAT_REGISTRY;
+GST_API GstDebugCategory *GST_CAT_QOS;
+GST_API GstDebugCategory *GST_CAT_META;
+GST_API GstDebugCategory *GST_CAT_LOCKING;
+GST_API GstDebugCategory *GST_CAT_CONTEXT;
 
 /* Categories that should be completely private to
  * libgstreamer should be done like this: */
@@ -350,8 +368,6 @@ struct _GstPlugin {
   /*< private >*/
   GstPluginDesc        desc;
 
-  GstPluginDesc *orig_desc;
-
   gchar *      filename;
   gchar *      basename;       /* base name (non-dir part) of plugin path */
 
@@ -484,6 +500,16 @@ struct _GstDeviceProviderFactoryClass {
   gpointer _gst_reserved[GST_PADDING];
 };
 
+struct _GstDynamicTypeFactory {
+  GstPluginFeature           feature;
+
+  GType                      type; /* GType of the type, when loaded. 0 if not */
+};
+
+struct _GstDynamicTypeFactoryClass {
+  GstPluginFeatureClass      parent;
+};
+
 /* privat flag used by GstBus / GstMessage */
 #define GST_MESSAGE_FLAG_ASYNC_DELIVERY (GST_MINI_OBJECT_FLAG_LAST << 0)