Zebediah Figura : winegstreamer: Move the IWMLanguageList implementation to the wm_reader object.

Alexandre Julliard julliard at winehq.org
Wed Oct 20 15:58:41 CDT 2021


Module: wine
Branch: master
Commit: 4239f2acf77d9eaa8166628d25c1336c1599df33
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=4239f2acf77d9eaa8166628d25c1336c1599df33

Author: Zebediah Figura <zfigura at codeweavers.com>
Date:   Wed Oct 20 11:09:49 2021 -0500

winegstreamer: Move the IWMLanguageList implementation to the wm_reader object.

Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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 09d5c3bddcc..b72ff98cd18 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);




More information about the wine-cvs mailing list