Signed-off-by: Zebediah Figura zfigura@codeweavers.com --- dlls/winegstreamer/gst_private.h | 1 + dlls/winegstreamer/wm_asyncreader.c | 68 ----------------------------- dlls/winegstreamer/wm_reader.c | 67 ++++++++++++++++++++++++++++ dlls/wmvcore/tests/wmvcore.c | 4 +- 4 files changed, 70 insertions(+), 70 deletions(-)
diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index 6dc0ad3e291..519be33dadd 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -117,6 +117,7 @@ struct wm_reader { IWMHeaderInfo3 IWMHeaderInfo3_iface; IWMLanguageList IWMLanguageList_iface; + IWMPacketSize2 IWMPacketSize2_iface; IWMProfile3 IWMProfile3_iface; LONG refcount;
diff --git a/dlls/winegstreamer/wm_asyncreader.c b/dlls/winegstreamer/wm_asyncreader.c index a36718ef453..d2891730bfb 100644 --- a/dlls/winegstreamer/wm_asyncreader.c +++ b/dlls/winegstreamer/wm_asyncreader.c @@ -33,7 +33,6 @@ struct async_reader IWMReaderTimecode IWMReaderTimecode_iface; IWMReaderPlaylistBurn IWMReaderPlaylistBurn_iface; IReferenceClock IReferenceClock_iface; - IWMPacketSize2 IWMPacketSize2_iface; };
static struct async_reader *impl_from_IWMReader(IWMReader *iface) @@ -1322,68 +1321,6 @@ static const IReferenceClockVtbl ReferenceClockVtbl = refclock_Unadvise };
-static struct async_reader *impl_from_IWMPacketSize2(IWMPacketSize2 *iface) -{ - return CONTAINING_RECORD(iface, struct async_reader, IWMPacketSize2_iface); -} - -static HRESULT WINAPI packetsize_QueryInterface(IWMPacketSize2 *iface, REFIID riid, void **ppv) -{ - struct async_reader *This = impl_from_IWMPacketSize2(iface); - return IWMReader_QueryInterface(&This->IWMReader_iface, riid, ppv); -} - -static ULONG WINAPI packetsize_AddRef(IWMPacketSize2 *iface) -{ - struct async_reader *This = impl_from_IWMPacketSize2(iface); - return IWMReader_AddRef(&This->IWMReader_iface); -} - -static ULONG WINAPI packetsize_Release(IWMPacketSize2 *iface) -{ - struct async_reader *This = impl_from_IWMPacketSize2(iface); - return IWMReader_Release(&This->IWMReader_iface); -} - -static HRESULT WINAPI packetsize_GetMaxPacketSize(IWMPacketSize2 *iface, DWORD *size) -{ - struct async_reader *This = impl_from_IWMPacketSize2(iface); - FIXME("%p, %p\n", This, size); - return E_NOTIMPL; -} - -static HRESULT WINAPI packetsize_SetMaxPacketSize(IWMPacketSize2 *iface, DWORD size) -{ - struct async_reader *This = impl_from_IWMPacketSize2(iface); - FIXME("%p, %d\n", This, size); - return E_NOTIMPL; -} - -static HRESULT WINAPI packetsize_GetMinPacketSize(IWMPacketSize2 *iface, DWORD *size) -{ - struct async_reader *This = impl_from_IWMPacketSize2(iface); - FIXME("%p, %p\n", This, size); - return E_NOTIMPL; -} - -static HRESULT WINAPI packetsize_SetMinPacketSize(IWMPacketSize2 *iface, DWORD size) -{ - struct async_reader *This = impl_from_IWMPacketSize2(iface); - FIXME("%p, %d\n", This, size); - return E_NOTIMPL; -} - -static const IWMPacketSize2Vtbl WMPacketSize2Vtbl = -{ - packetsize_QueryInterface, - packetsize_AddRef, - packetsize_Release, - packetsize_GetMaxPacketSize, - packetsize_SetMaxPacketSize, - packetsize_GetMinPacketSize, - packetsize_SetMinPacketSize -}; - static struct async_reader *impl_from_wm_reader(struct wm_reader *iface) { return CONTAINING_RECORD(iface, struct async_reader, reader); @@ -1398,10 +1335,6 @@ static void *async_reader_query_interface(struct wm_reader *iface, REFIID iid) if (IsEqualIID(iid, &IID_IReferenceClock)) return &reader->IReferenceClock_iface;
- if (IsEqualIID(iid, &IID_IWMPacketSize) - || IsEqualIID(iid, &IID_IWMPacketSize2)) - return &reader->IWMPacketSize2_iface; - if (IsEqualIID(iid, &IID_IWMReader)) return &reader->IWMReader_iface;
@@ -1462,7 +1395,6 @@ HRESULT WINAPI winegstreamer_create_wm_async_reader(IWMReader **reader) wm_reader_init(&object->reader, &async_reader_ops);
object->IReferenceClock_iface.lpVtbl = &ReferenceClockVtbl; - object->IWMPacketSize2_iface.lpVtbl = &WMPacketSize2Vtbl; object->IWMReader_iface.lpVtbl = &WMReaderVtbl; object->IWMReaderAdvanced6_iface.lpVtbl = &WMReaderAdvanced6Vtbl; object->IWMReaderAccelerator_iface.lpVtbl = &WMReaderAcceleratorVtbl; diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c index b72ff98cd18..edf8f227308 100644 --- a/dlls/winegstreamer/wm_reader.c +++ b/dlls/winegstreamer/wm_reader.c @@ -41,6 +41,11 @@ static HRESULT WINAPI profile_QueryInterface(IWMProfile3 *iface, REFIID iid, voi { *out = &reader->IWMLanguageList_iface; } + else if (IsEqualIID(iid, &IID_IWMPacketSize) + || IsEqualIID(iid, &IID_IWMPacketSize2)) + { + *out = &reader->IWMPacketSize2_iface; + } else if (IsEqualIID(iid, &IID_IUnknown) || IsEqualIID(iid, &IID_IWMProfile) || IsEqualIID(iid, &IID_IWMProfile2) @@ -572,10 +577,72 @@ static const IWMLanguageListVtbl language_list_vtbl = language_list_AddLanguageByRFC1766String, };
+static struct wm_reader *impl_from_IWMPacketSize2(IWMPacketSize2 *iface) +{ + return CONTAINING_RECORD(iface, struct wm_reader, IWMPacketSize2_iface); +} + +static HRESULT WINAPI packet_size_QueryInterface(IWMPacketSize2 *iface, REFIID iid, void **out) +{ + struct wm_reader *reader = impl_from_IWMPacketSize2(iface); + + return IWMProfile3_QueryInterface(&reader->IWMProfile3_iface, iid, out); +} + +static ULONG WINAPI packet_size_AddRef(IWMPacketSize2 *iface) +{ + struct wm_reader *reader = impl_from_IWMPacketSize2(iface); + + return IWMProfile3_AddRef(&reader->IWMProfile3_iface); +} + +static ULONG WINAPI packet_size_Release(IWMPacketSize2 *iface) +{ + struct wm_reader *reader = impl_from_IWMPacketSize2(iface); + + return IWMProfile3_Release(&reader->IWMProfile3_iface); +} + +static HRESULT WINAPI packet_size_GetMaxPacketSize(IWMPacketSize2 *iface, DWORD *size) +{ + FIXME("iface %p, size %p, stub!\n", iface, size); + return E_NOTIMPL; +} + +static HRESULT WINAPI packet_size_SetMaxPacketSize(IWMPacketSize2 *iface, DWORD size) +{ + FIXME("iface %p, size %u, stub!\n", iface, size); + return E_NOTIMPL; +} + +static HRESULT WINAPI packet_size_GetMinPacketSize(IWMPacketSize2 *iface, DWORD *size) +{ + FIXME("iface %p, size %p, stub!\n", iface, size); + return E_NOTIMPL; +} + +static HRESULT WINAPI packet_size_SetMinPacketSize(IWMPacketSize2 *iface, DWORD size) +{ + FIXME("iface %p, size %u, stub!\n", iface, size); + return E_NOTIMPL; +} + +static const IWMPacketSize2Vtbl packet_size_vtbl = +{ + packet_size_QueryInterface, + packet_size_AddRef, + packet_size_Release, + packet_size_GetMaxPacketSize, + packet_size_SetMaxPacketSize, + packet_size_GetMinPacketSize, + packet_size_SetMinPacketSize, +}; + void wm_reader_init(struct wm_reader *reader, const struct wm_reader_ops *ops) { reader->IWMHeaderInfo3_iface.lpVtbl = &header_info_vtbl; reader->IWMLanguageList_iface.lpVtbl = &language_list_vtbl; + reader->IWMPacketSize2_iface.lpVtbl = &packet_size_vtbl; reader->IWMProfile3_iface.lpVtbl = &profile_vtbl; reader->refcount = 1; reader->ops = ops; diff --git a/dlls/wmvcore/tests/wmvcore.c b/dlls/wmvcore/tests/wmvcore.c index 9f9c5ed393f..0662c035617 100644 --- a/dlls/wmvcore/tests/wmvcore.c +++ b/dlls/wmvcore/tests/wmvcore.c @@ -148,8 +148,8 @@ static void test_wmsyncreader_interfaces(void) check_interface(reader, &IID_IWMHeaderInfo2, TRUE); check_interface(reader, &IID_IWMHeaderInfo3, TRUE); check_interface(reader, &IID_IWMLanguageList, TRUE); - todo_wine check_interface(reader, &IID_IWMPacketSize, TRUE); - todo_wine check_interface(reader, &IID_IWMPacketSize2, TRUE); + check_interface(reader, &IID_IWMPacketSize, TRUE); + check_interface(reader, &IID_IWMPacketSize2, TRUE); check_interface(reader, &IID_IWMProfile, TRUE); check_interface(reader, &IID_IWMProfile2, TRUE); check_interface(reader, &IID_IWMProfile3, TRUE);
Signed-off-by: Zebediah Figura zfigura@codeweavers.com --- dlls/winegstreamer/gst_private.h | 1 + dlls/winegstreamer/wm_asyncreader.c | 69 ----------------------------- dlls/winegstreamer/wm_reader.c | 68 ++++++++++++++++++++++++++++ dlls/wmvcore/tests/wmvcore.c | 2 +- 4 files changed, 70 insertions(+), 70 deletions(-)
diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index 519be33dadd..be72f6694c7 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -119,6 +119,7 @@ struct wm_reader IWMLanguageList IWMLanguageList_iface; IWMPacketSize2 IWMPacketSize2_iface; IWMProfile3 IWMProfile3_iface; + IWMReaderPlaylistBurn IWMReaderPlaylistBurn_iface; LONG refcount;
const struct wm_reader_ops *ops; diff --git a/dlls/winegstreamer/wm_asyncreader.c b/dlls/winegstreamer/wm_asyncreader.c index d2891730bfb..0a240ff55c5 100644 --- a/dlls/winegstreamer/wm_asyncreader.c +++ b/dlls/winegstreamer/wm_asyncreader.c @@ -31,7 +31,6 @@ struct async_reader IWMReaderStreamClock IWMReaderStreamClock_iface; IWMReaderTypeNegotiation IWMReaderTypeNegotiation_iface; IWMReaderTimecode IWMReaderTimecode_iface; - IWMReaderPlaylistBurn IWMReaderPlaylistBurn_iface; IReferenceClock IReferenceClock_iface; };
@@ -1191,70 +1190,6 @@ static const IWMReaderTimecodeVtbl WMReaderTimecodeVtbl = timecode_GetTimecodeRangeBounds };
- -static struct async_reader *impl_from_IWMReaderPlaylistBurn(IWMReaderPlaylistBurn *iface) -{ - return CONTAINING_RECORD(iface, struct async_reader, IWMReaderPlaylistBurn_iface); -} - -static HRESULT WINAPI playlist_QueryInterface(IWMReaderPlaylistBurn *iface, REFIID riid, void **ppv) -{ - struct async_reader *This = impl_from_IWMReaderPlaylistBurn(iface); - return IWMReader_QueryInterface(&This->IWMReader_iface, riid, ppv); -} - -static ULONG WINAPI playlist_AddRef(IWMReaderPlaylistBurn *iface) -{ - struct async_reader *This = impl_from_IWMReaderPlaylistBurn(iface); - return IWMReader_AddRef(&This->IWMReader_iface); -} - -static ULONG WINAPI playlist_Release(IWMReaderPlaylistBurn *iface) -{ - struct async_reader *This = impl_from_IWMReaderPlaylistBurn(iface); - return IWMReader_Release(&This->IWMReader_iface); -} - -static HRESULT WINAPI playlist_InitPlaylistBurn(IWMReaderPlaylistBurn *iface, DWORD count, - LPCWSTR_WMSDK_TYPE_SAFE *filenames, IWMStatusCallback *callback, void *context) -{ - struct async_reader *This = impl_from_IWMReaderPlaylistBurn(iface); - FIXME("%p, %d, %p, %p, %p\n", This, count, filenames, callback, context); - return E_NOTIMPL; -} - -static HRESULT WINAPI playlist_GetInitResults(IWMReaderPlaylistBurn *iface, DWORD count, HRESULT *stat) -{ - struct async_reader *This = impl_from_IWMReaderPlaylistBurn(iface); - FIXME("%p, %d, %p\n", This, count, stat); - return E_NOTIMPL; -} - -static HRESULT WINAPI playlist_Cancel(IWMReaderPlaylistBurn *iface) -{ - struct async_reader *This = impl_from_IWMReaderPlaylistBurn(iface); - FIXME("%p\n", This); - return E_NOTIMPL; -} - -static HRESULT WINAPI playlist_EndPlaylistBurn(IWMReaderPlaylistBurn *iface, HRESULT result) -{ - struct async_reader *This = impl_from_IWMReaderPlaylistBurn(iface); - FIXME("%p, 0x%08x\n", This, result); - return E_NOTIMPL; -} - -static const IWMReaderPlaylistBurnVtbl WMReaderPlaylistBurnVtbl = -{ - playlist_QueryInterface, - playlist_AddRef, - playlist_Release, - playlist_InitPlaylistBurn, - playlist_GetInitResults, - playlist_Cancel, - playlist_EndPlaylistBurn -}; - static struct async_reader *impl_from_IReferenceClock(IReferenceClock *iface) { return CONTAINING_RECORD(iface, struct async_reader, IReferenceClock_iface); @@ -1353,9 +1288,6 @@ static void *async_reader_query_interface(struct wm_reader *iface, REFIID iid) || IsEqualIID(iid, &IID_IWMReaderNetworkConfig2)) return &reader->IWMReaderNetworkConfig2_iface;
- if (IsEqualIID(iid, &IID_IWMReaderPlaylistBurn)) - return &reader->IWMReaderPlaylistBurn_iface; - if (IsEqualIID(iid, &IID_IWMReaderStreamClock)) return &reader->IWMReaderStreamClock_iface;
@@ -1399,7 +1331,6 @@ HRESULT WINAPI winegstreamer_create_wm_async_reader(IWMReader **reader) object->IWMReaderAdvanced6_iface.lpVtbl = &WMReaderAdvanced6Vtbl; object->IWMReaderAccelerator_iface.lpVtbl = &WMReaderAcceleratorVtbl; object->IWMReaderNetworkConfig2_iface.lpVtbl = &WMReaderNetworkConfig2Vtbl; - object->IWMReaderPlaylistBurn_iface.lpVtbl = &WMReaderPlaylistBurnVtbl; object->IWMReaderStreamClock_iface.lpVtbl = &WMReaderStreamClockVtbl; object->IWMReaderTimecode_iface.lpVtbl = &WMReaderTimecodeVtbl; object->IWMReaderTypeNegotiation_iface.lpVtbl = &WMReaderTypeNegotiationVtbl; diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c index edf8f227308..1627dead3d6 100644 --- a/dlls/winegstreamer/wm_reader.c +++ b/dlls/winegstreamer/wm_reader.c @@ -53,6 +53,10 @@ static HRESULT WINAPI profile_QueryInterface(IWMProfile3 *iface, REFIID iid, voi { *out = &reader->IWMProfile3_iface; } + else if (IsEqualIID(iid, &IID_IWMReaderPlaylistBurn)) + { + *out = &reader->IWMReaderPlaylistBurn_iface; + } else if (!(*out = reader->ops->query_interface(reader, iid))) { WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid)); @@ -638,12 +642,76 @@ static const IWMPacketSize2Vtbl packet_size_vtbl = packet_size_SetMinPacketSize, };
+static struct wm_reader *impl_from_IWMReaderPlaylistBurn(IWMReaderPlaylistBurn *iface) +{ + return CONTAINING_RECORD(iface, struct wm_reader, IWMReaderPlaylistBurn_iface); +} + +static HRESULT WINAPI playlist_QueryInterface(IWMReaderPlaylistBurn *iface, REFIID iid, void **out) +{ + struct wm_reader *reader = impl_from_IWMReaderPlaylistBurn(iface); + + return IWMProfile3_QueryInterface(&reader->IWMProfile3_iface, iid, out); +} + +static ULONG WINAPI playlist_AddRef(IWMReaderPlaylistBurn *iface) +{ + struct wm_reader *reader = impl_from_IWMReaderPlaylistBurn(iface); + + return IWMProfile3_AddRef(&reader->IWMProfile3_iface); +} + +static ULONG WINAPI playlist_Release(IWMReaderPlaylistBurn *iface) +{ + struct wm_reader *reader = impl_from_IWMReaderPlaylistBurn(iface); + + return IWMProfile3_Release(&reader->IWMProfile3_iface); +} + +static HRESULT WINAPI playlist_InitPlaylistBurn(IWMReaderPlaylistBurn *iface, DWORD count, + const WCHAR **filenames, IWMStatusCallback *callback, void *context) +{ + FIXME("iface %p, count %u, filenames %p, callback %p, context %p, stub!\n", + iface, count, filenames, callback, context); + return E_NOTIMPL; +} + +static HRESULT WINAPI playlist_GetInitResults(IWMReaderPlaylistBurn *iface, DWORD count, HRESULT *hrs) +{ + FIXME("iface %p, count %u, hrs %p, stub!\n", iface, count, hrs); + return E_NOTIMPL; +} + +static HRESULT WINAPI playlist_Cancel(IWMReaderPlaylistBurn *iface) +{ + FIXME("iface %p, stub!\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI playlist_EndPlaylistBurn(IWMReaderPlaylistBurn *iface, HRESULT hr) +{ + FIXME("iface %p, hr %#x, stub!\n", iface, hr); + return E_NOTIMPL; +} + +static const IWMReaderPlaylistBurnVtbl playlist_vtbl = +{ + playlist_QueryInterface, + playlist_AddRef, + playlist_Release, + playlist_InitPlaylistBurn, + playlist_GetInitResults, + playlist_Cancel, + playlist_EndPlaylistBurn, +}; + void wm_reader_init(struct wm_reader *reader, const struct wm_reader_ops *ops) { reader->IWMHeaderInfo3_iface.lpVtbl = &header_info_vtbl; reader->IWMLanguageList_iface.lpVtbl = &language_list_vtbl; reader->IWMPacketSize2_iface.lpVtbl = &packet_size_vtbl; reader->IWMProfile3_iface.lpVtbl = &profile_vtbl; + reader->IWMReaderPlaylistBurn_iface.lpVtbl = &playlist_vtbl; reader->refcount = 1; reader->ops = ops; } diff --git a/dlls/wmvcore/tests/wmvcore.c b/dlls/wmvcore/tests/wmvcore.c index 0662c035617..5c9e9551495 100644 --- a/dlls/wmvcore/tests/wmvcore.c +++ b/dlls/wmvcore/tests/wmvcore.c @@ -153,7 +153,7 @@ static void test_wmsyncreader_interfaces(void) check_interface(reader, &IID_IWMProfile, TRUE); check_interface(reader, &IID_IWMProfile2, TRUE); check_interface(reader, &IID_IWMProfile3, TRUE); - todo_wine check_interface(reader, &IID_IWMReaderPlaylistBurn, TRUE); + check_interface(reader, &IID_IWMReaderPlaylistBurn, TRUE); todo_wine check_interface(reader, &IID_IWMReaderTimecode, TRUE); check_interface(reader, &IID_IWMSyncReader, TRUE); check_interface(reader, &IID_IWMSyncReader2, TRUE);
Signed-off-by: Zebediah Figura zfigura@codeweavers.com --- dlls/winegstreamer/gst_private.h | 1 + dlls/winegstreamer/wm_asyncreader.c | 52 --------------------------- dlls/winegstreamer/wm_reader.c | 55 +++++++++++++++++++++++++++++ dlls/wmvcore/tests/wmvcore.c | 2 +- 4 files changed, 57 insertions(+), 53 deletions(-)
diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index be72f6694c7..c757dfbefd8 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -120,6 +120,7 @@ struct wm_reader IWMPacketSize2 IWMPacketSize2_iface; IWMProfile3 IWMProfile3_iface; IWMReaderPlaylistBurn IWMReaderPlaylistBurn_iface; + IWMReaderTimecode IWMReaderTimecode_iface; LONG refcount;
const struct wm_reader_ops *ops; diff --git a/dlls/winegstreamer/wm_asyncreader.c b/dlls/winegstreamer/wm_asyncreader.c index 0a240ff55c5..12b96245707 100644 --- a/dlls/winegstreamer/wm_asyncreader.c +++ b/dlls/winegstreamer/wm_asyncreader.c @@ -30,7 +30,6 @@ struct async_reader IWMReaderNetworkConfig2 IWMReaderNetworkConfig2_iface; IWMReaderStreamClock IWMReaderStreamClock_iface; IWMReaderTypeNegotiation IWMReaderTypeNegotiation_iface; - IWMReaderTimecode IWMReaderTimecode_iface; IReferenceClock IReferenceClock_iface; };
@@ -1143,53 +1142,6 @@ static const IWMReaderTypeNegotiationVtbl WMReaderTypeNegotiationVtbl = negotiation_TryOutputProps };
-static struct async_reader *impl_from_IWMReaderTimecode(IWMReaderTimecode *iface) -{ - return CONTAINING_RECORD(iface, struct async_reader, IWMReaderTimecode_iface); -} - -static HRESULT WINAPI timecode_QueryInterface(IWMReaderTimecode *iface, REFIID riid, void **ppv) -{ - struct async_reader *This = impl_from_IWMReaderTimecode(iface); - return IWMReader_QueryInterface(&This->IWMReader_iface, riid, ppv); -} - -static ULONG WINAPI timecode_AddRef(IWMReaderTimecode *iface) -{ - struct async_reader *This = impl_from_IWMReaderTimecode(iface); - return IWMReader_AddRef(&This->IWMReader_iface); -} - -static ULONG WINAPI timecode_Release(IWMReaderTimecode *iface) -{ - struct async_reader *This = impl_from_IWMReaderTimecode(iface); - return IWMReader_Release(&This->IWMReader_iface); -} - -static HRESULT WINAPI timecode_GetTimecodeRangeCount(IWMReaderTimecode *iface, WORD num, WORD *count) -{ - struct async_reader *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) -{ - struct async_reader *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 -}; - static struct async_reader *impl_from_IReferenceClock(IReferenceClock *iface) { return CONTAINING_RECORD(iface, struct async_reader, IReferenceClock_iface); @@ -1291,9 +1243,6 @@ static void *async_reader_query_interface(struct wm_reader *iface, REFIID iid) if (IsEqualIID(iid, &IID_IWMReaderStreamClock)) return &reader->IWMReaderStreamClock_iface;
- if (IsEqualIID(iid, &IID_IWMReaderTimecode)) - return &reader->IWMReaderTimecode_iface; - if (IsEqualIID(iid, &IID_IWMReaderTypeNegotiation)) return &reader->IWMReaderTypeNegotiation_iface;
@@ -1332,7 +1281,6 @@ HRESULT WINAPI winegstreamer_create_wm_async_reader(IWMReader **reader) object->IWMReaderAccelerator_iface.lpVtbl = &WMReaderAcceleratorVtbl; object->IWMReaderNetworkConfig2_iface.lpVtbl = &WMReaderNetworkConfig2Vtbl; object->IWMReaderStreamClock_iface.lpVtbl = &WMReaderStreamClockVtbl; - object->IWMReaderTimecode_iface.lpVtbl = &WMReaderTimecodeVtbl; object->IWMReaderTypeNegotiation_iface.lpVtbl = &WMReaderTypeNegotiationVtbl;
TRACE("Created async reader %p.\n", object); diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c index 1627dead3d6..963d33afe0f 100644 --- a/dlls/winegstreamer/wm_reader.c +++ b/dlls/winegstreamer/wm_reader.c @@ -57,6 +57,10 @@ static HRESULT WINAPI profile_QueryInterface(IWMProfile3 *iface, REFIID iid, voi { *out = &reader->IWMReaderPlaylistBurn_iface; } + else if (IsEqualIID(iid, &IID_IWMReaderTimecode)) + { + *out = &reader->IWMReaderTimecode_iface; + } else if (!(*out = reader->ops->query_interface(reader, iid))) { WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid)); @@ -705,6 +709,56 @@ static const IWMReaderPlaylistBurnVtbl playlist_vtbl = playlist_EndPlaylistBurn, };
+static struct wm_reader *impl_from_IWMReaderTimecode(IWMReaderTimecode *iface) +{ + return CONTAINING_RECORD(iface, struct wm_reader, IWMReaderTimecode_iface); +} + +static HRESULT WINAPI timecode_QueryInterface(IWMReaderTimecode *iface, REFIID iid, void **out) +{ + struct wm_reader *reader = impl_from_IWMReaderTimecode(iface); + + return IWMProfile3_QueryInterface(&reader->IWMProfile3_iface, iid, out); +} + +static ULONG WINAPI timecode_AddRef(IWMReaderTimecode *iface) +{ + struct wm_reader *reader = impl_from_IWMReaderTimecode(iface); + + return IWMProfile3_AddRef(&reader->IWMProfile3_iface); +} + +static ULONG WINAPI timecode_Release(IWMReaderTimecode *iface) +{ + struct wm_reader *reader = impl_from_IWMReaderTimecode(iface); + + return IWMProfile3_Release(&reader->IWMProfile3_iface); +} + +static HRESULT WINAPI timecode_GetTimecodeRangeCount(IWMReaderTimecode *iface, + WORD stream_number, WORD *count) +{ + FIXME("iface %p, stream_number %u, count %p, stub!\n", iface, stream_number, count); + return E_NOTIMPL; +} + +static HRESULT WINAPI timecode_GetTimecodeRangeBounds(IWMReaderTimecode *iface, + WORD stream_number, WORD index, DWORD *start, DWORD *end) +{ + FIXME("iface %p, stream_number %u, index %u, start %p, end %p, stub!\n", + iface, stream_number, index, start, end); + return E_NOTIMPL; +} + +static const IWMReaderTimecodeVtbl timecode_vtbl = +{ + timecode_QueryInterface, + timecode_AddRef, + timecode_Release, + timecode_GetTimecodeRangeCount, + timecode_GetTimecodeRangeBounds, +}; + void wm_reader_init(struct wm_reader *reader, const struct wm_reader_ops *ops) { reader->IWMHeaderInfo3_iface.lpVtbl = &header_info_vtbl; @@ -712,6 +766,7 @@ void wm_reader_init(struct wm_reader *reader, const struct wm_reader_ops *ops) reader->IWMPacketSize2_iface.lpVtbl = &packet_size_vtbl; reader->IWMProfile3_iface.lpVtbl = &profile_vtbl; reader->IWMReaderPlaylistBurn_iface.lpVtbl = &playlist_vtbl; + reader->IWMReaderTimecode_iface.lpVtbl = &timecode_vtbl; reader->refcount = 1; reader->ops = ops; } diff --git a/dlls/wmvcore/tests/wmvcore.c b/dlls/wmvcore/tests/wmvcore.c index 5c9e9551495..79bcfef0d52 100644 --- a/dlls/wmvcore/tests/wmvcore.c +++ b/dlls/wmvcore/tests/wmvcore.c @@ -154,7 +154,7 @@ static void test_wmsyncreader_interfaces(void) check_interface(reader, &IID_IWMProfile2, TRUE); check_interface(reader, &IID_IWMProfile3, TRUE); check_interface(reader, &IID_IWMReaderPlaylistBurn, TRUE); - todo_wine check_interface(reader, &IID_IWMReaderTimecode, TRUE); + check_interface(reader, &IID_IWMReaderTimecode, TRUE); check_interface(reader, &IID_IWMSyncReader, TRUE); check_interface(reader, &IID_IWMSyncReader2, TRUE);