diff options
author | Sergey Scobich <sergey.scobich@gmail.com> | 2006-11-01 10:19:18 +0000 |
---|---|---|
committer | Tim-Philipp Müller <tim@centricular.net> | 2006-11-01 10:19:18 +0000 |
commit | 017a8c8527ff37a4068189e4323a68bc30d1fa92 (patch) | |
tree | 145d9d04f34fa14c7b47bfd4f49934f0d493f708 /sys/directdraw | |
parent | 4bef7791d973deef3e6339ea6a8b421326d6b084 (diff) | |
download | gst-plugins-bad-017a8c8527ff37a4068189e4323a68bc30d1fa92.tar.gz gst-plugins-bad-017a8c8527ff37a4068189e4323a68bc30d1fa92.tar.bz2 gst-plugins-bad-017a8c8527ff37a4068189e4323a68bc30d1fa92.zip |
sys/: Wait until the window is created before using it; guard unistd.h includes with HAVE_UNISTD_H. (#366523)
Original commit message from CVS:
Patch by: Sergey Scobich <sergey dot scobich at gmail com>
* sys/directdraw/gstdirectdrawsink.c:
(gst_directdrawsink_window_thread),
(gst_directdrawsink_create_default_window):
* sys/directdraw/gstdirectdrawsink.h:
* sys/directsound/gstdirectsoundsink.c:
Wait until the window is created before using it; guard unistd.h
includes with HAVE_UNISTD_H. (#366523)
* win32/vs8/libgstdirectdraw.vcproj:
* win32/vs8/libgstdirectsound.vcproj:
Update project files.
Diffstat (limited to 'sys/directdraw')
-rw-r--r-- | sys/directdraw/gstdirectdrawsink.c | 20 | ||||
-rw-r--r-- | sys/directdraw/gstdirectdrawsink.h | 1 |
2 files changed, 19 insertions, 2 deletions
diff --git a/sys/directdraw/gstdirectdrawsink.c b/sys/directdraw/gstdirectdrawsink.c index fbccb80d..ec449c7d 100644 --- a/sys/directdraw/gstdirectdrawsink.c +++ b/sys/directdraw/gstdirectdrawsink.c @@ -28,7 +28,9 @@ #include <fcntl.h> #include <errno.h> +#ifdef HAVE_UNISTD_H #include <unistd.h> +#endif #include <string.h> GST_DEBUG_CATEGORY_STATIC (directdrawsink_debug); @@ -1366,6 +1368,8 @@ gst_directdrawsink_window_thread (GstDirectDrawSink * ddrawsink) if (ddrawsink->video_window == NULL) return FALSE; + ReleaseSemaphore (ddrawsink->window_created_signal, 1, NULL); + /*start message loop processing our default window messages */ while (1) { MSG msg; @@ -1381,15 +1385,27 @@ gst_directdrawsink_window_thread (GstDirectDrawSink * ddrawsink) static gboolean gst_directdrawsink_create_default_window (GstDirectDrawSink * ddrawsink) { + ddrawsink->window_created_signal = CreateSemaphore (NULL, 0, 1, NULL); + if (ddrawsink->window_created_signal == NULL) + return FALSE; + ddrawsink->window_thread = g_thread_create ( (GThreadFunc) gst_directdrawsink_window_thread, ddrawsink, TRUE, NULL); if (ddrawsink->window_thread == NULL) - return FALSE; + goto failed; - /*TODO:wait for the window to be created with timeout */ + /* wait maximum 10 seconds for windows creating */ + if (WaitForSingleObject (ddrawsink->window_created_signal, + 10000) != WAIT_OBJECT_0) + goto failed; + CloseHandle (ddrawsink->window_created_signal); return TRUE; + +failed: + CloseHandle (ddrawsink->window_created_signal); + return FALSE; } static gboolean diff --git a/sys/directdraw/gstdirectdrawsink.h b/sys/directdraw/gstdirectdrawsink.h index f11c95ec..f9d4c865 100644 --- a/sys/directdraw/gstdirectdrawsink.h +++ b/sys/directdraw/gstdirectdrawsink.h @@ -104,6 +104,7 @@ struct _GstDirectDrawSink /*handle of the video window */ HWND video_window; + HANDLE window_created_signal; gboolean resize_window; /*video properties */ |