6 * Copyright Magnus Olsen (magnus@greatlord.com)
18 #define AMDDS_NONE 0x00
19 #define AMDDS_DCIPS 0x01
21 #define AMDDS_RGBOVR 0x04
22 #define AMDDS_YUVOVR 0x08
23 #define AMDDS_RGBOFF 0x10
24 #define AMDDS_YUVOFF 0x20
25 #define AMDDS_RGBFLP 0x40
26 #define AMDDS_YUVFLP 0x80
27 #define AMDDS_ ALL 0xFF
28 #define AMDDS_DEFAULT AMDDS_ALL
29 #define AMDDS_YUV (AMDDS_YUVOFF | AMDDS_YUVOVR | AMDDS_YUVFLP)
30 #define AMDDS_RGB (AMDDS_RGBOFF | AMDDS_RGBOVR | AMDDS_RGBFLP)
31 #define AMDDS_PRIMARY (AMDDS_DCIPS | AMDDS_PS)
32 #define iPALETTE_COLORS 256
33 #define iEGA_COLORS 16
34 #define iMASK_COLORS 3
42 typedef struct tag_TRUECOLORINFO
44 DWORD dwBitMasks
[iMASK_COLORS
];
45 RGBQUAD bmiColors
[iPALETTE_COLORS
];
49 typedef struct tagVIDEOINFOHEADER
55 REFERENCE_TIME AvgTimePerFrame
;
56 BITMAPINFOHEADER bmiHeader
;
60 typedef struct tagVIDEOINFO
66 REFERENCE_TIME AvgTimePerFrame
;
67 BITMAPINFOHEADER bmiHeader
;
70 RGBQUAD bmiColors
[iPALETTE_COLORS
];
71 DWORD dwBitMasks
[iMASK_COLORS
];
72 TRUECOLORINFO TrueColorInfo
;
76 typedef struct tagMPEG1VIDEOINFO
79 DWORD dwStartTimeCode
;
80 DWORD cbSequenceHeader
;
81 BYTE bSequenceHeader
[1];
84 typedef struct tagAnalogVideoInfo
90 REFERENCE_TIME AvgTimePerFrame
;
93 #define TRUECOLOR(PBMIH) ((TRUECOLORINFO *)(((LPBYTE)&((PBMIH)->bmiHeader)) + (PBMIH)->bmiHeader.biSize))
94 #define COLORS(PBMIH) ((RGBQUAD *)(((LPBYTE)&((PBMIH)->bmiHeader)) + (PBMIH)->bmiHeader.biSize))
95 #define BITMASKS(PBMIH) ((DWORD *)(((LPBYTE)&((PBMIH)->bmiHeader)) + (PBMIH)->bmiHeader.biSize))
97 #define SIZE_EGA_PALETTE (iEGA_COLORS * sizeof(RGBQUAD))
98 #define SIZE_PALETTE (iPALETTE_COLORS * sizeof(RGBQUAD))
99 #define SIZE_MASKS (iMASK_COLORS * sizeof(DWORD))
100 #define SIZE_PREHEADER (FIELD_OFFSET(VIDEOINFOHEADER,bmiHeader))
101 #define SIZE_VIDEOHEADER (sizeof(BITMAPINFOHEADER) + SIZE_PREHEADER)
103 #define WIDTHBYTES(BTIS) ((DWORD)(((BTIS)+31) & (~31)) / 8)
104 #define DIBWIDTHBYTES(BI) (DWORD)(BI).biBitCount) * (DWORD)WIDTHBYTES((DWORD)(BI).biWidth
105 #define _DIBSIZE(BI) (DIBWIDTHBYTES(BI) * (DWORD)(BI).biHeight)
106 #define DIBSIZE(BI) ((BI).biHeight < 0 ? (-1)*(_DIBSIZE(BI)) : _DIBSIZE(BI))
108 #define BIT_MASKS_MATCH(PBMIH1,PBMIH2) \
109 ((PBMIH2)->dwBitMasks[iGREEN] == (PBMIH1)->dwBitMasks[iGREEN]) && \
110 (((PBMIH2)->dwBitMasks[iRED] == (PBMIH1)->dwBitMasks[iRED]) && \
111 ((PBMIH2)->dwBitMasks[iBLUE] == (PBMIH1)->dwBitMasks[iBLUE]))
113 #define RESET_MASKS(PBMIH) (ZeroMemory((PVOID)(PBMIH)->dwBitFields,SIZE_MASKS))
114 #define RESET_HEADER(PBMIH) (ZeroMemory((PVOID)(PBMIH),SIZE_VIDEOHEADER))
115 #define RESET_PALETTE(PBMIH) (ZeroMemory((PVOID)(PBMIH)->bmiColors,SIZE_PALETTE));
116 #define PALETTISED(PBMIH) ((PBMIH)->bmiHeader.biBitCount <= iPALETTE)
117 #define PALETTE_ENTRIES(PBMIH) ((DWORD) 1 << (PBMIH)->bmiHeader.biBitCount)
118 #define HEADER(pVideoInfo) (&(((VIDEOINFOHEADER *) (pVideoInfo))->bmiHeader))
119 #define MAX_SIZE_MPEG1_SEQUENCE_INFO 140
120 #define MPEG1_SEQUENCE_INFO(pv) ((const BYTE *)(pv)->bSequenceHeader)
121 #define SIZE_MPEG1VIDEOINFO(pv) (FIELD_OFFSET(MPEG1VIDEOINFO, bSequenceHeader[0]) + \
122 (pv)->cbSequenceHeader)
125 #define INTERFACE IDirectDrawVideo
127 DECLARE_INTERFACE_(IDirectDrawVideo
, IUnknown
)
129 STDMETHOD(QueryInterface
)(THIS_ REFIID riid
, LPVOID
*ppvObj
) PURE
;
130 STDMETHOD_(ULONG
,AddRef
)(THIS
) PURE
;
131 STDMETHOD_(ULONG
,Release
)(THIS
) PURE
;
132 STDMETHOD(GetSwitches
)(THIS_ DWORD
*pSwitches
) PURE
;
133 STDMETHOD(SetSwitches
)(THIS_ DWORD Switches
) PURE
;
134 STDMETHOD(GetCaps
)(THIS_ DDCAPS
*pCaps
) PURE
;
135 STDMETHOD(GetEmulatedCaps
)(THIS_ DDCAPS
*pCaps
) PURE
;
136 STDMETHOD(GetSurfaceDesc
)(THIS_ DDSURFACEDESC
*pSurfaceDesc
) PURE
;
137 STDMETHOD(GetFourCCCodes
)(THIS_ DWORD
*pCount
,DWORD
*pCodes
) PURE
;
138 STDMETHOD(SetDirectDraw
)(THIS_ LPDIRECTDRAW pDirectDraw
) PURE
;
139 STDMETHOD(GetDirectDraw
)(THIS_ LPDIRECTDRAW
*ppDirectDraw
) PURE
;
140 STDMETHOD(GetSurfaceType
)(THIS_ DWORD
*pSurfaceType
) PURE
;
141 STDMETHOD(SetDefault
)(THIS
) PURE
;
142 STDMETHOD(UseScanLine
)(THIS_
long UseScanLine
) PURE
;
143 STDMETHOD(CanUseScanLine
)(THIS_
long *UseScanLine
) PURE
;
144 STDMETHOD(UseOverlayStretch
)(THIS_
long UseOverlayStretch
) PURE
;
145 STDMETHOD(CanUseOverlayStretch
)(THIS_
long *UseOverlayStretch
) PURE
;
146 STDMETHOD(UseWhenFullScreen
)(THIS_
long UseWhenFullScreen
) PURE
;
147 STDMETHOD(WillUseFullScreen
)(THIS_
long *UseWhenFullScreen
) PURE
;
152 #define INTERFACE IFullScreenVideo
154 DECLARE_INTERFACE_(IFullScreenVideo
, IUnknown
)
156 STDMETHOD(QueryInterface
)(THIS_ REFIID riid
, LPVOID
*ppvObj
) PURE
;
157 STDMETHOD_(ULONG
,AddRef
)(THIS
) PURE
;
158 STDMETHOD_(ULONG
,Release
)(THIS
) PURE
;
159 STDMETHOD(CountModes
)(THIS_
long *pModes
) PURE
;
160 STDMETHOD(GetModeInfo
)(THIS_
long Mode
,long *pWidth
,long *pHeight
,long *pDepth
) PURE
;
161 STDMETHOD(GetCurrentMode
)(THIS_
long *pMode
) PURE
;
162 STDMETHOD(IsModeAvailable
)(THIS_
long Mode
) PURE
;
163 STDMETHOD(IsModeEnabled
)(THIS_
long Mode
) PURE
;
164 STDMETHOD(SetEnabled
)(THIS_
long Mode
,long bEnabled
) PURE
;
165 STDMETHOD(GetClipFactor
)(THIS_
long *pClipFactor
) PURE
;
166 STDMETHOD(SetClipFactor
)(THIS_
long ClipFactor
) PURE
;
167 STDMETHOD(SetMessageDrain
)(THIS_ HWND hwnd
) PURE
;
168 STDMETHOD(GetMessageDrain
)(THIS_ HWND
*hwnd
) PURE
;
169 STDMETHOD(SetMonitor
)(THIS_
long Monitor
) PURE
;
170 STDMETHOD(GetMonitor
)(THIS_
long *Monitor
) PURE
;
171 STDMETHOD(HideOnDeactivate
)(THIS_
long Hide
) PURE
;
172 STDMETHOD(IsHideOnDeactivate
)(THIS
) PURE
;
173 STDMETHOD(SetCaption
)(THIS_ BSTR strCaption
) PURE
;
174 STDMETHOD(GetCaption
)(THIS_ BSTR
*pstrCaption
) PURE
;
175 STDMETHOD(SetDefault
)(THIS
) PURE
;
179 #define INTERFACE IQualProp
181 DECLARE_INTERFACE_(IQualProp
, IUnknown
)
183 STDMETHOD(QueryInterface
)(THIS_ REFIID riid
, LPVOID
*ppvObj
) PURE
;
184 STDMETHOD_(ULONG
,AddRef
)(THIS
) PURE
;
185 STDMETHOD_(ULONG
,Release
)(THIS
) PURE
;
186 STDMETHOD(get_FramesDroppedInRenderer
)(THIS_
int *pcFrames
) PURE
;
187 STDMETHOD(get_FramesDrawn
)(THIS_
int *pcFramesDrawn
) PURE
;
188 STDMETHOD(get_AvgFrameRate
)(THIS_
int *piAvgFrameRate
) PURE
;
189 STDMETHOD(get_Jitter
)(THIS_
int *iJitter
) PURE
;
190 STDMETHOD(get_AvgSyncOffset
)(THIS_
int *piAvg
) PURE
;
191 STDMETHOD(get_DevSyncOffset
)(THIS_
int *piDev
) PURE
;
196 #define INTERFACE IBaseVideoMixer
198 DECLARE_INTERFACE_(IBaseVideoMixer
, IUnknown
)
200 STDMETHOD(SetLeadPin
)(THIS_
int iPin
) PURE
;
201 STDMETHOD(GetLeadPin
)(THIS_
int *piPin
) PURE
;
202 STDMETHOD(GetInputPinCount
)(THIS_
int *piPinCount
) PURE
;
203 STDMETHOD(IsUsingClock
)(THIS_
int *pbValue
) PURE
;
204 STDMETHOD(SetUsingClock
)(THIS_
int bValue
) PURE
;
205 STDMETHOD(GetClockPeriod
)(THIS_
int *pbValue
) PURE
;
206 STDMETHOD(SetClockPeriod
)(THIS_
int bValue
) PURE
;
210 #define INTERFACE IFullScreenVideoEx
212 DECLARE_INTERFACE_(IFullScreenVideoEx
, IFullScreenVideo
)
214 STDMETHOD(QueryInterface
)(THIS_ REFIID riid
, LPVOID
*ppvObj
) PURE
;
215 STDMETHOD_(ULONG
,AddRef
)(THIS
) PURE
;
216 STDMETHOD_(ULONG
,Release
)(THIS
) PURE
;
217 STDMETHOD(CountModes
)(THIS_
long *pModes
) PURE
;
218 STDMETHOD(GetModeInfo
)(THIS_
long Mode
,long *pWidth
,long *pHeight
,long *pDepth
) PURE
;
219 STDMETHOD(GetCurrentMode
)(THIS_
long *pMode
) PURE
;
220 STDMETHOD(IsModeAvailable
)(THIS_
long Mode
) PURE
;
221 STDMETHOD(IsModeEnabled
)(THIS_
long Mode
) PURE
;
222 STDMETHOD(SetEnabled
)(THIS_
long Mode
,long bEnabled
) PURE
;
223 STDMETHOD(GetClipFactor
)(THIS_
long *pClipFactor
) PURE
;
224 STDMETHOD(SetClipFactor
)(THIS_
long ClipFactor
) PURE
;
225 STDMETHOD(SetMessageDrain
)(THIS_ HWND hwnd
) PURE
;
226 STDMETHOD(GetMessageDrain
)(THIS_ HWND
*hwnd
) PURE
;
227 STDMETHOD(SetMonitor
)(THIS_
long Monitor
) PURE
;
228 STDMETHOD(GetMonitor
)(THIS_
long *Monitor
) PURE
;
229 STDMETHOD(HideOnDeactivate
)(THIS_
long Hide
) PURE
;
230 STDMETHOD(IsHideOnDeactivate
)(THIS
) PURE
;
231 STDMETHOD(SetCaption
)(THIS_ BSTR strCaption
) PURE
;
232 STDMETHOD(GetCaption
)(THIS_ BSTR
*pstrCaption
) PURE
;
233 STDMETHOD(SetDefault
)(THIS
) PURE
;
234 STDMETHOD(SetAcceleratorTable
)(THIS_ HWND hwnd
,HACCEL hAccel
) PURE
;
235 STDMETHOD(GetAcceleratorTable
)(THIS_ HWND
*phwnd
,HACCEL
*phAccel
) PURE
;
236 STDMETHOD(KeepPixelAspectRatio
)(THIS_
long KeepAspect
) PURE
;
237 STDMETHOD(IsKeepPixelAspectRatio
)(THIS_
long *pKeepAspect
) PURE
;
245 AM_PROPERTY_FRAMESTEP_STEP
= 0x01,
246 AM_PROPERTY_FRAMESTEP_CANCEL
= 0x02,
247 AM_PROPERTY_FRAMESTEP_CANSTEP
= 0x03,
248 AM_PROPERTY_FRAMESTEP_CANSTEPMULTIPLE
= 0x04
249 } AM_PROPERTY_FRAMESTEP
;
251 typedef struct _AM_FRAMESTEP_STEP
253 DWORD dwFramesToStep
;