| /* |
| * Copyright 2016 Michael Müller |
| * |
| * 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 |
| */ |
| |
| import "mfobjects.idl"; |
| import "mftransform.idl"; |
| |
| typedef unsigned __int64 TOPOID; |
| typedef LONGLONG MFTIME; |
| |
| typedef enum MF_TOPOLOGY_TYPE |
| { |
| MF_TOPOLOGY_OUTPUT_NODE, |
| MF_TOPOLOGY_SOURCESTREAM_NODE, |
| MF_TOPOLOGY_TRANSFORM_NODE, |
| MF_TOPOLOGY_TEE_NODE, |
| MF_TOPOLOGY_MAX = 0xffffffff |
| } MF_TOPOLOGY_TYPE; |
| |
| typedef enum _MFCLOCK_STATE |
| { |
| MFCLOCK_STATE_INVALID, |
| MFCLOCK_STATE_RUNNING, |
| MFCLOCK_STATE_STOPPED, |
| MFCLOCK_STATE_PAUSED |
| } MFCLOCK_STATE; |
| |
| typedef enum MF_OBJECT_TYPE |
| { |
| MF_OBJECT_MEDIASOURCE, |
| MF_OBJECT_BYTESTREAM, |
| MF_OBJECT_INVALID |
| } MF_OBJECT_TYPE; |
| |
| typedef struct _MFCLOCK_PROPERTIES |
| { |
| unsigned __int64 qwCorrelationRate; |
| GUID guidClockId; |
| DWORD dwClockFlags; |
| unsigned __int64 qwClockFrequency; |
| DWORD dwClockTolerance; |
| DWORD dwClockJitter; |
| } MFCLOCK_PROPERTIES; |
| |
| [ |
| object, |
| uuid(2eb1e945-18b8-4139-9b1a-d5d584818530), |
| ] |
| interface IMFClock : IUnknown |
| { |
| HRESULT GetClockCharacteristics([out] DWORD *characteristics); |
| HRESULT GetCorrelatedTime([in] DWORD reserved, [out] LONGLONG *clock_time, [out] MFTIME *system_time); |
| HRESULT GetContinuityKey([out] DWORD *key); |
| HRESULT GetState([in] DWORD reserved, [out] MFCLOCK_STATE *state); |
| HRESULT GetProperties([out] MFCLOCK_PROPERTIES *props); |
| } |
| |
| [ |
| object, |
| uuid(83cf873a-f6da-4bc8-823f-bacfd55dc430), |
| ] |
| interface IMFTopologyNode : IMFAttributes |
| { |
| HRESULT SetObject([in] IUnknown *object); |
| HRESULT GetObject([out] IUnknown **object); |
| HRESULT GetNodeType([out] MF_TOPOLOGY_TYPE *type); |
| HRESULT GetTopoNodeID([out] TOPOID *id); |
| HRESULT SetTopoNodeID([in] TOPOID id); |
| HRESULT GetInputCount([out] DWORD *count); |
| HRESULT GetOutputCount([out] DWORD *count); |
| [local] HRESULT ConnectOutput([in] DWORD output_index, [in] IMFTopologyNode *node, [in] DWORD input_index); |
| [local] HRESULT DisconnectOutput([in] DWORD index); |
| HRESULT GetInput([in] DWORD input_index, [out] IMFTopologyNode **node, [out] DWORD *output_index); |
| HRESULT GetOutput([in] DWORD output_index, [out] IMFTopologyNode **node, [out] DWORD *input_index); |
| [local] HRESULT SetOutputPrefType([in] DWORD index, [in] IMFMediaType *type); |
| [local] HRESULT GetOutputPrefType([in] DWORD output_index, [out] IMFMediaType **type); |
| [call_as(GetOutputPrefType)] HRESULT RemoteGetOutputPrefType([in] DWORD index, [out] DWORD *length, |
| [out, size_is(, *length)] BYTE **data); |
| [local] HRESULT SetInputPrefType([in] DWORD index, [in] IMFMediaType *type); |
| [local] HRESULT GetInputPrefType([in] DWORD index, [out] IMFMediaType **type); |
| [call_as(GetInputPrefType)] HRESULT RemoteGetInputPrefType([in] DWORD index, [out] DWORD *length, |
| [out, size_is(, *length)] BYTE **data); |
| HRESULT CloneFrom([in] IMFTopologyNode *node); |
| } |
| |
| [ |
| object, |
| uuid(83cf873a-f6da-4bc8-823f-bacfd55dc433), |
| ] |
| interface IMFTopology : IMFAttributes |
| { |
| HRESULT GetTopologyID([out] TOPOID *id); |
| [local] HRESULT AddNode([in] IMFTopologyNode *node); |
| [local] HRESULT RemoveNode([in] IMFTopologyNode *node); |
| HRESULT GetNodeCount([out] WORD *nodes); |
| HRESULT GetNode([in] WORD index, [out] IMFTopologyNode **node); |
| [local] HRESULT Clear(); |
| HRESULT CloneFrom([in] IMFTopology *topology); |
| HRESULT GetNodeByID([in] TOPOID id, [out] IMFTopologyNode **node); |
| HRESULT GetSourceNodeCollection([out] IMFCollection **collection); |
| HRESULT GetOutputNodeCollection([out] IMFCollection **collection); |
| } |
| |
| [ |
| object, |
| uuid(90377834-21d0-4dee-8214-ba2e3e6c1127), |
| ] |
| interface IMFMediaSession : IMFMediaEventGenerator |
| { |
| HRESULT SetTopology([in] DWORD flags, [in] IMFTopology *topology); |
| HRESULT ClearTopologies(); |
| HRESULT Start([in, unique] const GUID *format, [in, unique] const PROPVARIANT *start); |
| HRESULT Pause(); |
| HRESULT Stop(); |
| HRESULT Close(); |
| HRESULT Shutdown(); |
| HRESULT GetClock([out] IMFClock **clock); |
| HRESULT GetSessionCapabilities([out] DWORD *caps); |
| HRESULT GetFullTopology([in] DWORD flags, [in] TOPOID id, [out] IMFTopology **topology); |
| } |
| |
| [ |
| object, |
| uuid(fbe5a32d-a497-4b61-bb85-97b1a848a6e3) |
| ] |
| interface IMFSourceResolver : IUnknown |
| { |
| [local] HRESULT CreateObjectFromURL([in] const WCHAR *url, [in] DWORD flags, [in] IPropertyStore *props, |
| [out] MF_OBJECT_TYPE *obj_type, [out] IUnknown **object); |
| [local] HRESULT CreateObjectFromByteStream([in] IMFByteStream *stream, [in] const WCHAR *url, [in] DWORD flags, |
| [in] IPropertyStore *props, [out] MF_OBJECT_TYPE *obj_type, [out] IUnknown **object); |
| [local] HRESULT BeginCreateObjectFromURL([in] const WCHAR *url, [in] DWORD flags, [in] IPropertyStore *props, |
| [out] IUnknown **cancel_cookie, [in] IMFAsyncCallback *callback, [in] IUnknown *unk_state); |
| [call_as(BeginCreateObjectFromURL)] HRESULT RemoteBeginCreateObjectFromURL([in, string] const WCHAR *url, |
| [in] DWORD flags, [in] IPropertyStore *props, [in] IMFRemoteAsyncCallback *callback); |
| [local] HRESULT EndCreateObjectFromURL([in] IMFAsyncResult *result, [out] MF_OBJECT_TYPE *obj_type, |
| [out] IUnknown **object); |
| [call_as(EndCreateObjectFromURL)] HRESULT RemoteEndCreateObjectFromURL([in] IUnknown *result, |
| [out] MF_OBJECT_TYPE *obj_type, [out] IUnknown **object); |
| [local] HRESULT BeginCreateObjectFromByteStream([in] IMFByteStream *stream, [in] const WCHAR *url, |
| [in] DWORD flags, [in] IPropertyStore *props, [out] IUnknown **cancel_cookie, |
| [in] IMFAsyncCallback *callback, [in] IUnknown *unk_state); |
| [call_as(BeginCreateObjectFromByteStream)] HRESULT RemoteBeginCreateObjectFromByteStream([in] IMFByteStream *stream, |
| [in, unique] const WCHAR *url, [in] DWORD flags, [in, unique] IPropertyStore *props, |
| [in] IMFRemoteAsyncCallback *callback); |
| [local] HRESULT EndCreateObjectFromByteStream([in] IMFAsyncResult *result, [out] MF_OBJECT_TYPE *obj_type, |
| [out] IUnknown **object); |
| [call_as(EndCreateObjectFromByteStream)] HRESULT RemoteEndCreateObjectFromByteStream([in] IUnknown *result, |
| [out] MF_OBJECT_TYPE *obj_type, [out] IUnknown **object); |
| [local] HRESULT CanceObjectCreation([in] IUnknown *cancel_cookie); |
| } |
| |
| [ |
| object, |
| uuid(e93dcf6c-4b07-4e1e-8123-aa16ed6eadf5) |
| ] |
| interface IMFMediaTypeHandler : IUnknown |
| { |
| [local] |
| HRESULT IsMediaTypeSupported([in] IMFMediaType *in_type, [out] IMFMediaType **out_type); |
| |
| [call_as(IsMediaTypeSupported)] |
| HRESULT RemoteIsMediaTypeSupported([in, size_is(size)] BYTE *data, [in] DWORD size, |
| [out, size_is(, *match_count)] BYTE **match, [out] DWORD *match_count); |
| |
| HRESULT GetMediaTypeCount([out] DWORD *count); |
| |
| [local] |
| HRESULT GetMediaTypeByIndex([in] DWORD index, [out] IMFMediaType **type); |
| |
| [call_as(GetMediaTypeByIndex)] |
| HRESULT RemoteGetMediaTypeByIndex([in] DWORD index, [out, size_is(, *count)] BYTE **data, |
| [out] DWORD *count); |
| |
| [local] |
| HRESULT SetCurrentMediaType([in] IMFMediaType *type); |
| |
| [call_as(SetCurrentMediaType)] |
| HRESULT RemoteSetCurrentMediaType([in, size_is(count)] BYTE *data, [in] DWORD count); |
| |
| [local] |
| HRESULT GetCurrentMediaType([out] IMFMediaType **type); |
| |
| [call_as(GetCurrentMediaType)] |
| HRESULT RemoteGetCurrentMediaType([out, size_is(, *count)] BYTE **data, [out] DWORD *count); |
| |
| HRESULT GetMajorType([out] GUID *type); |
| } |
| |
| [ |
| object, |
| uuid(56c03d9c-9dbb-45f5-ab4b-d80f47c05938) |
| ] |
| interface IMFStreamDescriptor : IMFAttributes |
| { |
| HRESULT GetStreamIdentifier([out] DWORD *identifier); |
| |
| HRESULT GetMediaTypeHandler([out] IMFMediaTypeHandler **handler); |
| } |
| |
| [ |
| object, |
| uuid(f6696e82-74f7-4f3d-a178-8a5e09c3659f) |
| ] |
| interface IMFClockStateSink : IUnknown |
| { |
| HRESULT OnClockStart( |
| [in] MFTIME hnsSystemTime, |
| [in] LONGLONG llClockStartOffset |
| ); |
| HRESULT OnClockStop( |
| [in] MFTIME hnssSystemTime |
| ); |
| HRESULT OnClockPause( |
| [in] MFTIME hnsSystemTime |
| ); |
| HRESULT OnClockRestart( |
| [in] MFTIME hnsSystemTime |
| ); |
| HRESULT OnClockSetRate( |
| [in] MFTIME hnsSystemTime, |
| [in] float flRate |
| ); |
| } |
| |
| [ |
| object, |
| uuid(fa993888-4383-415a-a930-dd472a8cf6f7) |
| ] |
| interface IMFGetService : IUnknown |
| { |
| HRESULT GetService( |
| [in] REFGUID guidService, |
| [in] REFIID riid, |
| [out, iid_is(riid)] LPVOID *ppvObject |
| ); |
| } |
| |
| cpp_quote("HRESULT WINAPI MFCreateMediaSession(IMFAttributes *config, IMFMediaSession **session);") |
| cpp_quote("HRESULT WINAPI MFCreateSourceResolver(IMFSourceResolver **resolver);") |
| cpp_quote("HRESULT WINAPI MFCreateStreamDescriptor(DWORD identifier, DWORD cMediaTypes,") |
| cpp_quote(" IMFMediaType **types, IMFStreamDescriptor **descriptor);") |
| cpp_quote("HRESULT WINAPI MFCreateTopology(IMFTopology **topology);") |