From fe5255533ad855f7d733a7add8b1e90e35313c92 Mon Sep 17 00:00:00 2001 From: phintuka Date: Thu, 17 Jan 2013 20:55:22 +0000 Subject: Changed how "dirty area" of ARGB buffer is set --- xine/osd_manager.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/xine/osd_manager.c b/xine/osd_manager.c index 4a31d3a8..a6f750a5 100644 --- a/xine/osd_manager.c +++ b/xine/osd_manager.c @@ -4,7 +4,7 @@ * See the main source file 'xineliboutput.c' for copyright information and * how to reach the author. * - * $Id: osd_manager.c,v 1.25 2013-01-15 20:45:19 phintuka Exp $ + * $Id: osd_manager.c,v 1.26 2013-01-17 20:55:22 phintuka Exp $ * */ @@ -706,10 +706,23 @@ static int exec_osd_set_argb(osd_manager_impl_t *this, osd_command_t *cmd) } /* set dirty area. not used in opengl2 driver ... */ +#if 0 + /* this can't work... There's no way to know if driver has + copied the dirty area to display. So dirty area can never be + shrinked, just expanded ... */ osd->argb_layer->x1 = cmd->x; osd->argb_layer->x2 = cmd->x + cmd->w - 1; osd->argb_layer->y1 = cmd->y; osd->argb_layer->y2 = cmd->y + cmd->h - 1; +#else + /* argb layer update area accumulation */ +#define MIN(a,b) ((a)<(b)?(a):(b)) +#define MAX(a,b) ((a)>(b)?(a):(b)) + osd->argb_layer->x1 = MIN( osd->argb_layer->x1, cmd->x ); + osd->argb_layer->x2 = MAX( osd->argb_layer->x2, cmd->x + cmd->w ); + osd->argb_layer->y1 = MIN( osd->argb_layer->y1, cmd->y ); + osd->argb_layer->y2 = MAX( osd->argb_layer->y2, cmd->y + cmd->h ); +#endif /* set buffer (ref-counted) */ set_argb_layer(&ov_overlay.argb_layer, osd->argb_layer); -- cgit v1.2.3