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 110