diff options
author | Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> | 2011-02-07 22:47:34 +0100 |
---|---|---|
committer | Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> | 2011-02-08 18:02:26 +0100 |
commit | edb15598ed566f37d90129492a86341badee0672 (patch) | |
tree | 73108cc64bcf4297801d4fd103a31bfe0aa89d3b /sys/directdraw | |
parent | 15366355a4caa34481cab7bdfd0385b44dfad866 (diff) | |
download | gstreamer-plugins-bad-edb15598ed566f37d90129492a86341badee0672.tar.gz |
directdrawsink: avoid rendering to invalid area
Based on patch by Havard Graff <havard.graff@tandberg.com>
Fixes #594280.
Diffstat (limited to 'sys/directdraw')
-rw-r--r-- | sys/directdraw/gstdirectdrawsink.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/sys/directdraw/gstdirectdrawsink.c b/sys/directdraw/gstdirectdrawsink.c index 15f79d12a..3b8967f6c 100644 --- a/sys/directdraw/gstdirectdrawsink.c +++ b/sys/directdraw/gstdirectdrawsink.c @@ -904,6 +904,19 @@ gst_directdraw_sink_show_frame (GstBaseSink * bsink, GstBuffer * buf) GetClientRect (ddrawsink->video_window, &destsurf_rect); OffsetRect (&destsurf_rect, dest_surf_point.x, dest_surf_point.y); + /* Check to see if we have an area to draw to. + * When the window is minimized, it will trigger the + * "IDirectDrawSurface7_Blt (object's offscreen surface)" warning, + * with a msg that the rectangle is invalid */ + if (destsurf_rect.right <= destsurf_rect.left || + destsurf_rect.bottom <= destsurf_rect.top) { + GST_OBJECT_UNLOCK (ddrawsink); + GST_DEBUG_OBJECT (ddrawsink, "invalid rendering window rectangle " + "(%ld, %ld), (%ld, %ld)", destsurf_rect.left, destsurf_rect.top, + destsurf_rect.right, destsurf_rect.bottom); + goto beach; + } + if (ddrawsink->keep_aspect_ratio) { /* center image to dest image keeping aspect ratio */ src_rect.top = 0; @@ -1004,6 +1017,7 @@ gst_directdraw_sink_show_frame (GstBaseSink * bsink, GstBuffer * buf) "returned %s", DDErrorString (hRes)); } +beach: return GST_FLOW_OK; } |