sys/: add 'handle-expose' property. Useful for video widgets which may want to be in control of Expose behaviour. Fix...

Original commit message from CVS:
Patch by: Jorn Baayen <jorn at openedhand dot com>
* sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents),
(gst_ximagesink_set_property), (gst_ximagesink_get_property),
(gst_ximagesink_init), (gst_ximagesink_class_init):
* sys/ximage/ximagesink.h:
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_handle_xevents),
(gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
(gst_xvimagesink_init), (gst_xvimagesink_class_init):
* sys/xvimage/xvimagesink.h:
add 'handle-expose' property. Useful for video widgets which may want to
be in control of Expose behaviour. Fixes #380625
This commit is contained in:
Jorn Baayen 2007-07-14 18:20:41 +00:00 committed by Wim Taymans
parent c82275a51d
commit 877fa6035a
5 changed files with 45 additions and 6 deletions

View file

@ -1,3 +1,18 @@
2007-07-14 Wim Taymans <wim.taymans@gmail.com>
Patch by: Jorn Baayen <jorn at openedhand dot com>
* sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents),
(gst_ximagesink_set_property), (gst_ximagesink_get_property),
(gst_ximagesink_init), (gst_ximagesink_class_init):
* sys/ximage/ximagesink.h:
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_handle_xevents),
(gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
(gst_xvimagesink_init), (gst_xvimagesink_class_init):
* sys/xvimage/xvimagesink.h:
add 'handle-expose' property. Useful for video widgets which may want to
be in control of Expose behaviour. Fixes #380625
2007-07-14 Wim Taymans <wim.taymans@gmail.com> 2007-07-14 Wim Taymans <wim.taymans@gmail.com>
* gst-libs/gst/rtp/gstbasertppayload.c: * gst-libs/gst/rtp/gstbasertppayload.c:

View file

@ -166,8 +166,8 @@ enum
PROP_SYNCHRONOUS, PROP_SYNCHRONOUS,
PROP_PIXEL_ASPECT_RATIO, PROP_PIXEL_ASPECT_RATIO,
PROP_FORCE_ASPECT_RATIO, PROP_FORCE_ASPECT_RATIO,
PROP_HANDLE_EVENTS PROP_HANDLE_EVENTS,
/* FILL ME */ PROP_HANDLE_EXPOSE
}; };
static GstVideoSinkClass *parent_class = NULL; static GstVideoSinkClass *parent_class = NULL;
@ -1035,7 +1035,7 @@ gst_ximagesink_handle_xevents (GstXImageSink * ximagesink)
} }
} }
if (exposed || configured) { if (ximagesink->handle_expose && (exposed || configured)) {
g_mutex_unlock (ximagesink->x_lock); g_mutex_unlock (ximagesink->x_lock);
g_mutex_unlock (ximagesink->flow_lock); g_mutex_unlock (ximagesink->flow_lock);
@ -2041,6 +2041,9 @@ gst_ximagesink_set_property (GObject * object, guint prop_id,
gst_ximagesink_set_event_handling (GST_X_OVERLAY (ximagesink), gst_ximagesink_set_event_handling (GST_X_OVERLAY (ximagesink),
g_value_get_boolean (value)); g_value_get_boolean (value));
break; break;
case PROP_HANDLE_EXPOSE:
ximagesink->handle_expose = g_value_get_boolean (value);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break; break;
@ -2074,6 +2077,9 @@ gst_ximagesink_get_property (GObject * object, guint prop_id,
case PROP_HANDLE_EVENTS: case PROP_HANDLE_EVENTS:
g_value_set_boolean (value, ximagesink->handle_events); g_value_set_boolean (value, ximagesink->handle_events);
break; break;
case PROP_HANDLE_EXPOSE:
g_value_set_boolean (value, ximagesink->handle_expose);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break; break;
@ -2168,6 +2174,7 @@ gst_ximagesink_init (GstXImageSink * ximagesink)
ximagesink->synchronous = FALSE; ximagesink->synchronous = FALSE;
ximagesink->keep_aspect = FALSE; ximagesink->keep_aspect = FALSE;
ximagesink->handle_events = TRUE; ximagesink->handle_events = TRUE;
ximagesink->handle_expose = TRUE;
} }
static void static void
@ -2216,6 +2223,10 @@ gst_ximagesink_class_init (GstXImageSinkClass * klass)
g_param_spec_boolean ("handle-events", "Handle XEvents", g_param_spec_boolean ("handle-events", "Handle XEvents",
"When enabled, XEvents will be selected and handled", TRUE, "When enabled, XEvents will be selected and handled", TRUE,
G_PARAM_READWRITE)); G_PARAM_READWRITE));
g_object_class_install_property (gobject_class, PROP_HANDLE_EXPOSE,
g_param_spec_boolean ("handle-expose", "Handle expose", "When enabled, "
"the current frame will always be drawn in response to X Expose "
"events", TRUE, G_PARAM_READWRITE));
gstelement_class->change_state = gst_ximagesink_change_state; gstelement_class->change_state = gst_ximagesink_change_state;

View file

@ -213,6 +213,7 @@ struct _GstXImageSink {
gboolean synchronous; gboolean synchronous;
gboolean keep_aspect; gboolean keep_aspect;
gboolean handle_events; gboolean handle_events;
gboolean handle_expose;
}; };
struct _GstXImageSinkClass { struct _GstXImageSinkClass {

View file

@ -194,8 +194,8 @@ enum
ARG_FORCE_ASPECT_RATIO, ARG_FORCE_ASPECT_RATIO,
ARG_HANDLE_EVENTS, ARG_HANDLE_EVENTS,
ARG_DEVICE, ARG_DEVICE,
ARG_DEVICE_NAME ARG_DEVICE_NAME,
/* FILL ME */ ARG_HANDLE_EXPOSE
}; };
static GstVideoSinkClass *parent_class = NULL; static GstVideoSinkClass *parent_class = NULL;
@ -1172,7 +1172,7 @@ gst_xvimagesink_handle_xevents (GstXvImageSink * xvimagesink)
} }
} }
if (exposed || configured) { if (xvimagesink->handle_expose && (exposed || configured)) {
g_mutex_unlock (xvimagesink->x_lock); g_mutex_unlock (xvimagesink->x_lock);
g_mutex_unlock (xvimagesink->flow_lock); g_mutex_unlock (xvimagesink->flow_lock);
@ -2851,6 +2851,9 @@ gst_xvimagesink_set_property (GObject * object, guint prop_id,
case ARG_DEVICE: case ARG_DEVICE:
xvimagesink->adaptor_no = atoi (g_value_get_string (value)); xvimagesink->adaptor_no = atoi (g_value_get_string (value));
break; break;
case ARG_HANDLE_EXPOSE:
xvimagesink->handle_expose = g_value_get_boolean (value);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break; break;
@ -2912,6 +2915,9 @@ gst_xvimagesink_get_property (GObject * object, guint prop_id,
g_value_set_string (value, NULL); g_value_set_string (value, NULL);
} }
break; break;
case ARG_HANDLE_EXPOSE:
g_value_set_boolean (value, xvimagesink->handle_expose);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break; break;
@ -3011,6 +3017,7 @@ gst_xvimagesink_init (GstXvImageSink * xvimagesink)
xvimagesink->keep_aspect = FALSE; xvimagesink->keep_aspect = FALSE;
xvimagesink->handle_events = TRUE; xvimagesink->handle_events = TRUE;
xvimagesink->par = NULL; xvimagesink->par = NULL;
xvimagesink->handle_expose = TRUE;
} }
static void static void
@ -3077,6 +3084,10 @@ gst_xvimagesink_class_init (GstXvImageSinkClass * klass)
g_object_class_install_property (gobject_class, ARG_DEVICE_NAME, g_object_class_install_property (gobject_class, ARG_DEVICE_NAME,
g_param_spec_string ("device-name", "Adaptor name", g_param_spec_string ("device-name", "Adaptor name",
"The name of the video adaptor", NULL, G_PARAM_READABLE)); "The name of the video adaptor", NULL, G_PARAM_READABLE));
g_object_class_install_property (gobject_class, ARG_HANDLE_EXPOSE,
g_param_spec_boolean ("handle-expose", "Handle expose", "When enabled, "
"the current frame will always be drawn in response to X Expose "
"events", TRUE, G_PARAM_READWRITE));
gobject_class->finalize = gst_xvimagesink_finalize; gobject_class->finalize = gst_xvimagesink_finalize;

View file

@ -254,6 +254,7 @@ struct _GstXvImageSink {
gboolean keep_aspect; gboolean keep_aspect;
gboolean draw_border; gboolean draw_border;
gboolean handle_events; gboolean handle_events;
gboolean handle_expose;
gint brightness; gint brightness;
gint contrast; gint contrast;