+/**** 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;
+
+ 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;
+
+ gpointer user_data;
+ GDestroyNotify user_data_notify;
+
+ gpointer _gst_reserved[GST_PADDING];
+};
+
+struct _GstTypeFindFactoryClass {
+ GstPluginFeatureClass parent;
+ /* <private> */
+
+ gpointer _gst_reserved[GST_PADDING];
+};
+
+struct _GstTracerFactory {
+ GstPluginFeature feature;
+ /* <private> */
+
+ GType type;
+
+ /*
+ gpointer user_data;
+ GDestroyNotify user_data_notify;
+ */
+
+ gpointer _gst_reserved[GST_PADDING];
+};
+
+struct _GstTracerFactoryClass {
+ 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];
+};
+
+struct _GstDeviceProviderFactory {
+ GstPluginFeature feature;
+ /* <private> */
+
+ GType type; /* unique GType the device factory or 0 if not loaded */
+
+ volatile GstDeviceProvider *provider;
+ gpointer metadata;
+
+ gpointer _gst_reserved[GST_PADDING];
+};
+
+struct _GstDeviceProviderFactoryClass {
+ GstPluginFeatureClass parent;
+ /* <private> */
+
+ 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)