ITK Release 4/Video/Time Stamp: Difference between revisions
From KitwarePublic
< ITK Release 4 | Video
Jump to navigationJump to search
(27 intermediate revisions by the same user not shown) | |||
Line 18: | Line 18: | ||
}; | }; | ||
</source> | </source> | ||
== OpenCV == | |||
* include/opencv/cv.h: double timestamp | |||
* src/cv/_cvipp.h: float timestamp | |||
* 3rdparty/include/ffmpeg_/avformat.h: int64_t timestamp; | |||
== KWSys == | |||
* static double GetTime(); | |||
== ITK RealTimeClock == | == ITK RealTimeClock == | ||
Line 23: | Line 33: | ||
* [http://itk.org/gitweb?p=ITK.git;a=blob;f=Code/Common/itkRealTimeClock.h;h=48cde7370a827dc58ead2f9b6e57782e670e190e;hb=6172fc3b6f4a3b925cc4922f2093719e64104a9a itkRealTimeClock.h] | * [http://itk.org/gitweb?p=ITK.git;a=blob;f=Code/Common/itkRealTimeClock.h;h=48cde7370a827dc58ead2f9b6e57782e670e190e;hb=6172fc3b6f4a3b925cc4922f2093719e64104a9a itkRealTimeClock.h] | ||
* [http://itk.org/gitweb?p=ITK.git;a=blob;f=Code/Common/itkRealTimeClock.cxx;h=6935197e15f261c1c087f27a39ccb1433346a644;hb=6172fc3b6f4a3b925cc4922f2093719e64104a9a itkRealTimeClock.cxx] | * [http://itk.org/gitweb?p=ITK.git;a=blob;f=Code/Common/itkRealTimeClock.cxx;h=6935197e15f261c1c087f27a39ccb1433346a644;hb=6172fc3b6f4a3b925cc4922f2093719e64104a9a itkRealTimeClock.cxx] | ||
== System Time == | |||
* http://en.wikipedia.org/wiki/System_time | |||
= Scales = | |||
If counting from a given starting point (forward): | |||
* int32 : can count in microseconds, up to 4.5 years | |||
** 2**32 / (30 * 3600 * 24.0 * 365 ) = 4.5 years | |||
* double : can count in microseconds, up to 285 years (before losing any precision) | |||
** 2^53 / ( 1000000 * 3600 * 24.0 * 365 ) = 285 | |||
** after that it will be counting in tens of microseconds... | |||
* int64 : can count in microseconds, up to 584942 years | |||
** 2**64 / ( 1000000 * 3600 * 24.0 * 365 ) = 584942 | |||
** (or in nanoseconds up to 584 years) | |||
If counting relative times: | |||
* int32 -> will use the sign, and can count (-2.4, +2.4) years | |||
* double -> and can count (-142, +142) years | |||
* int64 -> (-292471, +292471) years | |||
= Units = | |||
* Should the time units be specified ? | |||
** Use microseconds ? | |||
= Proposal = | |||
* Use double as internal representation | |||
* Use micro-seconds as unit | |||
* Have convenience methods to return time in other units | |||
** seconds, hours, days | |||
* Have convenience methods for computing differences between two times | |||
* '''Encapsulated type''': | |||
** External time representation = double in microseconds | |||
** Internal time representation is private and is not exposed | |||
* Two Classes | |||
** TimeStamp | |||
** TimeInterval | |||
** TimeInterval = TimeStamp - TimeStamp | |||
** TimeStamp = TimeStamp + TimeInterval | |||
** Time operations will be implemented in these two classes. | |||
** They will have to be as efficient as double or int64 arithmetics. | |||
* "'''Get'''" methods only available for debugging | |||
** TimeStamp.GetTimeInSecondsSince1970(); | |||
* Serialization | |||
** ostream << (controlled by ITK) | |||
** istream >> should reconstruct the object. | |||
** when sent to file formats then we will be subject to the file format representation (just as we are with images). | |||
* Manage conversion between Dates and microseconds by using the Unix conversion algorithms. | |||
* '''Internal''' implementation (private) | |||
** TimeStamp will use a timeval struct | |||
** TimeInterval will use a double | |||
* '''Error''' management: Needs more discussion | |||
** Do we want an ErrorValue to be stored in the TimeStamp and / or the TimeInterval ? | |||
** Should error be managed only through exceptions ? | |||
** Should there be a default value ? | |||
*** If so, should there be a way of checking for it ? | |||
*** How to avoid the subsequent code to be saturated with "if"s. |
Latest revision as of 15:19, 29 November 2010
Reference Systems
VRPN - UNC
URL
http://www.cs.unc.edu/Research/vrpn/vrpn_getting_started.html
Time Stamp Structure
<source lang="cpp"> struct timeval
{ __time_t tv_sec; /* Seconds. */ __suseconds_t tv_usec; /* Microseconds. */ };
</source>
OpenCV
- include/opencv/cv.h: double timestamp
- src/cv/_cvipp.h: float timestamp
- 3rdparty/include/ffmpeg_/avformat.h: int64_t timestamp;
KWSys
- static double GetTime();
ITK RealTimeClock
System Time
Scales
If counting from a given starting point (forward):
- int32 : can count in microseconds, up to 4.5 years
- 2**32 / (30 * 3600 * 24.0 * 365 ) = 4.5 years
- double : can count in microseconds, up to 285 years (before losing any precision)
- 2^53 / ( 1000000 * 3600 * 24.0 * 365 ) = 285
- after that it will be counting in tens of microseconds...
- int64 : can count in microseconds, up to 584942 years
- 2**64 / ( 1000000 * 3600 * 24.0 * 365 ) = 584942
- (or in nanoseconds up to 584 years)
If counting relative times:
- int32 -> will use the sign, and can count (-2.4, +2.4) years
- double -> and can count (-142, +142) years
- int64 -> (-292471, +292471) years
Units
- Should the time units be specified ?
- Use microseconds ?
Proposal
- Use double as internal representation
- Use micro-seconds as unit
- Have convenience methods to return time in other units
- seconds, hours, days
- Have convenience methods for computing differences between two times
- Encapsulated type:
- External time representation = double in microseconds
- Internal time representation is private and is not exposed
- Two Classes
- TimeStamp
- TimeInterval
- TimeInterval = TimeStamp - TimeStamp
- TimeStamp = TimeStamp + TimeInterval
- Time operations will be implemented in these two classes.
- They will have to be as efficient as double or int64 arithmetics.
- "Get" methods only available for debugging
- TimeStamp.GetTimeInSecondsSince1970();
- Serialization
- ostream << (controlled by ITK)
- istream >> should reconstruct the object.
- when sent to file formats then we will be subject to the file format representation (just as we are with images).
- Manage conversion between Dates and microseconds by using the Unix conversion algorithms.
- Internal implementation (private)
- TimeStamp will use a timeval struct
- TimeInterval will use a double
- Error management: Needs more discussion
- Do we want an ErrorValue to be stored in the TimeStamp and / or the TimeInterval ?
- Should error be managed only through exceptions ?
- Should there be a default value ?
- If so, should there be a way of checking for it ?
- How to avoid the subsequent code to be saturated with "if"s.