Mercurial > hg > svcore
comparison base/RealTime.cpp @ 1057:5c5d4863b428 tonioni
Merge from cxx11 branch
author | Chris Cannam |
---|---|
date | Mon, 23 Mar 2015 11:26:28 +0000 |
parents | a1cd5abcb38b |
children | b8a788c9a6f1 |
comparison
equal
deleted
inserted
replaced
1056:c4898e57eea5 | 1057:5c5d4863b428 |
---|---|
73 } | 73 } |
74 | 74 |
75 RealTime | 75 RealTime |
76 RealTime::fromTimeval(const struct timeval &tv) | 76 RealTime::fromTimeval(const struct timeval &tv) |
77 { | 77 { |
78 return RealTime(tv.tv_sec, tv.tv_usec * 1000); | 78 return RealTime(int(tv.tv_sec), int(tv.tv_usec * 1000)); |
79 } | 79 } |
80 | 80 |
81 RealTime | 81 RealTime |
82 RealTime::fromXsdDuration(std::string xsdd) | 82 RealTime::fromXsdDuration(std::string xsdd) |
83 { | 83 { |
87 double second = 0.0; | 87 double second = 0.0; |
88 | 88 |
89 int i = 0; | 89 int i = 0; |
90 | 90 |
91 const char *s = xsdd.c_str(); | 91 const char *s = xsdd.c_str(); |
92 int len = xsdd.length(); | 92 int len = int(xsdd.length()); |
93 | 93 |
94 bool negative = false, afterT = false; | 94 bool negative = false, afterT = false; |
95 | 95 |
96 while (i < len) { | 96 while (i < len) { |
97 | 97 |
104 double value = 0.0; | 104 double value = 0.0; |
105 char *eptr = 0; | 105 char *eptr = 0; |
106 | 106 |
107 if (isdigit(s[i]) || s[i] == '.') { | 107 if (isdigit(s[i]) || s[i] == '.') { |
108 value = strtod(&s[i], &eptr); | 108 value = strtod(&s[i], &eptr); |
109 i = eptr - s; | 109 i = int(eptr - s); |
110 } | 110 } |
111 | 111 |
112 if (i == len) break; | 112 if (i == len) break; |
113 | 113 |
114 switch (s[i]) { | 114 switch (s[i]) { |
454 | 454 |
455 if (rTotal == 0) return 0.0; | 455 if (rTotal == 0) return 0.0; |
456 else return lTotal/rTotal; | 456 else return lTotal/rTotal; |
457 } | 457 } |
458 | 458 |
459 long | 459 static RealTime |
460 RealTime::realTime2Frame(const RealTime &time, unsigned int sampleRate) | 460 frame2RealTime_i(sv_frame_t frame, sv_frame_t iSampleRate) |
461 { | |
462 if (frame < 0) return -frame2RealTime_i(-frame, iSampleRate); | |
463 | |
464 RealTime rt; | |
465 sv_frame_t sec = frame / iSampleRate; | |
466 rt.sec = int(sec); | |
467 frame -= sec * iSampleRate; | |
468 rt.nsec = (int)(((double(frame) * 1000000.0) / double(iSampleRate)) * 1000.0); | |
469 return rt; | |
470 } | |
471 | |
472 sv_frame_t | |
473 RealTime::realTime2Frame(const RealTime &time, sv_samplerate_t sampleRate) | |
461 { | 474 { |
462 if (time < zeroTime) return -realTime2Frame(-time, sampleRate); | 475 if (time < zeroTime) return -realTime2Frame(-time, sampleRate); |
463 double s = time.sec + double(time.nsec + 1) / 1000000000.0; | 476 double s = time.sec + double(time.nsec + 1) / 1000000000.0; |
464 return long(s * double(sampleRate)); | 477 return sv_frame_t(s * sampleRate); |
465 } | 478 } |
466 | 479 |
467 RealTime | 480 RealTime |
468 RealTime::frame2RealTime(long frame, unsigned int sampleRate) | 481 RealTime::frame2RealTime(sv_frame_t frame, sv_samplerate_t sampleRate) |
469 { | 482 { |
470 if (frame < 0) return -frame2RealTime(-frame, sampleRate); | 483 if (sampleRate == double(int(sampleRate))) { |
471 | 484 return frame2RealTime_i(frame, int(sampleRate)); |
472 RealTime rt; | 485 } |
473 rt.sec = frame / long(sampleRate); | 486 |
474 frame -= rt.sec * long(sampleRate); | 487 double sec = double(frame) / sampleRate; |
475 rt.nsec = (int)(((double(frame) * 1000000.0) / long(sampleRate)) * 1000.0); | 488 return fromSeconds(sec); |
476 return rt; | |
477 } | 489 } |
478 | 490 |
479 const RealTime RealTime::zeroTime(0,0); | 491 const RealTime RealTime::zeroTime(0,0); |
480 | 492 |