From: André Hentschel Subject: [1/2] wmvcore: Add stub for WMCreateSyncReader (try 2) (resend) Message-Id: <4FB3D9D3.8000403@dawncrow.de> Date: Wed, 16 May 2012 18:46:11 +0200 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