element: Enforce that elements created by gst_element_factory_create/make() are floating
[platform/upstream/gstreamer.git] / gst / gstpadtemplate.h
index bc2bcee..fb15c40 100644 (file)
@@ -16,8 +16,8 @@
  *
  * You should have received a copy of the GNU Library General Public
  * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
  */
 
 
@@ -52,7 +52,7 @@ G_BEGIN_DECLS
  * @GST_PAD_ALWAYS: the pad is always available
  * @GST_PAD_SOMETIMES: the pad will become available depending on the media stream
  * @GST_PAD_REQUEST: the pad is only available on request with
- *  gst_element_get_request_pad().
+ *  gst_element_request_pad().
  *
  * Indicates when this pad will become available.
  */
@@ -95,6 +95,16 @@ typedef enum {
 #define GST_PAD_TEMPLATE_CAPS(templ)           (((GstPadTemplate *)(templ))->caps)
 
 /**
+ * GST_PAD_TEMPLATE_GTYPE:
+ * @templ: the template to query
+ *
+ * Get the #GType of the padtemplate
+ *
+ * Since: 1.14
+ */
+#define GST_PAD_TEMPLATE_GTYPE(templ)          (((GstPadTemplate *)(templ))->ABI.abi.gtype)
+
+/**
  * GstPadTemplateFlags:
  * @GST_PAD_TEMPLATE_FLAG_LAST: first flag that can be used by subclasses.
  *
@@ -126,7 +136,13 @@ struct _GstPadTemplate {
   GstPadPresence   presence;
   GstCaps        *caps;
 
-  gpointer _gst_reserved[GST_PADDING];
+  /*< private >*/
+  union {
+    gpointer _gst_reserved[GST_PADDING];
+    struct {
+      GType gtype;
+    } abi;
+  } ABI;
 };
 
 struct _GstPadTemplateClass {
@@ -135,10 +151,11 @@ struct _GstPadTemplateClass {
   /* signal callbacks */
   void (*pad_created)  (GstPadTemplate *templ, GstPad *pad);
 
+  /*< private >*/
   gpointer _gst_reserved[GST_PADDING];
 };
 
-/** 
+/**
  * GstStaticPadTemplate:
  * @name_template: the name of the template
  * @direction: the direction of the template
@@ -161,8 +178,14 @@ struct _GstStaticPadTemplate {
  * @pres: the GstPadPresence of the pad
  * @caps: the GstStaticCaps of the pad
  *
- * Convenience macro to fill the values of a GstStaticPadTemplate
+ * Convenience macro to fill the values of a #GstStaticPadTemplate
  * structure.
+ * Example:
+ * |[<!-- language="C" -->
+ * static GstStaticPadTemplate my_src_template = \
+ *   GST_STATIC_PAD_TEMPLATE("src", GST_PAD_SRC, GST_PAD_ALWAYS,
+ *                           GST_STATIC_CAPS_ANY);
+ * ]|
  */
 #define GST_STATIC_PAD_TEMPLATE(padname, dir, pres, caps) \
 { \
@@ -173,19 +196,42 @@ struct _GstStaticPadTemplate {
 }
 
 /* templates and factories */
+
+GST_API
 GType                  gst_pad_template_get_type               (void);
+
+GST_API
 GType                  gst_static_pad_template_get_type        (void);
 
+GST_API
 GstPadTemplate*                gst_pad_template_new                    (const gchar *name_template,
                                                                 GstPadDirection direction, GstPadPresence presence,
-                                                                GstCaps *caps);
-
+                                                                GstCaps *caps) G_GNUC_MALLOC;
+GST_API
+GstPadTemplate*                gst_pad_template_new_with_gtype         (const gchar *name_template,
+                                                                GstPadDirection direction, GstPadPresence presence,
+                                                                GstCaps *caps, GType pad_type) G_GNUC_MALLOC;
+GST_API
 GstPadTemplate *       gst_static_pad_template_get             (GstStaticPadTemplate *pad_template);
+
+GST_API
+GstPadTemplate * gst_pad_template_new_from_static_pad_template_with_gtype (
+    GstStaticPadTemplate * pad_template,
+    GType pad_type);
+
+GST_API
 GstCaps*               gst_static_pad_template_get_caps        (GstStaticPadTemplate *templ);
+
+GST_API
 GstCaps*               gst_pad_template_get_caps               (GstPadTemplate *templ);
 
+GST_API
 void                    gst_pad_template_pad_created            (GstPadTemplate * templ, GstPad * pad);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstPadTemplate, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_PAD_TEMPLATE_H__ */