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 #define CHARS_IN_GUID
39
20 cpp_quote
("#define CHARS_IN_GUID 39")
22 /* GetTimeFormat is defined in winnls.h as
23 * either the W or A suffixed version */
24 cpp_quote
("#undef GetTimeFormat")
26 typedef struct _AMMediaType
30 BOOL bFixedSizeSamples
;
31 BOOL bTemporalCompression
;
36 [size_is(cbFormat
)] BYTE * pbFormat
;
39 typedef enum _PinDirection
45 #define MAX_PIN_NAME
128
46 #define MAX_FILTER_NAME
128
47 cpp_quote
("#define MAX_PIN_NAME 128")
48 cpp_quote
("#define MAX_FILTER_NAME 128")
50 typedef LONGLONG REFERENCE_TIME
;
51 typedef DOUBLE REFTIME
;
53 typedef DWORD_PTR HSEMAPHORE
;
54 typedef DWORD_PTR HEVENT
;
56 typedef struct _AllocatorProperties
62 } ALLOCATOR_PROPERTIES
;
64 interface IAMovieSetup
;
65 interface IEnumFilters
;
66 interface IEnumMediaTypes
;
68 interface IBaseFilter
;
69 interface IFilterGraph
;
70 interface IMediaFilter
;
71 interface IMediaSample
;
72 interface IMemAllocator
;
73 interface IMemAllocatorCallbackTemp
;
74 interface IMemAllocatorNotifyCallbackTemp
;
75 interface IMemInputPin
;
77 interface IReferenceClock
;
81 uuid(56a86891
-0ad4
-11ce
-b03a
-0020af0ba770
),
82 pointer_default(unique)
84 interface IPin
: IUnknown
86 typedef struct _PinInfo
90 WCHAR achName
[MAX_PIN_NAME
];
94 [in] IPin
* pReceivePin
,
95 [in] const AM_MEDIA_TYPE
* pmt
);
97 HRESULT ReceiveConnection
(
98 [in] IPin
* pConnector
,
99 [in] const AM_MEDIA_TYPE
*pmt
);
101 HRESULT Disconnect
(void);
106 HRESULT ConnectionMediaType
(
107 [out] AM_MEDIA_TYPE
*pmt
);
109 HRESULT QueryPinInfo
(
110 [out] PIN_INFO
* pInfo
);
112 HRESULT QueryDirection
(
113 [out] PIN_DIRECTION
*pPinDir
);
119 [in] const AM_MEDIA_TYPE
*pmt
);
121 HRESULT EnumMediaTypes
(
122 [out] IEnumMediaTypes
**ppEnum
);
124 HRESULT QueryInternalConnections
(
126 [in, out] ULONG
*nPin
);
128 HRESULT EndOfStream
(void);
130 HRESULT BeginFlush
(void);
132 HRESULT EndFlush
(void);
134 [in] REFERENCE_TIME tStart
,
135 [in] REFERENCE_TIME tStop
,
143 uuid(56a86892
-0ad4
-11ce
-b03a
-0020af0ba770
),
144 pointer_default(unique)
146 interface IEnumPins
: IUnknown
151 [out, size_is(cPins
)] IPin
** ppPins
,
152 [out] ULONG
* pcFetched
);
160 [out] IEnumPins
**ppEnum
);
163 typedef IEnumPins
*PENUMPINS
;
167 uuid(89c31040
-846b
-11ce
-97d3
-00aa0055595a
),
168 pointer_default(unique)
170 interface IEnumMediaTypes
: IUnknown
173 [in] ULONG cMediaTypes
,
174 [out, size_is(cMediaTypes
)]
175 AM_MEDIA_TYPE
** ppMediaTypes
,
176 [out] ULONG
* pcFetched
180 [in] ULONG cMediaTypes
);
185 [out] IEnumMediaTypes
**ppEnum
189 typedef IEnumMediaTypes
*PENUMMEDIATYPES
;
193 uuid(56a8689f
-0ad4
-11ce
-b03a
-0020af0ba770
),
194 pointer_default(unique)
196 interface IFilterGraph
: IUnknown
199 [in] IBaseFilter
* pFilter
,
200 [in, string] LPCWSTR pName
);
202 HRESULT RemoveFilter
(
203 [in] IBaseFilter
* pFilter
);
206 [out] IEnumFilters
**ppEnum
);
208 HRESULT FindFilterByName
(
209 [in, string] LPCWSTR pName
,
210 [out] IBaseFilter
** ppFilter
);
212 HRESULT ConnectDirect
(
215 [in, unique] const AM_MEDIA_TYPE
* pmt
);
223 HRESULT SetDefaultSyncSource
(void);
226 typedef IFilterGraph
*PFILTERGRAPH
;
230 uuid(56a86893
-0ad4
-11ce
-b03a
-0020af0ba770
),
231 pointer_default(unique)
233 interface IEnumFilters
: IUnknown
237 [out] IBaseFilter
** ppFilter
,
238 [out] ULONG
* pcFetched
);
242 [in] ULONG cFilters
);
249 [out] IEnumFilters
**ppEnum
);
252 typedef IEnumFilters
*PENUMFILTERS
;
256 uuid(56a86899
-0ad4
-11ce
-b03a
-0020af0ba770
),
257 pointer_default(unique)
259 interface IMediaFilter
: IPersist
261 typedef enum _FilterState
271 HRESULT Run
(REFERENCE_TIME tStart
);
274 [in] DWORD dwMilliSecsTimeout
,
275 [out] FILTER_STATE
*State
);
277 HRESULT SetSyncSource
(
278 [in] IReferenceClock
* pClock
);
280 HRESULT GetSyncSource
(
281 [out] IReferenceClock
** pClock
);
284 typedef IMediaFilter
*PMEDIAFILTER
;
288 uuid(56a86895
-0ad4
-11ce
-b03a
-0020af0ba770
),
289 pointer_default(unique)
291 interface IBaseFilter
: IMediaFilter
293 typedef struct _FilterInfo
295 WCHAR achName
[MAX_FILTER_NAME
];
296 IFilterGraph
* pGraph
;
300 [out] IEnumPins
** ppEnum
);
303 [in, string] LPCWSTR
Id,
304 [out] IPin
** ppPin
);
306 HRESULT QueryFilterInfo
(
307 [out] FILTER_INFO
* pInfo
);
309 HRESULT JoinFilterGraph
(
310 [in] IFilterGraph
* pGraph
,
311 [in, string] LPCWSTR pName
);
313 HRESULT QueryVendorInfo
(
314 [out, string] LPWSTR
* pVendorInfo
);
317 typedef IBaseFilter
*PFILTER
;
321 uuid(56a86897
-0ad4
-11ce
-b03a
-0020af0ba770
),
322 pointer_default(unique)
324 interface IReferenceClock
: IUnknown
327 [out] REFERENCE_TIME
*pTime
);
330 [in] REFERENCE_TIME baseTime
,
331 [in] REFERENCE_TIME streamTime
,
333 [out] DWORD_PTR
* pdwAdviseCookie
);
335 HRESULT AdvisePeriodic
(
336 [in] REFERENCE_TIME startTime
,
337 [in] REFERENCE_TIME periodTime
,
338 [in] HSEMAPHORE hSemaphore
,
339 [out] DWORD_PTR
* pdwAdviseCookie
);
342 [in] DWORD_PTR dwAdviseCookie
);
345 typedef IReferenceClock
*PREFERENCECLOCK
;
350 uuid(36b73885-c2c8-11cf-8b46-00805f6cef60),
351 pointer_default(unique)
353 interface IReferenceClock2 : IReferenceClock
357 typedef IReferenceClock2 *PREFERENCECLOCK2;
364 uuid(56a8689a
-0ad4
-11ce
-b03a
-0020af0ba770
),
365 pointer_default(unique)
367 interface IMediaSample
: IUnknown
369 HRESULT GetPointer
([out] BYTE ** ppBuffer
);
374 [out] REFERENCE_TIME
* pTimeStart
,
375 [out] REFERENCE_TIME
* pTimeEnd
);
378 [in] REFERENCE_TIME
* pTimeStart
,
379 [in] REFERENCE_TIME
* pTimeEnd
);
381 HRESULT IsSyncPoint
(void);
383 HRESULT SetSyncPoint
(BOOL bIsSyncPoint
);
385 HRESULT IsPreroll
(void);
387 HRESULT SetPreroll
(BOOL bIsPreroll
);
389 LONG GetActualDataLength
(void);
391 HRESULT SetActualDataLength
(LONG length
);
393 HRESULT GetMediaType
(AM_MEDIA_TYPE
**ppMediaType
);
395 HRESULT SetMediaType
(AM_MEDIA_TYPE
*pMediaType
);
397 HRESULT IsDiscontinuity
(void);
399 HRESULT SetDiscontinuity
(BOOL bDiscontinuity
);
401 HRESULT GetMediaTime
(
402 [out] LONGLONG
* pTimeStart
,
403 [out] LONGLONG
* pTimeEnd
);
405 HRESULT SetMediaTime
(
406 [in] LONGLONG
* pTimeStart
,
407 [in] LONGLONG
* pTimeEnd
);
410 typedef IMediaSample
*PMEDIASAMPLE
;
412 enum tagAM_SAMPLE_PROPERTY_FLAGS
414 AM_SAMPLE_SPLICEPOINT
= 0x01,
415 AM_SAMPLE_PREROLL
= 0x02,
416 AM_SAMPLE_DATADISCONTINUITY
= 0x04,
417 AM_SAMPLE_TYPECHANGED
= 0x08,
418 AM_SAMPLE_TIMEVALID
= 0x10,
419 AM_SAMPLE_TIMEDISCONTINUITY
= 0x40,
420 AM_SAMPLE_FLUSH_ON_PAUSE
= 0x80,
421 AM_SAMPLE_STOPVALID
= 0x100,
422 AM_SAMPLE_ENDOFSTREAM
= 0x200,
424 AM_STREAM_CONTROL
= 1
427 typedef struct tagAM_SAMPLE2_PROPERTIES
430 DWORD dwTypeSpecificFlags
;
433 REFERENCE_TIME tStart
;
434 REFERENCE_TIME tStop
;
436 AM_MEDIA_TYPE
*pMediaType
;
439 } AM_SAMPLE2_PROPERTIES
;
444 uuid(36b73884
-c2c8
-11cf
-8b46
-00805f6cef60
),
445 pointer_default(unique)
447 interface IMediaSample2
: IMediaSample
449 HRESULT GetProperties
(
450 [in] DWORD cbProperties
,
451 [out, size_is(cbProperties
)] BYTE * pbProperties
454 HRESULT SetProperties
(
455 [in] DWORD cbProperties
,
456 [in, size_is(cbProperties
)] const BYTE * pbProperties
460 typedef IMediaSample2
*PMEDIASAMPLE2
;
462 #define AM_GBF_PREVFRAMESKIPPED
1
463 #define AM_GBF_NOTASYNCPOINT
2
464 cpp_quote
("#define AM_GBF_PREVFRAMESKIPPED 1")
465 cpp_quote
("#define AM_GBF_NOTASYNCPOINT 2")
467 cpp_quote
("#define AM_GBF_NOWAIT 4")
471 uuid(56a8689c
-0ad4
-11ce
-b03a
-0020af0ba770
),
472 pointer_default(unique)
474 interface IMemAllocator
: IUnknown
476 HRESULT SetProperties
(
477 [in] ALLOCATOR_PROPERTIES
* pRequest
,
478 [out] ALLOCATOR_PROPERTIES
* pActual
);
480 HRESULT GetProperties
(
481 [out] ALLOCATOR_PROPERTIES
* pProps
);
483 HRESULT Commit
(void);
485 HRESULT Decommit
(void);
488 [out] IMediaSample
**ppBuffer
,
489 [in] REFERENCE_TIME
* pStartTime
,
490 [in] REFERENCE_TIME
* pEndTime
,
493 HRESULT ReleaseBuffer
(
494 [in] IMediaSample
*pBuffer
);
497 typedef IMemAllocator
*PMEMALLOCATOR
;
501 uuid(379a0cf0
-c1de
-11d2
-abf5
-00a0c905f375
),
502 pointer_default(unique)
504 interface IMemAllocatorCallbackTemp
: IMemAllocator
507 [in] IMemAllocatorNotifyCallbackTemp
*pNotify
);
509 HRESULT GetFreeCount
(
510 [out] LONG *plBuffersFree
);
515 uuid(92980b30
-c1de
-11d2
-abf5
-00a0c905f375
),
516 pointer_default(unique)
518 interface IMemAllocatorNotifyCallbackTemp
: IUnknown
520 HRESULT NotifyRelease
();
525 uuid(56a8689d
-0ad4
-11ce
-b03a
-0020af0ba770
),
526 pointer_default(unique)
528 interface IMemInputPin
: IUnknown
530 HRESULT GetAllocator
(
531 [out] IMemAllocator
** ppAllocator
);
533 HRESULT NotifyAllocator
(
534 [in] IMemAllocator
* pAllocator
,
535 [in] BOOL bReadOnly
);
537 HRESULT GetAllocatorRequirements
( [out] ALLOCATOR_PROPERTIES
*pProps
);
540 [in] IMediaSample
* pSample
);
542 HRESULT ReceiveMultiple
(
543 [in, size_is(nSamples
)] IMediaSample
**pSamples
,
545 [out] long *nSamplesProcessed
);
547 HRESULT ReceiveCanBlock
();
550 typedef IMemInputPin
*PMEMINPUTPIN
;
554 uuid(a3d8cec0
-7e5a
-11cf
-bbc5
-00805f6cef20
),
555 pointer_default(unique)
557 interface IAMovieSetup
: IUnknown
560 HRESULT Unregister
( );
563 typedef IAMovieSetup
*PAMOVIESETUP
;
565 typedef enum AM_SEEKING_SeekingFlags
567 AM_SEEKING_NoPositioning
= 0x00,
568 AM_SEEKING_AbsolutePositioning
= 0x01,
569 AM_SEEKING_RelativePositioning
= 0x02,
570 AM_SEEKING_IncrementalPositioning
= 0x03,
571 AM_SEEKING_PositioningBitsMask
= 0x03,
572 AM_SEEKING_SeekToKeyFrame
= 0x04,
573 AM_SEEKING_ReturnTime
= 0x08,
574 AM_SEEKING_Segment
= 0x10,
575 AM_SEEKING_NoFlush
= 0x20
576 } AM_SEEKING_SEEKING_FLAGS
;
578 typedef enum AM_SEEKING_SeekingCapabilities
580 AM_SEEKING_CanSeekAbsolute
= 0x001,
581 AM_SEEKING_CanSeekForwards
= 0x002,
582 AM_SEEKING_CanSeekBackwards
= 0x004,
583 AM_SEEKING_CanGetCurrentPos
= 0x008,
584 AM_SEEKING_CanGetStopPos
= 0x010,
585 AM_SEEKING_CanGetDuration
= 0x020,
586 AM_SEEKING_CanPlayBackwards
= 0x040,
587 AM_SEEKING_CanDoSegments
= 0x080,
588 AM_SEEKING_Source
= 0x100
589 } AM_SEEKING_SEEKING_CAPABILITIES
;
593 uuid(36b73880
-c2c8
-11cf
-8b46
-00805f6cef60
),
594 pointer_default(unique)
596 interface IMediaSeeking
: IUnknown
598 HRESULT GetCapabilities
( [out] DWORD
* pCapabilities
);
600 HRESULT CheckCapabilities
( [in,out] DWORD
* pCapabilities
);
602 HRESULT IsFormatSupported
([in] const GUID
* pFormat
);
604 HRESULT QueryPreferredFormat
([out] GUID
* pFormat
);
606 HRESULT GetTimeFormat
([out] GUID
*pFormat
);
608 HRESULT IsUsingTimeFormat
([in] const GUID
* pFormat
);
610 HRESULT SetTimeFormat
([in] const GUID
* pFormat
);
612 HRESULT GetDuration
([out] LONGLONG
*pDuration
);
614 HRESULT GetStopPosition
([out] LONGLONG
*pStop
);
616 HRESULT GetCurrentPosition
([out] LONGLONG
*pCurrent
);
618 HRESULT ConvertTimeFormat
([out] LONGLONG
* pTarget
, [in] const GUID
* pTargetFormat
,
619 [in] LONGLONG
Source, [in] const GUID
* pSourceFormat
);
621 HRESULT SetPositions
(
622 [in,out] LONGLONG
* pCurrent
,
623 [in] DWORD dwCurrentFlags
,
624 [in,out] LONGLONG
* pStop
,
625 [in] DWORD dwStopFlags
);
627 HRESULT GetPositions
(
628 [out] LONGLONG
* pCurrent
,
629 [out] LONGLONG
* pStop
);
631 HRESULT GetAvailable
(
632 [out] LONGLONG
* pEarliest
,
633 [out] LONGLONG
* pLatest
);
635 HRESULT SetRate
([in] double dRate
);
637 HRESULT GetRate
([out] double * pdRate
);
639 HRESULT GetPreroll
([out] LONGLONG
* pllPreroll
);
642 typedef IMediaSeeking
*PMEDIASEEKING
;
644 enum tagAM_MEDIAEVENT_FLAGS
646 AM_MEDIAEVENT_NONOTIFY
= 0x01