xref: /reactos/sdk/include/dxsdk/axextend.idl (revision 139a3d66)
1/*
2 * Copyright (C) 2002 Robert Shearman
3 *
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.
8 *
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.
13 *
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
17 */
18
19#if 0
20#pragma makedep install
21#endif
22
23interface IAMAnalogVideoDecoder;
24interface IAMAnalogVideoEncoder;
25interface IAMAudioInputMixer;
26interface IAMAudioRendererStats;
27interface IAMBufferNegotiation;
28interface IAMCameraControl;
29interface IAMCertifiedOutputProtection;
30interface IAMClockSlave;
31interface IAMCopyCaptureFileProgress;
32interface IAMCrossbar;
33interface IAMDevMemoryAllocator;
34interface IAMDevMemoryControl;
35interface IAMDroppedFrames;
36interface IAMExtDevice;
37interface IAMExtTransport;
38interface IAMGraphStreams;
39interface IAMLatency;
40interface IAMOpenProgress;
41interface IAMOverlayFX;
42interface IAMPhysicalPinInfo;
43interface IAMPushSource;
44interface IAMStreamConfig;
45interface IAMTimecodeDisplay;
46interface IAMTimecodeGenerator;
47interface IAMTimecodeReader;
48interface IAMTVTuner;
49interface IAMVfwCaptureDialogs;
50interface IAMVfwCompressDialogs;
51interface IAMVideoCompression;
52interface IAMVideoDecimationProperties;
53interface IAMVideoProcAmp;
54interface IAMGraphBuilderCallback;
55interface ICaptureGraphBuilder;
56interface ICaptureGraphBuilder2;
57interface IConfigAviMux;
58interface IConfigInterleaving;
59interface IDecimateVideoImage;
60interface IDrawVideoImage;
61interface IEnumRegFilters;
62interface IEnumStreamIdMap;
63interface IFileSourceFilter;
64interface IFileSinkFilter;
65interface IFileSinkFilter2;
66interface IFilterMapper;
67interface IFilterMapper2;
68interface IGraphBuilder;
69interface IKsPropertySet;
70interface IMediaEventSink;
71interface IMpeg2Demultiplexer;
72interface IMPEG2StreamIdMap;
73interface IOverlay;
74interface IOverlayNotify;
75interface IOverlayNotify2;
76interface IQualityControl;
77interface ISeekingPassThru;
78
79typedef struct
80{
81    CLSID Clsid;
82    LPWSTR Name;
83} REGFILTER;
84
85[
86object,
87uuid(56a868a4-0ad4-11ce-b03a-0020af0ba770),
88pointer_default(unique)
89]
90interface IEnumRegFilters : IUnknown
91{
92    HRESULT Next
93        ( [in]  ULONG cFilters,
94          [out] REGFILTER ** apRegFilter,
95          [out] ULONG * pcFetched
96        );
97
98    HRESULT Skip(
99        [in] ULONG cFilters
100    );
101
102    HRESULT Reset(void);
103
104    HRESULT Clone(
105        [out] IEnumRegFilters **ppEnum
106    );
107}
108
109
110typedef IEnumRegFilters *PENUMREGFILTERS;
111
112[
113object,
114uuid(56a868a3-0ad4-11ce-b03a-0020af0ba770),
115pointer_default(unique)
116]
117interface IFilterMapper : IUnknown
118{
119    enum { MERIT_PREFERRED     = 0x800000,
120           MERIT_NORMAL        = 0x600000,
121           MERIT_UNLIKELY      = 0x400000,
122           MERIT_DO_NOT_USE    = 0x200000,
123           MERIT_SW_COMPRESSOR = 0x100000,
124           MERIT_HW_COMPRESSOR = 0x100050
125         };
126
127    HRESULT RegisterFilter
128        ( [in] CLSID   clsid,
129          [in] LPCWSTR Name,
130          [in] DWORD   dwMerit
131        );
132
133    HRESULT RegisterFilterInstance
134        ( [in]  CLSID  clsid,
135          [in]  LPCWSTR Name,
136          [out] CLSID *MRId
137        );
138
139
140    HRESULT RegisterPin
141        ( [in] CLSID   Filter,
142          [in] LPCWSTR Name,
143          [in] BOOL    bRendered,
144          [in] BOOL    bOutput,
145          [in] BOOL    bZero,
146          [in] BOOL    bMany,
147          [in] CLSID   ConnectsToFilter,
148          [in] LPCWSTR ConnectsToPin
149        );
150
151    HRESULT RegisterPinType
152        ( [in] CLSID   clsFilter,
153          [in] LPCWSTR strName,
154          [in] CLSID   clsMajorType,
155          [in] CLSID   clsSubType
156        );
157
158
159    HRESULT UnregisterFilter
160        ( [in] CLSID  Filter
161        );
162
163
164    HRESULT UnregisterFilterInstance
165        ( [in] CLSID  MRId
166        );
167
168
169    HRESULT UnregisterPin
170        ( [in] CLSID   Filter,
171          [in] LPCWSTR Name
172        );
173
174    HRESULT EnumMatchingFilters
175       ( [out] IEnumRegFilters **ppEnum,
176         [in]  DWORD dwMerit,
177         [in]  BOOL  bInputNeeded,
178         [in]  CLSID clsInMaj,
179         [in]  CLSID clsInSub,
180         [in]  BOOL  bRender,
181         [in]  BOOL  bOutputNeeded,
182         [in]  CLSID clsOutMaj,
183         [in]  CLSID clsOutSub
184       );
185
186}
187
188typedef struct
189{
190    const CLSID * clsMajorType;
191    const CLSID * clsMinorType;
192} REGPINTYPES;
193
194typedef struct
195{
196    LPWSTR           strName;
197    BOOL             bRendered;
198    BOOL             bOutput;
199    BOOL             bZero;
200    BOOL             bMany;
201    const CLSID *    clsConnectsToFilter;
202    const WCHAR *    strConnectsToPin;
203    UINT             nMediaTypes;
204    const REGPINTYPES * lpMediaType;
205} REGFILTERPINS;
206
207typedef struct
208{
209    CLSID clsMedium;
210    DWORD dw1;
211    DWORD dw2;
212} REGPINMEDIUM;
213
214enum
215{
216    REG_PINFLAG_B_ZERO = 0x1,
217    REG_PINFLAG_B_RENDERER = 0x2,
218    REG_PINFLAG_B_MANY = 0x4,
219    REG_PINFLAG_B_OUTPUT = 0x8
220};
221
222
223typedef struct
224{
225    DWORD dwFlags;
226    UINT             cInstances;
227    UINT             nMediaTypes;
228    [size_is(nMediaTypes)] const REGPINTYPES * lpMediaType;
229    UINT             nMediums;
230    [size_is(nMediums)] const REGPINMEDIUM *lpMedium;
231    const CLSID      *clsPinCategory;
232} REGFILTERPINS2;
233
234typedef struct
235{
236    DWORD dwVersion;
237    DWORD dwMerit;
238    [switch_is(dwVersion)] [switch_type(DWORD)] union
239    {
240        [case(1)]
241            struct
242            {
243                ULONG cPins;
244                [size_is(cPins)] const REGFILTERPINS *rgPins;
245            } DUMMYSTRUCTNAME1;
246
247        [case(2)]
248            struct
249            {
250                ULONG cPins2;
251                [size_is(cPins2)] const REGFILTERPINS2 *rgPins2;
252            } DUMMYSTRUCTNAME2;
253
254        [default]
255            ;
256    } DUMMYUNIONNAME;
257
258} REGFILTER2;
259
260
261[
262object,
263uuid(b79bb0b0-33c1-11d1-abe1-00a0c905f375),
264pointer_default(unique)
265]
266interface IFilterMapper2 : IUnknown
267{
268    HRESULT CreateCategory
269        ( [in] REFCLSID clsidCategory,
270          [in] DWORD dwCategoryMerit,
271          [in] LPCWSTR Description
272          );
273
274    HRESULT UnregisterFilter
275        ( [in] const CLSID *pclsidCategory,
276          [in] LPCOLESTR szInstance,
277          [in] REFCLSID Filter
278        );
279
280    HRESULT RegisterFilter
281        ( [in] REFCLSID clsidFilter,
282          [in] LPCWSTR Name,
283          [in, out] IMoniker **ppMoniker,
284          [in] const CLSID *pclsidCategory,
285          [in] LPCOLESTR szInstance,
286          [in] const REGFILTER2 *prf2
287        );
288
289    HRESULT EnumMatchingFilters
290       ( [out] IEnumMoniker **ppEnum,
291         [in]  DWORD dwFlags,
292         [in]  BOOL bExactMatch,
293         [in]  DWORD dwMerit,
294         [in]  BOOL  bInputNeeded,
295         [in]  DWORD cInputTypes,
296         [size_is(cInputTypes*2)]  const GUID *pInputTypes,
297         [in]  const REGPINMEDIUM *pMedIn,
298         [in]  const CLSID *pPinCategoryIn,
299         [in]  BOOL  bRender,
300         [in]  BOOL  bOutputNeeded,
301         [in]  DWORD cOutputTypes,
302         [size_is(cOutputTypes*2)]  const GUID *pOutputTypes,
303         [in]  const REGPINMEDIUM *pMedOut,
304         [in]  const CLSID *pPinCategoryOut
305       );
306}
307
308[
309object,
310uuid(b79bb0b1-33c1-11d1-abe1-00a0c905f375),
311pointer_default(unique)
312]
313interface IFilterMapper3 : IFilterMapper2
314{
315    HRESULT GetICreateDevEnum( [out] ICreateDevEnum **ppEnum );
316}
317
318typedef enum tagQualityMessageType
319{
320    Famine,
321    Flood
322} QualityMessageType;
323
324typedef struct tagQuality
325{
326    QualityMessageType Type;
327    LONG               Proportion;
328    REFERENCE_TIME       Late;
329    REFERENCE_TIME       TimeStamp;
330} Quality;
331
332typedef IQualityControl *PQUALITYCONTROL;
333
334[
335object,
336uuid(56a868a5-0ad4-11ce-b03a-0020af0ba770),
337pointer_default(unique)
338]
339interface IQualityControl : IUnknown
340{
341    HRESULT Notify
342        ( [in] IBaseFilter * pSelf,
343          [in] Quality q
344        );
345
346    HRESULT SetSink
347        ( [in] IQualityControl * piqc
348        );
349}
350
351enum
352{
353    CK_NOCOLORKEY  = 0x0,
354    CK_INDEX       = 0x1,
355    CK_RGB         = 0x2
356};
357
358typedef struct tagCOLORKEY
359{
360    DWORD    KeyType;
361    DWORD    PaletteIndex;
362    COLORREF LowColorValue;
363    COLORREF HighColorValue;
364} COLORKEY;
365
366enum
367{
368    ADVISE_NONE = 0x0,
369    ADVISE_CLIPPING = 0x1,
370    ADVISE_PALETTE = 0x2,
371    ADVISE_COLORKEY = 0x4,
372    ADVISE_POSITION = 0x8,
373    ADVISE_DISPLAY_CHANGE = 0x10
374};
375
376const DWORD ADVISE_ALL = ADVISE_CLIPPING |
377                         ADVISE_PALETTE  |
378                         ADVISE_COLORKEY |
379                         ADVISE_POSITION;
380
381const DWORD ADVISE_ALL2 = ADVISE_ALL |
382                          ADVISE_DISPLAY_CHANGE;
383
384cpp_quote("#ifndef _WINGDI_")
385
386/* already defined in wingdi.h, but needed for WIDL */
387
388typedef struct _RGNDATAHEADER
389{
390    DWORD dwSize;
391    DWORD iType;
392    DWORD nCount;
393    DWORD nRgnSize;
394    RECT  rcBound;
395} RGNDATAHEADER;
396
397typedef struct _RGNDATA
398{
399    RGNDATAHEADER rdh;
400    char Buffer[1];
401} RGNDATA;
402
403cpp_quote("#endif /* _WINGDI_ */")
404
405[
406object,
407local,
408uuid(56a868a0-0ad4-11ce-b03a-0020af0ba770),
409pointer_default(unique)
410]
411interface IOverlayNotify : IUnknown
412{
413    HRESULT OnPaletteChange(
414        [in] DWORD dwColors,
415        [in] const PALETTEENTRY *pPalette);
416
417    HRESULT OnClipChange(
418        [in] const RECT *pSourceRect,
419        [in] const RECT *pDestinationRect,
420        [in] const RGNDATA *pRgnData);
421
422    HRESULT OnColorKeyChange([in] const COLORKEY *pColorKey);
423
424    HRESULT OnPositionChange([in] const RECT *pSourceRect,
425                             [in] const RECT *pDestinationRect);
426}
427
428typedef IOverlayNotify *POVERLAYNOTIFY;
429
430cpp_quote("#if 0")
431typedef HANDLE HMONITOR;
432cpp_quote("#endif /* 0 */")
433
434[
435object,
436local,
437uuid(680EFA10-D535-11D1-87C8-00A0C9223196),
438pointer_default(unique)
439]
440interface IOverlayNotify2 : IOverlayNotify
441{
442    HRESULT OnDisplayChange(
443        HMONITOR hMonitor);
444}
445
446typedef IOverlayNotify2 *POVERLAYNOTIFY2;
447
448[
449object,
450local,
451uuid(56a868a1-0ad4-11ce-b03a-0020af0ba770),
452pointer_default(unique)
453]
454interface IOverlay : IUnknown
455{
456    HRESULT GetPalette(
457        [out] DWORD *pdwColors,
458        [out] PALETTEENTRY **ppPalette);
459
460    HRESULT SetPalette(
461        [in] DWORD dwColors,
462        [in] PALETTEENTRY *pPalette);
463
464    HRESULT GetDefaultColorKey([out] COLORKEY *pColorKey);
465
466    HRESULT GetColorKey([out] COLORKEY *pColorKey);
467
468    HRESULT SetColorKey([in,out] COLORKEY *pColorKey);
469
470    HRESULT GetWindowHandle([out] HWND *pHwnd);
471
472    HRESULT GetClipList([out] RECT *pSourceRect,
473                        [out] RECT *pDestinationRect,
474                        [out] RGNDATA **ppRgnData);
475
476    HRESULT GetVideoPosition([out] RECT *pSourceRect,
477                             [out] RECT *pDestinationRect);
478
479    HRESULT Advise(
480        [in] IOverlayNotify *pOverlayNotify,
481        [in] DWORD dwInterests);
482
483    HRESULT Unadvise();
484}
485
486typedef IOverlay *POVERLAY;
487
488[
489object,
490uuid(56a868a2-0ad4-11ce-b03a-0020af0ba770),
491pointer_default(unique)
492]
493interface IMediaEventSink : IUnknown
494{
495    HRESULT Notify(
496        [in] LONG EventCode,
497        [in] LONG_PTR EventParam1,
498        [in] LONG_PTR EventParam2
499    );
500}
501
502typedef IMediaEventSink *PMEDIAEVENTSINK;
503
504[
505object,
506uuid(56a868a6-0ad4-11ce-b03a-0020af0ba770),
507pointer_default(unique)
508]
509interface IFileSourceFilter : IUnknown
510{
511    HRESULT Load(
512        [in] LPCOLESTR pszFileName,
513        [in, unique] const AM_MEDIA_TYPE *pmt
514    );
515
516    HRESULT GetCurFile(
517        [out] LPOLESTR *ppszFileName,
518        [out] AM_MEDIA_TYPE *pmt
519    );
520}
521
522typedef IFileSourceFilter *PFILTERFILESOURCE;
523
524[
525object,
526uuid(a2104830-7c70-11cf-8bce-00aa00a3f1a6),
527pointer_default(unique)
528]
529interface IFileSinkFilter : IUnknown
530{
531    HRESULT SetFileName(
532        [in] LPCOLESTR pszFileName,
533        [in, unique] const AM_MEDIA_TYPE *pmt
534    );
535
536    HRESULT GetCurFile(
537        [out] LPOLESTR *ppszFileName,
538        [out] AM_MEDIA_TYPE *pmt
539    );
540}
541
542typedef IFileSinkFilter *PFILTERFILESINK;
543
544[
545        object,
546        uuid(00855B90-CE1B-11d0-BD4F-00A0C911CE86),
547        pointer_default(unique)
548]
549interface IFileSinkFilter2 : IFileSinkFilter
550{
551    HRESULT SetMode(
552        [in] DWORD dwFlags
553    );
554
555    HRESULT GetMode(
556        [out] DWORD *pdwFlags
557    );
558}
559
560typedef IFileSinkFilter2 *PFILESINKFILTER2;
561
562[
563        object,
564        uuid(f90a6130-b658-11d2-ae49-0000f8754b99),
565        pointer_default(unique)
566]
567interface IAMDeviceRemoval : IUnknown
568{
569    HRESULT DeviceInfo(
570        [out] CLSID *pclsidInterfaceClass,
571        [out] LPWSTR *pwszSymbolicLink);
572    HRESULT Reassociate();
573    HRESULT Disassociate();
574}
575
576
577typedef enum
578{
579    AM_FILE_OVERWRITE = 0x00000001,
580} AM_FILESINK_FLAGS;
581
582[
583object,
584uuid(56a868a9-0ad4-11ce-b03a-0020af0ba770),
585pointer_default(unique)
586]
587interface IGraphBuilder : IFilterGraph
588{
589    HRESULT Connect
590        ( [in] IPin * ppinOut,
591          [in] IPin * ppinIn
592        );
593
594    HRESULT Render
595        ( [in] IPin * ppinOut
596        );
597
598    HRESULT RenderFile
599        ( [in] LPCWSTR lpcwstrFile,
600          [in, unique] LPCWSTR lpcwstrPlayList
601        );
602
603    HRESULT AddSourceFilter
604        ( [in]      LPCWSTR lpcwstrFileName,
605          [in, unique]      LPCWSTR lpcwstrFilterName,
606          [out]     IBaseFilter* *ppFilter
607        );
608
609    HRESULT SetLogFile
610        ( [in]      DWORD_PTR hFile
611        );
612
613    HRESULT Abort();
614
615    HRESULT ShouldOperationContinue();
616}
617
618
619[
620    object,
621    uuid(bf87b6e0-8c27-11d0-b3f0-00aa003761c5),
622    pointer_default(unique)
623]
624interface ICaptureGraphBuilder : IUnknown {
625
626    HRESULT SetFiltergraph(
627        [in] IGraphBuilder *pfg);
628
629    HRESULT GetFiltergraph(
630        [out] IGraphBuilder **ppfg);
631
632    HRESULT SetOutputFileName(
633        [in] const GUID *pType,
634        [in] LPCOLESTR lpstrFile,
635        [out] IBaseFilter **ppf,
636        [out] IFileSinkFilter **ppSink);
637
638    [local] HRESULT FindInterface(
639        [in, unique] const GUID *pCategory,
640        [in] IBaseFilter *pf,
641        [in] REFIID riid,
642        [out] void **ppint);
643
644    [call_as(FindInterface)] HRESULT RemoteFindInterface(
645        [in, unique] const GUID *pCategory,
646        [in] IBaseFilter *pf,
647        [in] REFIID riid,
648        [out] IUnknown **ppint);
649
650    HRESULT RenderStream(
651        [in] const GUID *pCategory,
652        [in] IUnknown *pSource,
653        [in] IBaseFilter *pfCompressor,
654        [in] IBaseFilter *pfRenderer);
655
656    HRESULT ControlStream(
657        [in] const GUID *pCategory,
658        [in] IBaseFilter *pFilter,
659        [in] REFERENCE_TIME *pstart,
660        [in] REFERENCE_TIME *pstop,
661        [in] WORD wStartCookie,
662        [in] WORD wStopCookie);
663
664    HRESULT AllocCapFile(
665        [in] LPCOLESTR lpstr,
666        [in] DWORDLONG dwlSize);
667
668    HRESULT CopyCaptureFile(
669        [in] LPOLESTR lpwstrOld,
670        [in] LPOLESTR lpwstrNew,
671        [in] int fAllowEscAbort,
672        [in] IAMCopyCaptureFileProgress *pCallback);
673}
674
675[
676object,
677uuid(670d1d20-a068-11d0-b3f0-00aa003761c5),
678pointer_default(unique)
679]
680interface IAMCopyCaptureFileProgress : IUnknown
681{
682    HRESULT Progress(
683        [in] int iProgress);
684}
685
686[
687    object,
688    uuid(93E5A4E0-2D50-11d2-ABFA-00A0C9C6E38D),
689    pointer_default(unique)
690]
691interface ICaptureGraphBuilder2 : IUnknown
692{
693    HRESULT SetFiltergraph(
694        [in] IGraphBuilder *pfg);
695
696    HRESULT GetFiltergraph(
697        [out] IGraphBuilder **ppfg);
698
699    HRESULT SetOutputFileName(
700        [in] const GUID *pType,
701        [in] LPCOLESTR lpstrFile,
702        [out] IBaseFilter **ppf,
703        [out] IFileSinkFilter **ppSink);
704
705    [local] HRESULT FindInterface(
706        [in] const GUID *pCategory,
707        [in] const GUID *pType,
708        [in] IBaseFilter *pf,
709        [in] REFIID riid,
710        [out] void **ppint);
711
712    [call_as(FindInterface)] HRESULT RemoteFindInterface(
713        [in] const GUID *pCategory,
714        [in] const GUID *pType,
715        [in] IBaseFilter *pf,
716        [in] REFIID riid,
717        [out] IUnknown **ppint);
718
719    HRESULT RenderStream(
720        [in] const GUID *pCategory,
721        [in] const GUID *pType,
722        [in] IUnknown *pSource,
723        [in] IBaseFilter *pfCompressor,
724        [in] IBaseFilter *pfRenderer);
725
726    HRESULT ControlStream(
727        [in] const GUID *pCategory,
728        [in] const GUID *pType,
729        [in] IBaseFilter *pFilter,
730        [in] REFERENCE_TIME *pstart,
731        [in] REFERENCE_TIME *pstop,
732        [in] WORD wStartCookie,
733        [in] WORD wStopCookie);
734
735    HRESULT AllocCapFile(
736        [in] LPCOLESTR lpstr,
737        [in] DWORDLONG dwlSize);
738
739    HRESULT CopyCaptureFile(
740        [in] LPOLESTR lpwstrOld,
741        [in] LPOLESTR lpwstrNew,
742        [in] int fAllowEscAbort,
743        [in] IAMCopyCaptureFileProgress *pCallback);
744
745    HRESULT FindPin(
746        [in] IUnknown *pSource,
747        [in] PIN_DIRECTION pindir,
748        [in] const GUID *pCategory,
749        [in] const GUID *pType,
750        [in] BOOL fUnconnected,
751        [in] int num,
752        [out] IPin **ppPin);
753}
754
755[
756    local,
757    object,
758    uuid(5acd6aa0-f482-11ce-8b67-00aa00a3f1a6),
759    pointer_default(unique)
760]
761interface IConfigAviMux : IUnknown
762{
763    HRESULT SetMasterStream(
764        [in] LONG iStream);
765
766    HRESULT GetMasterStream(
767        [out] LONG *pStream);
768
769    HRESULT SetOutputCompatibilityIndex(
770        [in] BOOL fOldIndex);
771
772    HRESULT GetOutputCompatibilityIndex(
773        [out] BOOL *pfOldIndex);
774}
775
776[
777    local,
778    object,
779    uuid(bee3d220-157b-11d0-bd23-00a0c911ce86),
780    pointer_default(unique)
781]
782interface IConfigInterleaving : IUnknown
783{
784    typedef enum InterleavingMode {
785        INTERLEAVE_NONE,
786        INTERLEAVE_CAPTURE,
787        INTERLEAVE_FULL,
788        INTERLEAVE_NONE_BUFFERED
789    } InterleavingMode;
790
791    HRESULT put_Mode(
792        [in] InterleavingMode mode);
793
794    HRESULT get_Mode(
795        [out] InterleavingMode *pMode);
796
797    HRESULT put_Interleaving(
798        [in] const REFERENCE_TIME *prtInterleave,
799        [in] const REFERENCE_TIME *prtPreroll);
800
801    HRESULT get_Interleaving(
802        [out] REFERENCE_TIME *prtInterleave,
803        [out] REFERENCE_TIME *prtPreroll);
804}
805
806[
807    local,
808    object,
809    uuid(4d5466b0-a49c-11d1-abe8-00a0c905f375),
810    pointer_default(unique)
811
812]
813interface IAMClockAdjust : IUnknown
814{
815    HRESULT SetClockDelta([in] REFERENCE_TIME rtDelta);
816};
817
818[
819    local,
820    object,
821    uuid(9fd52741-176d-4b36-8f51-ca8f933223be),
822    pointer_default(unique)
823]
824interface IAMClockSlave : IUnknown
825{
826    HRESULT SetErrorTolerance(
827        [in] DWORD dwTolerance);
828
829    HRESULT GetErrorTolerance(
830        [out] DWORD *pdwTolerance);
831}
832
833typedef struct _AMCOPPSignature {
834    BYTE Signature[256];
835} AMCOPPSignature;
836
837typedef struct _AMCOPPCommand {
838    GUID macKDI;
839    GUID guidCommandID;
840    DWORD dwSequence;
841    DWORD bSizeData;
842    BYTE CommandData[4056];
843} AMCOPPCommand, *LPAMCOPPCommand;
844
845typedef struct _AMCOPPStatusInput {
846    GUID rApp;
847    GUID guidStatusRequestID;
848    DWORD dwSequence;
849    DWORD cbSizeData;
850    BYTE StatusData[4056];
851} AMCOPPStatusInput, *LPAMCOPPStatusInput;
852
853typedef struct _AMCOPPStatusOutput {
854    GUID macKDI;
855    DWORD cbSizeData;
856    BYTE COPPStatus[4076];
857} AMCOPPStatusOutput, *LPAMCOPPStatusOutput;
858
859[
860    local,
861    object,
862    uuid(6feded3e-0ff1-4901-a2f1-43f7012c8515),
863    pointer_default(unique)
864]
865interface IAMCertifiedOutputProtection : IUnknown
866{
867    HRESULT KeyExchange (
868        [out] GUID* pRandom,
869        [out] BYTE** VarLenCertGH,
870        [out] DWORD* pdwLengthCertGH);
871
872    HRESULT SessionSequenceStart(
873        [in] AMCOPPSignature* pSig);
874
875    HRESULT ProtectionCommand(
876        [in] const AMCOPPCommand* cmd);
877
878    HRESULT ProtectionStatus(
879        [in] const AMCOPPStatusInput* pStatusInput,
880        [out] AMCOPPStatusOutput* pStatusOutput);
881};
882
883enum _AM_RENSDEREXFLAGS
884{
885    AM_RENDEREX_RENDERTOEXISTINGRENDERERS = 0x01
886};
887
888[
889    object,
890    uuid(36b73882-c2c8-11cf-8b46-00805f6cef60),
891    pointer_default(unique)
892]
893interface IFilterGraph2: IGraphBuilder
894{
895    HRESULT AddSourceFilterForMoniker(
896          [in] IMoniker *pMoniker,
897          [in] IBindCtx *pCtx,
898          [in, unique] LPCWSTR lpcwstrFilterName,
899          [out] IBaseFilter **ppFilter
900    );
901
902    HRESULT ReconnectEx
903        ( [in] IPin * ppin,
904          [in, unique] const AM_MEDIA_TYPE *pmt
905        );
906
907    HRESULT RenderEx( [in] IPin *pPinOut,
908                      [in] DWORD dwFlags,
909                      [in, out] DWORD *pvContext
910                    );
911}
912
913[
914    object,
915    local,
916    uuid(56a868bf-0ad4-11ce-b03a-0020af0ba770),
917    pointer_default(unique)
918]
919interface IStreamBuilder : IUnknown
920{
921    HRESULT Render
922        ( [in] IPin * ppinOut,
923          [in] IGraphBuilder * pGraph
924        );
925
926    HRESULT Backout
927        ( [in] IPin * ppinOut,
928          [in] IGraphBuilder * pGraph
929        );
930}
931
932[
933    object,
934    uuid(56a868af-0ad4-11ce-b03a-0020af0ba770),
935    pointer_default(unique)
936]
937interface IDistributorNotify : IUnknown
938{
939    HRESULT Stop(void);
940    HRESULT Pause(void);
941    HRESULT Run(REFERENCE_TIME tStart);
942    HRESULT SetSyncSource([in] IReferenceClock * pClock);
943    HRESULT NotifyGraphChange(void);
944}
945
946
947/*****************************************************************************
948 * IAMStreamConfig interface
949 */
950[
951    object,
952    uuid(c6e13340-30ac-11d0-a18c-00a0c9118956),
953    pointer_default(unique)
954]
955interface IAMStreamConfig : IUnknown
956{
957    typedef struct _VIDEO_STREAM_CONFIG_CAPS {
958        GUID  guid;
959        ULONG VideoStandard;
960        SIZE  InputSize;
961        SIZE  MinCroppingSize;
962        SIZE  MaxCroppingSize;
963        int   CropGranularityX;
964        int   CropGranularityY;
965        int   CropAlignX;
966        int   CropAlignY;
967        SIZE  MinOutputSize;
968        SIZE  MaxOutputSize;
969        int   OutputGranularityX;
970        int   OutputGranularityY;
971        int   StretchTapsX;
972        int   StretchTapsY;
973        int   ShrinkTapsX;
974        int   ShrinkTapsY;
975        LONGLONG MinFrameInterval;
976        LONGLONG MaxFrameInterval;
977        LONG  MinBitsPerSecond;
978        LONG  MaxBitsPerSecond;
979    } VIDEO_STREAM_CONFIG_CAPS;
980
981    typedef struct _AUDIO_STREAM_CONFIG_CAPS {
982        GUID guid;
983        ULONG MinimumChannels;
984        ULONG MaximumChannels;
985        ULONG ChannelsGranularity;
986        ULONG MinimumBitsPerSample;
987        ULONG MaximumBitsPerSample;
988        ULONG BitsPerSampleGranularity;
989        ULONG MinimumSampleFrequency;
990        ULONG MaximumSampleFrequency;
991        ULONG SampleFrequencyGranularity;
992    } AUDIO_STREAM_CONFIG_CAPS;
993
994    HRESULT SetFormat( [in] AM_MEDIA_TYPE *pmt);
995    HRESULT GetFormat( [in] AM_MEDIA_TYPE **pmt);
996    HRESULT GetNumberOfCapabilities( [out] int *piCount, [out] int *piSize);
997    HRESULT GetStreamCaps( [in] int iIndex, [out] AM_MEDIA_TYPE **pmt,
998                          [out] BYTE *pSCC);
999}
1000
1001
1002typedef enum tagVideoProcAmpProperty
1003{
1004    VideoProcAmp_Brightness,
1005    VideoProcAmp_Contrast,
1006    VideoProcAmp_Hue,
1007    VideoProcAmp_Saturation,
1008    VideoProcAmp_Sharpness,
1009    VideoProcAmp_Gamma,
1010    VideoProcAmp_ColorEnable,
1011    VideoProcAmp_WhiteBalance,
1012    VideoProcAmp_BacklightCompensation,
1013    VideoProcAmp_Gain
1014} VideoProcAmpProperty;
1015
1016typedef enum tagVideoProcAmpFlags
1017{
1018    VideoProcAmp_Flags_Auto   = 0x0001,
1019    VideoProcAmp_Flags_Manual = 0x0002,
1020} VideoProcAmpFlags;
1021
1022/*****************************************************************************
1023 * IAMVideoProcAmp interface
1024 */
1025[
1026    object,
1027    uuid(c6e13360-30ac-11d0-a18c-00a0c9118956),
1028    pointer_default(unique)
1029]
1030interface IAMVideoProcAmp : IUnknown
1031{
1032    HRESULT GetRange( [in] LONG Property, [out] LONG *pMin, [out] LONG *pMax,
1033                     [out] LONG *pSteppingDelta, [out] LONG *pDefault,
1034                     [out] LONG *pCapsFlags);
1035    HRESULT Set( [in] LONG Property, [in] LONG lValue, [in] LONG Flags);
1036    HRESULT Get( [in] LONG Property, [out] LONG *lValue, [out] LONG *Flags);
1037}
1038
1039
1040[
1041        object,
1042        uuid(56a868aa-0ad4-11ce-b03a-0020af0ba770),
1043        pointer_default(unique)
1044]
1045interface IAsyncReader : IUnknown
1046{
1047    HRESULT RequestAllocator(
1048                [in]  IMemAllocator* pPreferred,
1049                [in]  ALLOCATOR_PROPERTIES* pProps,
1050                [out] IMemAllocator ** ppActual);
1051
1052    HRESULT Request(
1053                [in] IMediaSample* pSample,
1054                [in] DWORD_PTR dwUser);
1055
1056    HRESULT WaitForNext(
1057                [in]  DWORD dwTimeout,
1058                [out] IMediaSample** ppSample,
1059                [out] DWORD_PTR * pdwUser);
1060
1061    HRESULT SyncReadAligned(
1062                [in] IMediaSample* pSample);
1063
1064    HRESULT SyncRead(
1065                [in]  LONGLONG llPosition,
1066                [in]  LONG lLength,
1067                [out, size_is(lLength)]
1068                      BYTE* pBuffer);
1069
1070    HRESULT Length(
1071                [out] LONGLONG* pTotal,
1072                [out] LONGLONG* pAvailable);
1073
1074    HRESULT BeginFlush(void);
1075
1076    HRESULT EndFlush(void);
1077}
1078
1079
1080[
1081    object,
1082    uuid(56a868ab-0ad4-11ce-b03a-0020af0ba770),
1083    pointer_default(unique)
1084]
1085interface IGraphVersion : IUnknown
1086{
1087    HRESULT QueryVersion(LONG* pVersion);
1088}
1089
1090[
1091    object,
1092    uuid(56a868ad-0ad4-11ce-b03a-0020af0ba770),
1093    pointer_default(unique)
1094]
1095interface IResourceConsumer : IUnknown
1096{
1097    HRESULT AcquireResource(
1098        [in] LONG idResource);
1099
1100    HRESULT ReleaseResource(
1101        [in] LONG idResource);
1102}
1103
1104
1105[
1106    object,
1107    uuid(56a868ac-0ad4-11ce-b03a-0020af0ba770),
1108    pointer_default(unique)
1109]
1110interface IResourceManager : IUnknown
1111{
1112    HRESULT Register(
1113        [in] LPCWSTR pName,
1114        [in] LONG   cResource,
1115        [out] LONG* plToken
1116        );
1117
1118    HRESULT RegisterGroup(
1119        [in] LPCWSTR pName,
1120        [in] LONG cResource,
1121        [in, size_is(cResource)]
1122             LONG* palTokens,
1123        [out] LONG* plToken
1124        );
1125
1126    HRESULT RequestResource(
1127        [in] LONG idResource,
1128        [in] IUnknown* pFocusObject,
1129        [in] IResourceConsumer* pConsumer
1130        );
1131
1132    HRESULT NotifyAcquire(
1133        [in] LONG idResource,
1134        [in] IResourceConsumer* pConsumer,
1135        [in] HRESULT hr);
1136
1137    HRESULT NotifyRelease(
1138        [in] LONG idResource,
1139        [in] IResourceConsumer* pConsumer,
1140        [in] BOOL bStillWant);
1141
1142    HRESULT CancelRequest(
1143        [in] LONG idResource,
1144        [in] IResourceConsumer* pConsumer);
1145
1146    HRESULT SetFocus(
1147        [in] IUnknown* pFocusObject);
1148
1149    HRESULT ReleaseFocus(
1150        [in] IUnknown* pFocusObject);
1151
1152}
1153
1154cpp_quote("#ifndef _IKsPropertySet_")
1155cpp_quote("#define _IKsPropertySet_")
1156cpp_quote("#define KSPROPERTY_SUPPORT_GET  1")
1157cpp_quote("#define KSPROPERTY_SUPPORT_SET  2")
1158
1159[
1160    object,
1161    uuid(31efac30-515c-11d0-a9aa-00aa0061be93),
1162    pointer_default(unique),
1163    local
1164]
1165interface IKsPropertySet : IUnknown
1166{
1167    HRESULT Set( [in] REFGUID guidPropSet,
1168                 [in] DWORD dwPropID,
1169                 [in, size_is(cbInstanceData)] LPVOID pInstanceData,
1170                 [in] DWORD cbInstanceData,
1171                 [in, size_is(cbPropData)] LPVOID pPropData,
1172                 [in] DWORD cbPropData );
1173
1174    HRESULT Get( [in] REFGUID guidPropSet,
1175                 [in] DWORD dwPropID,
1176                 [in, size_is(cbInstanceData)] LPVOID pInstanceData,
1177                 [in] DWORD cbInstanceData,
1178                 [out, size_is(cbPropData)] LPVOID pPropData,
1179                 [in] DWORD cbPropData,
1180                 [out] DWORD *pcbReturned );
1181
1182    HRESULT QuerySupported( [in] REFGUID guidPropSet,
1183                            [in] DWORD dwPropID,
1184                            [out] DWORD *pTypeSupport);
1185}
1186cpp_quote("#endif /* _IKsPropertySet_ */")
1187
1188[
1189    local,
1190    object,
1191    uuid(6025a880-c0d5-11d0-bd4e-00a0c911ce86),
1192    pointer_default(unique)
1193]
1194interface IMediaPropertyBag : IPropertyBag
1195{
1196    typedef IMediaPropertyBag *LPMEDIAPROPERTYBAG;
1197
1198    HRESULT EnumProperty(
1199            [in]  ULONG iProperty,
1200            [in, out] VARIANT *pvarPropertyName,
1201            [in, out] VARIANT *pvarPropertyValue);
1202}
1203
1204
1205[
1206    local,
1207    object,
1208    uuid(5738e040-b67f-11d0-bd4d-00a0c911ce86),
1209    pointer_default(unique)
1210]
1211interface IPersistMediaPropertyBag : IPersist
1212{
1213    HRESULT InitNew(void);
1214
1215    HRESULT Load(
1216            [in] IMediaPropertyBag *pPropBag,
1217            [in] IErrorLog *pErrorLog);
1218
1219    HRESULT Save(
1220            [in] IMediaPropertyBag *pPropBag,
1221            [in] BOOL fClearDirty,
1222            [in] BOOL fSaveAllProperties);
1223
1224    typedef IPersistMediaPropertyBag *LPPERSISTMEDIAPROPERTYBAG;
1225}
1226
1227[
1228    object,
1229    uuid(36b73883-c2c8-11cf-8b46-00805f6cef60),
1230    pointer_default(unique)
1231]
1232interface ISeekingPassThru : IUnknown
1233{
1234    HRESULT Init( [in] BOOL bSupportRendering, [in] IPin *pPin);
1235}
1236
1237enum _AM_FILTER_MISC_FLAGS
1238{
1239    AM_FILTER_MISC_FLAGS_IS_RENDERER = 0x1,
1240    AM_FILTER_MISC_FLAGS_IS_SOURCE = 0x2
1241};
1242
1243[
1244    local,
1245    object,
1246    uuid(2dd74950-a890-11d1-abe8-00a0c905f375),
1247    pointer_default(unique)
1248]
1249interface IAMFilterMiscFlags : IUnknown
1250{
1251    ULONG GetMiscFlags();
1252};
1253
1254[
1255    local,
1256    object,
1257    uuid(4995f511-9ddb-4f12-bd3b-f04611807b79),
1258    pointer_default(unique)
1259]
1260interface IAMGraphBuilderCallback : IUnknown
1261{
1262    HRESULT SelectedFilter(
1263        [in] IMoniker *pMon);
1264
1265    HRESULT CreatedFilter(
1266        [in] IBaseFilter *pFil);
1267};
1268
1269[
1270    local,
1271    object,
1272    uuid(56ED71A0-AF5F-11D0-B3F0-00AA003761C5),
1273    pointer_default(unique)
1274]
1275interface IAMBufferNegotiation : IUnknown
1276{
1277     HRESULT SuggestAllocatorProperties (
1278        [in] const ALLOCATOR_PROPERTIES *pprop);
1279
1280     HRESULT GetAllocatorProperties (
1281        [out] ALLOCATOR_PROPERTIES *pprop);
1282
1283}
1284
1285[
1286    local,
1287    object,
1288    uuid(d8d715a0-6e5e-11d0-b3f0-00aa003761c5),
1289    pointer_default(unique)
1290]
1291interface IAMVfwCaptureDialogs : IUnknown
1292{
1293    HRESULT HasDialog(
1294            [in] int dialog);
1295    HRESULT ShowDialog(
1296            [in] int dialog,
1297            [in] HWND hwnd);
1298    HRESULT SendDriverMessage(
1299            [in] int dialog,
1300            [in] int msg,
1301            [in] long data1,
1302            [in] long data2);
1303}
1304
1305#include <axextendenums.h>
1306
1307typedef enum
1308{
1309    AM_STREAM_INFO_START_DEFINED   = 0x01,
1310    AM_STREAM_INFO_STOP_DEFINED    = 0x02,
1311    AM_STREAM_INFO_DISCARDING      = 0x04,
1312    AM_STREAM_INFO_STOP_SEND_EXTRA = 0x10
1313} AM_STREAM_INFO_FLAGS;
1314
1315typedef struct
1316{
1317    REFERENCE_TIME tStart;
1318    REFERENCE_TIME tStop;
1319    DWORD dwStartCookie;
1320    DWORD dwStopCookie;
1321    DWORD dwFlags;
1322}AM_STREAM_INFO;
1323
1324[
1325    local,
1326    object,
1327    uuid(36b73881-c2c8-11cf-8b46-00805f6cef60),
1328    pointer_default(unique)
1329]
1330interface IAMStreamControl : IUnknown
1331{
1332    HRESULT StartAt(
1333        [in] const REFERENCE_TIME *ptStart,
1334        [in] DWORD dwCookie);
1335
1336    HRESULT StopAt(
1337        [in] const REFERENCE_TIME *ptStop,
1338        [in] BOOL bSendExtra,
1339        [in] DWORD dwCookie);
1340
1341    HRESULT GetInfo(
1342        [out] AM_STREAM_INFO *pInfo);
1343}
1344
1345typedef enum tagTVAudioMode
1346{
1347    AMTVAUDIO_MODE_MONO     = 0x0001,
1348    AMTVAUDIO_MODE_STEREO   = 0x0002,
1349    AMTVAUDIO_MODE_LANG_A   = 0x0010,
1350    AMTVAUDIO_MODE_LANG_B   = 0x0020,
1351    AMTVAUDIO_MODE_LANG_C   = 0x0040,
1352    AMTVAUDIO_PRESET_STEREO = 0x0200,
1353    AMTVAUDIO_PRESET_LANG_A = 0x1000,
1354    AMTVAUDIO_PRESET_LANG_B = 0x2000,
1355    AMTVAUDIO_PRESET_LANG_C = 0x4000,
1356}TVAudioMode;
1357