mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
xvimagesink: Allow changing render-rectangle through property
This also enables setting the render rectangle before the window is provided or created. https://bugzilla.gnome.org/show_bug.cgi?id=792798
This commit is contained in:
parent
c70dd75f12
commit
e368b3105b
2 changed files with 26 additions and 3 deletions
|
@ -185,7 +185,8 @@ enum
|
||||||
PROP_COLORKEY,
|
PROP_COLORKEY,
|
||||||
PROP_DRAW_BORDERS,
|
PROP_DRAW_BORDERS,
|
||||||
PROP_WINDOW_WIDTH,
|
PROP_WINDOW_WIDTH,
|
||||||
PROP_WINDOW_HEIGHT
|
PROP_WINDOW_HEIGHT,
|
||||||
|
PROP_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
/* ============================================================= */
|
/* ============================================================= */
|
||||||
|
@ -792,6 +793,13 @@ gst_xv_image_sink_setcaps (GstBaseSink * bsink, GstCaps * caps)
|
||||||
GST_VIDEO_SINK_HEIGHT (xvimagesink));
|
GST_VIDEO_SINK_HEIGHT (xvimagesink));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (xvimagesink->pending_render_rect) {
|
||||||
|
xvimagesink->pending_render_rect = FALSE;
|
||||||
|
gst_xwindow_set_render_rectangle (xvimagesink->xwindow,
|
||||||
|
xvimagesink->render_rect.x, xvimagesink->render_rect.y,
|
||||||
|
xvimagesink->render_rect.w, xvimagesink->render_rect.h);
|
||||||
|
}
|
||||||
|
|
||||||
xvimagesink->info = info;
|
xvimagesink->info = info;
|
||||||
|
|
||||||
/* After a resize, we want to redraw the borders in case the new frame size
|
/* After a resize, we want to redraw the borders in case the new frame size
|
||||||
|
@ -1271,9 +1279,16 @@ gst_xv_image_sink_set_render_rectangle (GstVideoOverlay * overlay, gint x,
|
||||||
GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (overlay);
|
GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (overlay);
|
||||||
|
|
||||||
g_mutex_lock (&xvimagesink->flow_lock);
|
g_mutex_lock (&xvimagesink->flow_lock);
|
||||||
if (G_LIKELY (xvimagesink->xwindow))
|
if (G_LIKELY (xvimagesink->xwindow)) {
|
||||||
gst_xwindow_set_render_rectangle (xvimagesink->xwindow, x, y, width,
|
gst_xwindow_set_render_rectangle (xvimagesink->xwindow, x, y, width,
|
||||||
height);
|
height);
|
||||||
|
} else {
|
||||||
|
xvimagesink->render_rect.x = x;
|
||||||
|
xvimagesink->render_rect.y = y;
|
||||||
|
xvimagesink->render_rect.w = width;
|
||||||
|
xvimagesink->render_rect.h = height;
|
||||||
|
xvimagesink->pending_render_rect = TRUE;
|
||||||
|
}
|
||||||
g_mutex_unlock (&xvimagesink->flow_lock);
|
g_mutex_unlock (&xvimagesink->flow_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1623,7 +1638,8 @@ gst_xv_image_sink_set_property (GObject * object, guint prop_id,
|
||||||
xvimagesink->draw_borders = g_value_get_boolean (value);
|
xvimagesink->draw_borders = g_value_get_boolean (value);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
if (!gst_video_overlay_set_property (object, PROP_LAST, prop_id, value))
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1933,6 +1949,9 @@ gst_xv_image_sink_class_init (GstXvImageSinkClass * klass)
|
||||||
g_param_spec_string ("device-name", "Adaptor name",
|
g_param_spec_string ("device-name", "Adaptor name",
|
||||||
"The name of the video adaptor", NULL,
|
"The name of the video adaptor", NULL,
|
||||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
|
gst_video_overlay_install_properties (gobject_class, PROP_LAST);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GstXvImageSink:handle-expose
|
* GstXvImageSink:handle-expose
|
||||||
*
|
*
|
||||||
|
|
|
@ -120,6 +120,10 @@ struct _GstXvImageSink
|
||||||
|
|
||||||
/* stream metadata */
|
/* stream metadata */
|
||||||
gchar *media_title;
|
gchar *media_title;
|
||||||
|
|
||||||
|
/* saved render rectangle until we have a window */
|
||||||
|
gboolean pending_render_rect;
|
||||||
|
GstVideoRectangle render_rect;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GstXvImageSinkClass
|
struct _GstXvImageSinkClass
|
||||||
|
|
Loading…
Reference in a new issue