REFTIME.H
上传用户:weiliangfb
上传日期:2007-01-23
资源大小:142k
文件大小:3k
源码类别:

多媒体

开发平台:

Visual C++

  1. //------------------------------------------------------------------------------
  2. // File: RefTime.h
  3. //
  4. // Desc: DirectShow base classes - defines CRefTime, a class that manages
  5. //       reference times.
  6. //
  7. // Copyright (c) 1992-2001 Microsoft Corporation. All rights reserved.
  8. //------------------------------------------------------------------------------
  9. //
  10. // CRefTime
  11. //
  12. // Manage reference times.
  13. // Shares same data layout as REFERENCE_TIME, but adds some (nonvirtual)
  14. // functions providing simple comparison, conversion and arithmetic.
  15. //
  16. // A reference time (at the moment) is a unit of seconds represented in
  17. // 100ns units as is used in the Win32 FILETIME structure. BUT the time
  18. // a REFERENCE_TIME represents is NOT the time elapsed since 1/1/1601 it
  19. // will either be stream time or reference time depending upon context
  20. //
  21. // This class provides simple arithmetic operations on reference times
  22. //
  23. // keep non-virtual otherwise the data layout will not be the same as
  24. // REFERENCE_TIME
  25. // -----
  26. // note that you are safe to cast a CRefTime* to a REFERENCE_TIME*, but
  27. // you will need to do so explicitly
  28. // -----
  29. #ifndef __REFTIME__
  30. #define __REFTIME__
  31. const LONGLONG MILLISECONDS = (1000);            // 10 ^ 3
  32. const LONGLONG NANOSECONDS = (1000000000);       // 10 ^ 9
  33. const LONGLONG UNITS = (NANOSECONDS / 100);      // 10 ^ 7
  34. /*  Unfortunately an inline function here generates a call to __allmul
  35.     - even for constants!
  36. */
  37. #define MILLISECONDS_TO_100NS_UNITS(lMs) 
  38.     Int32x32To64((lMs), (UNITS / MILLISECONDS))
  39. class CRefTime
  40. {
  41. public:
  42.     // *MUST* be the only data member so that this class is exactly
  43.     // equivalent to a REFERENCE_TIME.
  44.     // Also, must be *no virtual functions*
  45.     REFERENCE_TIME m_time;
  46.     inline CRefTime()
  47.     {
  48.         // default to 0 time
  49.         m_time = 0;
  50.     };
  51.     inline CRefTime(LONG msecs)
  52.     {
  53.         m_time = MILLISECONDS_TO_100NS_UNITS(msecs);
  54.     };
  55.     inline CRefTime(REFERENCE_TIME rt)
  56.     {
  57.         m_time = rt;
  58.     };
  59.     inline operator REFERENCE_TIME() const
  60.     {
  61.         return m_time;
  62.     };
  63.     inline CRefTime& operator=(const CRefTime& rt)
  64.     {
  65.         m_time = rt.m_time;
  66.         return *this;
  67.     };
  68.     inline CRefTime& operator=(const LONGLONG ll)
  69.     {
  70.         m_time = ll;
  71.         return *this;
  72.     };
  73.     inline CRefTime& operator+=(const CRefTime& rt)
  74.     {
  75.         return (*this = *this + rt);
  76.     };
  77.     inline CRefTime& operator-=(const CRefTime& rt)
  78.     {
  79.         return (*this = *this - rt);
  80.     };
  81.     inline LONG Millisecs(void)
  82.     {
  83.         return (LONG)(m_time / (UNITS / MILLISECONDS));
  84.     };
  85.     inline LONGLONG GetUnits(void)
  86.     {
  87.         return m_time;
  88.     };
  89. };
  90. const LONGLONG TimeZero = 0;
  91. #endif /* __REFTIME__ */