source: trunk/third/gstreamer/gst/gstinterface.h @ 21005

Revision 21005, 3.0 KB checked in by ghudson, 20 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r21004, which included commits to RCS files with non-trunk default branches.
Line 
1/* GStreamer
2 * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
3 *                    2000 Wim Taymans <wtay@chello.be>
4 *
5 * gstinterface.h: Declarations of interface stuff
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 * Library General Public License for more details.
16 *
17 * You should have received a copy of the GNU Library General Public
18 * License along with this library; if not, write to the
19 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 * Boston, MA 02111-1307, USA.
21 */
22
23#ifndef __GST_IMPLEMENTS_INTERFACE_H__
24#define __GST_IMPLEMENTS_INTERFACE_H__
25
26#include <gst/gstelement.h>
27
28G_BEGIN_DECLS
29
30#define GST_TYPE_IMPLEMENTS_INTERFACE \
31  (gst_implements_interface_get_type ())
32#define GST_IMPLEMENTS_INTERFACE(obj) \
33  (GST_INTERFACE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_IMPLEMENTS_INTERFACE, \
34                                      GstImplementsInterface))
35#define GST_IMPLEMENTS_INTERFACE_CLASS(klass) \
36  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_IMPLEMENTS_INTERFACE, \
37                            GstImplementsInterfaceClass))
38#define GST_IS_IMPLEMENTS_INTERFACE(obj) \
39  (GST_INTERFACE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_IMPLEMENTS_INTERFACE))
40#define GST_IS_IMPLEMENTS_INTERFACE_CLASS(klass) \
41  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_IMPLEMENTS_INTERFACE))
42#define GST_IMPLEMENTS_INTERFACE_GET_CLASS(inst) \
43  (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_IMPLEMENTS_INTERFACE, \
44                                  GstImplementsInterfaceClass))
45
46typedef struct _GstImplementsInterface GstImplementsInterface;
47
48typedef struct _GstImplementsInterfaceClass GstImplementsInterfaceClass;
49
50/* This small extra virtual function is here to provide an
51 * interface functionality on a per-instance basis rather
52 * than a per-class basis, which is the case for glib.
53 */
54struct _GstImplementsInterfaceClass {
55  GTypeInterface parent;
56
57  /* virtual functions */
58  gboolean (* supported) (GstImplementsInterface *iface,
59                          GType                   iface_type);
60
61  gpointer _gst_reserved[GST_PADDING];
62};
63
64#define GST_IMPLEMENTS_INTERFACE_CHECK_INSTANCE_CAST(obj, type, cast_t) \
65  ((cast_t *) gst_implements_interface_cast ((obj), (type)))
66#define GST_IMPLEMENTS_INTERFACE_CHECK_INSTANCE_TYPE(obj, type) \
67  (gst_implements_interface_check ((obj), (type)))
68
69GType    gst_implements_interface_get_type    (void);
70
71/* wrapper functions to check for functionality implementation */
72gboolean gst_element_implements_interface     (GstElement *element,
73                                               GType       iface_type);
74gpointer gst_implements_interface_cast        (gpointer    from,
75                                               GType       type);
76gboolean gst_implements_interface_check       (gpointer    from,
77                                               GType       type);
78
79G_END_DECLS
80
81#endif /* __GST_IMPLEMENTS_INTERFACE_H__ */
Note: See TracBrowser for help on using the repository browser.