Merge CAPS branch
[platform/upstream/gstreamer.git] / gst / gstelement.h
index efd2e57..3ae5fbd 100644 (file)
@@ -32,6 +32,7 @@
 #include <gst/gstplugin.h>
 #include <gst/gstpluginfeature.h>
 #include <gst/gstindex.h>
+#include <gst/gsttag.h>
 
 G_BEGIN_DECLS
 
@@ -44,10 +45,10 @@ struct _GstElementDetails {
   gchar *description;           /* insights of one form or another */
   gchar *author;                /* who wrote this thing? */
 
-  GST_STRUCT_PADDING
+  gpointer _gst_reserved[GST_PADDING];
 };
 #define GST_ELEMENT_DETAILS(longname,klass,description,author)         \
-  { longname, klass, description, author, GST_STRUCT_PADDING_INIT }
+  { longname, klass, description, author, GST_PADDING_INIT }
 #define GST_IS_ELEMENT_DETAILS(details) (                                      \
   (details) && ((details)->longname != NULL) && ((details)->klass != NULL)     \
   && ((details)->description != NULL) && ((details)->author != NULL))
@@ -72,20 +73,11 @@ struct _GstElementDetails {
 extern GType _gst_element_type;
 
 #define GST_TYPE_ELEMENT               (_gst_element_type)
-
-#define GST_ELEMENT_CAST(obj)          ((GstElement*)(obj))
-#define GST_ELEMENT_CLASS_CAST(klass)  ((GstElementClass*)(klass))
 #define GST_IS_ELEMENT(obj)            (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_ELEMENT))
 #define GST_IS_ELEMENT_CLASS(klass)    (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_ELEMENT))
 #define GST_ELEMENT_GET_CLASS(obj)     (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_ELEMENT, GstElementClass))
-
-#ifdef GST_TYPE_PARANOID
-# define GST_ELEMENT(obj)              (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_ELEMENT, GstElement))
-# define GST_ELEMENT_CLASS(klass)       (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_ELEMENT, GstElementClass))
-#else
-# define GST_ELEMENT                    GST_ELEMENT_CAST
-# define GST_ELEMENT_CLASS              GST_ELEMENT_CLASS_CAST
-#endif
+#define GST_ELEMENT(obj)               (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_ELEMENT, GstElement))
+#define GST_ELEMENT_CLASS(klass)       (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_ELEMENT, GstElementClass))
 
 /* convenience functions */
 #ifdef G_HAVE_ISO_VARARGS
@@ -137,7 +129,6 @@ typedef enum {
 } GstElementFlags;
 
 #define GST_ELEMENT_IS_THREAD_SUGGESTED(obj)   (GST_FLAG_IS_SET(obj,GST_ELEMENT_THREAD_SUGGESTED))
-#define GST_ELEMENT_IS_EOS(obj)                        (GST_FLAG_IS_SET(obj,GST_ELEMENT_EOS))
 #define GST_ELEMENT_IS_EVENT_AWARE(obj)                (GST_FLAG_IS_SET(obj,GST_ELEMENT_EVENT_AWARE))
 #define GST_ELEMENT_IS_DECOUPLED(obj)          (GST_FLAG_IS_SET(obj,GST_ELEMENT_DECOUPLED))
 
@@ -184,7 +175,7 @@ struct _GstElement {
   GAsyncQueue          *prop_value_queue;
   GMutex               *property_mutex;
 
-  GST_OBJECT_PADDING
+  gpointer _gst_reserved[GST_PADDING];
 };
 
 struct _GstElementClass {
@@ -192,6 +183,10 @@ struct _GstElementClass {
 
   /* the element details */
   GstElementDetails    details;
+
+  /* factory that the element was created from */
+  GstElementFactory    *elementfactory;
+
   /* templates for our pads */
   GList                *padtemplates;
   gint                         numpadtemplates;
@@ -202,6 +197,7 @@ struct _GstElementClass {
   void (*pad_removed)  (GstElement *element, GstPad *pad);
   void (*error)                (GstElement *element, GstElement *source, gchar *error);
   void (*eos)          (GstElement *element);
+  void (*found_tag)    (GstElement *element, GstElement *source, GstTagList *tag_list);
 
   /* local pointers for get/set */
   void (*set_property)         (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
@@ -236,21 +232,20 @@ struct _GstElementClass {
   GstIndex*            (*get_index)            (GstElement *element);
   void                 (*set_index)            (GstElement *element, GstIndex *index);
 
-  GST_CLASS_PADDING
+  gpointer _gst_reserved[GST_PADDING];
 };
 
 void                   gst_element_class_add_pad_template      (GstElementClass *klass, GstPadTemplate *templ);
 void                    gst_element_class_install_std_props    (GstElementClass *klass,
                                                                 const gchar      *first_name, ...);
 void                   gst_element_class_set_details           (GstElementClass *klass,
-                                                                GstElementDetails *details);
+                                                                const GstElementDetails *details);
 
 #define                gst_element_default_deep_notify         gst_object_default_deep_notify
 
 void                   gst_element_default_error               (GObject *object, GstObject *orig, gchar *error);
 
 GType                  gst_element_get_type            (void);
-
 void                   gst_element_set_loop_function   (GstElement *element,
                                                         GstElementLoopFunction loop);
 
@@ -306,11 +301,14 @@ 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);
 
-const GList*           gst_element_get_pad_list        (GstElement *element);
+G_CONST_RETURN GList*
+                       gst_element_get_pad_list        (GstElement *element);
 GstPad*                        gst_element_get_compatible_pad  (GstElement *element, GstPad *pad);
 GstPad*                        gst_element_get_compatible_pad_filtered (GstElement *element, GstPad *pad, 
-                                                        GstCaps *filtercaps);
+                                                        const GstCaps *filtercaps);
 
+GstPadTemplate*                gst_element_class_get_pad_template      (GstElementClass *element_class, const gchar *name);
+GList*                  gst_element_class_get_pad_template_list (GstElementClass *element_class);
 GstPadTemplate*                gst_element_get_pad_template            (GstElement *element, const gchar *name);
 GList*                 gst_element_get_pad_template_list       (GstElement *element);
 GstPadTemplate*                gst_element_get_compatible_pad_template (GstElement *element, GstPadTemplate *compattempl);
@@ -319,7 +317,7 @@ gboolean            gst_element_link                (GstElement *src, GstElement *dest);
 gboolean               gst_element_link_many           (GstElement *element_1, 
                                                         GstElement *element_2, ...);
 gboolean               gst_element_link_filtered       (GstElement *src, GstElement *dest,
-                                                        GstCaps *filtercaps);
+                                                        const GstCaps *filtercaps);
 void                   gst_element_unlink              (GstElement *src, GstElement *dest);
 void                   gst_element_unlink_many         (GstElement *element_1, 
                                                         GstElement *element_2, ...);
@@ -328,22 +326,29 @@ gboolean          gst_element_link_pads           (GstElement *src, const gchar *srcpadname,
                                                         GstElement *dest, const gchar *destpadname);
 gboolean               gst_element_link_pads_filtered  (GstElement *src, const gchar *srcpadname,
                                                         GstElement *dest, const gchar *destpadname,
-                                                        GstCaps *filtercaps);
+                                                        const GstCaps *filtercaps);
 void                   gst_element_unlink_pads         (GstElement *src, const gchar *srcpadname,
                                                         GstElement *dest, const gchar *destpadname);
 
-const GstEventMask*    gst_element_get_event_masks     (GstElement *element);
+G_CONST_RETURN GstEventMask*
+                       gst_element_get_event_masks     (GstElement *element);
 gboolean               gst_element_send_event          (GstElement *element, GstEvent *event);
 gboolean               gst_element_seek                (GstElement *element, GstSeekType seek_type,
                                                         guint64 offset);
-const GstQueryType*    gst_element_get_query_types     (GstElement *element);
+G_CONST_RETURN GstQueryType*
+                       gst_element_get_query_types     (GstElement *element);
 gboolean               gst_element_query               (GstElement *element, GstQueryType type,
                                                         GstFormat *format, gint64 *value);
-const GstFormat*       gst_element_get_formats         (GstElement *element);
+G_CONST_RETURN GstFormat*
+                       gst_element_get_formats         (GstElement *element);
 gboolean               gst_element_convert             (GstElement *element, 
                                                         GstFormat  src_format,  gint64  src_value,
                                                         GstFormat *dest_format, gint64 *dest_value);
 
+void                   gst_element_found_tags          (GstElement *element, GstTagList *tag_list);
+void                   gst_element_found_tags_for_pad  (GstElement *element, GstPad *pad, GstClockTime timestamp, 
+                                                        GstTagList *list);
+
 void                   gst_element_set_eos             (GstElement *element);
 
 void                   gst_element_error               (GstElement *element, const gchar *error, ...);
@@ -357,7 +362,9 @@ GstElementStateReturn       gst_element_set_state           (GstElement *element, GstElementSta
 
 void                   gst_element_wait_state_change   (GstElement *element);
        
-const gchar*           gst_element_state_get_name      (GstElementState state);
+G_CONST_RETURN gchar*  gst_element_state_get_name      (GstElementState state);
+
+GstElementFactory*     gst_element_get_factory         (GstElement *element);
 
 GstBin*                        gst_element_get_managing_bin    (GstElement *element);
 
@@ -386,13 +393,19 @@ struct _GstElementFactory {
   GList *              padtemplates;
   guint                        numpadtemplates;
 
-  GST_OBJECT_PADDING
+  /* URI interface stuff */
+  guint                        uri_type;
+  gchar **             uri_protocols;
+  
+  GList *              interfaces;             /* interfaces this element implements */
+
+  gpointer _gst_reserved[GST_PADDING];
 };
 
 struct _GstElementFactoryClass {
   GstPluginFeatureClass parent_class;
 
-  GST_CLASS_PADDING
+  gpointer _gst_reserved[GST_PADDING];
 };
 
 GType                  gst_element_factory_get_type            (void);
@@ -403,27 +416,30 @@ gboolean          gst_element_register                    (GstPlugin *plugin,
                                                                 GType type);
 
 GstElementFactory *    gst_element_factory_find                (const gchar *name);
-GstElementFactory *    gst_element_factory_find_from_element   (GstElement *element);
 GType                  gst_element_factory_get_element_type    (GstElementFactory *factory);
 G_CONST_RETURN gchar * gst_element_factory_get_longname        (GstElementFactory *factory);
 G_CONST_RETURN gchar * gst_element_factory_get_klass           (GstElementFactory *factory);
 G_CONST_RETURN gchar * gst_element_factory_get_description     (GstElementFactory *factory);
 G_CONST_RETURN gchar * gst_element_factory_get_version         (GstElementFactory *factory);
 G_CONST_RETURN gchar * gst_element_factory_get_author          (GstElementFactory *factory);
-guint                  gst_element_factory_get_num_padtemplates (GstElementFactory *factory);
-G_CONST_RETURN GList * gst_element_factory_get_padtemplates    (GstElementFactory *factory);
+guint                  gst_element_factory_get_num_pad_templates (GstElementFactory *factory);
+G_CONST_RETURN GList * gst_element_factory_get_pad_templates   (GstElementFactory *factory);
+guint                  gst_element_factory_get_uri_type        (GstElementFactory *factory);           
+gchar **               gst_element_factory_get_uri_protocols   (GstElementFactory *factory);           
 
 GstElement*            gst_element_factory_create              (GstElementFactory *factory,
                                                                 const gchar *name);
 GstElement*            gst_element_factory_make                (const gchar *factoryname, const gchar *name);
 
 gboolean               gst_element_factory_can_src_caps        (GstElementFactory *factory,
-                                                                GstCaps *caps);
+                                                                const GstCaps *caps);
 gboolean               gst_element_factory_can_sink_caps       (GstElementFactory *factory,
-                                                                GstCaps *caps);
+                                                                const GstCaps *caps);
 
 void                   __gst_element_factory_add_pad_template  (GstElementFactory *elementfactory,
                                                                 GstPadTemplate *templ);
+void                   __gst_element_factory_add_interface     (GstElementFactory *elementfactory,
+                                                                const gchar *interfacename);
 
 
 G_END_DECLS