00001
00002
00003 #ifndef _GSTMM_BUS_H
00004 #define _GSTMM_BUS_H
00005
00006
00007 #include <glibmm.h>
00008
00009 #include <gstreamermm/object.h>
00010 #include <gstreamermm/clock.h>
00011 #include <gstreamermm/enums.h>
00012
00013
00014 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00015 typedef struct _GstBus GstBus;
00016 typedef struct _GstBusClass GstBusClass;
00017 #endif
00018
00019
00020 namespace Gst
00021 { class Bus_Class; }
00022 namespace Gst
00023 {
00024
00025 class Message;
00026
00027
00028 class Bus : public Object
00029 {
00030
00031 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00032
00033 public:
00034 typedef Bus CppObjectType;
00035 typedef Bus_Class CppClassType;
00036 typedef GstBus BaseObjectType;
00037 typedef GstBusClass BaseClassType;
00038
00039 private: friend class Bus_Class;
00040 static CppClassType bus_class_;
00041
00042 private:
00043
00044 Bus(const Bus&);
00045 Bus& operator=(const Bus&);
00046
00047 protected:
00048 explicit Bus(const Glib::ConstructParams& construct_params);
00049 explicit Bus(GstBus* castitem);
00050
00051 #endif
00052
00053 public:
00054 virtual ~Bus();
00055
00056 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00057 static GType get_type() G_GNUC_CONST;
00058 static GType get_base_type() G_GNUC_CONST;
00059 #endif
00060
00062 GstBus* gobj() { return reinterpret_cast<GstBus*>(gobject_); }
00063
00065 const GstBus* gobj() const { return reinterpret_cast<GstBus*>(gobject_); }
00066
00068 GstBus* gobj_copy();
00069
00070 private:
00071
00072
00073 protected:
00074 Bus();
00075
00076 public:
00077 static Glib::RefPtr<Bus> create();
00078
00079 bool post(const Glib::RefPtr<Message>& message);
00080
00081 bool have_pending() const;
00082
00083
00084 Glib::RefPtr<Message> peek();
00085
00086 Glib::RefPtr<const Message> peek() const;
00087
00088
00089 Glib::RefPtr<Message> pop();
00090
00091 Glib::RefPtr<Message> timed_pop(ClockTime timeout);
00092
00093
00094 void set_flushing(bool flushing = true);
00095
00099 typedef sigc::slot<bool, const Glib::RefPtr<Bus>&, const Glib::RefPtr<Message>& > SlotWatch;
00100 guint add_watch(const SlotWatch& slot, int priority = G_PRIORITY_DEFAULT);
00101 bool remove_watch(guint watch_id);
00102
00103
00104 void disable_sync_message_emission();
00105
00106 void enable_sync_message_emission();
00107
00108
00109 void add_signal_watch(int priority = G_PRIORITY_DEFAULT);
00110
00111 void remove_signal_watch();
00112
00113
00119 Glib::SignalProxy1< void,const Glib::RefPtr<Message>& > signal_message();
00120
00121
00127 Glib::SignalProxy1< void,const Glib::RefPtr<Message>& > signal_sync_message();
00128
00129
00130 public:
00131
00132 public:
00133
00134 #ifdef GLIBMM_VFUNCS_ENABLED
00135 #endif //GLIBMM_VFUNCS_ENABLED
00136
00137 protected:
00138
00139 #ifdef GLIBMM_VFUNCS_ENABLED
00140 #endif //GLIBMM_VFUNCS_ENABLED
00141
00142
00143 #ifdef GLIBMM_DEFAULT_SIGNAL_HANDLERS_ENABLED
00144 virtual void on_message(const Glib::RefPtr<Message>& message);
00145 virtual void on_sync_message(const Glib::RefPtr<Message>& message);
00146 #endif //GLIBMM_DEFAULT_SIGNAL_HANDLERS_ENABLED
00147
00148
00149 };
00150
00151 }
00152
00153
00154 namespace Glib
00155 {
00164 Glib::RefPtr<Gst::Bus> wrap(GstBus* object, bool take_copy = false);
00165 }
00166
00167
00168 #endif
00169