Commit 387da78d authored by Mark Nauwelaerts's avatar Mark Nauwelaerts

gdkpixbufoverlay: update composition in _before_transform

... since we need to determine passthrough mode for buffer preparation before
calling into _transform_ip.
parent 2715daeb
......@@ -610,29 +610,36 @@ gst_gdk_pixbuf_overlay_before_transform (GstBaseTransform * trans,
GstBuffer * outbuf)
{
GstClockTime stream_time;
GstGdkPixbufOverlay *overlay = GST_GDK_PIXBUF_OVERLAY (trans);
gboolean set_passthrough = FALSE;
stream_time = gst_segment_to_stream_time (&trans->segment, GST_FORMAT_TIME,
GST_BUFFER_TIMESTAMP (outbuf));
if (GST_CLOCK_TIME_IS_VALID (stream_time))
gst_object_sync_values (GST_OBJECT (trans), stream_time);
}
static GstFlowReturn
gst_gdk_pixbuf_overlay_transform_frame_ip (GstVideoFilter * filter,
GstVideoFrame * frame)
{
GstGdkPixbufOverlay *overlay = GST_GDK_PIXBUF_OVERLAY (filter);
/* now properties have been sync'ed; maybe need to update composition */
GST_OBJECT_LOCK (overlay);
if (G_UNLIKELY (overlay->update_composition)) {
gst_gdk_pixbuf_overlay_update_composition (overlay);
overlay->update_composition = FALSE;
set_passthrough = TRUE;
}
GST_OBJECT_UNLOCK (overlay);
/* determine passthrough mode so the buffer is writable if needed
* when passed into _transform_ip */
if (G_UNLIKELY (set_passthrough))
gst_base_transform_set_passthrough (trans, overlay->comp == NULL);
}
static GstFlowReturn
gst_gdk_pixbuf_overlay_transform_frame_ip (GstVideoFilter * filter,
GstVideoFrame * frame)
{
GstGdkPixbufOverlay *overlay = GST_GDK_PIXBUF_OVERLAY (filter);
if (overlay->comp != NULL)
gst_video_overlay_composition_blend (overlay->comp, frame);
......
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