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