2 * Copyright 2009, Haiku Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
10 #include <MediaNode.h>
13 class _BSlaveNodeStorageP
;
18 class TimeSourceObject
;
19 class SystemTimeSourceObject
;
21 struct TimeSourceTransmit
;
26 class BTimeSource
: public virtual BMediaNode
{
28 virtual ~BTimeSource();
31 virtual status_t
SnoozeUntil(bigtime_t performanceTime
,
32 bigtime_t withLatency
= 0,
33 bool retrySignals
= false);
36 bigtime_t
PerformanceTimeFor(bigtime_t realTime
);
37 bigtime_t
RealTimeFor(bigtime_t performanceTime
,
38 bigtime_t withLatency
);
41 status_t
GetTime(bigtime_t
* _performanceTime
,
42 bigtime_t
* _realTime
, float* _drift
);
43 status_t
GetStartLatency(bigtime_t
* _latency
);
45 static bigtime_t
RealTime();
50 virtual status_t
HandleMessage(int32 message
, const void* data
,
53 void PublishTime(bigtime_t performanceTime
,
54 bigtime_t realTime
, float drift
);
56 void BroadcastTimeWarp(bigtime_t atRealTime
,
57 bigtime_t newPerformanceTime
);
59 void SendRunMode(run_mode mode
);
60 virtual void SetRunMode(run_mode mode
);
63 B_TIMESOURCE_START
= 1,
65 B_TIMESOURCE_STOP_IMMEDIATELY
,
69 struct time_source_op_info
{
73 bigtime_t performance_time
;
77 virtual status_t
TimeSourceOp(const time_source_op_info
& op
,
81 friend class BMediaNode
;
82 friend class BMediaRoster
;
83 friend class BPrivate::media::BMediaRosterEx
;
84 friend class BPrivate::media::SystemTimeSourceObject
;
85 friend class BPrivate::media::TimeSourceObject
;
87 BTimeSource(const BTimeSource
& other
);
88 BTimeSource
& operator=(const BTimeSource
& other
);
91 explicit BTimeSource(media_node_id id
);
93 status_t
_Reserved_TimeSource_0(void*);
94 // used for TimeSourceOp()
95 virtual status_t
_Reserved_TimeSource_1(void*);
96 virtual status_t
_Reserved_TimeSource_2(void*);
97 virtual status_t
_Reserved_TimeSource_3(void*);
98 virtual status_t
_Reserved_TimeSource_4(void*);
99 virtual status_t
_Reserved_TimeSource_5(void*);
101 virtual status_t
RemoveMe(BMediaNode
* node
);
102 virtual status_t
AddMe(BMediaNode
* node
);
106 void DirectStart(bigtime_t at
);
107 void DirectStop(bigtime_t at
, bool immediate
);
108 void DirectSeek(bigtime_t to
, bigtime_t at
);
109 void DirectSetRunMode(run_mode mode
);
110 void DirectAddMe(const media_node
& node
);
111 void DirectRemoveMe(const media_node
& node
);
116 BPrivate::media::TimeSourceTransmit
* fBuf
;
117 BPrivate::media::SlaveNodes
* fSlaveNodes
;
119 area_id _reserved_area
;
121 bool _reserved_bool_
[3];
122 uint32 _reserved_time_source_
[10];
126 #endif // _TIME_SOURCE_H