forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			117 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			117 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | //------------------------------------------------------------------------------
 | ||
|  | // File: RefTime.h
 | ||
|  | //
 | ||
|  | // Desc: DirectShow base classes - defines CRefTime, a class that manages
 | ||
|  | //       reference times.
 | ||
|  | //
 | ||
|  | // Copyright (c) 1992-2001 Microsoft Corporation. All rights reserved.
 | ||
|  | //------------------------------------------------------------------------------
 | ||
|  | 
 | ||
|  | 
 | ||
|  | //
 | ||
|  | // CRefTime
 | ||
|  | //
 | ||
|  | // Manage reference times.
 | ||
|  | // Shares same data layout as REFERENCE_TIME, but adds some (nonvirtual)
 | ||
|  | // functions providing simple comparison, conversion and arithmetic.
 | ||
|  | //
 | ||
|  | // A reference time (at the moment) is a unit of seconds represented in
 | ||
|  | // 100ns units as is used in the Win32 FILETIME structure. BUT the time
 | ||
|  | // a REFERENCE_TIME represents is NOT the time elapsed since 1/1/1601 it
 | ||
|  | // will either be stream time or reference time depending upon context
 | ||
|  | //
 | ||
|  | // This class provides simple arithmetic operations on reference times
 | ||
|  | //
 | ||
|  | // keep non-virtual otherwise the data layout will not be the same as
 | ||
|  | // REFERENCE_TIME
 | ||
|  | 
 | ||
|  | 
 | ||
|  | // -----
 | ||
|  | // note that you are safe to cast a CRefTime* to a REFERENCE_TIME*, but
 | ||
|  | // you will need to do so explicitly
 | ||
|  | // -----
 | ||
|  | 
 | ||
|  | 
 | ||
|  | #ifndef __REFTIME__
 | ||
|  | #define __REFTIME__
 | ||
|  | 
 | ||
|  | 
 | ||
|  | const LONGLONG MILLISECONDS = (1000);            // 10 ^ 3
 | ||
|  | const LONGLONG NANOSECONDS = (1000000000);       // 10 ^ 9
 | ||
|  | const LONGLONG UNITS = (NANOSECONDS / 100);      // 10 ^ 7
 | ||
|  | 
 | ||
|  | /*  Unfortunately an inline function here generates a call to __allmul
 | ||
|  |     - even for constants! | ||
|  | */ | ||
|  | #define MILLISECONDS_TO_100NS_UNITS(lMs) \
 | ||
|  |     Int32x32To64((lMs), (UNITS / MILLISECONDS)) | ||
|  | 
 | ||
|  | class CRefTime | ||
|  | { | ||
|  | public: | ||
|  | 
 | ||
|  |     // *MUST* be the only data member so that this class is exactly
 | ||
|  |     // equivalent to a REFERENCE_TIME.
 | ||
|  |     // Also, must be *no virtual functions*
 | ||
|  | 
 | ||
|  |     REFERENCE_TIME m_time; | ||
|  | 
 | ||
|  |     inline CRefTime() | ||
|  |     { | ||
|  |         // default to 0 time
 | ||
|  |         m_time = 0; | ||
|  |     }; | ||
|  | 
 | ||
|  |     inline CRefTime(LONG msecs) | ||
|  |     { | ||
|  |         m_time = MILLISECONDS_TO_100NS_UNITS(msecs); | ||
|  |     }; | ||
|  | 
 | ||
|  |     inline CRefTime(REFERENCE_TIME rt) | ||
|  |     { | ||
|  |         m_time = rt; | ||
|  |     }; | ||
|  | 
 | ||
|  |     inline operator REFERENCE_TIME() const | ||
|  |     { | ||
|  |         return m_time; | ||
|  |     }; | ||
|  | 
 | ||
|  |     inline CRefTime& operator=(const CRefTime& rt) | ||
|  |     { | ||
|  |         m_time = rt.m_time; | ||
|  |         return *this; | ||
|  |     }; | ||
|  | 
 | ||
|  |     inline CRefTime& operator=(const LONGLONG ll) | ||
|  |     { | ||
|  |         m_time = ll; | ||
|  |         return *this; | ||
|  |     }; | ||
|  | 
 | ||
|  |     inline CRefTime& operator+=(const CRefTime& rt) | ||
|  |     { | ||
|  |         return (*this = *this + rt); | ||
|  |     }; | ||
|  | 
 | ||
|  |     inline CRefTime& operator-=(const CRefTime& rt) | ||
|  |     { | ||
|  |         return (*this = *this - rt); | ||
|  |     }; | ||
|  | 
 | ||
|  |     inline LONG Millisecs(void) | ||
|  |     { | ||
|  |         return (LONG)(m_time / (UNITS / MILLISECONDS)); | ||
|  |     }; | ||
|  | 
 | ||
|  |     inline LONGLONG GetUnits(void) | ||
|  |     { | ||
|  |         return m_time; | ||
|  |     }; | ||
|  | }; | ||
|  | 
 | ||
|  | const LONGLONG TimeZero = 0; | ||
|  | 
 | ||
|  | #endif /* __REFTIME__ */
 | ||
|  | 
 |