2 * Copyright (C) 2002 Robert Shearman
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 interface IAMAnalogVideoDecoder;
20 interface IAMAnalogVideoEncoder;
21 interface IAMAudioInputMixer;
22 interface IAMAudioRendererStats;
23 interface IAMBufferNegotiation;
24 interface IAMCameraControl;
25 interface IAMCopyCaptureFileProgress;
26 interface IAMCrossbar;
27 interface IAMDevMemoryAllocator;
28 interface IAMDevMemoryControl;
29 interface IAMDroppedFrames;
30 interface IAMExtDevice;
31 interface IAMExtTransport;
32 interface IAMGraphStreams;
34 interface IAMOpenProgress;
35 interface IAMOverlayFX;
36 interface IAMPhysicalPinInfo;
37 interface IAMPushSource;
38 interface IAMStreamConfig;
39 interface IAMTimecodeDisplay;
40 interface IAMTimecodeGenerator;
41 interface IAMTimecodeReader;
43 interface IAMVfwCaptureDialogs;
44 interface IAMVfwCompressDialogs;
45 interface IAMVideoCompression;
46 interface IAMVideoDecimationProperties;
47 interface IAMVideoProcAmp;
48 interface ICaptureGraphBuilder;
49 interface ICaptureGraphBuilder2;
50 interface IConfigAviMux;
51 interface IConfigInterleaving;
52 interface IDecimateVideoImage;
53 interface IDrawVideoImage;
54 interface IEnumRegFilters;
55 interface IEnumStreamIdMap;
56 interface IFileSourceFilter;
57 interface IFileSinkFilter;
58 interface IFileSinkFilter2;
59 interface IFilterMapper;
60 interface IFilterMapper2;
61 interface IGraphBuilder;
62 interface IKsPropertySet;
63 interface IMediaEventSink;
64 interface IMpeg2Demultiplexer;
65 interface IMPEG2StreamIdMap;
67 interface IOverlayNotify;
68 interface IOverlayNotify2;
69 interface IQualityControl;
70 interface ISeekingPassThru;
80 uuid(56a868a4-0ad4-11ce-b03a-0020af0ba770),
81 pointer_default(unique)
83 interface IEnumRegFilters : IUnknown
86 ( [in] ULONG cFilters,
87 [out] REGFILTER ** apRegFilter,
88 [out] ULONG * pcFetched
98 [out] IEnumRegFilters **ppEnum
103 typedef IEnumRegFilters *PENUMREGFILTERS;
107 uuid(56a868a3-0ad4-11ce-b03a-0020af0ba770),
108 pointer_default(unique)
110 interface IFilterMapper : IUnknown
112 enum { MERIT_PREFERRED = 0x800000,
113 MERIT_NORMAL = 0x600000,
114 MERIT_UNLIKELY = 0x400000,
115 MERIT_DO_NOT_USE = 0x200000,
116 MERIT_SW_COMPRESSOR = 0x100000,
117 MERIT_HW_COMPRESSOR = 0x100050
120 HRESULT RegisterFilter
126 HRESULT RegisterFilterInstance
140 [in] CLSID ConnectsToFilter,
141 [in] LPCWSTR ConnectsToPin
144 HRESULT RegisterPinType
145 ( [in] CLSID clsFilter,
146 [in] LPCWSTR strName,
147 [in] CLSID clsMajorType,
148 [in] CLSID clsSubType
152 HRESULT UnregisterFilter
157 HRESULT UnregisterFilterInstance
162 HRESULT UnregisterPin
167 HRESULT EnumMatchingFilters
168 ( [out] IEnumRegFilters **ppEnum,
170 [in] BOOL bInputNeeded,
174 [in] BOOL bOututNeeded,
175 [in] CLSID clsOutMaj,
183 const CLSID * clsMajorType;
184 const CLSID * clsMinorType;
194 const CLSID * clsConnectsToFilter;
195 const WCHAR * strConnectsToPin;
197 const REGPINTYPES * lpMediaType;
209 REG_PINFLAG_B_ZERO = 0x1,
210 REG_PINFLAG_B_RENDERER = 0x2,
211 REG_PINFLAG_B_MANY = 0x4,
212 REG_PINFLAG_B_OUTPUT = 0x8
221 [size_is(nMediaTypes)] const REGPINTYPES * lpMediaType;
223 [size_is(nMediums)] const REGPINMEDIUM *lpMedium;
224 const CLSID *clsPinCategory;
231 [switch_is(dwVersion)] [switch_type(DWORD)] union
237 [size_is(cPins)] const REGFILTERPINS *rgPins;
244 [size_is(cPins2)] const REGFILTERPINS2 *rgPins2;
256 uuid(b79bb0b0-33c1-11d1-abe1-00a0c905f375),
257 pointer_default(unique)
259 interface IFilterMapper2 : IUnknown
261 HRESULT CreateCategory
262 ( [in] REFCLSID clsidCategory,
263 [in] DWORD dwCategoryMerit,
264 [in] LPCWSTR Description
267 HRESULT UnregisterFilter
268 ( [in] const CLSID *pclsidCategory,
269 [in] LPCOLESTR szInstance,
273 HRESULT RegisterFilter
274 ( [in] REFCLSID clsidFilter,
276 [in, out] IMoniker **ppMoniker,
277 [in] const CLSID *pclsidCategory,
278 [in] LPCOLESTR szInstance,
279 [in] const REGFILTER2 *prf2
282 HRESULT EnumMatchingFilters
283 ( [out] IEnumMoniker **ppEnum,
285 [in] BOOL bExactMatch,
287 [in] BOOL bInputNeeded,
288 [in] DWORD cInputTypes,
289 [size_is(cInputTypes*2)] const GUID *pInputTypes,
290 [in] const REGPINMEDIUM *pMedIn,
291 [in] const CLSID *pPinCategoryIn,
293 [in] BOOL bOutputNeeded,
294 [in] DWORD cOutputTypes,
295 [size_is(cOutputTypes*2)] const GUID *pOutputTypes,
296 [in] const REGPINMEDIUM *pMedOut,
297 [in] const CLSID *pPinCategoryOut
303 uuid(b79bb0b1-33c1-11d1-abe1-00a0c905f375),
304 pointer_default(unique)
306 interface IFilterMapper3 : IFilterMapper2
308 HRESULT GetICreateDevEnum( [out] ICreateDevEnum **ppEnum );
311 typedef enum tagQualityMessageType
315 } QualityMessageType;
317 typedef struct tagQuality
319 QualityMessageType Type;
322 REFERENCE_TIME TimeStamp;
325 typedef IQualityControl *PQUALITYCONTROL;
329 uuid(56a868a5-0ad4-11ce-b03a-0020af0ba770),
330 pointer_default(unique)
332 interface IQualityControl : IUnknown
335 ( [in] IBaseFilter * pSelf,
340 ( [in] IQualityControl * piqc
351 typedef struct tagCOLORKEY
355 COLORREF LowColorValue;
356 COLORREF HighColorValue;
362 ADVISE_CLIPPING = 0x1,
363 ADVISE_PALETTE = 0x2,
364 ADVISE_COLORKEY = 0x4,
365 ADVISE_POSITION = 0x8,
366 ADVISE_DISPLAY_CHANGE = 0x10
369 const DWORD ADVISE_ALL = ADVISE_CLIPPING |
374 const DWORD ADVISE_ALL2 = ADVISE_ALL |
375 ADVISE_DISPLAY_CHANGE;
377 cpp_quote("#ifndef _WINGDI_")
379 /* already defined in wingdi.h, but needed for WIDL */
381 typedef struct _RGNDATAHEADER
390 typedef struct _RGNDATA
396 cpp_quote("#endif /* _WINGDI_ */")
401 uuid(56a868a0-0ad4-11ce-b03a-0020af0ba770),
402 pointer_default(unique)
404 interface IOverlayNotify : IUnknown
406 HRESULT OnPaletteChange(
408 [in] const PALETTEENTRY *pPalette);
410 HRESULT OnClipChange(
411 [in] const RECT *pSourceRect,
412 [in] const RECT *pDestinationRect,
413 [in] const RGNDATA *pRgnData);
415 HRESULT OnColorKeyChange([in] const COLORKEY *pColorKey);
417 HRESULT OnPositionChange([in] const RECT *pSourceRect,
418 [in] const RECT *pDestinationRect);
421 typedef IOverlayNotify *POVERLAYNOTIFY;
426 uuid(680EFA10-D535-11D1-87C8-00A0C9223196),
427 pointer_default(unique)
429 interface IOverlayNotify2 : IOverlayNotify
431 HRESULT OnDisplayChange(
435 typedef IOverlayNotify2 *POVERLAYNOTIFY2;
440 uuid(56a868a1-0ad4-11ce-b03a-0020af0ba770),
441 pointer_default(unique)
443 interface IOverlay : IUnknown
446 [out] DWORD *pdwColors,
447 [out] PALETTEENTRY **ppPalette);
451 [in] PALETTEENTRY *pPalette);
453 HRESULT GetDefaultColorKey([out] COLORKEY *pColorKey);
455 HRESULT GetColorKey([out] COLORKEY *pColorKey);
457 HRESULT SetColorKey([in,out] COLORKEY *pColorKey);
459 HRESULT GetWindowHandle([out] HWND *pHwnd);
461 HRESULT GetClipList([out] RECT *pSourceRect,
462 [out] RECT *pDestinationRect,
463 [out] RGNDATA **ppRgnData);
465 HRESULT GetVideoPosition([out] RECT *pSourceRect,
466 [out] RECT *pDestinationRect);
469 [in] IOverlayNotify *pOverlayNotify,
470 [in] DWORD dwInterests);
475 typedef IOverlay *POVERLAY;
479 uuid(56a868a2-0ad4-11ce-b03a-0020af0ba770),
480 pointer_default(unique)
482 interface IMediaEventSink : IUnknown
486 [in] LONG_PTR EventParam1,
487 [in] LONG_PTR EventParam2
491 typedef IMediaEventSink *PMEDIAEVENTSINK;
495 uuid(56a868a6-0ad4-11ce-b03a-0020af0ba770),
496 pointer_default(unique)
498 interface IFileSourceFilter : IUnknown
501 [in] LPCOLESTR pszFileName,
502 [in, unique] const AM_MEDIA_TYPE *pmt
506 [out] LPOLESTR *ppszFileName,
507 [out] AM_MEDIA_TYPE *pmt
511 typedef IFileSourceFilter *PFILTERFILESOURCE;
515 uuid(a2104830-7c70-11cf-8bce-00aa00a3f1a6),
516 pointer_default(unique)
518 interface IFileSinkFilter : IUnknown
521 [in] LPCOLESTR pszFileName,
522 [in, unique] const AM_MEDIA_TYPE *pmt
526 [out] LPOLESTR *ppszFileName,
527 [out] AM_MEDIA_TYPE *pmt
531 typedef IFileSinkFilter *PFILTERFILESINK;
535 uuid(00855B90-CE1B-11d0-BD4F-00A0C911CE86),
536 pointer_default(unique)
538 interface IFileSinkFilter2 : IFileSinkFilter
545 [out] DWORD *pdwFlags
549 typedef IFileSinkFilter2 *PFILESINKFILTER2;
553 AM_FILE_OVERWRITE = 0x00000001,
558 uuid(56a868a9-0ad4-11ce-b03a-0020af0ba770),
559 pointer_default(unique)
561 interface IGraphBuilder : IFilterGraph
564 ( [in] IPin * ppinOut,
569 ( [in] IPin * ppinOut
573 ( [in] LPCWSTR lpcwstrFile,
574 [in, unique] LPCWSTR lpcwstrPlayList
577 HRESULT AddSourceFilter
578 ( [in] LPCWSTR lpcwstrFileName,
579 [in, unique] LPCWSTR lpcwstrFilterName,
580 [out] IBaseFilter* *ppFilter
584 ( [in] DWORD_PTR hFile
589 HRESULT ShouldOperationContinue();
595 uuid(bf87b6e0-8c27-11d0-b3f0-00aa003761c5),
596 pointer_default(unique)
598 interface ICaptureGraphBuilder : IUnknown {
600 HRESULT SetFiltergraph(
601 [in] IGraphBuilder *pfg);
603 HRESULT GetFiltergraph(
604 [out] IGraphBuilder **ppfg);
606 HRESULT SetOutputFileName(
607 [in] const GUID *pType,
608 [in] LPCOLESTR lpstrFile,
609 [out] IBaseFilter **ppf,
610 [out] IFileSinkFilter **ppSink);
612 [local] HRESULT FindInterface(
613 [in, unique] const GUID *pCategory,
614 [in] IBaseFilter *pf,
618 [call_as(FindInterface)] HRESULT RemoteFindInterface(
619 [in, unique] const GUID *pCategory,
620 [in] IBaseFilter *pf,
622 [out] IUnknown **ppint);
624 HRESULT RenderStream(
625 [in] const GUID *pCategory,
626 [in] IUnknown *pSource,
627 [in] IBaseFilter *pfCompressor,
628 [in] IBaseFilter *pfRenderer);
630 HRESULT ControlStream(
631 [in] const GUID *pCategory,
632 [in] IBaseFilter *pFilter,
633 [in] REFERENCE_TIME *pstart,
634 [in] REFERENCE_TIME *pstop,
635 [in] WORD wStartCookie,
636 [in] WORD wStopCookie);
638 HRESULT AllocCapFile(
639 [in] LPCOLESTR lpstr,
640 [in] DWORDLONG dwlSize);
642 HRESULT CopyCaptureFile(
643 [in] LPOLESTR lpwstrOld,
644 [in] LPOLESTR lpwstrNew,
645 [in] int fAllowEscAbort,
646 [in] IAMCopyCaptureFileProgress *pCallback);
651 uuid(670d1d20-a068-11d0-b3f0-00aa003761c5),
652 pointer_default(unique)
654 interface IAMCopyCaptureFileProgress : IUnknown
662 uuid(93E5A4E0-2D50-11d2-ABFA-00A0C9C6E38D),
663 pointer_default(unique)
665 interface ICaptureGraphBuilder2 : IUnknown
667 HRESULT SetFiltergraph(
668 [in] IGraphBuilder *pfg);
670 HRESULT GetFiltergraph(
671 [out] IGraphBuilder **ppfg);
673 HRESULT SetOutputFileName(
674 [in] const GUID *pType,
675 [in] LPCOLESTR lpstrFile,
676 [out] IBaseFilter **ppf,
677 [out] IFileSinkFilter **ppSink);
679 [local] HRESULT FindInterface(
680 [in] const GUID *pCategory,
681 [in] const GUID *pType,
682 [in] IBaseFilter *pf,
686 [call_as(FindInterface)] HRESULT RemoteFindInterface(
687 [in] const GUID *pCategory,
688 [in] const GUID *pType,
689 [in] IBaseFilter *pf,
691 [out] IUnknown **ppint);
693 HRESULT RenderStream(
694 [in] const GUID *pCategory,
695 [in] const GUID *pType,
696 [in] IUnknown *pSource,
697 [in] IBaseFilter *pfCompressor,
698 [in] IBaseFilter *pfRenderer);
700 HRESULT ControlStream(
701 [in] const GUID *pCategory,
702 [in] const GUID *pType,
703 [in] IBaseFilter *pFilter,
704 [in] REFERENCE_TIME *pstart,
705 [in] REFERENCE_TIME *pstop,
706 [in] WORD wStartCookie,
707 [in] WORD wStopCookie);
709 HRESULT AllocCapFile(
710 [in] LPCOLESTR lpstr,
711 [in] DWORDLONG dwlSize);
713 HRESULT CopyCaptureFile(
714 [in] LPOLESTR lpwstrOld,
715 [in] LPOLESTR lpwstrNew,
716 [in] int fAllowEscAbort,
717 [in] IAMCopyCaptureFileProgress *pCallback);
720 [in] IUnknown *pSource,
721 [in] PIN_DIRECTION pindir,
722 [in] const GUID *pCategory,
723 [in] const GUID *pType,
724 [in] BOOL fUnconnected,
729 enum _AM_RENSDEREXFLAGS
731 AM_RENDEREX_RENDERTOEXISTINGRENDERERS = 0x01
736 uuid(36b73882-c2c8-11cf-8b46-00805f6cef60),
737 pointer_default(unique)
739 interface IFilterGraph2: IGraphBuilder
741 HRESULT AddSourceFilterForMoniker(
742 [in] IMoniker *pMoniker,
744 [in, unique] LPCWSTR lpcwstrFilterName,
745 [out] IBaseFilter **ppFilter
750 [in, unique] const AM_MEDIA_TYPE *pmt
753 HRESULT RenderEx( [in] IPin *pPinOut,
755 [in, out] DWORD *pvContext
762 uuid(56a868bf-0ad4-11ce-b03a-0020af0ba770),
763 pointer_default(unique)
765 interface IStreamBuilder : IUnknown
768 ( [in] IPin * ppinOut,
769 [in] IGraphBuilder * pGraph
773 ( [in] IPin * ppinOut,
774 [in] IGraphBuilder * pGraph
779 /*****************************************************************************
780 * IAMStreamConfig interface
784 uuid(c6e13340-30ac-11d0-a18c-00a0c9118956),
785 pointer_default(unique)
787 interface IAMStreamConfig : IUnknown
789 HRESULT SetFormat( [in] AM_MEDIA_TYPE *pmt);
790 HRESULT GetFormat( [in] AM_MEDIA_TYPE **pmt);
791 HRESULT GetNumberOfCapabilities( [out] int *piCount, [out] int *piSize);
792 HRESULT GetStreamCaps( [in] int iIndex, [out] AM_MEDIA_TYPE **pmt,
797 typedef enum tagVideoProcAmpProperty
799 VideoProcAmp_Brightness,
800 VideoProcAmp_Contrast,
802 VideoProcAmp_Saturation,
803 VideoProcAmp_Sharpness,
805 VideoProcAmp_ColorEnable,
806 VideoProcAmp_WhiteBalance,
807 VideoProcAmp_BacklightCompensation,
809 } VideoProcAmpProperty;
811 typedef enum tagVideoProcAmpFlags
813 VideoProcAmp_Flags_Auto = 0x0001,
814 VideoProcAmp_Flags_Manual = 0x0002,
817 /*****************************************************************************
818 * IAMVideoProcAmp interface
822 uuid(c6e13360-30ac-11d0-a18c-00a0c9118956),
823 pointer_default(unique)
825 interface IAMVideoProcAmp : IUnknown
827 HRESULT GetRange( [in] LONG Property, [out] LONG *pMin, [out] LONG *pMax,
828 [out] LONG *pSteppingDelta, [out] LONG *pDefault,
829 [out] LONG *pCapsFlags);
830 HRESULT Set( [in] LONG Property, [in] LONG lValue, [in] LONG Flags);
831 HRESULT Get( [in] LONG Property, [out] LONG *lValue, [out] LONG *Flags);
837 uuid(56a868aa-0ad4-11ce-b03a-0020af0ba770),
838 pointer_default(unique)
840 interface IAsyncReader : IUnknown
842 HRESULT RequestAllocator(
843 [in] IMemAllocator* pPreferred,
844 [in] ALLOCATOR_PROPERTIES* pProps,
845 [out] IMemAllocator ** ppActual);
848 [in] IMediaSample* pSample,
849 [in] DWORD_PTR dwUser);
852 [in] DWORD dwTimeout,
853 [out] IMediaSample** ppSample,
854 [out] DWORD_PTR * pdwUser);
856 HRESULT SyncReadAligned(
857 [in] IMediaSample* pSample);
860 [in] LONGLONG llPosition,
862 [out, size_is(lLength)]
866 [out] LONGLONG* pTotal,
867 [out] LONGLONG* pAvailable);
869 HRESULT BeginFlush(void);
871 HRESULT EndFlush(void);
877 uuid(56a868ab-0ad4-11ce-b03a-0020af0ba770),
878 pointer_default(unique)
880 interface IGraphVersion : IUnknown
882 HRESULT QueryVersion(LONG* pVersion);
887 uuid(56a868ad-0ad4-11ce-b03a-0020af0ba770),
888 pointer_default(unique)
890 interface IResourceConsumer : IUnknown
892 HRESULT AcquireResource(
893 [in] LONG idResource);
895 HRESULT ReleaseResource(
896 [in] LONG idResource);
902 uuid(56a868ac-0ad4-11ce-b03a-0020af0ba770),
903 pointer_default(unique)
905 interface IResourceManager : IUnknown
913 HRESULT RegisterGroup(
916 [in, size_is(cResource)]
921 HRESULT RequestResource(
922 [in] LONG idResource,
923 [in] IUnknown* pFocusObject,
924 [in] IResourceConsumer* pConsumer
927 HRESULT NotifyAcquire(
928 [in] LONG idResource,
929 [in] IResourceConsumer* pConsumer,
932 HRESULT NotifyRelease(
933 [in] LONG idResource,
934 [in] IResourceConsumer* pConsumer,
935 [in] BOOL bStillWant);
937 HRESULT CancelRequest(
938 [in] LONG idResource,
939 [in] IResourceConsumer* pConsumer);
942 [in] IUnknown* pFocusObject);
944 HRESULT ReleaseFocus(
945 [in] IUnknown* pFocusObject);
949 cpp_quote("#ifndef _IKsPropertySet_")
950 cpp_quote("#define _IKsPropertySet_")
951 cpp_quote("#define KSPROPERTY_SUPPORT_GET 1")
952 cpp_quote("#define KSPROPERTY_SUPPORT_SET 2")
956 uuid(31efac30-515c-11d0-a9aa-00aa0061be93),
957 pointer_default(unique),
960 interface IKsPropertySet : IUnknown
962 HRESULT Set( [in] REFGUID guidPropSet,
964 [in, size_is(cbInstanceData)] LPVOID pInstanceData,
965 [in] DWORD cbInstanceData,
966 [in, size_is(cbPropData)] LPVOID pPropData,
967 [in] DWORD cbPropData );
969 HRESULT Get( [in] REFGUID guidPropSet,
971 [in, size_is(cbInstanceData)] LPVOID pInstanceData,
972 [in] DWORD cbInstanceData,
973 [out, size_is(cbPropData)] LPVOID pPropData,
974 [in] DWORD cbPropData,
975 [out] DWORD *pcbReturned );
977 HRESULT QuerySupported( [in] REFGUID guidPropSet,
979 [out] DWORD *pTypeSupport);
981 cpp_quote("#endif /* _IKsPropertySet_ */")
985 uuid(36b73883-c2c8-11cf-8b46-00805f6cef60),
986 pointer_default(unique)
988 interface ISeekingPassThru : IUnknown
990 HRESULT Init( [in] BOOL bSupportRendering, [in] IPin *pPin);
993 enum _AM_FILTER_MISC_FLAGS
995 AM_FILTER_MISC_FLAGS_IS_RENDERER = 0x1,
996 AM_FILTER_MISC_FLAGS_IS_SOURCE = 0x2
1002 uuid(2dd74950-a890-11d1-abe8-00a0c905f375),
1003 pointer_default(unique)
1005 interface IAMFilterMiscFlags : IUnknown
1007 ULONG GetMiscFlags();