00001
00002
00003 #ifndef _GSTREAMERMM_CLOCK_H
00004 #define _GSTREAMERMM_CLOCK_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
00029
00030 #include <gst/gstclock.h>
00031 #include <gstreamermm/object.h>
00032
00033
00034 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00035 typedef struct _GstClock GstClock;
00036 typedef struct _GstClockClass GstClockClass;
00037 #endif
00038
00039
00040 namespace Gst
00041 { class Clock_Class; }
00042 namespace Gst
00043 {
00044
00045 class Clock;
00046
00047 typedef GstClockTime ClockTime;
00048 typedef GstClockTimeDiff ClockTimeDiff;
00049 const ClockTime CLOCK_TIME_NONE = GST_CLOCK_TIME_NONE;
00050
00056 enum ClockEntryType
00057 {
00058 CLOCK_ENTRY_SINGLE,
00059 CLOCK_ENTRY_PERIODIC
00060 };
00061
00062 }
00063
00064
00065 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00066 namespace Glib
00067 {
00068
00069 template <>
00070 class Value<Gst::ClockEntryType> : public Glib::Value_Enum<Gst::ClockEntryType>
00071 {
00072 public:
00073 static GType value_type() G_GNUC_CONST;
00074 };
00075
00076 }
00077 #endif
00078
00079
00080 namespace Gst
00081 {
00082
00086 enum ClockReturn
00087 {
00088 CLOCK_OK,
00089 CLOCK_EARLY,
00090 CLOCK_UNSCHEDULED,
00091 CLOCK_BUSY,
00092 CLOCK_BADTIME,
00093 CLOCK_ERROR,
00094 CLOCK_UNSUPPORTED
00095 };
00096
00097 }
00098
00099
00100 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00101 namespace Glib
00102 {
00103
00104 template <>
00105 class Value<Gst::ClockReturn> : public Glib::Value_Enum<Gst::ClockReturn>
00106 {
00107 public:
00108 static GType value_type() G_GNUC_CONST;
00109 };
00110
00111 }
00112 #endif
00113
00114
00115 namespace Gst
00116 {
00117
00121 enum ClockFlags
00122 {
00123 CLOCK_FLAG_CAN_DO_SINGLE_SYNC = GST_OBJECT_FLAG_LAST << 0,
00124 CLOCK_FLAG_CAN_DO_SINGLE_ASYNC = GST_OBJECT_FLAG_LAST << 1,
00125 CLOCK_FLAG_CAN_DO_PERIODIC_SYNC = GST_OBJECT_FLAG_LAST << 2,
00126 CLOCK_FLAG_CAN_DO_PERIODIC_ASYNC = GST_OBJECT_FLAG_LAST << 3,
00127 CLOCK_FLAG_CAN_SET_RESOLUTION = GST_OBJECT_FLAG_LAST << 4,
00128 CLOCK_FLAG_CAN_SET_MASTER = GST_OBJECT_FLAG_LAST << 5,
00129 CLOCK_FLAG_LAST = GST_OBJECT_FLAG_LAST << 8
00130 };
00131
00132 }
00133
00134
00135 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00136 namespace Glib
00137 {
00138
00139 template <>
00140 class Value<Gst::ClockFlags> : public Glib::Value_Enum<Gst::ClockFlags>
00141 {
00142 public:
00143 static GType value_type() G_GNUC_CONST;
00144 };
00145
00146 }
00147 #endif
00148
00149
00150 namespace Gst
00151 {
00152
00153
00157 class ClockID
00158 {
00159 public:
00160 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00161 typedef ClockID CppObjectType;
00162 typedef GstClockEntry BaseObjectType;
00163 #endif
00164
00165
00166
00167 void reference() const;
00168 void unreference() const;
00169
00171 GstClockEntry* gobj();
00172
00174 const GstClockEntry* gobj() const;
00175
00177 GstClockEntry* gobj_copy() const;
00178
00179 protected:
00180
00181 ClockID();
00182 void operator delete(void*, size_t);
00183
00184 private:
00185
00186 ClockID(const ClockID&);
00187 ClockID& operator=(const ClockID&);
00188
00189
00190 public:
00196 typedef sigc::slot< bool, const Glib::RefPtr<Clock>&, ClockTime, const Glib::RefPtr<ClockID>& > SlotClock;
00197
00198
00204 ClockTime get_time();
00205
00227 ClockReturn wait(ClockTimeDiff& jitter);
00228
00237 ClockReturn wait_async(const SlotClock& slot);
00238
00239
00247 void unschedule();
00248
00249
00250 };
00251
00256 guint get_hours(ClockTime time);
00257
00262 guint get_minutes(ClockTime time);
00263
00268 guint get_seconds(ClockTime time);
00269
00274 guint get_milliseconds(ClockTime time);
00275
00280 guint get_microseconds(ClockTime time);
00281
00286 guint get_nanoseconds(ClockTime time);
00287
00292 guint get_fractional_seconds(ClockTime time);
00293
00369 class Clock : public Object
00370 {
00371
00372 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00373
00374 public:
00375 typedef Clock CppObjectType;
00376 typedef Clock_Class CppClassType;
00377 typedef GstClock BaseObjectType;
00378 typedef GstClockClass BaseClassType;
00379
00380 private: friend class Clock_Class;
00381 static CppClassType clock_class_;
00382
00383 private:
00384
00385 Clock(const Clock&);
00386 Clock& operator=(const Clock&);
00387
00388 protected:
00389 explicit Clock(const Glib::ConstructParams& construct_params);
00390 explicit Clock(GstClock* castitem);
00391
00392 #endif
00393
00394 public:
00395 virtual ~Clock();
00396
00397 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00398 static GType get_type() G_GNUC_CONST;
00399 static GType get_base_type() G_GNUC_CONST;
00400 #endif
00401
00403 GstClock* gobj() { return reinterpret_cast<GstClock*>(gobject_); }
00404
00406 const GstClock* gobj() const { return reinterpret_cast<GstClock*>(gobject_); }
00407
00409 GstClock* gobj_copy();
00410
00411 private:
00412
00413
00414 public:
00415
00434 bool add_observation(ClockTime slave_time, ClockTime master_time, gdouble* result);
00435
00453 bool set_master(const Clock& master_clock);
00454
00462 Glib::RefPtr<Clock> get_master();
00463
00472 ClockTime set_resolution(ClockTime resolution);
00473
00480 ClockTime get_resolution() const;
00481
00490 ClockTime get_time() const;
00491
00500 Glib::RefPtr<ClockID> create_single_shot_id(ClockTime time);
00501
00512 Glib::RefPtr<ClockID> create_periodic_id(ClockTime start_time, ClockTime intervals);
00513
00521 ClockTime get_internal_time() const;
00522
00532 ClockTime adjust_unlocked(ClockTime internal_time);
00533
00545 ClockTime unadjust_unlocked(ClockTime external_time);
00546
00559 void get_calibration(ClockTime& internal, ClockTime& external, ClockTime& rate_num, ClockTime& rate_denom);
00560
00590 void set_calibration(ClockTime internal, ClockTime external, ClockTime rate_num, ClockTime rate_denom);
00591
00592
00593 #ifdef GLIBMM_PROPERTIES_ENABLED
00594
00600 Glib::PropertyProxy<bool> property_stats() ;
00601 #endif //#GLIBMM_PROPERTIES_ENABLED
00602
00603 #ifdef GLIBMM_PROPERTIES_ENABLED
00604
00610 Glib::PropertyProxy_ReadOnly<bool> property_stats() const;
00611 #endif //#GLIBMM_PROPERTIES_ENABLED
00612
00613 #ifdef GLIBMM_PROPERTIES_ENABLED
00614
00620 Glib::PropertyProxy<guint64> property_timeout() ;
00621 #endif //#GLIBMM_PROPERTIES_ENABLED
00622
00623 #ifdef GLIBMM_PROPERTIES_ENABLED
00624
00630 Glib::PropertyProxy_ReadOnly<guint64> property_timeout() const;
00631 #endif //#GLIBMM_PROPERTIES_ENABLED
00632
00633 #ifdef GLIBMM_PROPERTIES_ENABLED
00634
00640 Glib::PropertyProxy<int> property_window_size() ;
00641 #endif //#GLIBMM_PROPERTIES_ENABLED
00642
00643 #ifdef GLIBMM_PROPERTIES_ENABLED
00644
00650 Glib::PropertyProxy_ReadOnly<int> property_window_size() const;
00651 #endif //#GLIBMM_PROPERTIES_ENABLED
00652
00653 #ifdef GLIBMM_PROPERTIES_ENABLED
00654
00660 Glib::PropertyProxy<int> property_window_threshold() ;
00661 #endif //#GLIBMM_PROPERTIES_ENABLED
00662
00663 #ifdef GLIBMM_PROPERTIES_ENABLED
00664
00670 Glib::PropertyProxy_ReadOnly<int> property_window_threshold() const;
00671 #endif //#GLIBMM_PROPERTIES_ENABLED
00672
00673
00677 #ifdef GLIBMM_VFUNCS_ENABLED
00678 virtual ClockTime change_resolution_vfunc(ClockTime old_resolution, ClockTime new_resolution);
00679 #endif //GLIBMM_VFUNCS_ENABLED
00680
00681
00684 #ifdef GLIBMM_VFUNCS_ENABLED
00685 virtual ClockTime get_resolution_vfunc();
00686 #endif //GLIBMM_VFUNCS_ENABLED
00687
00688
00691 #ifdef GLIBMM_VFUNCS_ENABLED
00692 virtual ClockTime get_internal_time_vfunc();
00693 #endif //GLIBMM_VFUNCS_ENABLED
00694
00695
00698 #ifdef GLIBMM_VFUNCS_ENABLED
00699 virtual ClockReturn wait_async_vfunc(const Glib::RefPtr<ClockID>& id);
00700 #endif //GLIBMM_VFUNCS_ENABLED
00701
00702
00705 #ifdef GLIBMM_VFUNCS_ENABLED
00706 virtual void unschedule_vfunc(const Glib::RefPtr<ClockID>& id);
00707 #endif //GLIBMM_VFUNCS_ENABLED
00708
00709
00713 #ifdef GLIBMM_VFUNCS_ENABLED
00714 virtual ClockReturn wait_jitter_vfunc(const Glib::RefPtr<ClockID>& id, ClockTimeDiff& jitter);
00715 #endif //GLIBMM_VFUNCS_ENABLED
00716
00717
00718 public:
00719
00720 public:
00721
00722 #ifdef GLIBMM_VFUNCS_ENABLED
00723 #endif //GLIBMM_VFUNCS_ENABLED
00724
00725 protected:
00726
00727 #ifdef GLIBMM_VFUNCS_ENABLED
00728 #endif //GLIBMM_VFUNCS_ENABLED
00729
00730
00731 #ifdef GLIBMM_DEFAULT_SIGNAL_HANDLERS_ENABLED
00732 #endif //GLIBMM_DEFAULT_SIGNAL_HANDLERS_ENABLED
00733
00734
00735 };
00736
00737 }
00738
00739
00740 namespace Glib
00741 {
00742
00751 Glib::RefPtr<Gst::ClockID> wrap(GstClockEntry* object, bool take_copy = false);
00752
00753 }
00754
00755
00756 namespace Glib
00757 {
00766 Glib::RefPtr<Gst::Clock> wrap(GstClock* object, bool take_copy = false);
00767 }
00768
00769
00770 #endif
00771