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