2 * Copyright 2017 Alistair Leslie-Hughes
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 struct _MFT_INPUT_STREAM_INFO
23 LONGLONG hnsMaxLatency
;
28 } MFT_INPUT_STREAM_INFO
;
30 typedef struct _MFT_OUTPUT_STREAM_INFO
35 } MFT_OUTPUT_STREAM_INFO
;
37 typedef struct _MFT_OUTPUT_DATA_BUFFER
42 IMFCollection
*pEvents
;
43 } MFT_OUTPUT_DATA_BUFFER
, *PMFT_OUTPUT_DATA_BUFFER
;
45 typedef enum _MFT_MESSAGE_TYPE
47 MFT_MESSAGE_COMMAND_FLUSH
= 0x00000000,
48 MFT_MESSAGE_COMMAND_DRAIN
= 0x00000001,
49 MFT_MESSAGE_SET_D3D_MANAGER
= 0x00000002,
50 MFT_MESSAGE_DROP_SAMPLES
= 0x00000003,
51 MFT_MESSAGE_COMMAND_TICK
= 0x00000004,
52 MFT_MESSAGE_NOTIFY_BEGIN_STREAMING
= 0x10000000,
53 MFT_MESSAGE_NOTIFY_END_STREAMING
= 0x10000001,
54 MFT_MESSAGE_NOTIFY_END_OF_STREAM
= 0x10000002,
55 MFT_MESSAGE_NOTIFY_START_OF_STREAM
= 0x10000003,
56 MFT_MESSAGE_COMMAND_MARKER
= 0x20000000
61 uuid(bf94c121
-5b05
-4e6f
-8000-ba598961414d
)
63 interface IMFTransform
: IUnknown
65 HRESULT GetStreamLimits
([out] DWORD
*input_minimum
, [out] DWORD
*input_maximum
, [out] DWORD
*output_minimum
,
66 [out] DWORD
*output_maximum
);
68 HRESULT GetStreamCount
([out] DWORD
*inputs
, [out] DWORD
*outputs
);
70 HRESULT GetStreamIDs
([in] DWORD input_size
, [out,size_is(input_size
)] DWORD
*inputs
,
71 [in] DWORD output_size
, [out,size_is(output_size
)] DWORD
*outputs
);
73 HRESULT GetInputStreamInfo
([in] DWORD
id, [out] MFT_INPUT_STREAM_INFO
*info
);
75 HRESULT GetOutputStreamInfo
([in] DWORD
id, [out] MFT_OUTPUT_STREAM_INFO
*info
);
77 HRESULT GetAttributes
([out] IMFAttributes
**attributes
);
79 HRESULT GetInputStreamAttributes
([in] DWORD
id, [out] IMFAttributes
**attributes
);
81 HRESULT GetOutputStreamAttributes
([in] DWORD
id, [out] IMFAttributes
**attributes
);
83 HRESULT DeleteInputStream
([in] DWORD
id);
85 HRESULT AddInputStreams
([in] DWORD streams
, [in] DWORD
*ids
);
87 HRESULT GetInputAvailableType
([in] DWORD
id, [in] DWORD index
, [out] IMFMediaType
**type
);
89 HRESULT GetOutputAvailableType
([in] DWORD
id, [in] DWORD index
, [out] IMFMediaType
**type
);
91 HRESULT SetInputType
(DWORD
id, [in] IMFMediaType
*type
, [in] DWORD flags
);
93 HRESULT SetOutputType
(DWORD
id, [in] IMFMediaType
*type
, [in] DWORD flags
);
95 HRESULT GetInputCurrentType
([in] DWORD
id, [out] IMFMediaType
**type
);
97 HRESULT GetOutputCurrentType
([in] DWORD
id, [out] IMFMediaType
**type
);
99 HRESULT GetInputStatus
([in] DWORD
id, [out] DWORD
*flags
);
101 HRESULT GetOutputStatus
([out] DWORD
*flags
);
103 HRESULT SetOutputBounds
([in] LONGLONG lower
, [in] LONGLONG upper
);
105 HRESULT ProcessEvent
([in] DWORD
id, [in] IMFMediaEvent
*event
);
107 HRESULT ProcessMessage
([in] MFT_MESSAGE_TYPE
message, [in] ULONG_PTR param
);
109 [local] HRESULT ProcessInput
([in] DWORD
id, [in] IMFSample
*sample
, [in] DWORD flags
);
111 [local] HRESULT ProcessOutput
([in] DWORD flags
, [in] DWORD count
, [in,out,size_is(count
)] MFT_OUTPUT_DATA_BUFFER
*samples
,
112 [out] DWORD
*status
);