1 //------------------------------------------------------------------------------
  2 // File: Streams.h
  3 //
  4 // Desc: DirectShow base classes - defines overall streams architecture.
  5 //
  6 // Copyright (c) 1992-2001 Microsoft Corporation.  All rights reserved.
  7 //------------------------------------------------------------------------------
  8 
  9 
 10 #ifndef __STREAMS__
 11 #define __STREAMS__
 12 
 13 #ifdef  _MSC_VER
 14 // disable some level-4 warnings, use #pragma warning(enable:###) to re-enable
 15 #pragma warning(disable:4100) // warning C4100: unreferenced formal parameter
 16 #pragma warning(disable:4201) // warning C4201: nonstandard extension used : nameless struct/union
 17 #pragma warning(disable:4511) // warning C4511: copy constructor could not be generated
 18 #pragma warning(disable:4512) // warning C4512: assignment operator could not be generated
 19 #pragma warning(disable:4514) // warning C4514: "unreferenced inline function has been removed"
 20 
 21 #if _MSC_VER>=1100
 22 #define AM_NOVTABLE __declspec(novtable)
 23 #else
 24 #define AM_NOVTABLE
 25 #endif
 26 #endif  // MSC_VER
 27 
 28 
 29 // Because of differences between Visual C++ and older Microsoft SDKs,
 30 // you may have defined _DEBUG without defining DEBUG.  This logic
 31 // ensures that both will be set if Visual C++ sets _DEBUG.
 32 #ifdef _DEBUG
 33 #ifndef DEBUG
 34 #define DEBUG
 35 #endif
 36 #endif
 37 
 38 
 39 #include <windows.h>
 40 #include <windowsx.h>
 41 #include <olectl.h>
 42 #include <ddraw.h>
 43 #include <mmsystem.h>
 44 
 45 
 46 #ifndef NUMELMS
 47 #if _WIN32_WINNT < 0x0600
 48    #define NUMELMS(aa) (sizeof(aa)/sizeof((aa)[0]))
 49 #else
 50    #define NUMELMS(aa) ARRAYSIZE(aa)
 51 #endif
 52 #endif
 53 
 54 ///////////////////////////////////////////////////////////////////////////
 55 // The following definitions come from the Platform SDK and are required if
 56 // the applicaiton is being compiled with the headers from Visual C++ 6.0.
 57 /////////////////////////////////////////////////// ////////////////////////
 58 #ifndef InterlockedExchangePointer
 59     #define InterlockedExchangePointer(Target, Value) \
 60    (PVOID)InterlockedExchange((PLONG)(Target), (LONG)(Value))
 61 #endif
 62 
 63 #ifndef _WAVEFORMATEXTENSIBLE_
 64 #define _WAVEFORMATEXTENSIBLE_
 65 typedef struct {
 66     WAVEFORMATEX    Format;
 67     union {
 68         WORD wValidBitsPerSample;       /* bits of precision  */
 69         WORD wSamplesPerBlock;          /* valid if wBitsPerSample==0 */
 70         WORD wReserved;                 /* If neither applies, set to zero. */
 71     } Samples;
 72     DWORD           dwChannelMask;      /* which channels are */
 73                                         /* present in stream  */
 74     GUID            SubFormat;
 75 } WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;
 76 #endif // !_WAVEFORMATEXTENSIBLE_
 77 
 78 #if !defined(WAVE_FORMAT_EXTENSIBLE)
 79 #define  WAVE_FORMAT_EXTENSIBLE                 0xFFFE
 80 #endif // !defined(WAVE_FORMAT_EXTENSIBLE)
 81 
 82 #ifndef GetWindowLongPtr
 83   #define GetWindowLongPtrA   GetWindowLongA
 84   #define GetWindowLongPtrW   GetWindowLongW
 85   #ifdef UNICODE
 86     #define GetWindowLongPtr  GetWindowLongPtrW
 87   #else
 88     #define GetWindowLongPtr  GetWindowLongPtrA
 89   #endif // !UNICODE
 90 #endif // !GetWindowLongPtr
 91 
 92 #ifndef SetWindowLongPtr
 93   #define SetWindowLongPtrA   SetWindowLongA
 94   #define SetWindowLongPtrW   SetWindowLongW
 95   #ifdef UNICODE
 96     #define SetWindowLongPtr  SetWindowLongPtrW
 97   #else
 98     #define SetWindowLongPtr  SetWindowLongPtrA
 99   #endif // !UNICODE
100 #endif // !SetWindowLongPtr
101 
102 #ifndef GWLP_WNDPROC
103   #define GWLP_WNDPROC        (-4)
104 #endif
105 #ifndef GWLP_HINSTANCE
106   #define GWLP_HINSTANCE      (-6)
107 #endif
108 #ifndef GWLP_HWNDPARENT
109   #define GWLP_HWNDPARENT     (-8)
110 #endif
111 #ifndef GWLP_USERDATA
112   #define GWLP_USERDATA       (-21)
113 #endif
114 #ifndef GWLP_ID
115   #define GWLP_ID             (-12)
116 #endif
117 #ifndef DWLP_MSGRESULT
118   #define DWLP_MSGRESULT  0
119 #endif
120 #ifndef DWLP_DLGPROC
121   #define DWLP_DLGPROC    DWLP_MSGRESULT + sizeof(LRESULT)
122 #endif
123 #ifndef DWLP_USER
124   #define DWLP_USER       DWLP_DLGPROC + sizeof(DLGPROC)
125 #endif
126 
127 
128 #pragma warning(push)
129 #pragma warning(disable: 4312 4244)
130 // _GetWindowLongPtr
131 // Templated version of GetWindowLongPtr, to suppress spurious compiler warning.
132 template <class T>
133 T _GetWindowLongPtr(HWND hwnd, int nIndex)
134 {
135     return (T)GetWindowLongPtr(hwnd, nIndex);
136 }
137 
138 // _SetWindowLongPtr
139 // Templated version of SetWindowLongPtr, to suppress spurious compiler warning.
140 template <class T>
141 LONG_PTR _SetWindowLongPtr(HWND hwnd, int nIndex, T p)
142 {
143     return SetWindowLongPtr(hwnd, nIndex, (LONG_PTR)p);
144 }
145 #pragma warning(pop)
146 
147 ///////////////////////////////////////////////////////////////////////////
148 // End Platform SDK definitions
149 ///////////////////////////////////////////////////////////////////////////
150 
151 
152 #include <strmif.h>     // Generated IDL header file for streams interfaces
153 #include <intsafe.h>    // required by amvideo.h
154 
155 #include <reftime.h>    // Helper class for REFERENCE_TIME management
156 #include <wxdebug.h>    // Debug support for logging and ASSERTs
157 #include <amvideo.h>    // ActiveMovie video interfaces and definitions
158 //include amaudio.h explicitly if you need it.  it requires the DX SDK.
159 //#include <amaudio.h>    // ActiveMovie audio interfaces and definitions
160 #include <wxutil.h>     // General helper classes for threads etc
161 #include <combase.h>    // Base COM classes to support IUnknown
162 #include <dllsetup.h>   // Filter registration support functions
163 #include <measure.h>    // Performance measurement
164 #include <comlite.h>    // Light weight com function prototypes
165 
166 #include <cache.h>      // Simple cache container class
167 #include <wxlist.h>     // Non MFC generic list class
168 #include <msgthrd.h>    // CMsgThread
169 #include <mtype.h>      // Helper class for managing media types
170 #include <fourcc.h>     // conversions between FOURCCs and GUIDs
171 #include <control.h>    // generated from control.odl
172 #include <ctlutil.h>    // control interface utility classes
173 #include <evcode.h>     // event code definitions
174 #include <amfilter.h>   // Main streams architecture class hierachy
175 #include <transfrm.h>   // Generic transform filter
176 #include <transip.h>    // Generic transform-in-place filter
177 #include <uuids.h>      // declaration of type GUIDs and well-known clsids
178 #include <source.h> // Generic source filter
179 #include <outputq.h>    // Output pin queueing
180 #include <errors.h>     // HRESULT status and error definitions
181 #include <renbase.h>    // Base class for writing ActiveX renderers
182 #include <winutil.h>    // Helps with filters that manage windows
183 #include <winctrl.h>    // Implements the IVideoWindow interface
184 #include <videoctl.h>   // Specifically video related classes
185 #include <refclock.h>   // Base clock class
186 #include <sysclock.h>   // System clock
187 #include <pstream.h>    // IPersistStream helper class
188 #include <vtrans.h>     // Video Transform Filter base class
189 #include <amextra.h>
190 #include <cprop.h>      // Base property page class
191 #include <strmctl.h>    // IAMStreamControl support
192 #include <edevdefs.h>   // External device control interface defines
193 #include <audevcod.h>   // audio filter device error event codes
194 
195 
196 
197 #else
198     #ifdef DEBUG
199     #pragma message("STREAMS.H included TWICE")
200     #endif
201 #endif // __STREAMS__
202