Mercurial > hg > vamp-plugin-sdk
comparison vamp-sdk/RealTime.cpp @ 137:dbab8c3a6571
* Improve resilience of frame - real-time - frame round-trip conversions
author | cannam |
---|---|
date | Mon, 16 Jun 2008 12:22:16 +0000 |
parents | c8b48bc6db3d |
children |
comparison
equal
deleted
inserted
replaced
136:1b1ebb0f10ac | 137:dbab8c3a6571 |
---|---|
222 | 222 |
223 long | 223 long |
224 RealTime::realTime2Frame(const RealTime &time, unsigned int sampleRate) | 224 RealTime::realTime2Frame(const RealTime &time, unsigned int sampleRate) |
225 { | 225 { |
226 if (time < zeroTime) return -realTime2Frame(-time, sampleRate); | 226 if (time < zeroTime) return -realTime2Frame(-time, sampleRate); |
227 | 227 double s = time.sec + double(time.nsec + 1) / 1000000000.0; |
228 // We like integers. The last term is always zero unless the | 228 return long(s * sampleRate); |
229 // sample rate is greater than 1MHz, but hell, you never know... | |
230 | |
231 long frame = | |
232 time.sec * sampleRate + | |
233 (time.msec() * sampleRate) / 1000 + | |
234 ((time.usec() - 1000 * time.msec()) * sampleRate) / 1000000 + | |
235 ((time.nsec - 1000 * time.usec()) * sampleRate) / 1000000000; | |
236 | |
237 return frame; | |
238 } | 229 } |
239 | 230 |
240 RealTime | 231 RealTime |
241 RealTime::frame2RealTime(long frame, unsigned int sampleRate) | 232 RealTime::frame2RealTime(long frame, unsigned int sampleRate) |
242 { | 233 { |
243 if (frame < 0) return -frame2RealTime(-frame, sampleRate); | 234 if (frame < 0) return -frame2RealTime(-frame, sampleRate); |
244 | 235 |
245 RealTime rt; | 236 RealTime rt; |
246 rt.sec = frame / long(sampleRate); | 237 rt.sec = frame / long(sampleRate); |
247 frame -= rt.sec * long(sampleRate); | 238 frame -= rt.sec * long(sampleRate); |
248 rt.nsec = (int)(((float(frame) * 1000000) / long(sampleRate)) * 1000); | 239 rt.nsec = (int)(((double(frame) * 1000000.0) / sampleRate) * 1000.0); |
249 return rt; | 240 return rt; |
250 } | 241 } |
251 | 242 |
252 const RealTime RealTime::zeroTime(0,0); | 243 const RealTime RealTime::zeroTime(0,0); |
253 | 244 |