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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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