[1/2] wmvcore: Add stub for WMCreateSyncReader (try 2) (resend)

André Hentschel nerv at dawncrow.de
Wed May 16 11:46:11 CDT 2012


Otherwise GTA San Andreas runs into it and crashes. This stub let's it work again.
try2: with idls
resend: i forgot the patch numbering, sry
---
 dlls/wmvcore/wmvcore.spec   |    2 +-
 dlls/wmvcore/wmvcore_main.c |    7 +
 include/Makefile.in         |    2 +
 include/wmsbuffer.idl       |   45 ++++++
 include/wmsdkidl.idl        |  335 +++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 390 insertions(+), 1 deletions(-)
 create mode 100644 include/wmsbuffer.idl
 create mode 100644 include/wmsdkidl.idl

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..48b9c42 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 \
+	wmsdkidl.idl \
+	wmsbuffer.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