Signed-off-by: Zebediah Figura zfigura@codeweavers.com --- dlls/winegstreamer/Makefile.in | 4 +++- dlls/winegstreamer/gst_private.h | 2 -- dlls/winegstreamer/main.c | 26 -------------------------- dlls/winegstreamer/quartz_parser.c | 19 ------------------- 4 files changed, 3 insertions(+), 48 deletions(-)
diff --git a/dlls/winegstreamer/Makefile.in b/dlls/winegstreamer/Makefile.in index e35df3cf3f9..95c2d885482 100644 --- a/dlls/winegstreamer/Makefile.in +++ b/dlls/winegstreamer/Makefile.in @@ -3,7 +3,9 @@ UNIXLIB = winegstreamer.so IMPORTS = strmbase strmiids uuid ole32 mfuuid DELAYIMPORTS = mfplat EXTRAINCL = $(GSTREAMER_CFLAGS) -EXTRALIBS = $(GSTREAMER_LIBS) $(PTHREAD_LIBS) +# GLib pins some of its own libraries, and breaks if libraries that import it +# try to initialize themselves after being unloaded. +EXTRALIBS = $(GSTREAMER_LIBS) $(PTHREAD_LIBS) -Wl,-z,nodelete
C_SRCS = \ audioconvert.c \ diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index ebe0bf6f50d..c141dd44921 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -98,8 +98,6 @@ HRESULT decodebin_parser_create(IUnknown *outer, IUnknown **out) DECLSPEC_HIDDEN HRESULT mpeg_splitter_create(IUnknown *outer, IUnknown **out) DECLSPEC_HIDDEN; HRESULT wave_parser_create(IUnknown *outer, IUnknown **out) DECLSPEC_HIDDEN;
-BOOL init_gstreamer(void) DECLSPEC_HIDDEN; - extern HRESULT mfplat_get_class_object(REFCLSID rclsid, REFIID riid, void **obj) DECLSPEC_HIDDEN; extern HRESULT mfplat_DllRegisterServer(void) DECLSPEC_HIDDEN;
diff --git a/dlls/winegstreamer/main.c b/dlls/winegstreamer/main.c index c799aa06d1b..6b2b70f9c60 100644 --- a/dlls/winegstreamer/main.c +++ b/dlls/winegstreamer/main.c @@ -318,9 +318,6 @@ HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID iid, void **out)
TRACE("clsid %s, iid %s, out %p.\n", debugstr_guid(clsid), debugstr_guid(iid), out);
- if (!init_gstreamer()) - return CLASS_E_CLASSNOTAVAILABLE; - if (SUCCEEDED(hr = mfplat_get_class_object(clsid, iid, out))) return hr;
@@ -341,29 +338,6 @@ HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID iid, void **out) return IClassFactory_QueryInterface(&factory->IClassFactory_iface, iid, out); }
-static BOOL CALLBACK init_gstreamer_proc(INIT_ONCE *once, void *param, void **ctx) -{ - HINSTANCE handle; - - /* Unloading glib is a bad idea.. it installs atexit handlers, - * so never unload the dll after loading */ - GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_PIN, - (LPCWSTR)init_gstreamer_proc, &handle); - if (!handle) - ERR("Failed to pin module.\n"); - - return TRUE; -} - -BOOL init_gstreamer(void) -{ - static INIT_ONCE once = INIT_ONCE_STATIC_INIT; - - InitOnceExecuteOnce(&once, init_gstreamer_proc, NULL, NULL); - - return TRUE; -} - static const REGPINTYPES reg_audio_mt = {&MEDIATYPE_Audio, &GUID_NULL}; static const REGPINTYPES reg_stream_mt = {&MEDIATYPE_Stream, &GUID_NULL}; static const REGPINTYPES reg_video_mt = {&MEDIATYPE_Video, &GUID_NULL}; diff --git a/dlls/winegstreamer/quartz_parser.c b/dlls/winegstreamer/quartz_parser.c index 6ae1a99a14a..d6a58801f51 100644 --- a/dlls/winegstreamer/quartz_parser.c +++ b/dlls/winegstreamer/quartz_parser.c @@ -1098,20 +1098,10 @@ static HRESULT decodebin_parser_source_get_media_type(struct parser_source *pin, return VFW_S_NO_MORE_ITEMS; }
-static BOOL parser_init_gstreamer(void) -{ - if (!init_gstreamer()) - return FALSE; - return TRUE; -} - HRESULT decodebin_parser_create(IUnknown *outer, IUnknown **out) { struct parser *object;
- if (!parser_init_gstreamer()) - return E_FAIL; - if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY;
@@ -1634,9 +1624,6 @@ HRESULT wave_parser_create(IUnknown *outer, IUnknown **out) { struct parser *object;
- if (!parser_init_gstreamer()) - return E_FAIL; - if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY;
@@ -1720,9 +1707,6 @@ HRESULT avi_splitter_create(IUnknown *outer, IUnknown **out) { struct parser *object;
- if (!parser_init_gstreamer()) - return E_FAIL; - if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY;
@@ -1827,9 +1811,6 @@ HRESULT mpeg_splitter_create(IUnknown *outer, IUnknown **out) { struct parser *object;
- if (!parser_init_gstreamer()) - return E_FAIL; - if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY;