//------------------------------------------------------------------------------ // File: AMStream.idl // // Desc: // // Copyright (c) 1998-2001, Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ import "unknwn.idl"; import "mmstream.idl"; import "strmif.idl"; cpp_quote("#include ") cpp_quote("#include ") cpp_quote("#include ") cpp_quote("#include ") cpp_quote("#include ") interface IAMMultiMediaStream; interface IAMMediaStream; interface IMediaStreamFilter; interface IDirectDraw; interface IDirectDrawSurface; interface IAMMediaTypeStream; interface IAMMediaTypeSample; // Flags definitions for IAMMultiMediaStream::Initialize enum { AMMSF_NOGRAPHTHREAD = 0x00000001 }; // Flags definitions for AddMediaStream and IAMMediaStream::Initialize enum { // Don't add a stream - create a default renderer instead // for the supplied purpose id AMMSF_ADDDEFAULTRENDERER = 0x00000001, AMMSF_CREATEPEER = 0x00000002, // If no samples are created when we run or the last sample // is deleted then terminate this stream AMMSF_STOPIFNOSAMPLES = 0x00000004, // If Update is not called keep going AMMSF_NOSTALL = 0x00000008 }; // Flag definitions for OpenFile and OpenMoniker enum { AMMSF_RENDERTYPEMASK = 0x00000003, AMMSF_RENDERTOEXISTING = 0x00000000, AMMSF_RENDERALLSTREAMS = 0x00000001, AMMSF_NORENDER = 0x00000002, AMMSF_NOCLOCK = 0x00000004, AMMSF_RUN = 0x00000008 }; typedef [v1_enum] enum { Disabled = 0, ReadData = 1, RenderData = 2 } OUTPUT_STATE; [ object, uuid(7DB01C96-C0C3-11d0-8FF1-00C04FD9189D), dual, helpstring("IDirectShowStream Interface"), pointer_default(unique) ] interface IDirectShowStream : IDispatch { [propget, id(1), helpstring("property FileName")] HRESULT FileName([out, retval] BSTR *pVal); [propput, id(1), helpstring("property FileName")] HRESULT FileName([in] BSTR newVal); [propget, id(2), helpstring("property Video")] HRESULT Video([out, retval] OUTPUT_STATE *pVal); [propput, id(2), helpstring("propetry Video")] HRESULT Video([in] OUTPUT_STATE newVal); [propget, id(3), helpstring("property Audio")] HRESULT Audio([out, retval] OUTPUT_STATE *pVal); [propput, id(3), helpstring("propetry Audio")] HRESULT Audio([in] OUTPUT_STATE newVal); }; // IAMMultiMediaStream interface [ object, uuid(BEBE595C-9A6F-11d0-8FDE-00C04FD9189D), pointer_default(unique) ] interface IAMMultiMediaStream : IMultiMediaStream { HRESULT Initialize( [in] STREAM_TYPE StreamType, [in] DWORD dwFlags, [in] IGraphBuilder *pFilterGraph); HRESULT GetFilterGraph( [out] IGraphBuilder **ppGraphBuilder); HRESULT GetFilter( [out] IMediaStreamFilter **ppFilter); HRESULT AddMediaStream( [in] IUnknown *pStreamObject, [in] const MSPID *PurposeId, [in] DWORD dwFlags, [out] IMediaStream **ppNewStream); HRESULT OpenFile( [in] LPCWSTR pszFileName, [in] DWORD dwFlags); HRESULT OpenMoniker( [in] IBindCtx *pCtx, [in] IMoniker *pMoniker, [in] DWORD dwFlags); HRESULT Render( [in] DWORD dwFlags); } // IAMMediaStream interface [ object, uuid(BEBE595D-9A6F-11d0-8FDE-00C04FD9189D), pointer_default(unique) ] interface IAMMediaStream : IMediaStream { HRESULT Initialize( [in] IUnknown *pSourceObject, [in] DWORD dwFlags, [in] REFMSPID PurposeId, [in] const STREAM_TYPE StreamType); HRESULT SetState( [in] FILTER_STATE State); HRESULT JoinAMMultiMediaStream( [in] IAMMultiMediaStream *pAMMultiMediaStream); HRESULT JoinFilter( [in] IMediaStreamFilter *pMediaStreamFilter); HRESULT JoinFilterGraph( [in] IFilterGraph *pFilterGraph); }; // IMediaStreamFilter interface [ object, local, uuid(BEBE595E-9A6F-11d0-8FDE-00C04FD9189D), pointer_default(unique) ] interface IMediaStreamFilter : IBaseFilter { HRESULT AddMediaStream( [in] IAMMediaStream *pAMMediaStream); HRESULT GetMediaStream( [in] REFMSPID idPurpose, [out] IMediaStream **ppMediaStream); HRESULT EnumMediaStreams( [in] long Index, [out] IMediaStream **ppMediaStream); HRESULT SupportSeeking( [in] BOOL bRenderer); HRESULT ReferenceTimeToStreamTime( [in] [out] REFERENCE_TIME *pTime); HRESULT GetCurrentStreamTime( [out] REFERENCE_TIME *pCurrentStreamTime); HRESULT WaitUntil( [in] REFERENCE_TIME WaitStreamTime); HRESULT Flush( [in] BOOL bCancelEOS); HRESULT EndOfStream(); }; [ object, local, uuid(AB6B4AFC-F6E4-11d0-900D-00C04FD9189D), pointer_default(unique) ] interface IDirectDrawMediaSampleAllocator : IUnknown { HRESULT GetDirectDraw(IDirectDraw **ppDirectDraw); }; [ object, local, uuid(AB6B4AFE-F6E4-11d0-900D-00C04FD9189D), pointer_default(unique) ] interface IDirectDrawMediaSample : IUnknown { HRESULT GetSurfaceAndReleaseLock( [out] IDirectDrawSurface **ppDirectDrawSurface, [out] RECT * pRect); HRESULT LockMediaSamplePointer(void); }; [ object, local, uuid(AB6B4AFA-F6E4-11d0-900D-00C04FD9189D), pointer_default(unique) ] interface IAMMediaTypeStream : IMediaStream { HRESULT GetFormat( [out] AM_MEDIA_TYPE * pMediaType, [in] DWORD dwFlags); HRESULT SetFormat( [in] AM_MEDIA_TYPE * pMediaType, [in] DWORD dwFlags); HRESULT CreateSample( [in] long lSampleSize, [in] BYTE * pbBuffer, [in] DWORD dwFlags, [in] IUnknown *pUnkOuter, [out] IAMMediaTypeSample ** ppAMMediaTypeSample); HRESULT GetStreamAllocatorRequirements( [out] ALLOCATOR_PROPERTIES *pProps); HRESULT SetStreamAllocatorRequirements( [in] ALLOCATOR_PROPERTIES *pProps); }; [ object, local, uuid(AB6B4AFB-F6E4-11d0-900D-00C04FD9189D), pointer_default(unique) ] interface IAMMediaTypeSample : IStreamSample { // // Unique methods for IAMMediaTypeSample // HRESULT SetPointer([in] BYTE *pBuffer, [in] long lSize); // // Mirror of IMediaSample // 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); 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); }; [ uuid(4E6CDE29-C0C4-11d0-8FF1-00C04FD9189D), version(1.0), helpstring("DirectShowStream 1.0 Type Library") ] library DirectShowStreamLib { importlib("stdole32.tlb"); importlib("stdole2.tlb"); [ uuid(49c47ce5-9ba4-11d0-8212-00c04fc32c45), helpstring("DirectShow Multi Media Stream") ] coclass AMMultiMediaStream { [default] dispinterface IDirectShowStream; }; }; // // The MIDL compiler wants to produce a CLSID for everything defined in // our type library, but it also wants to generate huge proxy code, // so we use DEFINE_GUID for all other classes. It has another interesting // bug in that it defines CLSID_AMMultiMediaStream within a #ifdef __cplusplus // block, so we need to define it outside of that scope. // cpp_quote("#ifndef __cplusplus") cpp_quote("EXTERN_C const CLSID CLSID_AMMultiMediaStream;") cpp_quote("#endif") cpp_quote("DEFINE_GUID(CLSID_AMDirectDrawStream, /* 49c47ce4-9ba4-11d0-8212-00c04fc32c45 */") cpp_quote("0x49c47ce4, 0x9ba4, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);") cpp_quote("DEFINE_GUID(CLSID_AMAudioStream, /* 8496e040-af4c-11d0-8212-00c04fc32c45 */") cpp_quote("0x8496e040, 0xaf4c, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);") cpp_quote("DEFINE_GUID(CLSID_AMAudioData, /* f2468580-af8a-11d0-8212-00c04fc32c45 */") cpp_quote("0xf2468580, 0xaf8a, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);") cpp_quote("DEFINE_GUID(CLSID_AMMediaTypeStream, /* CF0F2F7C-F7BF-11d0-900D-00C04FD9189D */") cpp_quote("0xcf0f2f7c, 0xf7bf, 0x11d0, 0x90, 0xd, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0x9d);")