123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648 |
- /*
- * Copyright (C) 2002 Robert Shearman
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
- #define CHARS_IN_GUID 39
- cpp_quote("#define CHARS_IN_GUID 39")
- /* GetTimeFormat is defined in winnls.h as
- * either the W or A suffixed version */
- cpp_quote("#undef GetTimeFormat")
- typedef struct _AMMediaType
- {
- GUID majortype;
- GUID subtype;
- BOOL bFixedSizeSamples;
- BOOL bTemporalCompression;
- ULONG lSampleSize;
- GUID formattype;
- IUnknown * pUnk;
- ULONG cbFormat;
- [size_is(cbFormat)] BYTE * pbFormat;
- } AM_MEDIA_TYPE;
- typedef enum _PinDirection
- {
- PINDIR_INPUT,
- PINDIR_OUTPUT
- } PIN_DIRECTION;
- #define MAX_PIN_NAME 128
- #define MAX_FILTER_NAME 128
- cpp_quote("#define MAX_PIN_NAME 128")
- cpp_quote("#define MAX_FILTER_NAME 128")
- typedef LONGLONG REFERENCE_TIME;
- typedef DOUBLE REFTIME;
- typedef DWORD_PTR HSEMAPHORE;
- typedef DWORD_PTR HEVENT;
- typedef struct _AllocatorProperties
- {
- long cBuffers;
- long cbBuffer;
- long cbAlign;
- long cbPrefix;
- } ALLOCATOR_PROPERTIES;
- interface IAMovieSetup;
- interface IEnumFilters;
- interface IEnumMediaTypes;
- interface IEnumPins;
- interface IBaseFilter;
- interface IFilterGraph;
- interface IMediaFilter;
- interface IMediaSample;
- interface IMemAllocator;
- interface IMemAllocatorCallbackTemp;
- interface IMemAllocatorNotifyCallbackTemp;
- interface IMemInputPin;
- interface IPin;
- interface IReferenceClock;
- [
- object,
- uuid(56a86891-0ad4-11ce-b03a-0020af0ba770),
- pointer_default(unique)
- ]
- interface IPin : IUnknown
- {
- typedef struct _PinInfo
- {
- IBaseFilter *pFilter;
- PIN_DIRECTION dir;
- WCHAR achName[MAX_PIN_NAME];
- } PIN_INFO;
- HRESULT Connect(
- [in] IPin * pReceivePin,
- [in] const AM_MEDIA_TYPE * pmt);
- HRESULT ReceiveConnection(
- [in] IPin * pConnector,
- [in] const AM_MEDIA_TYPE *pmt);
- HRESULT Disconnect(void);
- HRESULT ConnectedTo(
- [out] IPin **pPin);
- HRESULT ConnectionMediaType(
- [out] AM_MEDIA_TYPE *pmt);
- HRESULT QueryPinInfo(
- [out] PIN_INFO * pInfo);
- HRESULT QueryDirection(
- [out] PIN_DIRECTION *pPinDir);
- HRESULT QueryId(
- [out] LPWSTR * Id);
- HRESULT QueryAccept(
- [in] const AM_MEDIA_TYPE *pmt);
- HRESULT EnumMediaTypes(
- [out] IEnumMediaTypes **ppEnum);
- HRESULT QueryInternalConnections(
- [out] IPin* *apPin,
- [in, out] ULONG *nPin);
- HRESULT EndOfStream(void);
- HRESULT BeginFlush(void);
- HRESULT EndFlush(void);
- HRESULT NewSegment(
- [in] REFERENCE_TIME tStart,
- [in] REFERENCE_TIME tStop,
- [in] double dRate);
- }
- typedef IPin *PPIN;
- [
- object,
- uuid(56a86892-0ad4-11ce-b03a-0020af0ba770),
- pointer_default(unique)
- ]
- interface IEnumPins : IUnknown
- {
- HRESULT Next(
- [in] ULONG cPins,
- [out, size_is(cPins)] IPin ** ppPins,
- [out] ULONG * pcFetched);
- HRESULT Skip(
- [in] ULONG cPins);
- HRESULT Reset(void);
- HRESULT Clone(
- [out] IEnumPins **ppEnum);
- }
- typedef IEnumPins *PENUMPINS;
- [
- object,
- uuid(89c31040-846b-11ce-97d3-00aa0055595a),
- pointer_default(unique)
- ]
- interface IEnumMediaTypes : IUnknown
- {
- HRESULT Next(
- [in] ULONG cMediaTypes,
- [out, size_is(cMediaTypes)]
- AM_MEDIA_TYPE ** ppMediaTypes,
- [out] ULONG * pcFetched
- );
- HRESULT Skip(
- [in] ULONG cMediaTypes);
- HRESULT Reset(void);
- HRESULT Clone(
- [out] IEnumMediaTypes **ppEnum
- );
- }
- typedef IEnumMediaTypes *PENUMMEDIATYPES;
- [
- object,
- uuid(56a8689f-0ad4-11ce-b03a-0020af0ba770),
- pointer_default(unique)
- ]
- interface IFilterGraph : IUnknown
- {
- HRESULT AddFilter(
- [in] IBaseFilter * pFilter,
- [in, string] LPCWSTR pName);
- HRESULT RemoveFilter(
- [in] IBaseFilter * pFilter);
- HRESULT EnumFilters(
- [out] IEnumFilters **ppEnum);
- HRESULT FindFilterByName(
- [in, string] LPCWSTR pName,
- [out] IBaseFilter ** ppFilter);
- HRESULT ConnectDirect(
- [in] IPin * ppinOut,
- [in] IPin * ppinIn,
- [in, unique] const AM_MEDIA_TYPE* pmt);
- HRESULT Reconnect(
- [in] IPin * ppin);
- HRESULT Disconnect(
- [in] IPin * ppin);
- HRESULT SetDefaultSyncSource(void);
- }
- typedef IFilterGraph *PFILTERGRAPH;
- [
- object,
- uuid(56a86893-0ad4-11ce-b03a-0020af0ba770),
- pointer_default(unique)
- ]
- interface IEnumFilters : IUnknown
- {
- HRESULT Next(
- [in] ULONG cFilters,
- [out] IBaseFilter ** ppFilter,
- [out] ULONG * pcFetched);
- HRESULT Skip(
- [in] ULONG cFilters);
- HRESULT Reset(void);
- HRESULT Clone(
- [out] IEnumFilters **ppEnum);
- }
- typedef IEnumFilters *PENUMFILTERS;
- [
- object,
- uuid(56a86899-0ad4-11ce-b03a-0020af0ba770),
- pointer_default(unique)
- ]
- interface IMediaFilter : IPersist
- {
- typedef enum _FilterState
- {
- State_Stopped,
- State_Paused,
- State_Running
- } FILTER_STATE;
- HRESULT Stop(void);
- HRESULT Pause(void);
- HRESULT Run(REFERENCE_TIME tStart);
- HRESULT GetState(
- [in] DWORD dwMilliSecsTimeout,
- [out] FILTER_STATE *State);
- HRESULT SetSyncSource(
- [in] IReferenceClock * pClock);
- HRESULT GetSyncSource(
- [out] IReferenceClock ** pClock);
- }
- typedef IMediaFilter *PMEDIAFILTER;
- [
- object,
- uuid(56a86895-0ad4-11ce-b03a-0020af0ba770),
- pointer_default(unique)
- ]
- interface IBaseFilter : IMediaFilter
- {
- typedef struct _FilterInfo
- {
- WCHAR achName[MAX_FILTER_NAME];
- IFilterGraph * pGraph;
- } FILTER_INFO;
- HRESULT EnumPins(
- [out] IEnumPins ** ppEnum);
- HRESULT FindPin(
- [in, string] LPCWSTR Id,
- [out] IPin ** ppPin);
- HRESULT QueryFilterInfo(
- [out] FILTER_INFO * pInfo);
- HRESULT JoinFilterGraph(
- [in] IFilterGraph * pGraph,
- [in, string] LPCWSTR pName);
- HRESULT QueryVendorInfo(
- [out, string] LPWSTR* pVendorInfo);
- }
- typedef IBaseFilter *PFILTER;
- [
- object,
- uuid(56a86897-0ad4-11ce-b03a-0020af0ba770),
- pointer_default(unique)
- ]
- interface IReferenceClock : IUnknown
- {
- HRESULT GetTime(
- [out] REFERENCE_TIME *pTime);
- HRESULT AdviseTime(
- [in] REFERENCE_TIME baseTime,
- [in] REFERENCE_TIME streamTime,
- [in] HEVENT hEvent,
- [out] DWORD_PTR * pdwAdviseCookie);
- HRESULT AdvisePeriodic(
- [in] REFERENCE_TIME startTime,
- [in] REFERENCE_TIME periodTime,
- [in] HSEMAPHORE hSemaphore,
- [out] DWORD_PTR * pdwAdviseCookie);
- HRESULT Unadvise(
- [in] DWORD_PTR dwAdviseCookie);
- }
- typedef IReferenceClock *PREFERENCECLOCK;
- /*
- [
- object,
- uuid(36b73885-c2c8-11cf-8b46-00805f6cef60),
- pointer_default(unique)
- ]
- interface IReferenceClock2 : IReferenceClock
- {
- }
- typedef IReferenceClock2 *PREFERENCECLOCK2;
- */
- [
- local,
- object,
- uuid(56a8689a-0ad4-11ce-b03a-0020af0ba770),
- pointer_default(unique)
- ]
- interface IMediaSample : IUnknown
- {
- HRESULT GetPointer([out] BYTE ** ppBuffer);
- long GetSize(void);
- HRESULT GetTime(
- [out] REFERENCE_TIME * pTimeStart,
- [out] REFERENCE_TIME * pTimeEnd);
- HRESULT SetTime(
- [in] REFERENCE_TIME * pTimeStart,
- [in] REFERENCE_TIME * pTimeEnd);
- HRESULT IsSyncPoint(void);
- HRESULT SetSyncPoint(BOOL bIsSyncPoint);
- HRESULT IsPreroll(void);
- HRESULT SetPreroll(BOOL bIsPreroll);
- LONG GetActualDataLength(void);
- HRESULT SetActualDataLength(LONG length);
- HRESULT GetMediaType(AM_MEDIA_TYPE **ppMediaType);
- HRESULT SetMediaType(AM_MEDIA_TYPE *pMediaType);
- HRESULT IsDiscontinuity(void);
- HRESULT SetDiscontinuity(BOOL bDiscontinuity);
- HRESULT GetMediaTime(
- [out] LONGLONG * pTimeStart,
- [out] LONGLONG * pTimeEnd);
- HRESULT SetMediaTime(
- [in] LONGLONG * pTimeStart,
- [in] LONGLONG * pTimeEnd);
- }
- typedef IMediaSample *PMEDIASAMPLE;
- enum tagAM_SAMPLE_PROPERTY_FLAGS
- {
- AM_SAMPLE_SPLICEPOINT = 0x01,
- AM_SAMPLE_PREROLL = 0x02,
- AM_SAMPLE_DATADISCONTINUITY = 0x04,
- AM_SAMPLE_TYPECHANGED = 0x08,
- AM_SAMPLE_TIMEVALID = 0x10,
- AM_SAMPLE_TIMEDISCONTINUITY = 0x40,
- AM_SAMPLE_FLUSH_ON_PAUSE = 0x80,
- AM_SAMPLE_STOPVALID = 0x100,
- AM_SAMPLE_ENDOFSTREAM = 0x200,
- AM_STREAM_MEDIA = 0,
- AM_STREAM_CONTROL = 1
- };
- typedef struct tagAM_SAMPLE2_PROPERTIES
- {
- DWORD cbData;
- DWORD dwTypeSpecificFlags;
- DWORD dwSampleFlags;
- LONG lActual;
- REFERENCE_TIME tStart;
- REFERENCE_TIME tStop;
- DWORD dwStreamId;
- AM_MEDIA_TYPE *pMediaType;
- BYTE *pbBuffer;
- LONG cbBuffer;
- } AM_SAMPLE2_PROPERTIES;
- [
- local,
- object,
- uuid(36b73884-c2c8-11cf-8b46-00805f6cef60),
- pointer_default(unique)
- ]
- interface IMediaSample2 : IMediaSample
- {
- HRESULT GetProperties(
- [in] DWORD cbProperties,
- [out, size_is(cbProperties)] BYTE * pbProperties
- );
- HRESULT SetProperties(
- [in] DWORD cbProperties,
- [in, size_is(cbProperties)] const BYTE * pbProperties
- );
- }
- typedef IMediaSample2 *PMEDIASAMPLE2;
- #define AM_GBF_PREVFRAMESKIPPED 1
- #define AM_GBF_NOTASYNCPOINT 2
- cpp_quote("#define AM_GBF_PREVFRAMESKIPPED 1")
- cpp_quote("#define AM_GBF_NOTASYNCPOINT 2")
- cpp_quote("#define AM_GBF_NOWAIT 4")
- [
- object,
- uuid(56a8689c-0ad4-11ce-b03a-0020af0ba770),
- pointer_default(unique)
- ]
- interface IMemAllocator : IUnknown
- {
- HRESULT SetProperties(
- [in] ALLOCATOR_PROPERTIES* pRequest,
- [out] ALLOCATOR_PROPERTIES* pActual);
- HRESULT GetProperties(
- [out] ALLOCATOR_PROPERTIES* pProps);
- HRESULT Commit(void);
- HRESULT Decommit(void);
- HRESULT GetBuffer(
- [out] IMediaSample **ppBuffer,
- [in] REFERENCE_TIME * pStartTime,
- [in] REFERENCE_TIME * pEndTime,
- [in] DWORD dwFlags);
- HRESULT ReleaseBuffer(
- [in] IMediaSample *pBuffer);
- }
- typedef IMemAllocator *PMEMALLOCATOR;
- [
- object,
- uuid(379a0cf0-c1de-11d2-abf5-00a0c905f375),
- pointer_default(unique)
- ]
- interface IMemAllocatorCallbackTemp : IMemAllocator
- {
- HRESULT SetNotify(
- [in] IMemAllocatorNotifyCallbackTemp *pNotify);
- HRESULT GetFreeCount(
- [out] LONG *plBuffersFree);
- }
- [
- object,
- uuid(92980b30-c1de-11d2-abf5-00a0c905f375),
- pointer_default(unique)
- ]
- interface IMemAllocatorNotifyCallbackTemp : IUnknown
- {
- HRESULT NotifyRelease();
- }
- [
- object,
- uuid(56a8689d-0ad4-11ce-b03a-0020af0ba770),
- pointer_default(unique)
- ]
- interface IMemInputPin : IUnknown
- {
- HRESULT GetAllocator(
- [out] IMemAllocator ** ppAllocator);
- HRESULT NotifyAllocator(
- [in] IMemAllocator * pAllocator,
- [in] BOOL bReadOnly);
- HRESULT GetAllocatorRequirements( [out] ALLOCATOR_PROPERTIES*pProps );
- HRESULT Receive(
- [in] IMediaSample * pSample);
- HRESULT ReceiveMultiple(
- [in, size_is(nSamples)] IMediaSample **pSamples,
- [in] long nSamples,
- [out] long *nSamplesProcessed);
- HRESULT ReceiveCanBlock();
- }
- typedef IMemInputPin *PMEMINPUTPIN;
- [
- object,
- uuid(a3d8cec0-7e5a-11cf-bbc5-00805f6cef20),
- pointer_default(unique)
- ]
- interface IAMovieSetup : IUnknown
- {
- HRESULT Register( );
- HRESULT Unregister( );
- }
- typedef IAMovieSetup *PAMOVIESETUP;
- typedef enum AM_SEEKING_SeekingFlags
- {
- AM_SEEKING_NoPositioning = 0x00,
- AM_SEEKING_AbsolutePositioning = 0x01,
- AM_SEEKING_RelativePositioning = 0x02,
- AM_SEEKING_IncrementalPositioning = 0x03,
- AM_SEEKING_PositioningBitsMask = 0x03,
- AM_SEEKING_SeekToKeyFrame = 0x04,
- AM_SEEKING_ReturnTime = 0x08,
- AM_SEEKING_Segment = 0x10,
- AM_SEEKING_NoFlush = 0x20
- } AM_SEEKING_SEEKING_FLAGS;
- typedef enum AM_SEEKING_SeekingCapabilities
- {
- AM_SEEKING_CanSeekAbsolute = 0x001,
- AM_SEEKING_CanSeekForwards = 0x002,
- AM_SEEKING_CanSeekBackwards = 0x004,
- AM_SEEKING_CanGetCurrentPos = 0x008,
- AM_SEEKING_CanGetStopPos = 0x010,
- AM_SEEKING_CanGetDuration = 0x020,
- AM_SEEKING_CanPlayBackwards = 0x040,
- AM_SEEKING_CanDoSegments = 0x080,
- AM_SEEKING_Source = 0x100
- } AM_SEEKING_SEEKING_CAPABILITIES;
- [
- object,
- uuid(36b73880-c2c8-11cf-8b46-00805f6cef60),
- pointer_default(unique)
- ]
- interface IMediaSeeking : IUnknown
- {
- HRESULT GetCapabilities( [out] DWORD * pCapabilities );
- HRESULT CheckCapabilities( [in,out] DWORD * pCapabilities );
- HRESULT IsFormatSupported([in] const GUID * pFormat);
- HRESULT QueryPreferredFormat([out] GUID * pFormat);
- HRESULT GetTimeFormat([out] GUID *pFormat);
- HRESULT IsUsingTimeFormat([in] const GUID * pFormat);
- HRESULT SetTimeFormat([in] const GUID * pFormat);
- HRESULT GetDuration([out] LONGLONG *pDuration);
- HRESULT GetStopPosition([out] LONGLONG *pStop);
- HRESULT GetCurrentPosition([out] LONGLONG *pCurrent);
- HRESULT ConvertTimeFormat([out] LONGLONG * pTarget, [in] const GUID * pTargetFormat,
- [in] LONGLONG Source, [in] const GUID * pSourceFormat );
- HRESULT SetPositions(
- [in,out] LONGLONG * pCurrent,
- [in] DWORD dwCurrentFlags,
- [in,out] LONGLONG * pStop,
- [in] DWORD dwStopFlags);
- HRESULT GetPositions(
- [out] LONGLONG * pCurrent,
- [out] LONGLONG * pStop);
- HRESULT GetAvailable(
- [out] LONGLONG * pEarliest,
- [out] LONGLONG * pLatest);
- HRESULT SetRate([in] double dRate);
- HRESULT GetRate([out] double * pdRate);
- HRESULT GetPreroll([out] LONGLONG * pllPreroll);
- }
- typedef IMediaSeeking *PMEDIASEEKING;
- enum tagAM_MEDIAEVENT_FLAGS
- {
- AM_MEDIAEVENT_NONOTIFY = 0x01
- };
|