|  | /* | 
|  | * Copyright (C) 2002 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | 
|  | */ | 
|  |  | 
|  | interface IAMAnalogVideoDecoder; | 
|  | interface IAMAnalogVideoEncoder; | 
|  | interface IAMAudioInputMixer; | 
|  | interface IAMAudioRendererStats; | 
|  | interface IAMBufferNegotiation; | 
|  | interface IAMCameraControl; | 
|  | interface IAMCopyCaptureFileProgress; | 
|  | interface IAMCrossbar; | 
|  | interface IAMDevMemoryAllocator; | 
|  | interface IAMDevMemoryControl; | 
|  | interface IAMDroppedFrames; | 
|  | interface IAMExtDevice; | 
|  | interface IAMExtTransport; | 
|  | interface IAMGraphStreams; | 
|  | interface IAMLatency; | 
|  | interface IAMOpenProgress; | 
|  | interface IAMOverlayFX; | 
|  | interface IAMPhysicalPinInfo; | 
|  | interface IAMPushSource; | 
|  | interface IAMStreamConfig; | 
|  | interface IAMTimecodeDisplay; | 
|  | interface IAMTimecodeGenerator; | 
|  | interface IAMTimecodeReader; | 
|  | interface IAMTVTuner; | 
|  | interface IAMVfwCaptureDialogs; | 
|  | interface IAMVfwCompressDialogs; | 
|  | interface IAMVideoCompression; | 
|  | interface IAMVideoDecimationProperties; | 
|  | interface IAMVideoProcAmp; | 
|  | interface ICaptureGraphBuilder; | 
|  | interface ICaptureGraphBuilder2; | 
|  | interface IConfigAviMux; | 
|  | interface IConfigInterleaving; | 
|  | interface IDecimateVideoImage; | 
|  | interface IDrawVideoImage; | 
|  | interface IEnumRegFilters; | 
|  | interface IEnumStreamIdMap; | 
|  | interface IFileSourceFilter; | 
|  | interface IFileSinkFilter; | 
|  | interface IFileSinkFilter2; | 
|  | interface IFilterMapper; | 
|  | interface IFilterMapper2; | 
|  | interface IGraphBuilder; | 
|  | interface IKsPropertySet; | 
|  | interface IMediaEventSink; | 
|  | interface IMpeg2Demultiplexer; | 
|  | interface IMPEG2StreamIdMap; | 
|  | interface IOverlay; | 
|  | interface IOverlayNotify; | 
|  | interface IOverlayNotify2; | 
|  | interface IQualityControl; | 
|  | interface ISeekingPassThru; | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | CLSID Clsid; | 
|  | LPWSTR Name; | 
|  | } REGFILTER; | 
|  |  | 
|  | [ | 
|  | object, | 
|  | uuid(56a868a4-0ad4-11ce-b03a-0020af0ba770), | 
|  | pointer_default(unique) | 
|  | ] | 
|  | interface IEnumRegFilters : IUnknown | 
|  | { | 
|  | HRESULT Next | 
|  | ( [in]  ULONG cFilters, | 
|  | [out] REGFILTER ** apRegFilter, | 
|  | [out] ULONG * pcFetched | 
|  | ); | 
|  |  | 
|  | HRESULT Skip( | 
|  | [in] ULONG cFilters | 
|  | ); | 
|  |  | 
|  | HRESULT Reset(void); | 
|  |  | 
|  | HRESULT Clone( | 
|  | [out] IEnumRegFilters **ppEnum | 
|  | ); | 
|  | } | 
|  |  | 
|  |  | 
|  | typedef IEnumRegFilters *PENUMREGFILTERS; | 
|  |  | 
|  | [ | 
|  | object, | 
|  | uuid(56a868a3-0ad4-11ce-b03a-0020af0ba770), | 
|  | pointer_default(unique) | 
|  | ] | 
|  | interface IFilterMapper : IUnknown | 
|  | { | 
|  | enum { MERIT_PREFERRED     = 0x800000, | 
|  | MERIT_NORMAL        = 0x600000, | 
|  | MERIT_UNLIKELY      = 0x400000, | 
|  | MERIT_DO_NOT_USE    = 0x200000, | 
|  | MERIT_SW_COMPRESSOR = 0x100000, | 
|  | MERIT_HW_COMPRESSOR = 0x100050 | 
|  | }; | 
|  |  | 
|  | HRESULT RegisterFilter | 
|  | ( [in] CLSID   clsid, | 
|  | [in] LPCWSTR Name, | 
|  | [in] DWORD   dwMerit | 
|  | ); | 
|  |  | 
|  | HRESULT RegisterFilterInstance | 
|  | ( [in]  CLSID  clsid, | 
|  | [in]  LPCWSTR Name, | 
|  | [out] CLSID *MRId | 
|  | ); | 
|  |  | 
|  |  | 
|  | HRESULT RegisterPin | 
|  | ( [in] CLSID   Filter, | 
|  | [in] LPCWSTR Name, | 
|  | [in] BOOL    bRendered, | 
|  | [in] BOOL    bOutput, | 
|  | [in] BOOL    bZero, | 
|  | [in] BOOL    bMany, | 
|  | [in] CLSID   ConnectsToFilter, | 
|  | [in] LPCWSTR ConnectsToPin | 
|  | ); | 
|  |  | 
|  | HRESULT RegisterPinType | 
|  | ( [in] CLSID   clsFilter, | 
|  | [in] LPCWSTR strName, | 
|  | [in] CLSID   clsMajorType, | 
|  | [in] CLSID   clsSubType | 
|  | ); | 
|  |  | 
|  |  | 
|  | HRESULT UnregisterFilter | 
|  | ( [in] CLSID  Filter | 
|  | ); | 
|  |  | 
|  |  | 
|  | HRESULT UnregisterFilterInstance | 
|  | ( [in] CLSID  MRId | 
|  | ); | 
|  |  | 
|  |  | 
|  | HRESULT UnregisterPin | 
|  | ( [in] CLSID   Filter, | 
|  | [in] LPCWSTR Name | 
|  | ); | 
|  |  | 
|  | HRESULT EnumMatchingFilters | 
|  | ( [out] IEnumRegFilters **ppEnum, | 
|  | [in]  DWORD dwMerit, | 
|  | [in]  BOOL  bInputNeeded, | 
|  | [in]  CLSID clsInMaj, | 
|  | [in]  CLSID clsInSub, | 
|  | [in]  BOOL  bRender, | 
|  | [in]  BOOL  bOututNeeded, | 
|  | [in]  CLSID clsOutMaj, | 
|  | [in]  CLSID clsOutSub | 
|  | ); | 
|  |  | 
|  | } | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | const CLSID * clsMajorType; | 
|  | const CLSID * clsMinorType; | 
|  | } REGPINTYPES; | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | LPWSTR           strName; | 
|  | BOOL             bRendered; | 
|  | BOOL             bOutput; | 
|  | BOOL             bZero; | 
|  | BOOL             bMany; | 
|  | const CLSID *    clsConnectsToFilter; | 
|  | const WCHAR *    strConnectsToPin; | 
|  | UINT             nMediaTypes; | 
|  | const REGPINTYPES * lpMediaType; | 
|  | } REGFILTERPINS; | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | CLSID clsMedium; | 
|  | DWORD dw1; | 
|  | DWORD dw2; | 
|  | } REGPINMEDIUM; | 
|  |  | 
|  | enum | 
|  | { | 
|  | REG_PINFLAG_B_ZERO = 0x1, | 
|  | REG_PINFLAG_B_RENDERER = 0x2, | 
|  | REG_PINFLAG_B_MANY = 0x4, | 
|  | REG_PINFLAG_B_OUTPUT = 0x8 | 
|  | }; | 
|  |  | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | DWORD dwFlags; | 
|  | UINT             cInstances; | 
|  | UINT             nMediaTypes; | 
|  | [size_is(nMediaTypes)] const REGPINTYPES * lpMediaType; | 
|  | UINT             nMediums; | 
|  | [size_is(nMediums)] const REGPINMEDIUM *lpMedium; | 
|  | const CLSID      *clsPinCategory; | 
|  | } REGFILTERPINS2; | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | DWORD dwVersion; | 
|  | DWORD dwMerit; | 
|  | [switch_is(dwVersion)] [switch_type(DWORD)] union | 
|  | { | 
|  | [case(1)] | 
|  | struct | 
|  | { | 
|  | ULONG cPins; | 
|  | [size_is(cPins)] const REGFILTERPINS *rgPins; | 
|  | } DUMMYSTRUCTNAME; | 
|  |  | 
|  | [case(2)] | 
|  | struct | 
|  | { | 
|  | ULONG cPins2; | 
|  | [size_is(cPins2)] const REGFILTERPINS2 *rgPins2; | 
|  | } DUMMYSTRUCTNAME1; | 
|  |  | 
|  | [default] | 
|  | ; | 
|  | } DUMMYUNIONNAME; | 
|  |  | 
|  | } REGFILTER2; | 
|  |  | 
|  |  | 
|  | [ | 
|  | object, | 
|  | uuid(b79bb0b0-33c1-11d1-abe1-00a0c905f375), | 
|  | pointer_default(unique) | 
|  | ] | 
|  | interface IFilterMapper2 : IUnknown | 
|  | { | 
|  | HRESULT CreateCategory | 
|  | ( [in] REFCLSID clsidCategory, | 
|  | [in] DWORD dwCategoryMerit, | 
|  | [in] LPCWSTR Description | 
|  | ); | 
|  |  | 
|  | HRESULT UnregisterFilter | 
|  | ( [in] const CLSID *pclsidCategory, | 
|  | [in] const OLECHAR *szInstance, | 
|  | [in] REFCLSID Filter | 
|  | ); | 
|  |  | 
|  | HRESULT RegisterFilter | 
|  | ( [in] REFCLSID clsidFilter, | 
|  | [in] LPCWSTR Name, | 
|  | [in, out] IMoniker **ppMoniker, | 
|  | [in] const CLSID *pclsidCategory, | 
|  | [in] const OLECHAR *szInstance, | 
|  | [in] const REGFILTER2 *prf2 | 
|  | ); | 
|  |  | 
|  | HRESULT EnumMatchingFilters | 
|  | ( [out] IEnumMoniker **ppEnum, | 
|  | [in]  DWORD dwFlags, | 
|  | [in]  BOOL bExactMatch, | 
|  | [in]  DWORD dwMerit, | 
|  | [in]  BOOL  bInputNeeded, | 
|  | [in]  DWORD cInputTypes, | 
|  | [size_is(cInputTypes*2)]  const GUID *pInputTypes, | 
|  | [in]  const REGPINMEDIUM *pMedIn, | 
|  | [in]  const CLSID *pPinCategoryIn, | 
|  | [in]  BOOL  bRender, | 
|  | [in]  BOOL  bOutputNeeded, | 
|  | [in]  DWORD cOutputTypes, | 
|  | [size_is(cOutputTypes*2)]  const GUID *pOutputTypes, | 
|  | [in]  const REGPINMEDIUM *pMedOut, | 
|  | [in]  const CLSID *pPinCategoryOut | 
|  | ); | 
|  | } | 
|  |  | 
|  | [ | 
|  | object, | 
|  | uuid(b79bb0b1-33c1-11d1-abe1-00a0c905f375), | 
|  | pointer_default(unique) | 
|  | ] | 
|  | interface IFilterMapper3 : IFilterMapper2 | 
|  | { | 
|  | HRESULT GetICreateDevEnum( [out] ICreateDevEnum **ppEnum ); | 
|  | } | 
|  |  | 
|  | typedef enum tagQualityMessageType | 
|  | { | 
|  | Famine, | 
|  | Flood | 
|  | } QualityMessageType; | 
|  |  | 
|  | typedef struct tagQuality | 
|  | { | 
|  | QualityMessageType Type; | 
|  | long               Proportion; | 
|  | REFERENCE_TIME       Late; | 
|  | REFERENCE_TIME       TimeStamp; | 
|  | } Quality; | 
|  |  | 
|  | typedef IQualityControl *PQUALITYCONTROL; | 
|  |  | 
|  | [ | 
|  | object, | 
|  | uuid(56a868a5-0ad4-11ce-b03a-0020af0ba770), | 
|  | pointer_default(unique) | 
|  | ] | 
|  | interface IQualityControl : IUnknown | 
|  | { | 
|  | HRESULT Notify | 
|  | ( [in] IBaseFilter * pSelf, | 
|  | [in] Quality q | 
|  | ); | 
|  |  | 
|  | HRESULT SetSink | 
|  | ( [in] IQualityControl * piqc | 
|  | ); | 
|  | } | 
|  |  | 
|  | enum | 
|  | { | 
|  | CK_NOCOLORKEY  = 0x0, | 
|  | CK_INDEX       = 0x1, | 
|  | CK_RGB         = 0x2 | 
|  | }; | 
|  |  | 
|  | typedef struct tagCOLORKEY | 
|  | { | 
|  | DWORD    KeyType; | 
|  | DWORD    PaletteIndex; | 
|  | COLORREF LowColorValue; | 
|  | COLORREF HighColorValue; | 
|  | } COLORKEY; | 
|  |  | 
|  | enum | 
|  | { | 
|  | ADVISE_NONE = 0x0, | 
|  | ADVISE_CLIPPING = 0x1, | 
|  | ADVISE_PALETTE = 0x2, | 
|  | ADVISE_COLORKEY = 0x4, | 
|  | ADVISE_POSITION = 0x8, | 
|  | ADVISE_DISPLAY_CHANGE = 0x10 | 
|  | }; | 
|  |  | 
|  | const DWORD ADVISE_ALL = ADVISE_CLIPPING | | 
|  | ADVISE_PALETTE  | | 
|  | ADVISE_COLORKEY | | 
|  | ADVISE_POSITION; | 
|  |  | 
|  | const DWORD ADVISE_ALL2 = ADVISE_ALL | | 
|  | ADVISE_DISPLAY_CHANGE; | 
|  |  | 
|  | cpp_quote("#ifndef _WINGDI_") | 
|  |  | 
|  | /* already defined in wingdi.h, but needed for WIDL */ | 
|  |  | 
|  | typedef struct _RGNDATAHEADER | 
|  | { | 
|  | DWORD dwSize; | 
|  | DWORD iType; | 
|  | DWORD nCount; | 
|  | DWORD nRgnSize; | 
|  | RECT  rcBound; | 
|  | } RGNDATAHEADER; | 
|  |  | 
|  | typedef struct _RGNDATA | 
|  | { | 
|  | RGNDATAHEADER rdh; | 
|  | char Buffer[1]; | 
|  | } RGNDATA; | 
|  |  | 
|  | cpp_quote("#endif /* _WINGDI_ */") | 
|  |  | 
|  | [ | 
|  | object, | 
|  | local, | 
|  | uuid(56a868a0-0ad4-11ce-b03a-0020af0ba770), | 
|  | pointer_default(unique) | 
|  | ] | 
|  | interface IOverlayNotify : IUnknown | 
|  | { | 
|  | HRESULT OnPaletteChange( | 
|  | [in] DWORD dwColors, | 
|  | [in] const PALETTEENTRY *pPalette); | 
|  |  | 
|  | HRESULT OnClipChange( | 
|  | [in] const RECT *pSourceRect, | 
|  | [in] const RECT *pDestinationRect, | 
|  | [in] const RGNDATA *pRgnData); | 
|  |  | 
|  | HRESULT OnColorKeyChange([in] const COLORKEY *pColorKey); | 
|  |  | 
|  | HRESULT OnPositionChange([in] const RECT *pSourceRect, | 
|  | [in] const RECT *pDestinationRect); | 
|  | } | 
|  |  | 
|  | typedef IOverlayNotify *POVERLAYNOTIFY; | 
|  |  | 
|  | cpp_quote("#if 0") | 
|  | typedef HANDLE HMONITOR; | 
|  | cpp_quote("#endif /* 0 */") | 
|  |  | 
|  | [ | 
|  | object, | 
|  | local, | 
|  | uuid(680EFA10-D535-11D1-87C8-00A0C9223196), | 
|  | pointer_default(unique) | 
|  | ] | 
|  | interface IOverlayNotify2 : IOverlayNotify | 
|  | { | 
|  | HRESULT OnDisplayChange( | 
|  | HMONITOR hMonitor); | 
|  | } | 
|  |  | 
|  | typedef IOverlayNotify2 *POVERLAYNOTIFY2; | 
|  |  | 
|  | [ | 
|  | object, | 
|  | local, | 
|  | uuid(56a868a1-0ad4-11ce-b03a-0020af0ba770), | 
|  | pointer_default(unique) | 
|  | ] | 
|  | interface IOverlay : IUnknown | 
|  | { | 
|  | HRESULT GetPalette( | 
|  | [out] DWORD *pdwColors, | 
|  | [out] PALETTEENTRY **ppPalette); | 
|  |  | 
|  | HRESULT SetPalette( | 
|  | [in] DWORD dwColors, | 
|  | [in] PALETTEENTRY *pPalette); | 
|  |  | 
|  | HRESULT GetDefaultColorKey([out] COLORKEY *pColorKey); | 
|  |  | 
|  | HRESULT GetColorKey([out] COLORKEY *pColorKey); | 
|  |  | 
|  | HRESULT SetColorKey([in,out] COLORKEY *pColorKey); | 
|  |  | 
|  | HRESULT GetWindowHandle([out] HWND *pHwnd); | 
|  |  | 
|  | HRESULT GetClipList([out] RECT *pSourceRect, | 
|  | [out] RECT *pDestinationRect, | 
|  | [out] RGNDATA **ppRgnData); | 
|  |  | 
|  | HRESULT GetVideoPosition([out] RECT *pSourceRect, | 
|  | [out] RECT *pDestinationRect); | 
|  |  | 
|  | HRESULT Advise( | 
|  | [in] IOverlayNotify *pOverlayNotify, | 
|  | [in] DWORD dwInterests); | 
|  |  | 
|  | HRESULT Unadvise(); | 
|  | } | 
|  |  | 
|  | typedef IOverlay *POVERLAY; | 
|  |  | 
|  | [ | 
|  | object, | 
|  | uuid(56a868a2-0ad4-11ce-b03a-0020af0ba770), | 
|  | pointer_default(unique) | 
|  | ] | 
|  | interface IMediaEventSink : IUnknown | 
|  | { | 
|  | HRESULT Notify( | 
|  | [in] long EventCode, | 
|  | [in] LONG_PTR EventParam1, | 
|  | [in] LONG_PTR EventParam2 | 
|  | ); | 
|  | } | 
|  |  | 
|  | typedef IMediaEventSink *PMEDIAEVENTSINK; | 
|  |  | 
|  | [ | 
|  | object, | 
|  | uuid(56a868a6-0ad4-11ce-b03a-0020af0ba770), | 
|  | pointer_default(unique) | 
|  | ] | 
|  | interface IFileSourceFilter : IUnknown | 
|  | { | 
|  | HRESULT Load( | 
|  | [in] LPCOLESTR pszFileName, | 
|  | [in, unique] const AM_MEDIA_TYPE *pmt | 
|  | ); | 
|  |  | 
|  | HRESULT GetCurFile( | 
|  | [out] LPOLESTR *ppszFileName, | 
|  | [out] AM_MEDIA_TYPE *pmt | 
|  | ); | 
|  | } | 
|  |  | 
|  | typedef IFileSourceFilter *PFILTERFILESOURCE; | 
|  |  | 
|  | [ | 
|  | object, | 
|  | uuid(a2104830-7c70-11cf-8bce-00aa00a3f1a6), | 
|  | pointer_default(unique) | 
|  | ] | 
|  | interface IFileSinkFilter : IUnknown | 
|  | { | 
|  | HRESULT SetFileName( | 
|  | [in] LPCOLESTR pszFileName, | 
|  | [in, unique] const AM_MEDIA_TYPE *pmt | 
|  | ); | 
|  |  | 
|  | HRESULT GetCurFile( | 
|  | [out] LPOLESTR *ppszFileName, | 
|  | [out] AM_MEDIA_TYPE *pmt | 
|  | ); | 
|  | } | 
|  |  | 
|  | typedef IFileSinkFilter *PFILTERFILESINK; | 
|  |  | 
|  | [ | 
|  | object, | 
|  | uuid(00855B90-CE1B-11d0-BD4F-00A0C911CE86), | 
|  | pointer_default(unique) | 
|  | ] | 
|  | interface IFileSinkFilter2 : IFileSinkFilter | 
|  | { | 
|  | HRESULT SetMode( | 
|  | [in] DWORD dwFlags | 
|  | ); | 
|  |  | 
|  | HRESULT GetMode( | 
|  | [out] DWORD *pdwFlags | 
|  | ); | 
|  | } | 
|  |  | 
|  | typedef IFileSinkFilter2 *PFILESINKFILTER2; | 
|  |  | 
|  | typedef enum | 
|  | { | 
|  | AM_FILE_OVERWRITE = 0x00000001, | 
|  | } AM_FILESINK_FLAGS; | 
|  |  | 
|  | [ | 
|  | object, | 
|  | uuid(56a868a9-0ad4-11ce-b03a-0020af0ba770), | 
|  | pointer_default(unique) | 
|  | ] | 
|  | interface IGraphBuilder : IFilterGraph | 
|  | { | 
|  | HRESULT Connect | 
|  | ( [in] IPin * ppinOut, | 
|  | [in] IPin * ppinIn | 
|  | ); | 
|  |  | 
|  | HRESULT Render | 
|  | ( [in] IPin * ppinOut | 
|  | ); | 
|  |  | 
|  | HRESULT RenderFile | 
|  | ( [in] LPCWSTR lpcwstrFile, | 
|  | [in, unique] LPCWSTR lpcwstrPlayList | 
|  | ); | 
|  |  | 
|  | HRESULT AddSourceFilter | 
|  | ( [in]      LPCWSTR lpcwstrFileName, | 
|  | [in, unique]      LPCWSTR lpcwstrFilterName, | 
|  | [out]     IBaseFilter* *ppFilter | 
|  | ); | 
|  |  | 
|  | HRESULT SetLogFile | 
|  | ( [in]      DWORD_PTR hFile | 
|  | ); | 
|  |  | 
|  | HRESULT Abort(); | 
|  |  | 
|  | HRESULT ShouldOperationContinue(); | 
|  | } | 
|  |  | 
|  |  | 
|  | [ | 
|  | object, | 
|  | uuid(bf87b6e0-8c27-11d0-b3f0-00aa003761c5), | 
|  | pointer_default(unique) | 
|  | ] | 
|  | interface ICaptureGraphBuilder : IUnknown { | 
|  |  | 
|  | HRESULT SetFiltergraph( | 
|  | [in] IGraphBuilder *pfg); | 
|  |  | 
|  | HRESULT GetFiltergraph( | 
|  | [out] IGraphBuilder **ppfg); | 
|  |  | 
|  | HRESULT SetOutputFileName( | 
|  | [in] const GUID *pType, | 
|  | [in] LPCOLESTR lpstrFile, | 
|  | [out] IBaseFilter **ppf, | 
|  | [out] IFileSinkFilter **ppSink); | 
|  |  | 
|  | [local] HRESULT FindInterface( | 
|  | [in, unique] const GUID *pCategory, | 
|  | [in] IBaseFilter *pf, | 
|  | [in] REFIID riid, | 
|  | [out] void **ppint); | 
|  |  | 
|  | [call_as(FindInterface)] HRESULT RemoteFindInterface( | 
|  | [in, unique] const GUID *pCategory, | 
|  | [in] IBaseFilter *pf, | 
|  | [in] REFIID riid, | 
|  | [out] IUnknown **ppint); | 
|  |  | 
|  | HRESULT RenderStream( | 
|  | [in] const GUID *pCategory, | 
|  | [in] IUnknown *pSource, | 
|  | [in] IBaseFilter *pfCompressor, | 
|  | [in] IBaseFilter *pfRenderer); | 
|  |  | 
|  | HRESULT ControlStream( | 
|  | [in] const GUID *pCategory, | 
|  | [in] IBaseFilter *pFilter, | 
|  | [in] REFERENCE_TIME *pstart, | 
|  | [in] REFERENCE_TIME *pstop, | 
|  | [in] WORD wStartCookie, | 
|  | [in] WORD wStopCookie); | 
|  |  | 
|  | HRESULT AllocCapFile( | 
|  | [in] LPCOLESTR lpstr, | 
|  | [in] DWORDLONG dwlSize); | 
|  |  | 
|  | HRESULT CopyCaptureFile( | 
|  | [in] LPOLESTR lpwstrOld, | 
|  | [in] LPOLESTR lpwstrNew, | 
|  | [in] int fAllowEscAbort, | 
|  | [in] IAMCopyCaptureFileProgress *pCallback); | 
|  | } | 
|  |  | 
|  | [ | 
|  | object, | 
|  | uuid(670d1d20-a068-11d0-b3f0-00aa003761c5), | 
|  | pointer_default(unique) | 
|  | ] | 
|  | interface IAMCopyCaptureFileProgress : IUnknown | 
|  | { | 
|  | HRESULT Progress( | 
|  | [in] int iProgress); | 
|  | } | 
|  |  | 
|  | [ | 
|  | object, | 
|  | uuid(93E5A4E0-2D50-11d2-ABFA-00A0C9C6E38D), | 
|  | pointer_default(unique) | 
|  | ] | 
|  | interface ICaptureGraphBuilder2 : IUnknown | 
|  | { | 
|  | HRESULT SetFiltergraph( | 
|  | [in] IGraphBuilder *pfg); | 
|  |  | 
|  | HRESULT GetFiltergraph( | 
|  | [out] IGraphBuilder **ppfg); | 
|  |  | 
|  | HRESULT SetOutputFileName( | 
|  | [in] const GUID *pType, | 
|  | [in] LPCOLESTR lpstrFile, | 
|  | [out] IBaseFilter **ppf, | 
|  | [out] IFileSinkFilter **ppSink); | 
|  |  | 
|  | [local] HRESULT FindInterface( | 
|  | [in] const GUID *pCategory, | 
|  | [in] const GUID *pType, | 
|  | [in] IBaseFilter *pf, | 
|  | [in] REFIID riid, | 
|  | [out] void **ppint); | 
|  |  | 
|  | [call_as(FindInterface)] HRESULT RemoteFindInterface( | 
|  | [in] const GUID *pCategory, | 
|  | [in] const GUID *pType, | 
|  | [in] IBaseFilter *pf, | 
|  | [in] REFIID riid, | 
|  | [out] IUnknown **ppint); | 
|  |  | 
|  | HRESULT RenderStream( | 
|  | [in] const GUID *pCategory, | 
|  | [in] const GUID *pType, | 
|  | [in] IUnknown *pSource, | 
|  | [in] IBaseFilter *pfCompressor, | 
|  | [in] IBaseFilter *pfRenderer); | 
|  |  | 
|  | HRESULT ControlStream( | 
|  | [in] const GUID *pCategory, | 
|  | [in] const GUID *pType, | 
|  | [in] IBaseFilter *pFilter, | 
|  | [in] REFERENCE_TIME *pstart, | 
|  | [in] REFERENCE_TIME *pstop, | 
|  | [in] WORD wStartCookie, | 
|  | [in] WORD wStopCookie); | 
|  |  | 
|  | HRESULT AllocCapFile( | 
|  | [in] LPCOLESTR lpstr, | 
|  | [in] DWORDLONG dwlSize); | 
|  |  | 
|  | HRESULT CopyCaptureFile( | 
|  | [in] LPOLESTR lpwstrOld, | 
|  | [in] LPOLESTR lpwstrNew, | 
|  | [in] int fAllowEscAbort, | 
|  | [in] IAMCopyCaptureFileProgress *pCallback); | 
|  |  | 
|  | HRESULT FindPin( | 
|  | [in] IUnknown *pSource, | 
|  | [in] PIN_DIRECTION pindir, | 
|  | [in] const GUID *pCategory, | 
|  | [in] const GUID *pType, | 
|  | [in] BOOL fUnconnected, | 
|  | [in] int num, | 
|  | [out] IPin **ppPin); | 
|  | } | 
|  |  | 
|  | enum _AM_RENSDEREXFLAGS | 
|  | { | 
|  | AM_RENDEREX_RENDERTOEXISTINGRENDERERS = 0x01 | 
|  | }; | 
|  |  | 
|  | [ | 
|  | object, | 
|  | uuid(36b73882-c2c8-11cf-8b46-00805f6cef60), | 
|  | pointer_default(unique) | 
|  | ] | 
|  | interface IFilterGraph2: IGraphBuilder | 
|  | { | 
|  | HRESULT AddSourceFilterForMoniker( | 
|  | [in] IMoniker *pMoniker, | 
|  | [in] IBindCtx *pCtx, | 
|  | [in, unique] LPCWSTR lpcwstrFilterName, | 
|  | [out] IBaseFilter **ppFilter | 
|  | ); | 
|  |  | 
|  | HRESULT ReconnectEx | 
|  | ( [in] IPin * ppin, | 
|  | [in, unique] const AM_MEDIA_TYPE *pmt | 
|  | ); | 
|  |  | 
|  | HRESULT RenderEx( [in] IPin *pPinOut, | 
|  | [in] DWORD dwFlags, | 
|  | [in, out] DWORD *pvContext | 
|  | ); | 
|  | } | 
|  |  | 
|  | [ | 
|  | object, | 
|  | local, | 
|  | uuid(56a868bf-0ad4-11ce-b03a-0020af0ba770), | 
|  | pointer_default(unique) | 
|  | ] | 
|  | interface IStreamBuilder : IUnknown | 
|  | { | 
|  | HRESULT Render | 
|  | ( [in] IPin * ppinOut, | 
|  | [in] IGraphBuilder * pGraph | 
|  | ); | 
|  |  | 
|  | HRESULT Backout | 
|  | ( [in] IPin * ppinOut, | 
|  | [in] IGraphBuilder * pGraph | 
|  | ); | 
|  | } | 
|  |  | 
|  |  | 
|  | [ | 
|  | object, | 
|  | uuid(56a868aa-0ad4-11ce-b03a-0020af0ba770), | 
|  | pointer_default(unique) | 
|  | ] | 
|  | interface IAsyncReader : IUnknown | 
|  | { | 
|  | HRESULT RequestAllocator( | 
|  | [in]  IMemAllocator* pPreferred, | 
|  | [in]  ALLOCATOR_PROPERTIES* pProps, | 
|  | [out] IMemAllocator ** ppActual); | 
|  |  | 
|  | HRESULT Request( | 
|  | [in] IMediaSample* pSample, | 
|  | [in] DWORD_PTR dwUser); | 
|  |  | 
|  | HRESULT WaitForNext( | 
|  | [in]  DWORD dwTimeout, | 
|  | [out] IMediaSample** ppSample, | 
|  | [out] DWORD_PTR * pdwUser); | 
|  |  | 
|  | HRESULT SyncReadAligned( | 
|  | [in] IMediaSample* pSample); | 
|  |  | 
|  | HRESULT SyncRead( | 
|  | [in]  LONGLONG llPosition, | 
|  | [in]  LONG lLength, | 
|  | [out, size_is(lLength)] | 
|  | BYTE* pBuffer); | 
|  |  | 
|  | HRESULT Length( | 
|  | [out] LONGLONG* pTotal, | 
|  | [out] LONGLONG* pAvailable); | 
|  |  | 
|  | HRESULT BeginFlush(void); | 
|  |  | 
|  | HRESULT EndFlush(void); | 
|  | } | 
|  |  | 
|  |  | 
|  | [ | 
|  | object, | 
|  | uuid(56a868ab-0ad4-11ce-b03a-0020af0ba770), | 
|  | pointer_default(unique) | 
|  | ] | 
|  | interface IGraphVersion : IUnknown | 
|  | { | 
|  | HRESULT QueryVersion(LONG* pVersion); | 
|  | } | 
|  |  | 
|  | [ | 
|  | object, | 
|  | uuid(56a868ad-0ad4-11ce-b03a-0020af0ba770), | 
|  | pointer_default(unique) | 
|  | ] | 
|  | interface IResourceConsumer : IUnknown | 
|  | { | 
|  | HRESULT AcquireResource( | 
|  | [in] LONG idResource); | 
|  |  | 
|  | HRESULT ReleaseResource( | 
|  | [in] LONG idResource); | 
|  | } | 
|  |  | 
|  |  | 
|  | [ | 
|  | object, | 
|  | uuid(56a868ac-0ad4-11ce-b03a-0020af0ba770), | 
|  | pointer_default(unique) | 
|  | ] | 
|  | interface IResourceManager : IUnknown | 
|  | { | 
|  | HRESULT Register( | 
|  | [in] LPCWSTR pName, | 
|  | [in] LONG   cResource, | 
|  | [out] LONG* plToken | 
|  | ); | 
|  |  | 
|  | HRESULT RegisterGroup( | 
|  | [in] LPCWSTR pName, | 
|  | [in] LONG cResource, | 
|  | [in, size_is(cResource)] | 
|  | LONG* palTokens, | 
|  | [out] LONG* plToken | 
|  | ); | 
|  |  | 
|  | HRESULT RequestResource( | 
|  | [in] LONG idResource, | 
|  | [in] IUnknown* pFocusObject, | 
|  | [in] IResourceConsumer* pConsumer | 
|  | ); | 
|  |  | 
|  | HRESULT NotifyAcquire( | 
|  | [in] LONG idResource, | 
|  | [in] IResourceConsumer* pConsumer, | 
|  | [in] HRESULT hr); | 
|  |  | 
|  | HRESULT NotifyRelease( | 
|  | [in] LONG idResource, | 
|  | [in] IResourceConsumer* pConsumer, | 
|  | [in] BOOL bStillWant); | 
|  |  | 
|  | HRESULT CancelRequest( | 
|  | [in] LONG idResource, | 
|  | [in] IResourceConsumer* pConsumer); | 
|  |  | 
|  | HRESULT SetFocus( | 
|  | [in] IUnknown* pFocusObject); | 
|  |  | 
|  | HRESULT ReleaseFocus( | 
|  | [in] IUnknown* pFocusObject); | 
|  |  | 
|  | } | 
|  |  | 
|  | cpp_quote("#ifndef _IKsPropertySet_") | 
|  | cpp_quote("#define _IKsPropertySet_") | 
|  | cpp_quote("#define KSPROPERTY_SUPPORT_GET  1") | 
|  | cpp_quote("#define KSPROPERTY_SUPPORT_SET  2") | 
|  |  | 
|  | [ | 
|  | object, | 
|  | uuid(31efac30-515c-11d0-a9aa-00aa0061be93), | 
|  | pointer_default(unique) | 
|  | ] | 
|  | interface IKsPropertySet : IUnknown | 
|  | { | 
|  | HRESULT Set( [in] REFGUID guidPropSet, | 
|  | [in] DWORD dwPropID, | 
|  | [in, size_is(cbInstanceData)] LPVOID pInstanceData, | 
|  | [in] DWORD cbInstanceData, | 
|  | [in, size_is(cbPropData)] LPVOID pPropData, | 
|  | [in] DWORD cbPropData ); | 
|  |  | 
|  | HRESULT Get( [in] REFGUID guidPropSet, | 
|  | [in] DWORD dwPropID, | 
|  | [in, size_is(cbInstanceData)] LPVOID pInstanceData, | 
|  | [in] DWORD cbInstanceData, | 
|  | [out, size_is(cbPropData)] LPVOID pPropData, | 
|  | [in] DWORD cbPropData, | 
|  | [out] DWORD *pcbReturned ); | 
|  |  | 
|  | HRESULT QuerySupported( [in] REFGUID guidPropSet, | 
|  | [in] DWORD dwPropID, | 
|  | [out] DWORD *pTypeSupport); | 
|  | } | 
|  | cpp_quote("#endif /* _IKsPropertySet_ */") |