/* * Copyright (C) 2003 Robert Shearman * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "objidl.idl"; /* trick widl into thinking that it knows the DirectDraw types * as there is no IDL file for them (yet) */ cpp_quote("#if 0") typedef void * LPDIRECTDRAW; typedef void DDSURFACEDESC,DDCAPS; typedef DWORD RGBQUAD; typedef LONGLONG REFERENCE_TIME; typedef struct { DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } BITMAPINFOHEADER, *PBITMAPINFOHEADER, *LPBITMAPINFOHEADER; cpp_quote("#endif") cpp_quote("#include <ddraw.h>") cpp_quote("#define AMDDS_NONE 0x00") cpp_quote("#define AMDDS_DCIPS 0x01") cpp_quote("#define AMDDS_PS 0x02") cpp_quote("#define AMDDS_RGBOVR 0x04") cpp_quote("#define AMDDS_YUVOVR 0x08") cpp_quote("#define AMDDS_RGBOFF 0x10") cpp_quote("#define AMDDS_YUVOFF 0x20") cpp_quote("#define AMDDS_RGBFLP 0x40") cpp_quote("#define AMDDS_YUVFLP 0x80") cpp_quote("#define AMDDS_ALL 0xFF") cpp_quote("#define AMDDS_DEFAULT AMDDS_ALL") cpp_quote("#define AMDDS_YUV (AMDDS_YUVOFF | AMDDS_YUVOVR | AMDDS_YUVFLP)") cpp_quote("#define AMDDS_RGB (AMDDS_RGBOFF | AMDDS_RGBOVR | AMDDS_RGBFLP)") cpp_quote("#define AMDSS_PRIMARY (AMDDS_DCIPS | AMDDS_PS)") [ object, pointer_default(unique) ] interface IDirectDrawVideo : IUnknown { HRESULT GetSwitches([out] DWORD * pSwitches); HRESULT SetSwitches([in] DWORD Switches); HRESULT GetCaps([out] DDCAPS * pCaps); HRESULT GetEmulatedCaps([out] DDCAPS *pCaps); HRESULT GetSurfaceDesc([out] DDSURFACEDESC * pSurfaceDesc); HRESULT GetFourCCCodes([out] DWORD * pCount, [out] DWORD * pCodes); HRESULT SetDirectDraw([in] LPDIRECTDRAW pDirectDraw); HRESULT GetDirectDraw([out] LPDIRECTDRAW * ppDirectDraw); HRESULT GetSurfaceType([out] DWORD * pSurfaceType); HRESULT SetDefault(); HRESULT UseScanLine([in] long UseScanLine); HRESULT CanUseScanLine([out] long * UseScanLine); HRESULT UseOverlayStretch([in] long UseOverlayStretch); HRESULT CanUseOverlayStretch([out] long * UseOverlayStretch); HRESULT UseWhenFullScreen([in] long UseWhenFullScreen); HRESULT WillUseFullScreen([out] long * UseWhenFullScreen); } [ object, pointer_default(unique) ] interface IQualProp : IUnknown { [propget] HRESULT FramesDroppedInRenderer([out] int * pcFrames); [propget] HRESULT FramesDrawn([out] int * pcFramesDrawn); [propget] HRESULT AvgFrameRate([out] int * piAvgFrameRate); [propget] HRESULT Jitter([out] int * iJitter); [propget] HRESULT AvgSyncOffset([out] int * piAvg); [propget] HRESULT DevSyncOffset([out] int * piDev); } [ object, pointer_default(unique) ] interface IFullScreenVideo : IUnknown { HRESULT CountModes([out] long * pModes); HRESULT GetModeInfo([in] long Mode, [out] long * pWidth, [out] long * pHeight, [out] long * pDepth); HRESULT GetCurrentMode([out] long * pMode); HRESULT IsModeAvailable([in] long Mode); HRESULT IsModeEnabled([in] long Mode); HRESULT SetEnabled([in] long Mode, [in] long bEnabled); HRESULT GetClipFactor([out] long * pClipFactor); HRESULT SetClipFactor([in] long ClipFactor); HRESULT SetMessageDrain([in] HWND hwnd); HRESULT GetMessageDrain([out] HWND * hwnd); HRESULT SetMonitor([in] long Monitor); HRESULT GetMonitor([out] long * Monitor); HRESULT HideOnDeactivate([in] long Hide); HRESULT IsHideOnDeactivate(); HRESULT SetCaption([in] BSTR strCaption); HRESULT GetCaption([out] BSTR * pstrCaption); HRESULT SetDefault(); } [ object, pointer_default(unique) ] interface IFullScreenVideoEx : IFullScreenVideo { HRESULT SetAcceleratorTable([in] HWND hwnd, [in] HACCEL hAccel); HRESULT GetAcceleratorTable([out] HWND * phwnd, [out] HACCEL * phAccel); HRESULT KeepPixelAspectRatio([in] long KeepAspect); /* FIXME: not sure is this next method is an [out] */ HRESULT IsKeepPixelAspectRatio([out] long * pKeepAspect); } [ object, pointer_default(unique) ] interface IBaseVideoMixer : IUnknown { HRESULT SetLeadPin([in] int iPin); HRESULT GetLeadPin([out] int * piPin); HRESULT GetInputPinCount([out] int * piPinCount); HRESULT IsUsingClock([out] int * pbValue); HRESULT SetUsingClock([in] int bValue); HRESULT GetClockPeriod([out] int * pbValue); HRESULT SetClockPeriod([in] int bValue); } #define iPALETTE_COLORS 256 #define iMASK_COLORS 3 cpp_quote("#define iPALETTE_COLORS 256") cpp_quote("#define iEGA_COLORS 16") cpp_quote("#define iMASK_COLORS 3") cpp_quote("#define iTRUECOLOR 16") cpp_quote("#define iRED 0") cpp_quote("#define iGREEN 1") cpp_quote("#define iBLUE 2") cpp_quote("#define iPALETTE 8") cpp_quote("#define iMAXBITS 8") typedef struct tag_TRUECOLORINFO { DWORD dwBitMasks[iMASK_COLORS]; RGBQUAD bmiColors[iPALETTE_COLORS]; } TRUECOLORINFO; typedef struct tagVIDEOINFOHEADER { RECT rcSource; RECT rcTarget; DWORD dwBitRate; DWORD dwBitErrorRate; REFERENCE_TIME AvgTimePerFrame; BITMAPINFOHEADER bmiHeader; } VIDEOINFOHEADER; typedef struct tagVIDEOINFO { RECT rcSource; RECT rcTarget; DWORD dwBitRate; DWORD dwBitErrorRate; REFERENCE_TIME AvgTimePerFrame; BITMAPINFOHEADER bmiHeader; union { RGBQUAD bmiColors[iPALETTE_COLORS]; DWORD dwBitMasks[iMASK_COLORS]; TRUECOLORINFO TrueColorInfo; }; } VIDEOINFO; typedef struct tagMPEG1VIDEOINFO { VIDEOINFOHEADER hdr; DWORD dwStartTimeCode; DWORD cbSequenceHeader; BYTE bSequenceHeader[1]; } MPEG1VIDEOINFO; cpp_quote("#define MAX_SIZE_MPEG1_SEQUENCE_INFO 140") cpp_quote("#define MPEG1_SEQUENCE_INFO(pv) ((const BYTE *)(pv)->bSequenceHeader)") typedef struct tagAnalogVideoInfo { RECT rcSource; RECT rcTarget; DWORD dwActiveWidth; DWORD dwActiveHeight; REFERENCE_TIME AvgTimePerFrame; } ANALOGVIDEOINFO; typedef enum { AM_PROPERTY_FRAMESTEP_STEP = 0x01, AM_PROPERTY_FRAMESTEP_CANCEL = 0x02, AM_PROPERTY_FRAMESTEP_CANSTEP = 0x03, AM_PROPERTY_FRAMESTEP_CANSTEPMULTIPLE = 0x04 } AM_PROPERTY_FRAMESTEP; typedef struct _AM_FRAMESTEP_STEP { DWORD dwFramesToStep; } AM_FRAMESTEP_STEP;