text: //------------------------------------------------------------------------------
  // File: Streams.h
  //
  // Desc: DirectShow base classes - defines overall streams architecture.
  //
  // Copyright (c) 1992-2001 Microsoft Corporation.  All rights reserved.
  //------------------------------------------------------------------------------
  
  
  #ifndef __STREAMS__
  #define __STREAMS__
  
  #ifdef	_MSC_VER
  // disable some level-4 warnings, use #pragma warning(enable:###) to re-enable
  #pragma warning(disable:4100) // warning C4100: unreferenced formal parameter
  #pragma warning(disable:4201) // warning C4201: nonstandard extension used : nameless struct/union
  #pragma warning(disable:4511) // warning C4511: copy constructor could not be generated
  #pragma warning(disable:4512) // warning C4512: assignment operator could not be generated
  #pragma warning(disable:4514) // warning C4514: "unreferenced inline function has been removed"
  
  #if _MSC_VER>=1100
  #define AM_NOVTABLE __declspec(novtable)
  #else
  #define AM_NOVTABLE
  #endif
  #endif	// MSC_VER
  
  
  // Because of differences between Visual C++ and older Microsoft SDKs,
  // you may have defined _DEBUG without defining DEBUG.  This logic
  // ensures that both will be set if Visual C++ sets _DEBUG.
  #ifdef _DEBUG
  #ifndef DEBUG
  #define DEBUG
  #endif
  #endif
  
  
  #include <windows.h>
  #include <windowsx.h>
  #include <olectl.h>
  #include <ddraw.h>
  #include <mmsystem.h>
  
  
  #ifndef NUMELMS
  #if _WIN32_WINNT < 0x0600
     #define NUMELMS(aa) (sizeof(aa)/sizeof((aa)[0]))
  #else
     #define NUMELMS(aa) ARRAYSIZE(aa)
  #endif   
  #endif
  
  ///////////////////////////////////////////////////////////////////////////
  // The following definitions come from the Platform SDK and are required if
  // the applicaiton is being compiled with the headers from Visual C++ 6.0.
  /////////////////////////////////////////////////// ////////////////////////
  #ifndef InterlockedExchangePointer
  	#define InterlockedExchangePointer(Target, Value) \
     (PVOID)InterlockedExchange((PLONG)(Target), (LONG)(Value))
  #endif
  
  #ifndef _WAVEFORMATEXTENSIBLE_
  #define _WAVEFORMATEXTENSIBLE_
  typedef struct {
      WAVEFORMATEX    Format;
      union {
          WORD wValidBitsPerSample;       /* bits of precision  */
          WORD wSamplesPerBlock;          /* valid if wBitsPerSample==0 */
          WORD wReserved;                 /* If neither applies, set to zero. */
      } Samples;
      DWORD           dwChannelMask;      /* which channels are */
                                          /* present in stream  */
      GUID            SubFormat;
  } WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;
  #endif // !_WAVEFORMATEXTENSIBLE_
  
  #if !defined(WAVE_FORMAT_EXTENSIBLE)
  #define  WAVE_FORMAT_EXTENSIBLE                 0xFFFE
  #endif // !defined(WAVE_FORMAT_EXTENSIBLE)
  
  #ifndef GetWindowLongPtr
    #define GetWindowLongPtrA   GetWindowLongA
    #define GetWindowLongPtrW   GetWindowLongW
    #ifdef UNICODE
      #define GetWindowLongPtr  GetWindowLongPtrW
    #else
      #define GetWindowLongPtr  GetWindowLongPtrA
    #endif // !UNICODE
  #endif // !GetWindowLongPtr
  
  #ifndef SetWindowLongPtr
    #define SetWindowLongPtrA   SetWindowLongA
    #define SetWindowLongPtrW   SetWindowLongW
    #ifdef UNICODE
      #define SetWindowLongPtr  SetWindowLongPtrW
    #else
      #define SetWindowLongPtr  SetWindowLongPtrA
    #endif // !UNICODE
  #endif // !SetWindowLongPtr
  
  #ifndef GWLP_WNDPROC
    #define GWLP_WNDPROC        (-4)
  #endif
  #ifndef GWLP_HINSTANCE
    #define GWLP_HINSTANCE      (-6)
  #endif
  #ifndef GWLP_HWNDPARENT
    #define GWLP_HWNDPARENT     (-8)
  #endif
  #ifndef GWLP_USERDATA
    #define GWLP_USERDATA       (-21)
  #endif
  #ifndef GWLP_ID
    #define GWLP_ID             (-12)
  #endif
  #ifndef DWLP_MSGRESULT
    #define DWLP_MSGRESULT  0
  #endif
  #ifndef DWLP_DLGPROC 
    #define DWLP_DLGPROC    DWLP_MSGRESULT + sizeof(LRESULT)
  #endif
  #ifndef DWLP_USER
    #define DWLP_USER       DWLP_DLGPROC + sizeof(DLGPROC)
  #endif
  
  
  #pragma warning(push)
  #pragma warning(disable: 4312 4244)
  // _GetWindowLongPtr
  // Templated version of GetWindowLongPtr, to suppress spurious compiler warning.
  template <class T>
  T _GetWindowLongPtr(HWND hwnd, int nIndex)
  {
      return (T)GetWindowLongPtr(hwnd, nIndex);
  }
  
  // _SetWindowLongPtr
  // Templated version of SetWindowLongPtr, to suppress spurious compiler warning.
  template <class T>
  LONG_PTR _SetWindowLongPtr(HWND hwnd, int nIndex, T p)
  {
      return SetWindowLongPtr(hwnd, nIndex, (LONG_PTR)p);
  }
  #pragma warning(pop)
  
  ///////////////////////////////////////////////////////////////////////////
  // End Platform SDK definitions
  ///////////////////////////////////////////////////////////////////////////
  
  
  #include <strmif.h>     // Generated IDL header file for streams interfaces
  #include <intsafe.h>    // required by amvideo.h
  
  #include <reftime.h>    // Helper class for REFERENCE_TIME management
  #include <wxdebug.h>    // Debug support for logging and ASSERTs
  #include <amvideo.h>    // ActiveMovie video interfaces and definitions
  //include amaudio.h explicitly if you need it.  it requires the DX SDK.
  //#include <amaudio.h>    // ActiveMovie audio interfaces and definitions
  #include <wxutil.h>     // General helper classes for threads etc
  #include <combase.h>    // Base COM classes to support IUnknown
  #include <dllsetup.h>   // Filter registration support functions
  #include "measure.h"    // Performance measurement
  #include <comlite.h>    // Light weight com function prototypes
  
  #include <cache.h>      // Simple cache container class
  #include <wxlist.h>     // Non MFC generic list class
  #include <msgthrd.h>	// CMsgThread
  #include <mtype.h>      // Helper class for managing media types
  #include <fourcc.h>     // conversions between FOURCCs and GUIDs
  #include <control.h>    // generated from control.odl
  #include <ctlutil.h>    // control interface utility classes
  #include <evcode.h>     // event code definitions
  #include <amfilter.h>   // Main streams architecture class hierachy
  #include <transfrm.h>   // Generic transform filter
  #include <transip.h>    // Generic transform-in-place filter
  #include <uuids.h>      // declaration of type GUIDs and well-known clsids
  #include <source.h>	// Generic source filter
  #include <outputq.h>    // Output pin queueing
  #include <errors.h>     // HRESULT status and error definitions
  #include <renbase.h>    // Base class for writing ActiveX renderers
  #include <winutil.h>    // Helps with filters that manage windows
  #include <winctrl.h>    // Implements the IVideoWindow interface
  #include <videoctl.h>   // Specifically video related classes
  #include <refclock.h>	// Base clock class
  #include <sysclock.h>	// System clock
  #include <pstream.h>    // IPersistStream helper class
  #include <vtrans.h>     // Video Transform Filter base class
  #include <amextra.h>
  #include <cprop.h>      // Base property page class
  #include <strmctl.h>    // IAMStreamControl support
  #include <edevdefs.h>   // External device control interface defines
  #include <audevcod.h>   // audio filter device error event codes
  
  
  
  #else
      #ifdef DEBUG
      #pragma message("STREAMS.H included TWICE")
      #endif
  #endif // __STREAMS__
  
  