[PATCH v4 4/6] include: Add mfmediaengine.idl.
Jactry Zeng
jzeng at codeweavers.com
Thu Aug 29 10:50:13 CDT 2019
Signed-off-by: Jactry Zeng <jzeng at codeweavers.com>
---
include/Makefile.in | 1 +
include/mfmediaengine.idl | 168 ++++++++++++++++++++++++++++++++++++++
2 files changed, 169 insertions(+)
create mode 100644 include/mfmediaengine.idl
diff --git a/include/Makefile.in b/include/Makefile.in
index 94dd8a0425..47a36ff91d 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -371,6 +371,7 @@ SOURCES = \
mfapi.h \
mferror.h \
mfidl.idl \
+ mfmediaengine.idl \
mfobjects.idl \
mfplay.idl \
mfreadwrite.idl \
diff --git a/include/mfmediaengine.idl b/include/mfmediaengine.idl
new file mode 100644
index 0000000000..8a654f0b59
--- /dev/null
+++ b/include/mfmediaengine.idl
@@ -0,0 +1,168 @@
+/*
+ * 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 = 0,
+ MF_MEDIA_ENGINE_ERR_ABORTED = 1,
+ MF_MEDIA_ENGINE_ERR_NETWORK = 2,
+ MF_MEDIA_ENGINE_ERR_DECODE = 3,
+ MF_MEDIA_ENGINE_ERR_SRC_NOT_SUPPORTED = 4,
+ MF_MEDIA_ENGINE_ERR_ENCRYPTED = 5
+} MF_MEDIA_ENGINE_ERR;
+
+typedef enum MF_MEDIA_ENGINE_PRELOAD
+{
+ MF_MEDIA_ENGINE_PRELOAD_MISSING = 0,
+ MF_MEDIA_ENGINE_PRELOAD_EMPTY = 1,
+ MF_MEDIA_ENGINE_PRELOAD_NONE = 2,
+ MF_MEDIA_ENGINE_PRELOAD_METADATA = 3,
+ MF_MEDIA_ENGINE_PRELOAD_AUTOMATIC = 4
+} MF_MEDIA_ENGINE_PRELOAD;
+
+typedef enum MF_MEDIA_ENGINE_CANPLAY
+{
+ MF_MEDIA_ENGINE_CANPLAY_NOT_SUPPORTED = 0,
+ MF_MEDIA_ENGINE_CANPLAY_MAYBE = 1,
+ MF_MEDIA_ENGINE_CANPLAY_PROBABLY = 2,
+} 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);
+}
--
2.23.0.rc1
More information about the wine-devel
mailing list