00001
00002
00003 #ifndef _GSTREAMERMM_INTERFACE_H
00004 #define _GSTREAMERMM_INTERFACE_H
00005
00006
00007 #include <glibmm.h>
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include <glibmm/interface.h>
00029 #include <gstreamermm/element.h>
00030
00031
00032 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00033 typedef struct _GstImplementsInterface GstImplementsInterface;
00034 typedef struct _GstImplementsInterfaceClass GstImplementsInterfaceClass;
00035 #endif
00036
00037
00038 namespace Gst
00039 { class Interface_Class; }
00040 namespace Gst
00041 {
00042
00050 class Interface : public Glib::Interface
00051 {
00052
00053 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00054
00055 public:
00056 typedef Interface CppObjectType;
00057 typedef Interface_Class CppClassType;
00058 typedef GstImplementsInterface BaseObjectType;
00059 typedef GstImplementsInterface BaseClassType;
00060
00061 private:
00062 friend class Interface_Class;
00063 static CppClassType interface_class_;
00064
00065
00066 Interface(const Interface&);
00067 Interface& operator=(const Interface&);
00068
00069 protected:
00070 Interface();
00071
00078 explicit Interface(const Glib::Interface_Class& interface_class);
00079
00080 public:
00081
00082
00083
00084 explicit Interface(GstImplementsInterface* castitem);
00085
00086 protected:
00087 #endif
00088
00089 public:
00090 virtual ~Interface();
00091
00092 static void add_interface(GType gtype_implementer);
00093
00094 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00095 static GType get_type() G_GNUC_CONST;
00096 static GType get_base_type() G_GNUC_CONST;
00097 #endif
00098
00100 GstImplementsInterface* gobj() { return reinterpret_cast<GstImplementsInterface*>(gobject_); }
00101
00103 const GstImplementsInterface* gobj() const { return reinterpret_cast<GstImplementsInterface*>(gobject_); }
00104
00105 private:
00106
00107
00108 public:
00109
00115 static bool element_implements(const Glib::RefPtr<const Gst::Element>&element, GType iface_type);
00116
00117 template <class T_CastTo>
00118 static Glib::RefPtr< Gst::ElementInterfaced<T_CastTo> > cast(const Glib::RefPtr<Gst::Element>& element);
00119
00120
00121
00122
00123
00124 public:
00125
00126 public:
00127
00128 #ifdef GLIBMM_VFUNCS_ENABLED
00129 #endif //GLIBMM_VFUNCS_ENABLED
00130
00131 protected:
00132
00133 #ifdef GLIBMM_VFUNCS_ENABLED
00134 #endif //GLIBMM_VFUNCS_ENABLED
00135
00136
00137 #ifdef GLIBMM_DEFAULT_SIGNAL_HANDLERS_ENABLED
00138 #endif //GLIBMM_DEFAULT_SIGNAL_HANDLERS_ENABLED
00139
00140
00141 };
00142
00143 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00144
00145 template <class T_CastTo>
00146 Glib::RefPtr< Gst::ElementInterfaced<T_CastTo> > Interface::cast(const Glib::RefPtr<Gst::Element>& element)
00147 {
00148 if (element && gst_element_implements_interface(element->gobj(), T_CastTo::get_type()))
00149 {
00150 void* result =
00151 gst_implements_interface_cast(element->gobj(), T_CastTo::get_type());
00152
00153 Gst::ElementInterfaced<T_CastTo>* element_interfaced =
00154 new ElementInterfaced<T_CastTo>((GstElement*) result);
00155
00156 return Glib::RefPtr< Gst::ElementInterfaced<T_CastTo> >(element_interfaced);
00157 }
00158 else
00159 return Glib::RefPtr< Gst::ElementInterfaced<T_CastTo> >(0);
00160 }
00161
00162 #endif
00163
00164 }
00165
00166
00167 namespace Glib
00168 {
00177 Glib::RefPtr<Gst::Interface> wrap(GstImplementsInterface* object, bool take_copy = false);
00178
00179 }
00180
00181
00182 #endif
00183