|  | /* | 
|  | * 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 | 
|  | }; |