summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorSergey Scobich <sergey.scobich@gmail.com>2006-11-01 10:19:18 +0000
committerJan Schmidt <thaytan@noraisin.net>2009-05-16 01:29:15 +0100
commitc807b70709f6bc292bfc6b4a3f6a098bf006fe44 (patch)
tree749c45121134b4a3c42a8e5eb9d5455bdd2d9c05 /sys
parent622a56c9372c52835c3ebcaae8f939d9a87f3a5e (diff)
[MOVED FROM GOOD] 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')
-rw-r--r--sys/directdraw/gstdirectdrawsink.c20
-rw-r--r--sys/directdraw/gstdirectdrawsink.h1
2 files changed, 19 insertions, 2 deletions
diff --git a/sys/directdraw/gstdirectdrawsink.c b/sys/directdraw/gstdirectdrawsink.c
index fbccb80dd..ec449c7d8 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 f11c95ec5..f9d4c8657 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 */