[PATCH 3/4] winegstreamer: Move GStreamer library initialization to __wine_init_unix_lib().
Zebediah Figura
z.figura12 at gmail.com
Thu Feb 11 16:18:57 CST 2021
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/winegstreamer/main.c | 46 ++++++++--------------------------
dlls/winegstreamer/wg_parser.c | 17 +++++++++++++
2 files changed, 27 insertions(+), 36 deletions(-)
diff --git a/dlls/winegstreamer/main.c b/dlls/winegstreamer/main.c
index 477ed0ad1e6..4e46a99f513 100644
--- a/dlls/winegstreamer/main.c
+++ b/dlls/winegstreamer/main.c
@@ -174,41 +174,16 @@ HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID iid, void **out)
static BOOL CALLBACK init_gstreamer_proc(INIT_ONCE *once, void *param, void **ctx)
{
- BOOL *status = param;
- char argv0[] = "wine";
- char argv1[] = "--gst-disable-registry-fork";
- char *args[3];
- char **argv = args;
- int argc = 2;
- GError *err = NULL;
-
- TRACE("Initializing...\n");
-
- argv[0] = argv0;
- argv[1] = argv1;
- argv[2] = NULL;
- *status = gst_init_check(&argc, &argv, &err);
- if (*status)
- {
- HINSTANCE handle;
-
- TRACE("Initialized, version %s. Built with %d.%d.%d.\n", gst_version_string(),
- GST_VERSION_MAJOR, GST_VERSION_MINOR, GST_VERSION_MICRO);
+ 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)winegstreamer_instance, &handle);
- if (!handle)
- ERR("Failed to pin module %p.\n", winegstreamer_instance);
+ /* 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)winegstreamer_instance, &handle);
+ if (!handle)
+ ERR("Failed to pin module %p.\n", winegstreamer_instance);
- start_dispatch_thread();
- }
- else if (err)
- {
- ERR("Failed to initialize gstreamer: %s\n", debugstr_a(err->message));
- g_error_free(err);
- }
+ start_dispatch_thread();
return TRUE;
}
@@ -216,11 +191,10 @@ static BOOL CALLBACK init_gstreamer_proc(INIT_ONCE *once, void *param, void **ct
BOOL init_gstreamer(void)
{
static INIT_ONCE once = INIT_ONCE_STATIC_INIT;
- static BOOL status;
- InitOnceExecuteOnce(&once, init_gstreamer_proc, &status, NULL);
+ InitOnceExecuteOnce(&once, init_gstreamer_proc, NULL, NULL);
- return status;
+ return TRUE;
}
static const REGPINTYPES reg_audio_mt = {&MEDIATYPE_Audio, &GUID_NULL};
diff --git a/dlls/winegstreamer/wg_parser.c b/dlls/winegstreamer/wg_parser.c
index a64c3f83497..3a67a195dff 100644
--- a/dlls/winegstreamer/wg_parser.c
+++ b/dlls/winegstreamer/wg_parser.c
@@ -1023,7 +1023,24 @@ NTSTATUS CDECL __wine_init_unix_lib(HMODULE module, DWORD reason, const void *pt
{
if (reason == DLL_PROCESS_ATTACH)
{
+ char arg0[] = "wine";
+ char arg1[] = "--gst-disable-registry-fork";
+ char *args[] = {arg0, arg1, NULL};
+ int argc = ARRAY_SIZE(args) - 1;
+ char **argv = args;
+ GError *err;
+
+ if (!gst_init_check(&argc, &argv, &err))
+ {
+ ERR("Failed to initialize GStreamer: %s\n", debugstr_a(err->message));
+ g_error_free(err);
+ return STATUS_UNSUCCESSFUL;
+ }
+ TRACE("GStreamer library version %s; wine built with %d.%d.%d.\n",
+ gst_version_string(), GST_VERSION_MAJOR, GST_VERSION_MINOR, GST_VERSION_MICRO);
+
GST_DEBUG_CATEGORY_INIT(wine, "WINE", GST_DEBUG_FG_RED, "Wine GStreamer support");
+
*(const struct unix_funcs **)ptr_out = &funcs;
}
return STATUS_SUCCESS;
--
2.30.0
More information about the wine-devel
mailing list