Module: wine Branch: master Commit: c0247ab291f11c92bba43e51633bb8adee52e290 URL: http://source.winehq.org/git/wine.git/?a=commit;h=c0247ab291f11c92bba43e5163...
Author: Jacek Caban jacek@codeweavers.com Date: Wed May 14 18:43:09 2014 +0200
wmvcore: Added IWMReader interface stub implementation.
---
dlls/wmvcore/wmvcore_main.c | 161 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 158 insertions(+), 3 deletions(-)
diff --git a/dlls/wmvcore/wmvcore_main.c b/dlls/wmvcore/wmvcore_main.c index 5903bf8..3382542 100644 --- a/dlls/wmvcore/wmvcore_main.c +++ b/dlls/wmvcore/wmvcore_main.c @@ -72,12 +72,167 @@ HRESULT WINAPI WMCreateEditor(IWMMetadataEditor **editor) return E_NOTIMPL; }
-HRESULT WINAPI WMCreateReader(IUnknown *reserved, DWORD rights, IWMReader **reader) +typedef struct { + IWMReader IWMReader_iface; + LONG ref; +} WMReader; + +static inline WMReader *impl_from_IWMReader(IWMReader *iface) +{ + return CONTAINING_RECORD(iface, WMReader, IWMReader_iface); +} + +static HRESULT WINAPI WMReader_QueryInterface(IWMReader *iface, REFIID riid, void **ppv) +{ + WMReader *This = impl_from_IWMReader(iface); + + if(IsEqualGUID(riid, &IID_IUnknown)) { + TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); + *ppv = &This->IWMReader_iface; + }else if(IsEqualGUID(riid, &IID_IWMReader)) { + TRACE("(%p)->(IID_IWMReader %p)\n", This, ppv); + *ppv = &This->IWMReader_iface; + }else { + *ppv = NULL; + FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv); + return E_NOINTERFACE; + } + + IUnknown_AddRef((IUnknown*)*ppv); + return S_OK; +} + +static ULONG WINAPI WMReader_AddRef(IWMReader *iface) +{ + WMReader *This = impl_from_IWMReader(iface); + LONG ref = InterlockedIncrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + return ref; +} + +static ULONG WINAPI WMReader_Release(IWMReader *iface) +{ + WMReader *This = impl_from_IWMReader(iface); + LONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + if(!ref) + heap_free(This); + + return ref; +} + +static HRESULT WINAPI WMReader_Open(IWMReader *iface, const WCHAR *url, IWMReaderCallback *callback, void *context) +{ + WMReader *This = impl_from_IWMReader(iface); + FIXME("(%p)->(%s %p %p)\n", This, debugstr_w(url), callback, context); + return E_NOTIMPL; +} + +static HRESULT WINAPI WMReader_Close(IWMReader *iface) +{ + WMReader *This = impl_from_IWMReader(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI WMReader_GetOutputCount(IWMReader *iface, DWORD *outputs) +{ + WMReader *This = impl_from_IWMReader(iface); + FIXME("(%p)->(%p)\n", This, outputs); + return E_NOTIMPL; +} + +static HRESULT WINAPI WMReader_GetOutputProps(IWMReader *iface, DWORD output_num, IWMOutputMediaProps **output) +{ + WMReader *This = impl_from_IWMReader(iface); + FIXME("(%p)->(%u %p)\n", This, output_num, output); + return E_NOTIMPL; +} + +static HRESULT WINAPI WMReader_SetOutputProps(IWMReader *iface, DWORD output_num, IWMOutputMediaProps *output) +{ + WMReader *This = impl_from_IWMReader(iface); + FIXME("(%p)->(%u %p)\n", This, output_num, output); + return E_NOTIMPL; +} + +static HRESULT WINAPI WMReader_GetOutputFormatCount(IWMReader *iface, DWORD output_num, DWORD *formats) +{ + WMReader *This = impl_from_IWMReader(iface); + FIXME("(%p)->(%u %p)\n", This, output_num, formats); + return E_NOTIMPL; +} + +static HRESULT WINAPI WMReader_GetOutputFormat(IWMReader *iface, DWORD output_num, DWORD format_num, IWMOutputMediaProps **props) +{ + WMReader *This = impl_from_IWMReader(iface); + FIXME("(%p)->(%u %u %p)\n", This, output_num, format_num, props); + return E_NOTIMPL; +} + +static HRESULT WINAPI WMReader_Start(IWMReader *iface, QWORD start, QWORD duration, float rate, void *context) { - FIXME("(%p, %x, %p): stub\n", reserved, rights, reader); + WMReader *This = impl_from_IWMReader(iface); + FIXME("(%p)->(%s %s %f %p)\n", This, wine_dbgstr_longlong(start), wine_dbgstr_longlong(duration), rate, context); + return E_NOTIMPL; +} + +static HRESULT WINAPI WMReader_Stop(IWMReader *iface) +{ + WMReader *This = impl_from_IWMReader(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI WMReader_Pause(IWMReader *iface) +{ + WMReader *This = impl_from_IWMReader(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI WMReader_Resume(IWMReader *iface) +{ + WMReader *This = impl_from_IWMReader(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static const IWMReaderVtbl WMReaderVtbl = { + WMReader_QueryInterface, + WMReader_AddRef, + WMReader_Release, + WMReader_Open, + WMReader_Close, + WMReader_GetOutputCount, + WMReader_GetOutputProps, + WMReader_SetOutputProps, + WMReader_GetOutputFormatCount, + WMReader_GetOutputFormat, + WMReader_Start, + WMReader_Stop, + WMReader_Pause, + WMReader_Resume +}; + +HRESULT WINAPI WMCreateReader(IUnknown *reserved, DWORD rights, IWMReader **ret_reader) +{ + WMReader *reader; + + TRACE("(%p, %x, %p)\n", reserved, rights, ret_reader); + + reader = heap_alloc(sizeof(*reader)); + if(!reader) + return E_OUTOFMEMORY;
- *reader = NULL; + reader->IWMReader_iface.lpVtbl = &WMReaderVtbl; + reader->ref = 1;
+ *ret_reader = &reader->IWMReader_iface; return E_NOTIMPL; }