mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 05:06:17 +00:00
dfbvideosink: make "layer-mode" property an enum
https://bugzilla.gnome.org/show_bug.cgi?id=703520
This commit is contained in:
parent
f79448552a
commit
8293594397
1 changed files with 31 additions and 22 deletions
|
@ -122,6 +122,8 @@ enum
|
||||||
ARG_LAYER_MODE
|
ARG_LAYER_MODE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define DEFAULT_LAYER_MODE LAYER_MODE_EXCLUSIVE
|
||||||
|
|
||||||
static DFBSurfacePixelFormat gst_dfbvideosink_get_format_from_caps (GstCaps *
|
static DFBSurfacePixelFormat gst_dfbvideosink_get_format_from_caps (GstCaps *
|
||||||
caps);
|
caps);
|
||||||
static void gst_dfbvideosink_update_colorbalance (GstDfbVideoSink *
|
static void gst_dfbvideosink_update_colorbalance (GstDfbVideoSink *
|
||||||
|
@ -134,6 +136,25 @@ static const char *gst_dfbvideosink_get_format_name (DFBSurfacePixelFormat
|
||||||
|
|
||||||
#define gst_dfbvideosink_parent_class parent_class
|
#define gst_dfbvideosink_parent_class parent_class
|
||||||
|
|
||||||
|
static GType
|
||||||
|
gst_dfbvideosink_layer_mode_get_type (void)
|
||||||
|
{
|
||||||
|
static gsize id = 0;
|
||||||
|
static const GEnumValue values[] = {
|
||||||
|
{0, "NONE", "none"},
|
||||||
|
{DLSCL_EXCLUSIVE, "DLSCL_EXCLUSIVE", "exclusive"},
|
||||||
|
{DLSCL_ADMINISTRATIVE, "DLSCL_ADMINISTRATIVE", "administrative"},
|
||||||
|
{0, NULL, NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
if (g_once_init_enter (&id)) {
|
||||||
|
GType tmp = g_enum_register_static ("GstDfbVideoSinkLayerMode", values);
|
||||||
|
g_once_init_leave (&id, tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (GType) id;
|
||||||
|
}
|
||||||
|
|
||||||
GType
|
GType
|
||||||
gst_meta_dfbsurface_api_get_type (void)
|
gst_meta_dfbsurface_api_get_type (void)
|
||||||
{
|
{
|
||||||
|
@ -547,8 +568,8 @@ gst_dfbvideosink_event_thread (GstDfbVideoSink * dfbvideosink)
|
||||||
|
|
||||||
while (dfbvideosink->running) {
|
while (dfbvideosink->running) {
|
||||||
/* Wait for an event with a 50 ms timeout */
|
/* Wait for an event with a 50 ms timeout */
|
||||||
dfbvideosink->event_buffer->
|
dfbvideosink->event_buffer->WaitForEventWithTimeout (dfbvideosink->
|
||||||
WaitForEventWithTimeout (dfbvideosink->event_buffer, 0, 50);
|
event_buffer, 0, 50);
|
||||||
|
|
||||||
/* Do we have an event ? */
|
/* Do we have an event ? */
|
||||||
ret = dfbvideosink->event_buffer->HasEvent (dfbvideosink->event_buffer);
|
ret = dfbvideosink->event_buffer->HasEvent (dfbvideosink->event_buffer);
|
||||||
|
@ -2178,16 +2199,7 @@ gst_dfbvideosink_set_property (GObject * object, guint prop_id,
|
||||||
dfbvideosink->vsync = g_value_get_boolean (value);
|
dfbvideosink->vsync = g_value_get_boolean (value);
|
||||||
break;
|
break;
|
||||||
case ARG_LAYER_MODE:
|
case ARG_LAYER_MODE:
|
||||||
{
|
dfbvideosink->layer_mode = g_value_get_enum (value);
|
||||||
const char *str = g_value_get_string (value);
|
|
||||||
|
|
||||||
if (strncmp (str, "administrative", strlen ("administrative")) == 0)
|
|
||||||
dfbvideosink->layer_mode = LAYER_MODE_ADMINISTRATIVE;
|
|
||||||
else if (strncmp (str, "exclusive", strlen ("exclusive")) == 0)
|
|
||||||
dfbvideosink->layer_mode = LAYER_MODE_EXCLUSIVE;
|
|
||||||
else
|
|
||||||
dfbvideosink->layer_mode = LAYER_MODE_INVALID;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
@ -2225,12 +2237,7 @@ gst_dfbvideosink_get_property (GObject * object, guint prop_id,
|
||||||
g_value_set_boolean (value, dfbvideosink->vsync);
|
g_value_set_boolean (value, dfbvideosink->vsync);
|
||||||
break;
|
break;
|
||||||
case ARG_LAYER_MODE:
|
case ARG_LAYER_MODE:
|
||||||
if (dfbvideosink->layer_mode == LAYER_MODE_EXCLUSIVE)
|
g_value_set_enum (value, dfbvideosink->layer_mode);
|
||||||
g_value_set_string (value, "exclusive");
|
|
||||||
else if (dfbvideosink->layer_mode == LAYER_MODE_ADMINISTRATIVE)
|
|
||||||
g_value_set_string (value, "administrative");
|
|
||||||
else
|
|
||||||
g_value_set_string (value, "invalid");
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
@ -2343,7 +2350,7 @@ gst_dfbvideosink_init (GstDfbVideoSink * dfbvideosink)
|
||||||
|
|
||||||
dfbvideosink->par = NULL;
|
dfbvideosink->par = NULL;
|
||||||
|
|
||||||
dfbvideosink->layer_mode = LAYER_MODE_EXCLUSIVE;
|
dfbvideosink->layer_mode = DEFAULT_LAYER_MODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -2390,10 +2397,12 @@ gst_dfbvideosink_class_init (GstDfbVideoSinkClass * klass)
|
||||||
"Wait for next vertical sync to draw frames", TRUE,
|
"Wait for next vertical sync to draw frames", TRUE,
|
||||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
g_object_class_install_property (gobject_class, ARG_LAYER_MODE,
|
g_object_class_install_property (gobject_class, ARG_LAYER_MODE,
|
||||||
g_param_spec_string ("layer-mode",
|
g_param_spec_enum ("layer-mode",
|
||||||
"The layer cooperative level (administrative or exclusive)",
|
"The layer cooperative level (administrative or exclusive)",
|
||||||
"The cooperative level handling the access permission (When the cursor is required, you have to set to 'administrative')",
|
"The cooperative level handling the access permission (set this to "
|
||||||
"exclusive", G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
"'administrative' when the cursor is required)",
|
||||||
|
gst_dfbvideosink_layer_mode_get_type (), DEFAULT_LAYER_MODE,
|
||||||
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
gst_element_class_set_static_metadata (gstelement_class,
|
gst_element_class_set_static_metadata (gstelement_class,
|
||||||
"DirectFB video sink", "Sink/Video", "A DirectFB based videosink",
|
"DirectFB video sink", "Sink/Video", "A DirectFB based videosink",
|
||||||
|
|
Loading…
Reference in a new issue