2 * Copyright 2016 Michael Müller
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 import
"mfobjects.idl";
21 typedef unsigned __int64 TOPOID
;
22 typedef LONGLONG MFTIME
;
24 typedef enum MF_TOPOLOGY_TYPE
26 MF_TOPOLOGY_OUTPUT_NODE
,
27 MF_TOPOLOGY_SOURCESTREAM_NODE
,
28 MF_TOPOLOGY_TRANSFORM_NODE
,
30 MF_TOPOLOGY_MAX
= 0xffffffff
33 typedef enum _MFCLOCK_STATE
35 MFCLOCK_STATE_INVALID
,
36 MFCLOCK_STATE_RUNNING
,
37 MFCLOCK_STATE_STOPPED
,
41 typedef enum MF_OBJECT_TYPE
43 MF_OBJECT_MEDIASOURCE
,
48 typedef struct _MFCLOCK_PROPERTIES
50 unsigned __int64 qwCorrelationRate
;
53 unsigned __int64 qwClockFrequency
;
54 DWORD dwClockTolerance
;
60 uuid(2eb1e945
-18b8
-4139-9b1a
-d5d584818530
),
62 interface IMFClock
: IUnknown
64 HRESULT GetClockCharacteristics
([out] DWORD
*characteristics
);
65 HRESULT GetCorrelatedTime
([in] DWORD reserved
, [out] LONGLONG
*clock_time
, [out] MFTIME
*system_time
);
66 HRESULT GetContinuityKey
([out] DWORD
*key
);
67 HRESULT GetState
([in] DWORD reserved
, [out] MFCLOCK_STATE
*state
);
68 HRESULT GetProperties
([out] MFCLOCK_PROPERTIES
*props
);
73 uuid(83cf873a
-f6da
-4bc8
-823f
-bacfd55dc430
),
75 interface IMFTopologyNode
: IMFAttributes
77 HRESULT SetObject
([in] IUnknown
*object);
78 HRESULT GetObject
([out] IUnknown
**object);
79 HRESULT GetNodeType
([out] MF_TOPOLOGY_TYPE
*type
);
80 HRESULT GetTopoNodeID
([out] TOPOID
*id);
81 HRESULT SetTopoNodeID
([in] TOPOID
id);
82 HRESULT GetInputCount
([out] DWORD
*count
);
83 HRESULT GetOutputCount
([out] DWORD
*count
);
84 [local] HRESULT ConnectOutput
([in] DWORD output_index
, [in] IMFTopologyNode
*node
, [in] DWORD input_index
);
85 [local] HRESULT DisconnectOutput
([in] DWORD index
);
86 HRESULT GetInput
([in] DWORD input_index
, [out] IMFTopologyNode
**node
, [out] DWORD
*output_index
);
87 HRESULT GetOutput
([in] DWORD output_index
, [out] IMFTopologyNode
**node
, [out] DWORD
*input_index
);
88 [local] HRESULT SetOutputPrefType
([in] DWORD index
, [in] IMFMediaType
*type
);
89 [local] HRESULT GetOutputPrefType
([in] DWORD output_index
, [out] IMFMediaType
**type
);
90 [call_as
(GetOutputPrefType
)] HRESULT RemoteGetOutputPrefType
([in] DWORD index
, [out] DWORD
*length
,
91 [out, size_is(, *length
)] BYTE **data
);
92 [local] HRESULT SetInputPrefType
([in] DWORD index
, [in] IMFMediaType
*type
);
93 [local] HRESULT GetInputPrefType
([in] DWORD index
, [out] IMFMediaType
**type
);
94 [call_as
(GetInputPrefType
)] HRESULT RemoteGetInputPrefType
([in] DWORD index
, [out] DWORD
*length
,
95 [out, size_is(, *length
)] BYTE **data
);
96 HRESULT CloneFrom
([in] IMFTopologyNode
*node
);
101 uuid(83cf873a
-f6da
-4bc8
-823f
-bacfd55dc433
),
103 interface IMFTopology
: IMFAttributes
105 HRESULT GetTopologyID
([out] TOPOID
*id);
106 [local] HRESULT AddNode
([in] IMFTopologyNode
*node
);
107 [local] HRESULT RemoveNode
([in] IMFTopologyNode
*node
);
108 HRESULT GetNodeCount
([out] WORD
*nodes
);
109 HRESULT GetNode
([in] WORD index
, [out] IMFTopologyNode
**node
);
110 [local] HRESULT Clear
();
111 HRESULT CloneFrom
([in] IMFTopology
*topology
);
112 HRESULT GetNodeByID
([in] TOPOID
id, [out] IMFTopologyNode
**node
);
113 HRESULT GetSourceNodeCollection
([out] IMFCollection
**collection
);
114 HRESULT GetOutputNodeCollection
([out] IMFCollection
**collection
);
119 uuid(90377834-21d0
-4dee
-8214-ba2e3e6c1127
),
121 interface IMFMediaSession
: IMFMediaEventGenerator
123 HRESULT SetTopology
([in] DWORD flags
, [in] IMFTopology
*topology
);
124 HRESULT ClearTopologies
();
125 HRESULT Start
([in, unique] const GUID
*format
, [in, unique] const PROPVARIANT
*start
);
130 HRESULT GetClock
([out] IMFClock
**clock
);
131 HRESULT GetSessionCapabilities
([out] DWORD
*caps
);
132 HRESULT GetFullTopology
([in] DWORD flags
, [in] TOPOID
id, [out] IMFTopology
**topology
);
137 uuid(fbe5a32d
-a497
-4b61
-bb85
-97b1a848a6e3
)
139 interface IMFSourceResolver
: IUnknown
141 [local] HRESULT CreateObjectFromURL
([in] const WCHAR
*url
, [in] DWORD flags
, [in] IPropertyStore
*props
,
142 [out] MF_OBJECT_TYPE
*obj_type
, [out] IUnknown
**object);
143 [local] HRESULT CreateObjectFromByteStream
([in] IMFByteStream
*stream
, [in] const WCHAR
*url
, [in] DWORD flags
,
144 [in] IPropertyStore
*props
, [out] MF_OBJECT_TYPE
*obj_type
, [out] IUnknown
**object);
145 [local] HRESULT BeginCreateObjectFromURL
([in] const WCHAR
*url
, [in] DWORD flags
, [in] IPropertyStore
*props
,
146 [out] IUnknown
**cancel_cookie
, [in] IMFAsyncCallback
*callback, [in] IUnknown
*unk_state
);
147 [call_as
(BeginCreateObjectFromURL
)] HRESULT RemoteBeginCreateObjectFromURL
([in, string] const WCHAR
*url
,
148 [in] DWORD flags
, [in] IPropertyStore
*props
, [in] IMFRemoteAsyncCallback
*callback);
149 [local] HRESULT EndCreateObjectFromURL
([in] IMFAsyncResult
*result
, [out] MF_OBJECT_TYPE
*obj_type
,
150 [out] IUnknown
**object);
151 [call_as
(EndCreateObjectFromURL
)] HRESULT RemoteEndCreateObjectFromURL
([in] IUnknown
*result
,
152 [out] MF_OBJECT_TYPE
*obj_type
, [out] IUnknown
**object);
153 [local] HRESULT BeginCreateObjectFromByteStream
([in] IMFByteStream
*stream
, [in] const WCHAR
*url
,
154 [in] DWORD flags
, [in] IPropertyStore
*props
, [out] IUnknown
**cancel_cookie
,
155 [in] IMFAsyncCallback
*callback, [in] IUnknown
*unk_state
);
156 [call_as
(BeginCreateObjectFromByteStream
)] HRESULT RemoteBeginCreateObjectFromByteStream
([in] IMFByteStream
*stream
,
157 [in, unique] const WCHAR
*url
, [in] DWORD flags
, [in, unique] IPropertyStore
*props
,
158 [in] IMFRemoteAsyncCallback
*callback);
159 [local] HRESULT EndCreateObjectFromByteStream
([in] IMFAsyncResult
*result
, [out] MF_OBJECT_TYPE
*obj_type
,
160 [out] IUnknown
**object);
161 [call_as
(EndCreateObjectFromByteStream
)] HRESULT RemoteEndCreateObjectFromByteStream
([in] IUnknown
*result
,
162 [out] MF_OBJECT_TYPE
*obj_type
, [out] IUnknown
**object);
163 [local] HRESULT CanceObjectCreation
([in] IUnknown
*cancel_cookie
);
166 cpp_quote
("HRESULT WINAPI MFCreateMediaSession(IMFAttributes *config, IMFMediaSession **session);")
167 cpp_quote
("HRESULT WINAPI MFCreateSourceResolver(IMFSourceResolver **resolver);")
168 cpp_quote
("HRESULT WINAPI MFCreateTopology(IMFTopology **topology);")