summaryrefslogtreecommitdiff
path: root/src/video_out/video_out_xv.c
diff options
context:
space:
mode:
authorMiguel Freitas <miguelfreitas@users.sourceforge.net>2002-03-21 16:21:01 +0000
committerMiguel Freitas <miguelfreitas@users.sourceforge.net>2002-03-21 16:21:01 +0000
commit891fb0a646780b715e4f8d53b49e4615917a13e8 (patch)
treeef2c1525f9d4567bb6083fc305f3b3fc65a9e27b /src/video_out/video_out_xv.c
parentbe7a8b70ff25d405dbaa8fc082fc9349f65bf26b (diff)
downloadxine-lib-891fb0a646780b715e4f8d53b49e4615917a13e8.tar.gz
xine-lib-891fb0a646780b715e4f8d53b49e4615917a13e8.tar.bz2
- only draw still frame/logo if needed
- fix syncfb driver CVS patchset: 1605 CVS date: 2002/03/21 16:21:01
Diffstat (limited to 'src/video_out/video_out_xv.c')
-rw-r--r--src/video_out/video_out_xv.c62
1 files changed, 35 insertions, 27 deletions
diff --git a/src/video_out/video_out_xv.c b/src/video_out/video_out_xv.c
index a2514bd73..f98226b42 100644
--- a/src/video_out/video_out_xv.c
+++ b/src/video_out/video_out_xv.c
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: video_out_xv.c,v 1.105 2002/03/07 13:26:16 jcdutton Exp $
+ * $Id: video_out_xv.c,v 1.106 2002/03/21 16:21:02 miguelfreitas Exp $
*
* video_out_xv.c, X11 video extension interface for xine
*
@@ -161,7 +161,7 @@ struct xv_driver_s {
int gui_x, gui_y;
int gui_width, gui_height;
-
+
/*
* "output" size:
*
@@ -575,7 +575,7 @@ static void xv_clean_output_area (xv_driver_t *this) {
XSetForeground (this->display, this->gc, this->black.pixel);
XFillRectangle(this->display, this->drawable, this->gc,
- this->gui_x, this->gui_y, this->gui_width, this->gui_height);
+ 0, 0, this->gui_width, this->gui_height);
if (this->use_colorkey) {
XSetForeground (this->display, this->gc, this->colorkey);
@@ -700,8 +700,8 @@ static void xv_compute_output_size (xv_driver_t *this) {
this->output_height = (double) this->ideal_height * y_factor ;
}
- this->output_xoffset = (this->gui_width - this->output_width) / 2 + this->gui_x;
- this->output_yoffset = (this->gui_height - this->output_height) / 2 + this->gui_y;
+ this->output_xoffset = (this->gui_width - this->output_width) / 2;
+ this->output_yoffset = (this->gui_height - this->output_height) / 2;
#ifdef LOG
printf ("video_out_xv: frame source %d x %d => screen output %d x %d\n",
@@ -757,7 +757,33 @@ static void xv_flush_recent_frames (xv_driver_t *this) {
}
#endif
+static int xv_redraw_needed (vo_driver_t *this_gen) {
+ xv_driver_t *this = (xv_driver_t *) this_gen;
+ int gui_x, gui_y, gui_width, gui_height;
+ int ret = 0;
+
+ this->frame_output_cb (this->user_data,
+ this->ideal_width, this->ideal_height,
+ &gui_x, &gui_y, &gui_width, &gui_height);
+
+ if ( (gui_x != this->gui_x) || (gui_y != this->gui_y)
+ || (gui_width != this->gui_width) || (gui_height != this->gui_height) ) {
+
+ this->gui_x = gui_x;
+ this->gui_y = gui_y;
+ this->gui_width = gui_width;
+ this->gui_height = gui_height;
+ xv_compute_output_size (this);
+
+ xv_clean_output_area (this);
+
+ ret = 1;
+ }
+
+ return ret;
+}
+
static void xv_display_frame (vo_driver_t *this_gen, vo_frame_t *frame_gen) {
xv_driver_t *this = (xv_driver_t *) this_gen;
@@ -774,8 +800,6 @@ static void xv_display_frame (vo_driver_t *this_gen, vo_frame_t *frame_gen) {
} else {
- int gui_x, gui_y, gui_width, gui_height;
-
/*
* queue frames (deinterlacing)
* free old frames
@@ -819,24 +843,7 @@ static void xv_display_frame (vo_driver_t *this_gen, vo_frame_t *frame_gen) {
* tell gui that we are about to display a frame,
* ask for offset and output size
*/
-
- this->frame_output_cb (this->user_data,
- this->ideal_width, this->ideal_height,
- &gui_x, &gui_y, &gui_width, &gui_height);
-
- if ( (gui_x != this->gui_x) || (gui_y != this->gui_y)
- || (gui_width != this->gui_width) || (gui_height != this->gui_height) ) {
-
- this->gui_x = gui_x;
- this->gui_y = gui_y;
- this->gui_width = gui_width;
- this->gui_height = gui_height;
-
- xv_compute_output_size (this);
-
- xv_clean_output_area (this);
- }
-
+ xv_redraw_needed (this_gen);
XLockDisplay (this->display);
@@ -1005,7 +1012,7 @@ static int xv_gui_data_exchange (vo_driver_t *this_gen,
XExposeEvent * xev = (XExposeEvent *) data;
/* FIXME : take care of completion events */
-
+
if (xev->count == 0) {
if (this->cur_frame) {
XLockDisplay (this->display);
@@ -1308,6 +1315,7 @@ vo_driver_t *init_video_out_plugin (config_values_t *config, void *visual_gen) {
this->vo_driver.get_property_min_max = xv_get_property_min_max;
this->vo_driver.gui_data_exchange = xv_gui_data_exchange;
this->vo_driver.exit = xv_exit;
+ this->vo_driver.redraw_needed = xv_redraw_needed;
/*
* init properties
@@ -1434,7 +1442,7 @@ vo_driver_t *init_video_out_plugin (config_values_t *config, void *visual_gen) {
}
static vo_info_t vo_info_xv = {
- 4,
+ 5,
"Xv",
"xine video output plugin using the MIT X video extension",
VISUAL_TYPE_X11,