summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMiguel Freitas <miguelfreitas@users.sourceforge.net>2002-03-21 18:29:51 +0000
committerMiguel Freitas <miguelfreitas@users.sourceforge.net>2002-03-21 18:29:51 +0000
commit859b68e23eb526205b907d43a5e00e1983418545 (patch)
treeeb8708c93afd6de51d0b692d436b19c6939a171a /src
parent891fb0a646780b715e4f8d53b49e4615917a13e8 (diff)
downloadxine-lib-859b68e23eb526205b907d43a5e00e1983418545.tar.gz
xine-lib-859b68e23eb526205b907d43a5e00e1983418545.tar.bz2
adding new parameters to frame_output_cb
CVS patchset: 1606 CVS date: 2002/03/21 18:29:51
Diffstat (limited to 'src')
-rw-r--r--src/video_out/video_out_syncfb.c20
-rw-r--r--src/video_out/video_out_x11.h8
-rw-r--r--src/video_out/video_out_xshm.c41
-rw-r--r--src/video_out/video_out_xv.c22
4 files changed, 60 insertions, 31 deletions
diff --git a/src/video_out/video_out_syncfb.c b/src/video_out/video_out_syncfb.c
index 79505c8a5..50241f6d2 100644
--- a/src/video_out/video_out_syncfb.c
+++ b/src/video_out/video_out_syncfb.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_syncfb.c,v 1.57 2002/03/21 16:21:01 miguelfreitas Exp $
+ * $Id: video_out_syncfb.c,v 1.58 2002/03/21 18:29:51 miguelfreitas Exp $
*
* video_out_syncfb.c, SyncFB (for Matrox G200/G400 cards) interface for xine
*
@@ -174,6 +174,7 @@ struct syncfb_driver_s {
int gui_x, gui_y;
int gui_width, gui_height;
+ int gui_win_x, gui_win_y;
/*
* "output" size:
@@ -200,7 +201,8 @@ struct syncfb_driver_s {
void (*frame_output_cb) (void *user_data,
int video_width, int video_height,
int *dest_x, int *dest_y,
- int *dest_height, int *dest_width);
+ int *dest_height, int *dest_width,
+ int *win_x, int *win_y);
char scratch[256];
@@ -681,8 +683,8 @@ static void syncfb_compute_output_size (syncfb_driver_t *this) {
this->syncfb_config.image_width = this->output_width;
this->syncfb_config.image_height = (this->deinterlace_enabled) ? (this->output_height-2) : this->output_height;
- this->syncfb_config.image_xorg = this->output_xoffset;
- this->syncfb_config.image_yorg = this->output_yoffset;
+ this->syncfb_config.image_xorg = this->output_xoffset + this->gui_win_x;
+ this->syncfb_config.image_yorg = this->output_yoffset + this->gui_win_y;
this->syncfb_config.src_crop_top = this->displayed_yoffset;
this->syncfb_config.src_crop_bot = (this->deinterlace_enabled && this->displayed_yoffset == 0) ? 1 : this->displayed_yoffset;
@@ -748,20 +750,24 @@ static void syncfb_flush_recent_frames (syncfb_driver_t *this) {
static int syncfb_redraw_needed (vo_driver_t *this_gen) {
syncfb_driver_t *this = (syncfb_driver_t *) this_gen;
- int gui_x, gui_y, gui_width, gui_height;
+ int gui_x, gui_y, gui_width, gui_height, gui_win_x, gui_win_y;
int ret = 0;
this->frame_output_cb (this->user_data,
this->ideal_width, this->ideal_height,
- &gui_x, &gui_y, &gui_width, &gui_height);
+ &gui_x, &gui_y, &gui_width, &gui_height,
+ &gui_win_x, &gui_win_y );
if ( (gui_x != this->gui_x) || (gui_y != this->gui_y)
- || (gui_width != this->gui_width) || (gui_height != this->gui_height) ) {
+ || (gui_width != this->gui_width) || (gui_height != this->gui_height)
+ || (gui_win_x != this->gui_win_x) || (gui_win_y != this->gui_win_y) ) {
this->gui_x = gui_x;
this->gui_y = gui_y;
this->gui_width = gui_width;
this->gui_height = gui_height;
+ this->gui_win_x = gui_win_x;
+ this->gui_win_y = gui_win_y;
syncfb_compute_output_size (this);
diff --git a/src/video_out/video_out_x11.h b/src/video_out/video_out_x11.h
index 34479867a..16d687277 100644
--- a/src/video_out/video_out_x11.h
+++ b/src/video_out/video_out_x11.h
@@ -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_x11.h,v 1.14 2002/02/16 22:43:24 guenter Exp $
+ * $Id: video_out_x11.h,v 1.15 2002/03/21 18:29:51 miguelfreitas Exp $
*
* structs and defines specific to all x11 related output plugins
* (any x11 base xine ui should include this)
@@ -81,12 +81,16 @@ typedef struct {
* area and the video output driver will do it's best
* to adjust the video frames to that size (while
* preserving aspect ration and stuff).
+ * dest_x, dest_y: offset inside window
+ * dest_width, dest_height: available drawing space
+ * win_x, win_y: window absolute screen position
*/
void (*frame_output_cb) (void *user_data,
int video_width, int video_height,
int *dest_x, int *dest_y,
- int *dest_width, int *dest_height);
+ int *dest_width, int *dest_height,
+ int *win_x, int *win_y);
} x11_visual_t;
diff --git a/src/video_out/video_out_xshm.c b/src/video_out/video_out_xshm.c
index 9c6bbfb83..9a0be52b7 100644
--- a/src/video_out/video_out_xshm.c
+++ b/src/video_out/video_out_xshm.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_xshm.c,v 1.68 2002/03/21 16:21:01 miguelfreitas Exp $
+ * $Id: video_out_xshm.c,v 1.69 2002/03/21 18:29:51 miguelfreitas Exp $
*
* video_out_xshm.c, X11 shared memory extension interface for xine
*
@@ -151,7 +151,9 @@ typedef struct xshm_driver_s {
int gui_y;
int gui_width;
int gui_height;
-
+ int gui_win_x;
+ int gui_win_y;
+
/* aspect ratio of pixels on screen */
double display_ratio;
@@ -162,7 +164,8 @@ typedef struct xshm_driver_s {
void (*frame_output_cb) (void *user_data,
int video_width, int video_height,
int *dest_x, int *dest_y,
- int *dest_height, int *dest_width);
+ int *dest_height, int *dest_width,
+ int *win_x, int *win_y);
void (*dest_size_cb) (void *user_data,
int video_width, int video_height,
@@ -787,7 +790,7 @@ static void clean_output_area (xshm_driver_t *this) {
XSetForeground (this->display, this->gc, this->black.pixel);
XFillRectangle(this->display, this->drawable, this->gc,
- 0, 0,
+ this->gui_x, this->gui_y,
this->gui_width, this->gui_height);
#if 0
@@ -823,23 +826,28 @@ static void clean_output_area (xshm_driver_t *this) {
static int xshm_redraw_needed (vo_driver_t *this_gen) {
xshm_driver_t *this = (xshm_driver_t *) this_gen;
- int gui_x, gui_y, gui_width, gui_height;
+ int gui_x, gui_y, gui_width, gui_height, gui_win_x, gui_win_y;
int ret = 0;
if( this->cur_frame )
{
this->frame_output_cb (this->user_data,
this->cur_frame->output_width, this->cur_frame->output_height,
- &gui_x, &gui_y, &gui_width, &gui_height);
+ &gui_x, &gui_y, &gui_width, &gui_height,
+ &gui_win_x, &gui_win_y );
if ( (this->gui_x != gui_x) || (this->gui_y != gui_y)
|| (this->gui_width != gui_width)
- || (this->gui_height != gui_height) ) {
+ || (this->gui_height != gui_height)
+ || (this->gui_win_x != gui_win_x)
+ || (this->gui_win_y != gui_win_y) ) {
this->gui_x = gui_x;
this->gui_y = gui_y;
this->gui_width = gui_width;
this->gui_height = gui_height;
+ this->gui_win_x = gui_win_x;
+ this->gui_win_y = gui_win_y;
clean_output_area (this);
ret = 1;
@@ -873,7 +881,7 @@ static void xshm_display_frame (vo_driver_t *this_gen, vo_frame_t *frame_gen) {
frame->vo_frame.displayed (&frame->vo_frame);
} else {
- int gui_x, gui_y, gui_width, gui_height;
+ int gui_x, gui_y, gui_width, gui_height, gui_win_x, gui_win_y;
#ifdef LOG
printf ("video_out_xshm: about to draw frame %d x %d...\n",
@@ -887,16 +895,21 @@ static void xshm_display_frame (vo_driver_t *this_gen, vo_frame_t *frame_gen) {
this->frame_output_cb (this->user_data,
frame->output_width, frame->output_height,
- &gui_x, &gui_y, &gui_width, &gui_height);
+ &gui_x, &gui_y, &gui_width, &gui_height,
+ &gui_win_x, &gui_win_y);
if ( (this->gui_x != gui_x) || (this->gui_y != gui_y)
|| (this->gui_width != gui_width)
- || (this->gui_height != gui_height) ) {
+ || (this->gui_height != gui_height)
+ || (this->gui_win_x != gui_win_x)
+ || (this->gui_win_y != gui_win_y) ) {
this->gui_x = gui_x;
this->gui_y = gui_y;
this->gui_width = gui_width;
this->gui_height = gui_height;
+ this->gui_win_x = gui_win_x;
+ this->gui_win_y = gui_win_y;
clean_output_area (this);
}
@@ -912,8 +925,8 @@ static void xshm_display_frame (vo_driver_t *this_gen, vo_frame_t *frame_gen) {
this->cur_frame = frame;
- xoffset = (this->gui_width - frame->output_width) / 2;
- yoffset = (this->gui_height - frame->output_height) / 2;
+ xoffset = (this->gui_width - frame->output_width) / 2 + this->gui_x;
+ yoffset = (this->gui_height - frame->output_height) / 2 + this->gui_y;
XLockDisplay (this->display);
#ifdef LOG
@@ -1046,8 +1059,8 @@ static void xshm_translate_gui2video (xshm_driver_t *this,
* gui area. This is the case in fullscreen mode, where we often
* have black borders on the top/bottom/left/right side.
*/
- x -= ((this->gui_width - frame->output_width) >> 1);
- y -= ((this->gui_height - frame->output_height) >> 1);
+ x -= ((this->gui_width - frame->output_width) >> 1) + this->gui_x;
+ y -= ((this->gui_height - frame->output_height) >> 1) + this->gui_y;
/*
* 2.
diff --git a/src/video_out/video_out_xv.c b/src/video_out/video_out_xv.c
index f98226b42..1ea74b91b 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.106 2002/03/21 16:21:02 miguelfreitas Exp $
+ * $Id: video_out_xv.c,v 1.107 2002/03/21 18:29:51 miguelfreitas Exp $
*
* video_out_xv.c, X11 video extension interface for xine
*
@@ -161,6 +161,7 @@ struct xv_driver_s {
int gui_x, gui_y;
int gui_width, gui_height;
+ int gui_win_x, gui_win_y;
/*
* "output" size:
@@ -187,7 +188,8 @@ struct xv_driver_s {
void (*frame_output_cb) (void *user_data,
int video_width, int video_height,
int *dest_x, int *dest_y,
- int *dest_height, int *dest_width);
+ int *dest_height, int *dest_width,
+ int *win_x, int *win_y);
char scratch[256];
@@ -575,7 +577,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,
- 0, 0, this->gui_width, this->gui_height);
+ this->gui_x, this->gui_y, this->gui_width, this->gui_height);
if (this->use_colorkey) {
XSetForeground (this->display, this->gc, this->colorkey);
@@ -700,8 +702,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->output_yoffset = (this->gui_height - this->output_height) / 2;
+ 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;
#ifdef LOG
printf ("video_out_xv: frame source %d x %d => screen output %d x %d\n",
@@ -759,20 +761,24 @@ static void xv_flush_recent_frames (xv_driver_t *this) {
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 gui_x, gui_y, gui_width, gui_height, gui_win_x, gui_win_y;
int ret = 0;
this->frame_output_cb (this->user_data,
this->ideal_width, this->ideal_height,
- &gui_x, &gui_y, &gui_width, &gui_height);
+ &gui_x, &gui_y, &gui_width, &gui_height,
+ &gui_win_x, &gui_win_y );
if ( (gui_x != this->gui_x) || (gui_y != this->gui_y)
- || (gui_width != this->gui_width) || (gui_height != this->gui_height) ) {
+ || (gui_width != this->gui_width) || (gui_height != this->gui_height)
+ || (gui_win_x != this->gui_win_x) || (gui_win_y != this->gui_win_y) ) {
this->gui_x = gui_x;
this->gui_y = gui_y;
this->gui_width = gui_width;
this->gui_height = gui_height;
+ this->gui_win_x = gui_win_x;
+ this->gui_win_y = gui_win_y;
xv_compute_output_size (this);