Module: wine Branch: master Commit: b15c39855b42b022eff82a0639f523af86723226 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b15c39855b42b022eff82a0639...
Author: Alistair Leslie-Hughes leslie_alistair@hotmail.com Date: Sun Jul 16 09:49:00 2017 +0000
wmvcore: Support IWMReaderTimecode interface in IWMReader.
Signed-off-by: Alistair Leslie-Hughes leslie_alistair@hotmail.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/wmvcore/tests/wmvcore.c | 2 +- dlls/wmvcore/wmvcore_main.c | 52 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-)
diff --git a/dlls/wmvcore/tests/wmvcore.c b/dlls/wmvcore/tests/wmvcore.c index 4369748..83c19da9 100644 --- a/dlls/wmvcore/tests/wmvcore.c +++ b/dlls/wmvcore/tests/wmvcore.c @@ -124,7 +124,7 @@ static void test_wmreader_interfaces(void) ok(hr == S_OK, "Failed 0x%08x\n", hr);
hr = IWMReader_QueryInterface(reader, &IID_IWMReaderTimecode, (void **)&timecode); - todo_wine ok(hr == S_OK, "Failed 0x%08x\n", hr); + ok(hr == S_OK, "Failed 0x%08x\n", hr);
hr = IWMReader_QueryInterface(reader, &IID_IWMReaderNetworkConfig, (void **)&netconfig); ok(hr == S_OK, "Failed 0x%08x\n", hr); diff --git a/dlls/wmvcore/wmvcore_main.c b/dlls/wmvcore/wmvcore_main.c index 2969668..f048b9b 100644 --- a/dlls/wmvcore/wmvcore_main.c +++ b/dlls/wmvcore/wmvcore_main.c @@ -70,6 +70,7 @@ typedef struct { IWMReaderNetworkConfig2 IWMReaderNetworkConfig2_iface; IWMReaderStreamClock IWMReaderStreamClock_iface; IWMReaderTypeNegotiation IWMReaderTypeNegotiation_iface; + IWMReaderTimecode IWMReaderTimecode_iface; LONG ref; } WMReader;
@@ -121,6 +122,9 @@ static HRESULT WINAPI WMReader_QueryInterface(IWMReader *iface, REFIID riid, voi }else if(IsEqualGUID(riid, &IID_IWMReaderTypeNegotiation)) { TRACE("(%p)->(IWMReaderTypeNegotiation %p)\n", This, ppv); *ppv = &This->IWMReaderTypeNegotiation_iface; + }else if(IsEqualGUID(riid, &IID_IWMReaderTimecode)) { + TRACE("(%p)->(IWMReaderTimecode %p)\n", This, ppv); + *ppv = &This->IWMReaderTimecode_iface; }else { *ppv = NULL; FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv); @@ -1232,6 +1236,53 @@ static const IWMReaderTypeNegotiationVtbl WMReaderTypeNegotiationVtbl = negotiation_TryOutputProps };
+static inline WMReader *impl_from_IWMReaderTimecode(IWMReaderTimecode *iface) +{ + return CONTAINING_RECORD(iface, WMReader, IWMReaderTimecode_iface); +} + +static HRESULT WINAPI timecode_QueryInterface(IWMReaderTimecode *iface, REFIID riid, void **ppv) +{ + WMReader *This = impl_from_IWMReaderTimecode(iface); + return IWMReader_QueryInterface(&This->IWMReader_iface, riid, ppv); +} + +static ULONG WINAPI timecode_AddRef(IWMReaderTimecode *iface) +{ + WMReader *This = impl_from_IWMReaderTimecode(iface); + return IWMReader_AddRef(&This->IWMReader_iface); +} + +static ULONG WINAPI timecode_Release(IWMReaderTimecode *iface) +{ + WMReader *This = impl_from_IWMReaderTimecode(iface); + return IWMReader_Release(&This->IWMReader_iface); +} + +static HRESULT WINAPI timecode_GetTimecodeRangeCount(IWMReaderTimecode *iface, WORD num, WORD *count) +{ + WMReader *This = impl_from_IWMReaderTimecode(iface); + FIXME("%p, %d, %p\n", This, num, count); + return E_NOTIMPL; +} + +static HRESULT WINAPI timecode_GetTimecodeRangeBounds(IWMReaderTimecode *iface, WORD stream, WORD range, + DWORD *start_timecode, DWORD *end_timecode) +{ + WMReader *This = impl_from_IWMReaderTimecode(iface); + FIXME("%p, %d, %d, %p, %p\n", This, stream, range, start_timecode, end_timecode); + return E_NOTIMPL; +} + +static const IWMReaderTimecodeVtbl WMReaderTimecodeVtbl = +{ + timecode_QueryInterface, + timecode_AddRef, + timecode_Release, + timecode_GetTimecodeRangeCount, + timecode_GetTimecodeRangeBounds +}; + HRESULT WINAPI WMCreateReader(IUnknown *reserved, DWORD rights, IWMReader **ret_reader) { WMReader *reader; @@ -1248,6 +1299,7 @@ HRESULT WINAPI WMCreateReader(IUnknown *reserved, DWORD rights, IWMReader **ret_ reader->IWMReaderNetworkConfig2_iface.lpVtbl = &WMReaderNetworkConfig2Vtbl; reader->IWMReaderStreamClock_iface.lpVtbl = &WMReaderStreamClockVtbl; reader->IWMReaderTypeNegotiation_iface.lpVtbl = &WMReaderTypeNegotiationVtbl; + reader->IWMReaderTimecode_iface.lpVtbl = &WMReaderTimecodeVtbl; reader->ref = 1;
*ret_reader = &reader->IWMReader_iface;