169 lines
5.2 KiB
Plaintext
169 lines
5.2 KiB
Plaintext
|
/*
|
||
|
* Copyright 2019 Jactry Zeng for CodeWeavers
|
||
|
*
|
||
|
* 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 "mfidl.idl";
|
||
|
|
||
|
cpp_quote("EXTERN_GUID(CLSID_MFMediaEngineClassFactory, 0xb44392da, 0x499b, 0x446b, 0xa4, 0xcb, 0x00, 0x5f, 0xea, 0xd0, 0xe6, 0xd5);")
|
||
|
|
||
|
typedef enum MF_MEDIA_ENGINE_ERR
|
||
|
{
|
||
|
MF_MEDIA_ENGINE_ERR_NOERROR,
|
||
|
MF_MEDIA_ENGINE_ERR_ABORTED,
|
||
|
MF_MEDIA_ENGINE_ERR_NETWORK,
|
||
|
MF_MEDIA_ENGINE_ERR_DECODE,
|
||
|
MF_MEDIA_ENGINE_ERR_SRC_NOT_SUPPORTED,
|
||
|
MF_MEDIA_ENGINE_ERR_ENCRYPTED
|
||
|
} MF_MEDIA_ENGINE_ERR;
|
||
|
|
||
|
typedef enum MF_MEDIA_ENGINE_PRELOAD
|
||
|
{
|
||
|
MF_MEDIA_ENGINE_PRELOAD_MISSING,
|
||
|
MF_MEDIA_ENGINE_PRELOAD_EMPTY,
|
||
|
MF_MEDIA_ENGINE_PRELOAD_NONE,
|
||
|
MF_MEDIA_ENGINE_PRELOAD_METADATA,
|
||
|
MF_MEDIA_ENGINE_PRELOAD_AUTOMATIC
|
||
|
} MF_MEDIA_ENGINE_PRELOAD;
|
||
|
|
||
|
typedef enum MF_MEDIA_ENGINE_CANPLAY
|
||
|
{
|
||
|
MF_MEDIA_ENGINE_CANPLAY_NOT_SUPPORTED,
|
||
|
MF_MEDIA_ENGINE_CANPLAY_MAYBE,
|
||
|
MF_MEDIA_ENGINE_CANPLAY_PROBABLY,
|
||
|
} MF_MEDIA_ENGINE_CANPLAY;
|
||
|
|
||
|
typedef struct MFVideoNormalizedRect
|
||
|
{
|
||
|
float left;
|
||
|
float top;
|
||
|
float right;
|
||
|
float bottom;
|
||
|
} MFVideoNormalizedRect;
|
||
|
|
||
|
[
|
||
|
object,
|
||
|
uuid(fc0e10d2-ab2a-4501-a951-06bb1075184c),
|
||
|
local,
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IMFMediaError : IUnknown
|
||
|
{
|
||
|
USHORT GetErrorCode();
|
||
|
HRESULT GetExtendedErrorCode();
|
||
|
HRESULT SetErrorCode([in] MF_MEDIA_ENGINE_ERR error);
|
||
|
HRESULT SetExtendedErrorCode([in] HRESULT error);
|
||
|
}
|
||
|
|
||
|
[
|
||
|
object,
|
||
|
uuid(7a5e5354-b114-4c72-b991-3131d75032ea),
|
||
|
local,
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IMFMediaEngineSrcElements : IUnknown
|
||
|
{
|
||
|
DWORD GetLength();
|
||
|
HRESULT GetURL([in] DWORD index, [out] BSTR *url);
|
||
|
HRESULT GetType([in] DWORD index, [out] BSTR *type);
|
||
|
HRESULT GetMedia([in] DWORD index, [out] BSTR *media);
|
||
|
HRESULT AddElement([in] BSTR url, [in] BSTR type, [in] BSTR media);
|
||
|
HRESULT RemoveAllElements();
|
||
|
}
|
||
|
|
||
|
[
|
||
|
object,
|
||
|
uuid(db71a2fc-078a-414e-9df9-8c2531b0aa6c),
|
||
|
local,
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IMFMediaTimeRange : IUnknown
|
||
|
{
|
||
|
DWORD GetLength();
|
||
|
HRESULT GetStart([in] DWORD index, [out] double *start);
|
||
|
HRESULT GetEnd([in] DWORD index, [out] double *end);
|
||
|
BOOL ContainsTime([in] double time);
|
||
|
HRESULT AddRange([in] double start, [in] double end);
|
||
|
HRESULT Clear();
|
||
|
}
|
||
|
|
||
|
[
|
||
|
object,
|
||
|
uuid(98a1b0bb-03eb-4935-ae7c-93c1fa0e1c93),
|
||
|
local,
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IMFMediaEngine : IUnknown
|
||
|
{
|
||
|
HRESULT GetError([out] IMFMediaError **error);
|
||
|
HRESULT SetErrorCode([in] MF_MEDIA_ENGINE_ERR error);
|
||
|
HRESULT SetSourceElements([in] IMFMediaEngineSrcElements *elements);
|
||
|
HRESULT SetSource([in] BSTR url);
|
||
|
HRESULT GetCurrentSource([out] BSTR *url);
|
||
|
USHORT GetNetworkState();
|
||
|
MF_MEDIA_ENGINE_PRELOAD GetPreload();
|
||
|
HRESULT SetPreload([in] MF_MEDIA_ENGINE_PRELOAD preload);
|
||
|
HRESULT GetBuffered([out] IMFMediaTimeRange **buffered);
|
||
|
HRESULT Load();
|
||
|
HRESULT CanPlayType([in] BSTR type, [out] MF_MEDIA_ENGINE_CANPLAY *answer);
|
||
|
USHORT GetReadyState();
|
||
|
BOOL IsSeeking();
|
||
|
cpp_quote("#undef GetCurrentTime")
|
||
|
double GetCurrentTime();
|
||
|
HRESULT SetCurrentTime([in] double time);
|
||
|
double GetStartTime();
|
||
|
double GetDuration();
|
||
|
BOOL IsPaused();
|
||
|
double GetDefaultPlaybackRate();
|
||
|
HRESULT SetDefaultPlaybackRate([in] double rate);
|
||
|
double GetPlaybackRate();
|
||
|
HRESULT SetPlaybackRate([in] double rate);
|
||
|
HRESULT GetPlayed([out] IMFMediaTimeRange **played);
|
||
|
HRESULT GetSeekable([out] IMFMediaTimeRange **seekable);
|
||
|
BOOL IsEnded();
|
||
|
BOOL GetAutoPlay();
|
||
|
HRESULT SetAutoPlay([in] BOOL autoplay);
|
||
|
BOOL GetLoop();
|
||
|
HRESULT SetLoop([in] BOOL loop);
|
||
|
HRESULT Play();
|
||
|
HRESULT Pause();
|
||
|
BOOL GetMuted();
|
||
|
HRESULT SetMuted([in] BOOL muted);
|
||
|
double GetVolume();
|
||
|
HRESULT SetVolume([in] double volume);
|
||
|
BOOL HasVideo();
|
||
|
BOOL HasAudio();
|
||
|
HRESULT GetNativeVideoSize([out] DWORD *cx, [out] DWORD *cy);
|
||
|
HRESULT GetVideoAspectRatio([out] DWORD *cx, [out] DWORD *cy);
|
||
|
HRESULT Shutdown();
|
||
|
HRESULT TransferVideoFrame([in] IUnknown *surface, [in] const MFVideoNormalizedRect *src,
|
||
|
[in] const RECT *dst, [in] const MFARGB *color);
|
||
|
HRESULT OnVideoStreamTick([out] LONGLONG *time);
|
||
|
}
|
||
|
|
||
|
[
|
||
|
object,
|
||
|
uuid(4d645ace-26aa-4688-9be1-df3516990b93),
|
||
|
local,
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IMFMediaEngineClassFactory : IUnknown
|
||
|
{
|
||
|
HRESULT CreateInstance([in] DWORD flags, [in] IMFAttributes *attributes, [out] IMFMediaEngine **engine);
|
||
|
HRESULT CreateTimeRange([out] IMFMediaTimeRange **range);
|
||
|
HRESULT CreateError([out] IMFMediaError **error);
|
||
|
}
|