| /* |
| * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, 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 |
| }; |