[1/2] wmvcore: Add stub for WMCreateSyncReader (try 3)
André Hentschel
nerv at dawncrow.de
Thu May 17 08:56:32 CDT 2012
Otherwise GTA San Andreas runs into it and crashes. This stub let's it work again.
try2: with idls
try3: as Nikolay suggested with .gitignore and sorted Makefile entries
---
.gitignore | 2 +
dlls/wmvcore/wmvcore.spec | 2 +-
dlls/wmvcore/wmvcore_main.c | 7 +
include/Makefile.in | 2 +
include/wmsbuffer.idl | 45 ++++++
include/wmsdkidl.idl | 335 +++++++++++++++++++++++++++++++++++++++++++
6 files changed, 392 insertions(+), 1 deletions(-)
create mode 100644 include/wmsbuffer.idl
create mode 100644 include/wmsdkidl.idl
diff --git a/.gitignore b/.gitignore
index 3b22ee6..ae5ed56 100644
--- a/.gitignore
+++ b/.gitignore
@@ -245,6 +245,8 @@ include/wine/itss.h
include/wine/svcctl.h
include/wine/winedxgi.h
include/winsxs.h
+include/wmsbuffer.h
+include/wmsdkidl.h
include/wpcapi.h
include/wtypes.h
include/wuapi.h
diff --git a/dlls/wmvcore/wmvcore.spec b/dlls/wmvcore/wmvcore.spec
index 1c6cb1f..e0fa2e9 100644
--- a/dlls/wmvcore/wmvcore.spec
+++ b/dlls/wmvcore/wmvcore.spec
@@ -11,7 +11,7 @@
@ stub WMCreateProfileManager
@ stub WMCreateReader
@ stub WMCreateReaderPriv
-@ stub WMCreateSyncReader
+@ stdcall WMCreateSyncReader(ptr long ptr)
@ stub WMCreateWriter
@ stub WMCreateWriterFileSink
@ stub WMCreateWriterNetworkSink
diff --git a/dlls/wmvcore/wmvcore_main.c b/dlls/wmvcore/wmvcore_main.c
index 096328b..1d24c24 100644
--- a/dlls/wmvcore/wmvcore_main.c
+++ b/dlls/wmvcore/wmvcore_main.c
@@ -22,6 +22,7 @@
#include "windef.h"
#include "winbase.h"
+#include "wmsdkidl.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(wmvcore);
@@ -43,3 +44,9 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
return TRUE;
}
+
+HRESULT WINAPI WMCreateSyncReader(IUnknown *pcert, DWORD rights, IWMSyncReader **syncreader)
+{
+ FIXME("(%p, %x, %p): stub\n", pcert, rights, syncreader);
+ return E_NOTIMPL;
+}
diff --git a/include/Makefile.in b/include/Makefile.in
index e55b548..16a1e4f 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -107,6 +107,8 @@ PUBLIC_IDL_H_SRCS = \
wine/itss.idl \
wine/svcctl.idl \
winsxs.idl \
+ wmsbuffer.idl \
+ wmsdkidl.idl \
wpcapi.idl \
wtypes.idl \
wuapi.idl \
diff --git a/include/wmsbuffer.idl b/include/wmsbuffer.idl
new file mode 100644
index 0000000..85cd956
--- /dev/null
+++ b/include/wmsbuffer.idl
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2012 André Hentschel
+ *
+ * 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 "objidl.idl";
+
+cpp_quote("DEFINE_GUID(IID_INSSBuffer, 0xe1cd3524,0x03d7,0x11d2,0x9e,0xed,0x00,0x60,0x97,0xd2,0xd7,0xcf);")
+
+[
+ object,
+ uuid(e1cd3524-03d7-11d2-9eed-006097d2d7cf),
+ pointer_default(unique),
+ local
+]
+interface INSSBuffer : IUnknown
+{
+ HRESULT GetLength(
+ [out] DWORD *pdwLength);
+ HRESULT SetLength(
+ [in] DWORD dwLength);
+
+ HRESULT GetMaxLength(
+ [out] DWORD *pdwLength);
+
+ HRESULT GetBuffer(
+ [out] BYTE **ppdwBuffer);
+
+ HRESULT GetBufferAndLength(
+ [out] BYTE **ppdwBuffer,
+ [out] DWORD *pdwLength);
+};
diff --git a/include/wmsdkidl.idl b/include/wmsdkidl.idl
new file mode 100644
index 0000000..9abfa32
--- /dev/null
+++ b/include/wmsdkidl.idl
@@ -0,0 +1,335 @@
+/*
+ * Copyright 2012 André Hentschel
+ *
+ * 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 "wmsbuffer.idl";
+
+typedef unsigned __int64 QWORD;
+
+cpp_quote("DEFINE_GUID(IID_IWMMediaProps, 0x96406bce, 0x2b2b, 0x11d3, 0xb3, 0x6b, 0x00, 0xc0, 0x4f, 0x61, 0x08, 0xff);")
+cpp_quote("DEFINE_GUID(IID_IWMReader, 0x96406bd6, 0x2b2b, 0x11d3, 0xb3, 0x6b, 0x00, 0xc0, 0x4f, 0x61, 0x08, 0xff);")
+cpp_quote("DEFINE_GUID(IID_IWMSyncReader, 0x9397f121, 0x7705, 0x4dc9, 0xb0, 0x49, 0x98, 0xb6, 0x98, 0x18, 0x84, 0x14);")
+cpp_quote("DEFINE_GUID(IID_IWMOutputMediaProps, 0x96406bd7, 0x2b2b, 0x11d3, 0xb3, 0x6b, 0x00, 0xc0, 0x4f, 0x61, 0x08, 0xff);")
+cpp_quote("DEFINE_GUID(IID_IWMStatusCallback, 0x6d7cdc70, 0x9888, 0x11d3, 0x8e, 0xdc, 0x00, 0xc0, 0x4f, 0x61, 0x09, 0xcf);")
+cpp_quote("DEFINE_GUID(IID_IWMReaderCallback, 0x96406bd8, 0x2b2b, 0x11d3, 0xb3, 0x6b, 0x00, 0xc0, 0x4f, 0x61, 0x08, 0xff);")
+
+
+typedef struct _WMMediaType
+{
+ GUID majortype;
+ GUID subtype;
+ BOOL bFixedSizeSamples;
+ BOOL bTemporalCompression;
+ ULONG lSampleSize;
+ GUID formattype;
+ IUnknown *pUnk;
+ ULONG cbFormat;
+ [size_is(cbFormat)] BYTE *pbFormat;
+} WM_MEDIA_TYPE;
+
+typedef enum WMT_ATTR_DATATYPE
+{
+
+ WMT_TYPE_DWORD = 0,
+ WMT_TYPE_STRING = 1,
+ WMT_TYPE_BINARY = 2,
+ WMT_TYPE_BOOL = 3,
+ WMT_TYPE_QWORD = 4,
+ WMT_TYPE_WORD = 5,
+ WMT_TYPE_GUID = 6,
+
+} WMT_ATTR_DATATYPE;
+
+typedef enum WMT_STATUS
+{
+ WMT_ERROR = 0,
+ WMT_OPENED = 1,
+ WMT_BUFFERING_START = 2,
+ WMT_BUFFERING_STOP = 3,
+ WMT_EOF = 4,
+ WMT_END_OF_FILE = 4,
+ WMT_END_OF_SEGMENT = 5,
+ WMT_END_OF_STREAMING = 6,
+ WMT_LOCATING = 7,
+ WMT_CONNECTING = 8,
+ WMT_NO_RIGHTS = 9,
+ WMT_MISSING_CODEC = 10,
+ WMT_STARTED = 11,
+ WMT_STOPPED = 12,
+ WMT_CLOSED = 13,
+ WMT_STRIDING = 14,
+ WMT_TIMER = 15,
+ WMT_INDEX_PROGRESS = 16,
+ WMT_SAVEAS_START = 17,
+ WMT_SAVEAS_STOP = 18,
+ WMT_NEW_SOURCEFLAGS = 19,
+ WMT_NEW_METADATA = 20,
+ WMT_BACKUPRESTORE_BEGIN = 21,
+ WMT_SOURCE_SWITCH = 22,
+ WMT_ACQUIRE_LICENSE = 23,
+ WMT_INDIVIDUALIZE = 24,
+ WMT_NEEDS_INDIVIDUALIZATION = 25,
+ WMT_NO_RIGHTS_EX = 26,
+ WMT_BACKUPRESTORE_END = 27,
+ WMT_BACKUPRESTORE_CONNECTING = 28,
+ WMT_BACKUPRESTORE_DISCONNECTING = 29,
+ WMT_ERROR_WITHURL = 30,
+ WMT_RESTRICTED_LICENSE = 31,
+ WMT_CLIENT_CONNECT = 32,
+ WMT_CLIENT_DISCONNECT = 33,
+ WMT_NATIVE_OUTPUT_PROPS_CHANGED = 34,
+ WMT_RECONNECT_START = 35,
+ WMT_RECONNECT_END = 36,
+ WMT_CLIENT_CONNECT_EX = 37,
+ WMT_CLIENT_DISCONNECT_EX = 38,
+ WMT_SET_FEC_SPAN = 39,
+ WMT_PREROLL_READY = 40,
+ WMT_PREROLL_COMPLETE = 41,
+ WMT_CLIENT_PROPERTIES = 42,
+ WMT_LICENSEURL_SIGNATURE_STATE = 43,
+ WMT_INIT_PLAYLIST_BURN = 44,
+ WMT_TRANSCRYPTOR_INIT = 45,
+ WMT_TRANSCRYPTOR_SEEKED = 46,
+ WMT_TRANSCRYPTOR_READ = 47,
+ WMT_TRANSCRYPTOR_CLOSED = 48,
+ WMT_PROXIMITY_RESULT = 49,
+ WMT_PROXIMITY_COMPLETED = 50,
+ WMT_CONTENT_ENABLER = 51
+} WMT_STATUS;
+
+typedef enum WMT_STREAM_SELECTION
+{
+ WMT_OFF = 0,
+ WMT_CLEANPOINT_ONLY = 1,
+ WMT_ON = 2,
+} WMT_STREAM_SELECTION;
+
+
+[
+ object,
+ uuid(6d7cdc70-9888-11d3-8edc-00c04f6109cf),
+ pointer_default(unique),
+ local
+]
+interface IWMStatusCallback : IUnknown
+{
+ HRESULT OnStatus(
+ [in] WMT_STATUS Status,
+ [in] HRESULT hr,
+ [in] WMT_ATTR_DATATYPE dwType,
+ [in] BYTE *pValue,
+ [in] void *pvContext);
+};
+
+[
+ object,
+ uuid(96406bd8-2b2b-11d3-b36b-00c04f6108ff),
+ pointer_default(unique),
+ local
+]
+interface IWMReaderCallback : IWMStatusCallback
+{
+ HRESULT OnSample(
+ [in] DWORD dwOutputNum,
+ [in] QWORD cnsSampleTime,
+ [in] QWORD cnsSampleDuration,
+ [in] DWORD dwFlags,
+ [in] INSSBuffer *pSample,
+ [in] void *pvContext);
+};
+
+[
+ object,
+ uuid(96406bce-2b2b-11d3-b36b-00c04f6108ff),
+]
+interface IWMMediaProps : IUnknown
+{
+ HRESULT GetType(
+ [out] GUID *pguidType);
+
+ HRESULT GetMediaType(
+ [out] WM_MEDIA_TYPE *pType,
+ [in, out] DWORD *pcbType);
+
+ HRESULT SetMediaType(
+ [in] WM_MEDIA_TYPE *pType);
+};
+
+[
+ object,
+ uuid(96406bd7-2b2b-11d3-b36b-00c04f6108ff),
+]
+interface IWMOutputMediaProps : IWMMediaProps
+{
+ HRESULT GetStreamGroupName(
+ [out, size_is(*pcchName)] WCHAR *pwszName,
+ [in, out] WORD *pcchName);
+
+ HRESULT GetConnectionName(
+ [out, size_is(*pcchName)] WCHAR *pwszName,
+ [in, out] WORD *pcchName);
+};
+
+[
+ object,
+ uuid(96406bd6-2b2b-11d3-b36b-00c04f6108ff),
+ pointer_default(unique),
+ local
+]
+interface IWMReader : IUnknown
+{
+ HRESULT Open(
+ [in] const WCHAR *pwszURL,
+ [in] IWMReaderCallback *pCallback,
+ [in] void *pvContext);
+
+ HRESULT Close();
+
+ HRESULT GetOutputCount(
+ [out] DWORD *pcOutputs);
+
+ HRESULT GetOutputProps(
+ [in] DWORD dwOutputNum,
+ [out] IWMOutputMediaProps **ppOutput);
+
+ HRESULT SetOutputProps(
+ [in] DWORD dwOutputNum,
+ [in] IWMOutputMediaProps *pOutput);
+
+ HRESULT GetOutputFormatCount(
+ [in] DWORD dwOutputNumber,
+ [out] DWORD *pcFormats);
+
+ HRESULT GetOutputFormat(
+ [in] DWORD dwOutputNumber,
+ [in] DWORD dwFormatNumber,
+ [out] IWMOutputMediaProps** ppProps);
+
+ HRESULT Start(
+ [in] QWORD cnsStart,
+ [in] QWORD cnsDuration,
+ [in] float fRate,
+ [in] void *pvContext);
+
+ HRESULT Stop();
+
+ HRESULT Pause();
+
+ HRESULT Resume();
+};
+
+[
+ object,
+ uuid(9397f121-7705-4dc9-b049-98b698188414),
+ pointer_default( unique ),
+ local
+]
+interface IWMSyncReader : IUnknown
+{
+ HRESULT Open(
+ [in] const WCHAR *pwszFilename);
+
+ HRESULT Close();
+
+ HRESULT SetRange(
+ [in] QWORD cnsStartTime,
+ [in] LONGLONG cnsDuration);
+
+ HRESULT SetRangeByFrame(
+ [in] WORD wStreamNum,
+ [in] QWORD qwFrameNumber,
+ [in] LONGLONG cFramesToRead);
+
+ HRESULT GetNextSample(
+ [in] WORD wStreamNum,
+ [out] INSSBuffer **ppSample,
+ [out] QWORD *pcnsSampleTime,
+ [out] QWORD *pcnsDuration,
+ [out] DWORD *pdwFlags,
+ [out] DWORD *pdwOutputNum,
+ [out] WORD *pwStreamNum);
+
+ HRESULT SetStreamsSelected(
+ [in] WORD cStreamCount,
+ [in] WORD *pwStreamNumbers,
+ [in] WMT_STREAM_SELECTION *pSelections);
+
+ HRESULT GetStreamSelected(
+ [in] WORD wStreamNum,
+ [out] WMT_STREAM_SELECTION *pSelection);
+
+ HRESULT SetReadStreamSamples(
+ [in] WORD wStreamNum,
+ [in] BOOL fCompressed);
+
+ HRESULT GetReadStreamSamples(
+ [in] WORD wStreamNum,
+ [out] BOOL *pfCompressed);
+
+ HRESULT GetOutputSetting(
+ [in] DWORD dwOutputNum,
+ [in] LPCWSTR pszName,
+ [out] WMT_ATTR_DATATYPE *pType,
+ [out, size_is(*pcbLength)] BYTE *pValue,
+ [in, out] WORD *pcbLength);
+
+ HRESULT SetOutputSetting(
+ [in] DWORD dwOutputNum,
+ [in] LPCWSTR pszName,
+ [in] WMT_ATTR_DATATYPE Type,
+ [in, size_is(cbLength)] const BYTE *pValue,
+ [in] WORD cbLength);
+
+ HRESULT GetOutputCount(
+ [out] DWORD *pcOutputs);
+
+ HRESULT GetOutputProps(
+ [in] DWORD dwOutputNum,
+ [out] IWMOutputMediaProps **ppOutput);
+
+ HRESULT SetOutputProps(
+ [in] DWORD dwOutputNum,
+ [in] IWMOutputMediaProps *pOutput);
+
+ HRESULT GetOutputFormatCount(
+ [in] DWORD dwOutputNum,
+ [out] DWORD *pcFormats);
+
+ HRESULT GetOutputFormat(
+ [in] DWORD dwOutputNum,
+ [in] DWORD dwFormatNum,
+ [out] IWMOutputMediaProps **ppProps);
+
+ HRESULT GetOutputNumberForStream(
+ [in] WORD wStreamNum,
+ [out] DWORD *pdwOutputNum);
+
+ HRESULT GetStreamNumberForOutput(
+ [in] DWORD dwOutputNum,
+ [out] WORD *pwStreamNum);
+
+ HRESULT GetMaxOutputSampleSize(
+ [in] DWORD dwOutput,
+ [out] DWORD *pcbMax);
+
+ HRESULT GetMaxStreamSampleSize(
+ [in] WORD wStream,
+ [out] DWORD *pcbMax);
+
+ HRESULT OpenStream(
+ [in] IStream *pStream);
+};
--
Best Regards, André Hentschel
More information about the wine-patches
mailing list