- //------------------------------------------------------------------------------
- // 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__ */