blob: 63f33dfe0e8b8ff919ebe97db0bff6873196f8f9 [file] [log] [blame]
Tristan Matthews0a329cc2013-07-17 13:20:14 -04001//------------------------------------------------------------------------------
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_
65typedef 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.
132template <class T>
133T _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.
140template <class T>
141LONG_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
185const LONGLONG MAX_TIME = 0x7FFFFFFFFFFFFFFF; /* Maximum LONGLONG value */
186//#include <refclock.h> // Base clock class
187//#include <sysclock.h> // System clock
188//#include <pstream.h> // IPersistStream helper class
189//#include <vtrans.h> // Video Transform Filter base class
190//#include <amextra.h>
191//#include <cprop.h> // Base property page class
192//#include <strmctl.h> // IAMStreamControl support
193//#include <edevdefs.h> // External device control interface defines
194//#include <audevcod.h> // audio filter device error event codes
195
196
197#else
198 #ifdef DEBUG
199 #pragma message("STREAMS.H included TWICE")
200 #endif
201#endif // __STREAMS__
202