gstpad: Avoid race in (un)setting EOS flag on sinkpads
[platform/upstream/gstreamer.git] / subprojects / gstreamer / gst / gstdynamictypefactory.h
1 /* GStreamer
2  * Copyright (C) 2015 Jan Schmidt <jan@centricular.com>
3  *
4  * gstdynamictypefactory.h: Header for GstDynamicTypeFactory
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Library General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Library General Public License for more details.
15  *
16  * You should have received a copy of the GNU Library General Public
17  * License along with this library; if not, write to the
18  * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
19  * Boston, MA 02110-1301, USA.
20  */
21
22 #ifndef __GST_DYNAMIC_TYPE_FACTORY_H__
23 #define __GST_DYNAMIC_TYPE_FACTORY_H__
24
25 /**
26  * GST_DYNAMIC_TYPE_REGISTER_DEFINE:
27  * @t_n: The dynamic type name in lower case, with words separated by '_'.
28  * Used to generate `gst_dynamic_type_register_*(GstPlugin* plugin)`.
29  * @t: The #GType of the dynamic type
30
31  * A convenience macro to define the entry point of a
32  * dynamic type `gst_dynamic_type_register_*(GstPlugin* plugin)`.
33  *
34  * Since: 1.20
35  */
36 #define GST_DYNAMIC_TYPE_REGISTER_DEFINE(t_n, t) \
37 G_BEGIN_DECLS \
38 gboolean G_PASTE (gst_dynamic_type_register_, t_n) (GstPlugin * plugin) \
39 { \
40   return gst_dynamic_type_register (plugin, t); \
41 } \
42 G_END_DECLS
43
44 /**
45  * GST_DYNAMIC_TYPE_REGISTER_DECLARE:
46  * @t_f: The dynamic type name in lower case, with words separated by '_'.
47  *
48  * This macro can be used to declare a new dynamic type.
49  * It has to be used in combination with #GST_DYNAMIC_TYPE_REGISTER_DEFINE macro
50  * and must be placed outside any block to declare the type find registration
51  * function.
52  *
53  * Since: 1.20
54  */
55 #define GST_DYNAMIC_TYPE_REGISTER_DECLARE(t_n) \
56 G_BEGIN_DECLS \
57 gboolean G_PASTE(gst_dynamic_type_register_, t_n) (GstPlugin * plugin); \
58 G_END_DECLS
59
60 /**
61  * GST_DYNAMIC_TYPE_REGISTER:
62  * @t_n: The dynamic type name to register
63  * @plugin: The #GstPlugin where to register the dynamic type.
64  *
65  * This macro can be used to register a dynamic type into a #GstPlugin.
66  * This method will be usually called in the plugin init function
67  * but can also be called with a NULL plugin.
68  *
69  * Since: 1.20
70  */
71 #define GST_DYNAMIC_TYPE_REGISTER(t_n, plugin) G_PASTE(gst_dynamic_type_register_, t_n) (plugin)
72
73 /**
74  * GstDynamicTypeFactory:
75  *
76  * The opaque #GstDynamicTypeFactory data structure.
77  *
78  * Since: 1.12
79  */
80 typedef struct _GstDynamicTypeFactory GstDynamicTypeFactory;
81 typedef struct _GstDynamicTypeFactoryClass GstDynamicTypeFactoryClass;
82
83 #include <gst/gstconfig.h>
84 #include <gst/gstplugin.h>
85 #include <gst/gstpluginfeature.h>
86
87 G_BEGIN_DECLS
88
89 #define GST_TYPE_DYNAMIC_TYPE_FACTORY           (gst_dynamic_type_factory_get_type())
90 #define GST_DYNAMIC_TYPE_FACTORY(obj)           (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DYNAMIC_TYPE_FACTORY,\
91                                                  GstDynamicTypeFactory))
92 #define GST_DYNAMIC_TYPE_CLASS(klass)           (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DYNAMIC_TYPE_FACTORY,\
93                                                  GstDynamicTypeFactoryClass))
94 #define GST_IS_DYNAMIC_TYPE_FACTORY(obj)        (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DYNAMIC_TYPE_FACTORY))
95 #define GST_IS_DYNAMIC_TYPE_FACTORY_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DYNAMIC_TYPE_FACTORY))
96 #define GST_DYNAMIC_TYPE_FACTORY_CAST(obj)      ((GstDynamicTypeFactory *)(obj))
97
98 GST_API
99 GType  gst_dynamic_type_factory_get_type        (void);
100
101 GST_API
102 GType  gst_dynamic_type_factory_load            (const gchar *factoryname);
103
104 GST_API
105 gboolean gst_dynamic_type_register              (GstPlugin *plugin, GType type);
106
107 G_END_DECLS
108
109 #endif