Search
SailfishOS Open Build Service
>
Projects
>
home:sledge
:
branches:nemo:devel:hw:ti:omap4:common
>
gst-plugins-base
> 0051-xvimagesink-fix-display-of-cropped-buffers-from-duca.patch
Log In
Username
Password
Cancel
Overview
Repositories
Revisions
Requests
Users
Advanced
Attributes
Meta
File 0051-xvimagesink-fix-display-of-cropped-buffers-from-duca.patch of Package gst-plugins-base
From 5be0fb0fe0348cba8687cb43cc4aefb92a2e8385 Mon Sep 17 00:00:00 2001 From: Vincent Penquerc'h <vincent.penquerch@collabora.co.uk> Date: Fri, 23 Nov 2012 13:33:17 +0000 Subject: [PATCH] xvimagesink: fix display of cropped buffers from ducati I suspect this is needed to work around some bug in the lower layers (X or drivers), but do not know X enough to tell. --- sys/xvimage/xvimagesink.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/sys/xvimage/xvimagesink.c b/sys/xvimage/xvimagesink.c index b210358..b1a6b1d 100644 --- a/sys/xvimage/xvimagesink.c +++ b/sys/xvimage/xvimagesink.c @@ -861,14 +861,12 @@ gst_xvimagesink_xvimage_put (GstXvImageSink * xvimagesink, if (crop == NULL) { disp_x = xvimagesink->disp_x; disp_y = xvimagesink->disp_y; - disp_width = xvimagesink->disp_width; - disp_height = xvimagesink->disp_height; } else { disp_x = xvimagesink->disp_x + gst_video_crop_left (crop); disp_y = xvimagesink->disp_y + gst_video_crop_top (crop); - disp_width = gst_video_crop_width (crop); - disp_height = gst_video_crop_height (crop); } + disp_width = xvimagesink->disp_width; + disp_height = xvimagesink->disp_height; /* We scale to the window's geometry */ #ifdef HAVE_XSHM @@ -884,7 +882,7 @@ gst_xvimagesink_xvimage_put (GstXvImageSink * xvimagesink, xvimagesink->xwindow->win, xvimagesink->xwindow->gc, xvimage->xvimage, disp_x, disp_y, disp_width, disp_height, - result.x, result.y, result.w, result.h, FALSE); + 0, 0, disp_width, disp_height, FALSE); } else #endif /* HAVE_XSHM */ { @@ -892,8 +890,7 @@ gst_xvimagesink_xvimage_put (GstXvImageSink * xvimagesink, xvimagesink->xcontext->xv_port_id, xvimagesink->xwindow->win, xvimagesink->xwindow->gc, xvimage->xvimage, - disp_x, disp_y, disp_width, disp_height, - result.x, result.y, result.w, result.h); + disp_x, disp_y, disp_width, disp_height, 0, 0, disp_width, disp_height); } XSync (xvimagesink->xcontext->disp, FALSE); @@ -2492,10 +2489,19 @@ gst_xvimagesink_event (GstBaseSink * sink, GstEvent * event) height = GST_VIDEO_SINK_HEIGHT (xvimagesink) - top; } + g_mutex_lock (xvimagesink->flow_lock); + g_mutex_lock (xvimagesink->x_lock); + if (xvimagesink->crop_rect) gst_video_crop_unref (xvimagesink->crop_rect); xvimagesink->crop_rect = gst_video_crop_new (top, left, width, height); + XResizeWindow (xvimagesink->xcontext->disp, xvimagesink->xwindow->win, + width, height); + + g_mutex_unlock (xvimagesink->x_lock); + g_mutex_unlock (xvimagesink->flow_lock); + structure = gst_structure_new ("video-size-crop", "width", G_TYPE_INT, width, "height", G_TYPE_INT, height, NULL); message = gst_message_new_application (GST_OBJECT (xvimagesink), -- 1.7.9.5