Commit dd1f932e authored by Haakon Sporsheim's avatar Haakon Sporsheim Committed by Ole Andre Vadla Ravnaas
Browse files

sys/directdraw/gstdirectdrawsink.c (gst_directdraw_sink_show_frame,

Original commit message from CVS:
patch by: Haakon Sporsheim <haakon.sporsheim at tandberg com>
* sys/directdraw/gstdirectdrawsink.c (gst_directdraw_sink_show_frame,
WndProc, gst_directdraw_sink_window_thread):
Improved Windows message loop and fixed window destruction issue.
When the window which DirectDraw is rendering to is destroyed, the
render/show_frame function will return GST_FLOW_ERROR.
Partially fixes #520885.
parent da78d8dc
2008-05-07 Ole André Vadla Ravnås <ole.andre.ravnas at tandberg com>
patch by: Haakon Sporsheim <haakon.sporsheim at tandberg com>
* sys/directdraw/gstdirectdrawsink.c (gst_directdraw_sink_show_frame,
WndProc, gst_directdraw_sink_window_thread):
Improved Windows message loop and fixed window destruction issue.
When the window which DirectDraw is rendering to is destroyed, the
render/show_frame function will return GST_FLOW_ERROR.
Partially fixes #520885.
2008-05-07 Ole André Vadla Ravnås <ole.andre.ravnas at tandberg com>
 
patch by: Haakon Sporsheim <haakon.sporsheim at tandberg com>
......
......@@ -810,8 +810,14 @@ gst_directdraw_sink_show_frame (GstBaseSink * bsink, GstBuffer * buf)
/* use last buffer */
buf = ddrawsink->last_buffer;
}
if (buf == NULL)
if (buf == NULL) {
GST_ERROR_OBJECT (ddrawsink, "No buffer to render.");
return GST_FLOW_ERROR;
} else if (!ddrawsink->video_window) {
GST_WARNING_OBJECT (ddrawsink, "No video window to render to.");
return GST_FLOW_ERROR;
}
/* get the video window position */
GST_OBJECT_LOCK (ddrawsink);
......@@ -1314,13 +1320,13 @@ WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
switch (message) {
case WM_ERASEBKGND:
return TRUE;
case WM_DESTROY:
PostQuitMessage (0);
break;
case WM_CLOSE:
DestroyWindow (hWnd);
case WM_DESTROY:
PostQuitMessage (0);
return 0;
}
return DefWindowProc (hWnd, message, wParam, lParam);
}
......@@ -1328,6 +1334,7 @@ static gpointer
gst_directdraw_sink_window_thread (GstDirectDrawSink * ddrawsink)
{
WNDCLASS WndClass;
MSG msg;
memset (&WndClass, 0, sizeof (WNDCLASS));
WndClass.style = CS_HREDRAW | CS_VREDRAW;
......@@ -1357,24 +1364,21 @@ gst_directdraw_sink_window_thread (GstDirectDrawSink * ddrawsink)
ReleaseSemaphore (ddrawsink->window_created_signal, 1, NULL);
/* start message loop processing our default window messages */
while (1) {
MSG msg;
if (GetMessage (&msg, ddrawsink->video_window, 0, 0) <= 0) {
GST_CAT_LOG_OBJECT (directdrawsink_debug, ddrawsink,
"our window received WM_QUIT or error.");
/* The window could have changed, if it is not ours anymore we don't
* overwrite the current video window with NULL */
if (ddrawsink->our_video_window) {
GST_OBJECT_LOCK (ddrawsink);
ddrawsink->video_window = NULL;
GST_OBJECT_UNLOCK (ddrawsink);
}
break;
}
while (GetMessage (&msg, NULL, 0, 0) != FALSE) {
TranslateMessage (&msg);
DispatchMessage (&msg);
}
GST_CAT_LOG_OBJECT (directdrawsink_debug, ddrawsink,
"our window received WM_QUIT or error.");
/* The window could have changed, if it is not ours anymore we don't
* overwrite the current video window with NULL */
if (ddrawsink->our_video_window) {
GST_OBJECT_LOCK (ddrawsink);
ddrawsink->video_window = NULL;
GST_OBJECT_UNLOCK (ddrawsink);
}
return NULL;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment