first version, plays videos...
Stefan Schuermans authored 13 years ago
|
1) /* Blinker
|
implement frame rate limiter
Stefan Schuermans authored 10 years ago
|
2) Copyright 2011-2014 Stefan Schuermans <stefan@blinkenarea.org>
|
first version, plays videos...
Stefan Schuermans authored 13 years ago
|
3) Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html
4) a blinkenarea.org project */
5)
6) #include <errno.h>
|
implement frame rate limiter
Stefan Schuermans authored 10 years ago
|
7) #include <math.h>
|
first version, plays videos...
Stefan Schuermans authored 13 years ago
|
8) #include <stdint.h>
9) #include <sys/time.h>
10) #include <time.h>
11)
12) #include "Time.h"
13)
14) namespace Blinker {
15)
16) const Time Time::zero(0); ///< zero time
17)
18) /**
19) * @brief get current time
20) * @return current time
21) */
22) Time Time::now()
23) {
24) Time now;
25)
26) struct timeval tv;
27) gettimeofday(&tv, NULL);
28) now.m_sec = tv.tv_sec;
29) now.m_ns = tv.tv_usec * 1000;
30)
31) return now;
32) }
33)
34) /// constructor
35) Time::Time():
36) m_sec(0),
37) m_ns(0)
38) {
39) }
40)
41) /**
42) * @brief constructor from seconds
43) * @param[in] t time in seconds
44) */
45) Time::Time(time_t t):
46) m_sec(t),
47) m_ns(0)
48) {
49) }
50)
51) /// comparison
52) //@{
53)
54) int Time::compare(const Time &that) const
55) {
56) if (m_sec < that.m_sec)
57) return -1;
58) if (m_sec > that.m_sec)
59) return 1;
60) if (m_ns < that.m_ns)
61) return -1;
62) if (m_ns > that.m_ns)
63) return 1;
64) return 0;
65) }
66)
67) bool Time::operator==(const Time &that) const
68) {
69) return compare(that) == 0;
70) }
71)
72) bool Time::operator!=(const Time &that) const
73) {
74) return compare(that) != 0;
75) }
76)
77) bool Time::operator<(const Time &that) const
78) {
79) return compare(that) < 0;
80) }
81)
82) bool Time::operator>(const Time &that) const
83) {
84) return compare(that) > 0;
85) }
86)
87) bool Time::operator<=(const Time &that) const
88) {
89) return compare(that) <= 0;
90) }
91)
92) bool Time::operator>=(const Time &that) const
93) {
94) return compare(that) >= 0;
95) }
96)
97) //@}
98)
99) /// arithmetic
100) //@{
101)
102) const Time & Time::operator+=(const Time &that)
103) {
104) m_sec += that.m_sec;
105) m_ns += that.m_ns;
106) fix();
107) return *this;
108) }
109)
110) const Time & Time::operator-=(const Time &that)
111) {
112) m_sec -= that.m_sec;
113) m_ns -= that.m_ns;
114) fix();
115) return *this;
116) }
117)
118) Time Time::operator+(const Time &that) const
119) {
120) Time result(*this);
121) result += that;
122) return result;
123) }
124)
125) Time Time::operator-(const Time &that) const
126) {
127) Time result(*this);
128) result -= that;
129) return result;
130) }
131)
132) //@}
133)
|
implement frame rate limiter
Stefan Schuermans authored 10 years ago
|
134) /**
135) * @brief convert from floating point seconds
136) * @param[in] s time in seconds
137) */
138) void Time::fromFloatSec(float s)
139) {
140) m_sec = (int64_t)truncf(s);
141) m_ns = (int64_t)((s - m_sec) * 1.0e9);
142) }
143)
|
first version, plays videos...
Stefan Schuermans authored 13 years ago
|
144) /**
145) * @brief convert from milliseconds
146) * @param[in] ms milliseconds
147) */
148) void Time::fromMs(int ms)
149) {
150) if (ms >= 0) {
151) m_sec = ms / 1000;
152) m_ns = (ms % 1000) * 1000000;
153) } else {
154) m_sec = -(-ms / 1000);
155) m_ns = -(-ms % 1000) * 1000000;
156) }
157) }
158)
159) /**
160) * @brief convert to seconds
161) * @return seconds
162) */
163) time_t Time::toSec() const
164) {
165) if (m_ns >= 500000000)
166) return m_sec + 1;
167) else if (m_ns <= 500000000)
168) return m_sec - 1;
169) else
170) return m_sec;
171) }
172)
|
implement synchronization f...
Stefan Schuermans authored 10 years ago
|
173) /**
174) * @brief convert to floating point seconds
175) * @return time in seconds
176) */
177) float Time::toFloatSec()
178) {
179) return m_sec + m_ns * 1.0e-9f;
180) }
181)
|
implemented base class for...
Stefan Schuermans authored 13 years ago
|
182) /**
183) * @brief convert to struct timeval
184) * @param[out] tv struct timeval
185) */
186) void Time::toTimeval(struct timeval &tv) const
187) {
188) if (m_sec >= 0) {
189) tv.tv_sec = m_sec;
190) tv.tv_usec = (m_ns + 500) / 1000;
191) if (tv.tv_usec >= 1000000) {
192) ++tv.tv_sec;
193) tv.tv_usec -= 1000000;
194) }
195) } else {
196) tv.tv_sec = m_sec;
197) tv.tv_usec = -((-m_ns + 500) / 1000);
198) if (tv.tv_usec <= -1000000) {
199) --tv.tv_sec;
200) tv.tv_usec += 1000000;
201) }
202) }
203) }
204)
|