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 cpp_quote
("#ifndef REFERENCE_TIME_DEFINED")
51 cpp_quote
("#define REFERENCE_TIME_DEFINED")
52 typedef LONGLONG REFERENCE_TIME
;
55 cpp_quote
("#ifndef REFTIME_DEFINED")
56 cpp_quote
("#define REFTIME_DEFINED")
57 typedef DOUBLE REFTIME
;
60 typedef DWORD_PTR HSEMAPHORE
;
61 typedef DWORD_PTR HEVENT
;
63 typedef struct _AllocatorProperties
69 } ALLOCATOR_PROPERTIES
;
71 interface IAMovieSetup
;
72 interface IEnumFilters
;
73 interface IEnumMediaTypes
;
75 interface IBaseFilter
;
76 interface IFilterGraph
;
77 interface IMediaFilter
;
78 interface IMediaSample
;
79 interface IMemAllocator
;
80 interface IMemAllocatorCallbackTemp
;
81 interface IMemAllocatorNotifyCallbackTemp
;
82 interface IMemInputPin
;
84 interface IReferenceClock
;
88 uuid(56a86891
-0ad4
-11ce
-b03a
-0020af0ba770
),
89 pointer_default(unique)
91 interface IPin
: IUnknown
93 typedef struct _PinInfo
97 WCHAR achName
[MAX_PIN_NAME
];
101 [in] IPin
* pReceivePin
,
102 [in] const AM_MEDIA_TYPE
* pmt
);
104 HRESULT ReceiveConnection
(
105 [in] IPin
* pConnector
,
106 [in] const AM_MEDIA_TYPE
*pmt
);
108 HRESULT Disconnect
(void);
113 HRESULT ConnectionMediaType
(
114 [out] AM_MEDIA_TYPE
*pmt
);
116 HRESULT QueryPinInfo
(
117 [out] PIN_INFO
* pInfo
);
119 HRESULT QueryDirection
(
120 [out] PIN_DIRECTION
*pPinDir
);
126 [in] const AM_MEDIA_TYPE
*pmt
);
128 HRESULT EnumMediaTypes
(
129 [out] IEnumMediaTypes
**ppEnum
);
131 HRESULT QueryInternalConnections
(
133 [in, out] ULONG
*nPin
);
135 HRESULT EndOfStream
(void);
137 HRESULT BeginFlush
(void);
139 HRESULT EndFlush
(void);
141 [in] REFERENCE_TIME tStart
,
142 [in] REFERENCE_TIME tStop
,
150 uuid(56a86892
-0ad4
-11ce
-b03a
-0020af0ba770
),
151 pointer_default(unique)
153 interface IEnumPins
: IUnknown
158 [out, size_is(cPins
)] IPin
** ppPins
,
159 [out] ULONG
* pcFetched
);
167 [out] IEnumPins
**ppEnum
);
170 typedef IEnumPins
*PENUMPINS
;
174 uuid(89c31040
-846b
-11ce
-97d3
-00aa0055595a
),
175 pointer_default(unique)
177 interface IEnumMediaTypes
: IUnknown
180 [in] ULONG cMediaTypes
,
181 [out, size_is(cMediaTypes
)]
182 AM_MEDIA_TYPE
** ppMediaTypes
,
183 [out] ULONG
* pcFetched
187 [in] ULONG cMediaTypes
);
192 [out] IEnumMediaTypes
**ppEnum
196 typedef IEnumMediaTypes
*PENUMMEDIATYPES
;
200 uuid(56a8689f
-0ad4
-11ce
-b03a
-0020af0ba770
),
201 pointer_default(unique)
203 interface IFilterGraph
: IUnknown
206 [in] IBaseFilter
* pFilter
,
207 [in, string] LPCWSTR pName
);
209 HRESULT RemoveFilter
(
210 [in] IBaseFilter
* pFilter
);
213 [out] IEnumFilters
**ppEnum
);
215 HRESULT FindFilterByName
(
216 [in, string] LPCWSTR pName
,
217 [out] IBaseFilter
** ppFilter
);
219 HRESULT ConnectDirect
(
222 [in, unique] const AM_MEDIA_TYPE
* pmt
);
230 HRESULT SetDefaultSyncSource
(void);
233 typedef IFilterGraph
*PFILTERGRAPH
;
237 uuid(56a86893
-0ad4
-11ce
-b03a
-0020af0ba770
),
238 pointer_default(unique)
240 interface IEnumFilters
: IUnknown
244 [out] IBaseFilter
** ppFilter
,
245 [out] ULONG
* pcFetched
);
249 [in] ULONG cFilters
);
256 [out] IEnumFilters
**ppEnum
);
259 typedef IEnumFilters
*PENUMFILTERS
;
263 uuid(56a86899
-0ad4
-11ce
-b03a
-0020af0ba770
),
264 pointer_default(unique)
266 interface IMediaFilter
: IPersist
268 typedef enum _FilterState
278 HRESULT Run
(REFERENCE_TIME tStart
);
281 [in] DWORD dwMilliSecsTimeout
,
282 [out] FILTER_STATE
*State
);
284 HRESULT SetSyncSource
(
285 [in] IReferenceClock
* pClock
);
287 HRESULT GetSyncSource
(
288 [out] IReferenceClock
** pClock
);
291 typedef IMediaFilter
*PMEDIAFILTER
;
295 uuid(56a86895
-0ad4
-11ce
-b03a
-0020af0ba770
),
296 pointer_default(unique)
298 interface IBaseFilter
: IMediaFilter
300 typedef struct _FilterInfo
302 WCHAR achName
[MAX_FILTER_NAME
];
303 IFilterGraph
* pGraph
;
307 [out] IEnumPins
** ppEnum
);
310 [in, string] LPCWSTR
Id,
311 [out] IPin
** ppPin
);
313 HRESULT QueryFilterInfo
(
314 [out] FILTER_INFO
* pInfo
);
316 HRESULT JoinFilterGraph
(
317 [in] IFilterGraph
* pGraph
,
318 [in, string] LPCWSTR pName
);
320 HRESULT QueryVendorInfo
(
321 [out, string] LPWSTR
* pVendorInfo
);
324 typedef IBaseFilter
*PFILTER
;
328 uuid(56a86897
-0ad4
-11ce
-b03a
-0020af0ba770
),
329 pointer_default(unique)
331 interface IReferenceClock
: IUnknown
334 [out] REFERENCE_TIME
*pTime
);
337 [in] REFERENCE_TIME baseTime
,
338 [in] REFERENCE_TIME streamTime
,
340 [out] DWORD_PTR
* pdwAdviseCookie
);
342 HRESULT AdvisePeriodic
(
343 [in] REFERENCE_TIME startTime
,
344 [in] REFERENCE_TIME periodTime
,
345 [in] HSEMAPHORE hSemaphore
,
346 [out] DWORD_PTR
* pdwAdviseCookie
);
349 [in] DWORD_PTR dwAdviseCookie
);
352 typedef IReferenceClock
*PREFERENCECLOCK
;
357 uuid(36b73885-c2c8-11cf-8b46-00805f6cef60),
358 pointer_default(unique)
360 interface IReferenceClock2 : IReferenceClock
364 typedef IReferenceClock2 *PREFERENCECLOCK2;
371 uuid(56a8689a
-0ad4
-11ce
-b03a
-0020af0ba770
),
372 pointer_default(unique)
374 interface IMediaSample
: IUnknown
376 HRESULT GetPointer
([out] BYTE ** ppBuffer
);
381 [out] REFERENCE_TIME
* pTimeStart
,
382 [out] REFERENCE_TIME
* pTimeEnd
);
385 [in] REFERENCE_TIME
* pTimeStart
,
386 [in] REFERENCE_TIME
* pTimeEnd
);
388 HRESULT IsSyncPoint
(void);
390 HRESULT SetSyncPoint
(BOOL bIsSyncPoint
);
392 HRESULT IsPreroll
(void);
394 HRESULT SetPreroll
(BOOL bIsPreroll
);
396 LONG GetActualDataLength
(void);
398 HRESULT SetActualDataLength
(LONG length
);
400 HRESULT GetMediaType
(AM_MEDIA_TYPE
**ppMediaType
);
402 HRESULT SetMediaType
(AM_MEDIA_TYPE
*pMediaType
);
404 HRESULT IsDiscontinuity
(void);
406 HRESULT SetDiscontinuity
(BOOL bDiscontinuity
);
408 HRESULT GetMediaTime
(
409 [out] LONGLONG
* pTimeStart
,
410 [out] LONGLONG
* pTimeEnd
);
412 HRESULT SetMediaTime
(
413 [in] LONGLONG
* pTimeStart
,
414 [in] LONGLONG
* pTimeEnd
);
417 typedef IMediaSample
*PMEDIASAMPLE
;
419 enum tagAM_SAMPLE_PROPERTY_FLAGS
421 AM_SAMPLE_SPLICEPOINT
= 0x01,
422 AM_SAMPLE_PREROLL
= 0x02,
423 AM_SAMPLE_DATADISCONTINUITY
= 0x04,
424 AM_SAMPLE_TYPECHANGED
= 0x08,
425 AM_SAMPLE_TIMEVALID
= 0x10,
426 AM_SAMPLE_TIMEDISCONTINUITY
= 0x40,
427 AM_SAMPLE_FLUSH_ON_PAUSE
= 0x80,
428 AM_SAMPLE_STOPVALID
= 0x100,
429 AM_SAMPLE_ENDOFSTREAM
= 0x200,
431 AM_STREAM_CONTROL
= 1
434 typedef struct tagAM_SAMPLE2_PROPERTIES
437 DWORD dwTypeSpecificFlags
;
440 REFERENCE_TIME tStart
;
441 REFERENCE_TIME tStop
;
443 AM_MEDIA_TYPE
*pMediaType
;
446 } AM_SAMPLE2_PROPERTIES
;
451 uuid(36b73884
-c2c8
-11cf
-8b46
-00805f6cef60
),
452 pointer_default(unique)
454 interface IMediaSample2
: IMediaSample
456 HRESULT GetProperties
(
457 [in] DWORD cbProperties
,
458 [out, size_is(cbProperties
)] BYTE * pbProperties
461 HRESULT SetProperties
(
462 [in] DWORD cbProperties
,
463 [in, size_is(cbProperties
)] const BYTE * pbProperties
467 typedef IMediaSample2
*PMEDIASAMPLE2
;
469 #define AM_GBF_PREVFRAMESKIPPED
1
470 #define AM_GBF_NOTASYNCPOINT
2
471 cpp_quote
("#define AM_GBF_PREVFRAMESKIPPED 1")
472 cpp_quote
("#define AM_GBF_NOTASYNCPOINT 2")
474 cpp_quote
("#define AM_GBF_NOWAIT 4")
478 uuid(56a8689c
-0ad4
-11ce
-b03a
-0020af0ba770
),
479 pointer_default(unique)
481 interface IMemAllocator
: IUnknown
483 HRESULT SetProperties
(
484 [in] ALLOCATOR_PROPERTIES
* pRequest
,
485 [out] ALLOCATOR_PROPERTIES
* pActual
);
487 HRESULT GetProperties
(
488 [out] ALLOCATOR_PROPERTIES
* pProps
);
490 HRESULT Commit
(void);
492 HRESULT Decommit
(void);
495 [out] IMediaSample
**ppBuffer
,
496 [in] REFERENCE_TIME
* pStartTime
,
497 [in] REFERENCE_TIME
* pEndTime
,
500 HRESULT ReleaseBuffer
(
501 [in] IMediaSample
*pBuffer
);
504 typedef IMemAllocator
*PMEMALLOCATOR
;
508 uuid(379a0cf0
-c1de
-11d2
-abf5
-00a0c905f375
),
509 pointer_default(unique)
511 interface IMemAllocatorCallbackTemp
: IMemAllocator
514 [in] IMemAllocatorNotifyCallbackTemp
*pNotify
);
516 HRESULT GetFreeCount
(
517 [out] LONG *plBuffersFree
);
522 uuid(92980b30
-c1de
-11d2
-abf5
-00a0c905f375
),
523 pointer_default(unique)
525 interface IMemAllocatorNotifyCallbackTemp
: IUnknown
527 HRESULT NotifyRelease
();
532 uuid(56a8689d
-0ad4
-11ce
-b03a
-0020af0ba770
),
533 pointer_default(unique)
535 interface IMemInputPin
: IUnknown
537 HRESULT GetAllocator
(
538 [out] IMemAllocator
** ppAllocator
);
540 HRESULT NotifyAllocator
(
541 [in] IMemAllocator
* pAllocator
,
542 [in] BOOL bReadOnly
);
544 HRESULT GetAllocatorRequirements
( [out] ALLOCATOR_PROPERTIES
*pProps
);
547 [in] IMediaSample
* pSample
);
549 HRESULT ReceiveMultiple
(
550 [in, size_is(nSamples
)] IMediaSample
**pSamples
,
552 [out] long *nSamplesProcessed
);
554 HRESULT ReceiveCanBlock
();
557 typedef IMemInputPin
*PMEMINPUTPIN
;
561 uuid(a3d8cec0
-7e5a
-11cf
-bbc5
-00805f6cef20
),
562 pointer_default(unique)
564 interface IAMovieSetup
: IUnknown
567 HRESULT Unregister
( );
570 typedef IAMovieSetup
*PAMOVIESETUP
;
572 typedef enum AM_SEEKING_SeekingFlags
574 AM_SEEKING_NoPositioning
= 0x00,
575 AM_SEEKING_AbsolutePositioning
= 0x01,
576 AM_SEEKING_RelativePositioning
= 0x02,
577 AM_SEEKING_IncrementalPositioning
= 0x03,
578 AM_SEEKING_PositioningBitsMask
= 0x03,
579 AM_SEEKING_SeekToKeyFrame
= 0x04,
580 AM_SEEKING_ReturnTime
= 0x08,
581 AM_SEEKING_Segment
= 0x10,
582 AM_SEEKING_NoFlush
= 0x20
583 } AM_SEEKING_SEEKING_FLAGS
;
585 typedef enum AM_SEEKING_SeekingCapabilities
587 AM_SEEKING_CanSeekAbsolute
= 0x001,
588 AM_SEEKING_CanSeekForwards
= 0x002,
589 AM_SEEKING_CanSeekBackwards
= 0x004,
590 AM_SEEKING_CanGetCurrentPos
= 0x008,
591 AM_SEEKING_CanGetStopPos
= 0x010,
592 AM_SEEKING_CanGetDuration
= 0x020,
593 AM_SEEKING_CanPlayBackwards
= 0x040,
594 AM_SEEKING_CanDoSegments
= 0x080,
595 AM_SEEKING_Source
= 0x100
596 } AM_SEEKING_SEEKING_CAPABILITIES
;
600 uuid(36b73880
-c2c8
-11cf
-8b46
-00805f6cef60
),
601 pointer_default(unique)
603 interface IMediaSeeking
: IUnknown
605 HRESULT GetCapabilities
( [out] DWORD
* pCapabilities
);
607 HRESULT CheckCapabilities
( [in,out] DWORD
* pCapabilities
);
609 HRESULT IsFormatSupported
([in] const GUID
* pFormat
);
611 HRESULT QueryPreferredFormat
([out] GUID
* pFormat
);
613 HRESULT GetTimeFormat
([out] GUID
*pFormat
);
615 HRESULT IsUsingTimeFormat
([in] const GUID
* pFormat
);
617 HRESULT SetTimeFormat
([in] const GUID
* pFormat
);
619 HRESULT GetDuration
([out] LONGLONG
*pDuration
);
621 HRESULT GetStopPosition
([out] LONGLONG
*pStop
);
623 HRESULT GetCurrentPosition
([out] LONGLONG
*pCurrent
);
625 HRESULT ConvertTimeFormat
([out] LONGLONG
* pTarget
, [in] const GUID
* pTargetFormat
,
626 [in] LONGLONG
Source, [in] const GUID
* pSourceFormat
);
628 HRESULT SetPositions
(
629 [in,out] LONGLONG
* pCurrent
,
630 [in] DWORD dwCurrentFlags
,
631 [in,out] LONGLONG
* pStop
,
632 [in] DWORD dwStopFlags
);
634 HRESULT GetPositions
(
635 [out] LONGLONG
* pCurrent
,
636 [out] LONGLONG
* pStop
);
638 HRESULT GetAvailable
(
639 [out] LONGLONG
* pEarliest
,
640 [out] LONGLONG
* pLatest
);
642 HRESULT SetRate
([in] double dRate
);
644 HRESULT GetRate
([out] double * pdRate
);
646 HRESULT GetPreroll
([out] LONGLONG
* pllPreroll
);
649 typedef IMediaSeeking
*PMEDIASEEKING
;
651 enum tagAM_MEDIAEVENT_FLAGS
653 AM_MEDIAEVENT_NONOTIFY
= 0x01