1 /*********************************************************************** 2 * AUTHOR: Marcus Overhagen 3 * FILE: TimeSource.cpp 4 * DESCR: 5 ***********************************************************************/ 6 #include <TimeSource.h> 7 #include "debug.h" 8 #include "DataExchange.h" 9 #include "ServerInterface.h" 10 11 // XXX This BTimeSource only works for realtime, nothing else is implemented 12 13 // XXX The bebook says that the latency is always calculated in realtime 14 // XXX This is not currently done in this code 15 16 /************************************************************* 17 * protected BTimeSource 18 *************************************************************/ 19 20 BTimeSource::~BTimeSource() 21 { 22 CALLED(); 23 } 24 25 /************************************************************* 26 * public BTimeSource 27 *************************************************************/ 28 29 status_t 30 BTimeSource::SnoozeUntil(bigtime_t performance_time, 31 bigtime_t with_latency, 32 bool retry_signals) 33 { 34 CALLED(); 35 36 return B_ERROR; 37 } 38 39 40 bigtime_t 41 BTimeSource::Now() 42 { 43 CALLED(); 44 return PerformanceTimeFor(RealTime()); 45 } 46 47 48 bigtime_t 49 BTimeSource::PerformanceTimeFor(bigtime_t real_time) 50 { 51 CALLED(); 52 bigtime_t performanceTime; 53 float drift; 54 55 while (GetTime(&performanceTime, &real_time, &drift) != B_OK) 56 snooze(1000); 57 58 return (bigtime_t)(performanceTime + (RealTime() - real_time) * drift); 59 } 60 61 62 bigtime_t 63 BTimeSource::RealTimeFor(bigtime_t performance_time, 64 bigtime_t with_latency) 65 { 66 CALLED(); 67 68 return performance_time - with_latency; 69 } 70 71 72 bool 73 BTimeSource::IsRunning() 74 { 75 CALLED(); 76 return !fStopped; 77 } 78 79 80 status_t 81 BTimeSource::GetTime(bigtime_t *performance_time, 82 bigtime_t *real_time, 83 float *drift) 84 { 85 CALLED(); 86 *performance_time = *real_time; 87 *drift = 1.0f; 88 89 return B_OK; 90 } 91 92 93 bigtime_t 94 BTimeSource::RealTime() 95 { 96 CALLED(); 97 return system_time(); 98 } 99 100 101 status_t 102 BTimeSource::GetStartLatency(bigtime_t *out_latency) 103 { 104 CALLED(); 105 *out_latency = 0; 106 return B_OK; 107 } 108 109 /************************************************************* 110 * protected BTimeSource 111 *************************************************************/ 112 113 114 BTimeSource::BTimeSource() : 115 BMediaNode("called by BTimeSource"), 116 fStopped(false) 117 { 118 CALLED(); 119 120 AddNodeKind(B_TIME_SOURCE); 121 } 122 123 124 status_t 125 BTimeSource::HandleMessage(int32 message, 126 const void *data, 127 size_t size) 128 { 129 INFO("BTimeSource::HandleMessage %#lx, node %ld\n", message, fNodeID); 130 131 switch (message) { 132 case TIMESOURCE_OP: 133 { 134 const time_source_op_info *data = static_cast<const time_source_op_info *>(data); 135 status_t result; 136 result = TimeSourceOp(*data, NULL); 137 return B_OK; 138 } 139 }; 140 return B_ERROR; 141 } 142 143 144 void 145 BTimeSource::PublishTime(bigtime_t performance_time, 146 bigtime_t real_time, 147 float drift) 148 { 149 // UNIMPLEMENTED(); //XXX 150 } 151 152 153 void 154 BTimeSource::BroadcastTimeWarp(bigtime_t at_real_time, 155 bigtime_t new_performance_time) 156 { 157 UNIMPLEMENTED(); 158 } 159 160 161 void 162 BTimeSource::SendRunMode(run_mode mode) 163 { 164 UNIMPLEMENTED(); 165 } 166 167 168 void 169 BTimeSource::SetRunMode(run_mode mode) 170 { 171 CALLED(); 172 BMediaNode::SetRunMode(mode); 173 } 174 /************************************************************* 175 * private BTimeSource 176 *************************************************************/ 177 178 /* 179 //unimplemented 180 BTimeSource::BTimeSource(const BTimeSource &clone) 181 BTimeSource &BTimeSource::operator=(const BTimeSource &clone) 182 */ 183 184 status_t BTimeSource::_Reserved_TimeSource_0(void *) { return B_ERROR; } 185 status_t BTimeSource::_Reserved_TimeSource_1(void *) { return B_ERROR; } 186 status_t BTimeSource::_Reserved_TimeSource_2(void *) { return B_ERROR; } 187 status_t BTimeSource::_Reserved_TimeSource_3(void *) { return B_ERROR; } 188 status_t BTimeSource::_Reserved_TimeSource_4(void *) { return B_ERROR; } 189 status_t BTimeSource::_Reserved_TimeSource_5(void *) { return B_ERROR; } 190 191 /* explicit */ 192 BTimeSource::BTimeSource(media_node_id id) : 193 BMediaNode("called by BTimeSource", id, 0), 194 fStopped(false) 195 { 196 CALLED(); 197 198 AddNodeKind(B_TIME_SOURCE); 199 } 200 201 202 void 203 BTimeSource::FinishCreate() 204 { 205 UNIMPLEMENTED(); 206 } 207 208 209 status_t 210 BTimeSource::RemoveMe(BMediaNode *node) 211 { 212 UNIMPLEMENTED(); 213 214 return B_ERROR; 215 } 216 217 218 status_t 219 BTimeSource::AddMe(BMediaNode *node) 220 { 221 UNIMPLEMENTED(); 222 223 return B_ERROR; 224 } 225 226 227 void 228 BTimeSource::DirectStart(bigtime_t at) 229 { 230 UNIMPLEMENTED(); 231 } 232 233 234 void 235 BTimeSource::DirectStop(bigtime_t at, 236 bool immediate) 237 { 238 UNIMPLEMENTED(); 239 } 240 241 242 void 243 BTimeSource::DirectSeek(bigtime_t to, 244 bigtime_t at) 245 { 246 UNIMPLEMENTED(); 247 } 248 249 250 void 251 BTimeSource::DirectSetRunMode(run_mode mode) 252 { 253 UNIMPLEMENTED(); 254 } 255 256 257