| /* | 
 |  * 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("#ifdef WINE_NO_UNICODE_MACROS") | 
 | cpp_quote("#undef GetTimeFormat") | 
 | cpp_quote("#endif") | 
 |  | 
 | 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") | 
 |  | 
 | cpp_quote("#ifndef REFERENCE_TIME_DEFINED") | 
 | cpp_quote("#define REFERENCE_TIME_DEFINED") | 
 | typedef LONGLONG REFERENCE_TIME; | 
 | cpp_quote("#endif") | 
 |  | 
 | cpp_quote("#ifndef REFTIME_DEFINED") | 
 | cpp_quote("#define REFTIME_DEFINED") | 
 | typedef DOUBLE REFTIME; | 
 | cpp_quote("#endif") | 
 |  | 
 | 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") | 
 | cpp_quote("#define AM_GBF_NODDSURFACELOCK 8") | 
 |  | 
 | [ | 
 | 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 | 
 | }; |