Signed-off-by: Zebediah Figura zfigura@codeweavers.com --- dlls/winegstreamer/gst_private.h | 1 + dlls/winegstreamer/wm_asyncreader.c | 61 ----------------------------- dlls/winegstreamer/wm_reader.c | 61 +++++++++++++++++++++++++++++ dlls/wmvcore/tests/wmvcore.c | 2 +- 4 files changed, 63 insertions(+), 62 deletions(-)
diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index 71d3bb2b509..6dc0ad3e291 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -116,6 +116,7 @@ HRESULT audio_converter_create(REFIID riid, void **ret) DECLSPEC_HIDDEN; struct wm_reader { IWMHeaderInfo3 IWMHeaderInfo3_iface; + IWMLanguageList IWMLanguageList_iface; IWMProfile3 IWMProfile3_iface; LONG refcount;
diff --git a/dlls/winegstreamer/wm_asyncreader.c b/dlls/winegstreamer/wm_asyncreader.c index 1361b20932f..a36718ef453 100644 --- a/dlls/winegstreamer/wm_asyncreader.c +++ b/dlls/winegstreamer/wm_asyncreader.c @@ -32,7 +32,6 @@ struct async_reader IWMReaderTypeNegotiation IWMReaderTypeNegotiation_iface; IWMReaderTimecode IWMReaderTimecode_iface; IWMReaderPlaylistBurn IWMReaderPlaylistBurn_iface; - IWMLanguageList IWMLanguageList_iface; IReferenceClock IReferenceClock_iface; IWMPacketSize2 IWMPacketSize2_iface; }; @@ -1257,62 +1256,6 @@ static const IWMReaderPlaylistBurnVtbl WMReaderPlaylistBurnVtbl = playlist_EndPlaylistBurn };
-static struct async_reader *impl_from_IWMLanguageList(IWMLanguageList *iface) -{ - return CONTAINING_RECORD(iface, struct async_reader, IWMLanguageList_iface); -} - -static HRESULT WINAPI langlist_QueryInterface(IWMLanguageList *iface, REFIID riid, void **ppv) -{ - struct async_reader *This = impl_from_IWMLanguageList(iface); - return IWMReader_QueryInterface(&This->IWMReader_iface, riid, ppv); -} - -static ULONG WINAPI langlist_AddRef(IWMLanguageList *iface) -{ - struct async_reader *This = impl_from_IWMLanguageList(iface); - return IWMReader_AddRef(&This->IWMReader_iface); -} - -static ULONG WINAPI langlist_Release(IWMLanguageList *iface) -{ - struct async_reader *This = impl_from_IWMLanguageList(iface); - return IWMReader_Release(&This->IWMReader_iface); -} - -static HRESULT WINAPI langlist_GetLanguageCount(IWMLanguageList *iface, WORD *count) -{ - struct async_reader *This = impl_from_IWMLanguageList(iface); - FIXME("%p, %p\n", This, count); - return E_NOTIMPL; -} - -static HRESULT WINAPI langlist_GetLanguageDetails(IWMLanguageList *iface, WORD index, - WCHAR *language, WORD *length) -{ - struct async_reader *This = impl_from_IWMLanguageList(iface); - FIXME("%p, %d, %p, %p\n", This, index, language, length); - return E_NOTIMPL; -} - -static HRESULT WINAPI langlist_AddLanguageByRFC1766String(IWMLanguageList *iface, LPCWSTR_WMSDK_TYPE_SAFE language, - WORD *index) -{ - struct async_reader *This = impl_from_IWMLanguageList(iface); - FIXME("%p, %p, %p\n", This, language, index); - return E_NOTIMPL; -} - -static const IWMLanguageListVtbl WMLanguageListVtbl = -{ - langlist_QueryInterface, - langlist_AddRef, - langlist_Release, - langlist_GetLanguageCount, - langlist_GetLanguageDetails, - langlist_AddLanguageByRFC1766String -}; - static struct async_reader *impl_from_IReferenceClock(IReferenceClock *iface) { return CONTAINING_RECORD(iface, struct async_reader, IReferenceClock_iface); @@ -1455,9 +1398,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_IWMLanguageList)) - return &reader->IWMLanguageList_iface; - if (IsEqualIID(iid, &IID_IWMPacketSize) || IsEqualIID(iid, &IID_IWMPacketSize2)) return &reader->IWMPacketSize2_iface; @@ -1522,7 +1462,6 @@ HRESULT WINAPI winegstreamer_create_wm_async_reader(IWMReader **reader) wm_reader_init(&object->reader, &async_reader_ops);
object->IReferenceClock_iface.lpVtbl = &ReferenceClockVtbl; - object->IWMLanguageList_iface.lpVtbl = &WMLanguageListVtbl; object->IWMPacketSize2_iface.lpVtbl = &WMPacketSize2Vtbl; object->IWMReader_iface.lpVtbl = &WMReaderVtbl; object->IWMReaderAdvanced6_iface.lpVtbl = &WMReaderAdvanced6Vtbl; diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c index bcc5ce41e9b..d1e585d2462 100644 --- a/dlls/winegstreamer/wm_reader.c +++ b/dlls/winegstreamer/wm_reader.c @@ -37,6 +37,10 @@ static HRESULT WINAPI profile_QueryInterface(IWMProfile3 *iface, REFIID iid, voi { *out = &reader->IWMHeaderInfo3_iface; } + else if (IsEqualIID(iid, &IID_IWMLanguageList)) + { + *out = &reader->IWMLanguageList_iface; + } else if (IsEqualIID(iid, &IID_IUnknown) || IsEqualIID(iid, &IID_IWMProfile) || IsEqualIID(iid, &IID_IWMProfile2) @@ -512,9 +516,66 @@ static const IWMHeaderInfo3Vtbl header_info_vtbl = header_info_AddCodecInfo, };
+static struct wm_reader *impl_from_IWMLanguageList(IWMLanguageList *iface) +{ + return CONTAINING_RECORD(iface, struct wm_reader, IWMLanguageList_iface); +} + +static HRESULT WINAPI language_list_QueryInterface(IWMLanguageList *iface, REFIID iid, void **out) +{ + struct wm_reader *reader = impl_from_IWMLanguageList(iface); + + return IWMProfile3_QueryInterface(&reader->IWMProfile3_iface, iid, out); +} + +static ULONG WINAPI language_list_AddRef(IWMLanguageList *iface) +{ + struct wm_reader *reader = impl_from_IWMLanguageList(iface); + + return IWMProfile3_AddRef(&reader->IWMProfile3_iface); +} + +static ULONG WINAPI language_list_Release(IWMLanguageList *iface) +{ + struct wm_reader *reader = impl_from_IWMLanguageList(iface); + + return IWMProfile3_Release(&reader->IWMProfile3_iface); +} + +static HRESULT WINAPI language_list_GetLanguageCount(IWMLanguageList *iface, WORD *count) +{ + FIXME("iface %p, count %p, stub!\n", iface, count); + return E_NOTIMPL; +} + +static HRESULT WINAPI language_list_GetLanguageDetails(IWMLanguageList *iface, + WORD index, WCHAR *lang, WORD *len) +{ + FIXME("iface %p, index %u, lang %p, len %p, stub!\n", iface, index, lang, len); + return E_NOTIMPL; +} + +static HRESULT WINAPI language_list_AddLanguageByRFC1766String(IWMLanguageList *iface, + const WCHAR *lang, WORD *index) +{ + FIXME("iface %p, lang %s, index %p, stub!\n", iface, debugstr_w(lang), index); + return E_NOTIMPL; +} + +static const IWMLanguageListVtbl language_list_vtbl = +{ + language_list_QueryInterface, + language_list_AddRef, + language_list_Release, + language_list_GetLanguageCount, + language_list_GetLanguageDetails, + language_list_AddLanguageByRFC1766String, +}; + 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->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 75d1f9e0c35..9f9c5ed393f 100644 --- a/dlls/wmvcore/tests/wmvcore.c +++ b/dlls/wmvcore/tests/wmvcore.c @@ -147,7 +147,7 @@ static void test_wmsyncreader_interfaces(void) check_interface(reader, &IID_IWMHeaderInfo, TRUE); check_interface(reader, &IID_IWMHeaderInfo2, TRUE); check_interface(reader, &IID_IWMHeaderInfo3, TRUE); - todo_wine check_interface(reader, &IID_IWMLanguageList, 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_IWMProfile, TRUE);