summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--DOCS/mplayer.16
-rw-r--r--cfg-mplayer.h3
-rw-r--r--libvo/vo_xv.c2
-rw-r--r--libvo/x11_common.c10
4 files changed, 21 insertions, 0 deletions
diff --git a/DOCS/mplayer.1 b/DOCS/mplayer.1
index dbdfa73e25..9a85fbbba7 100644
--- a/DOCS/mplayer.1
+++ b/DOCS/mplayer.1
@@ -1376,6 +1376,12 @@ See also \-aspect for movie aspect.
.B \-nograbpointer
Do not grab mouse pointer after VidMode change (\-vm), useful for multihead
setup.
+
+.TP
+.B \-nokeepaspect
+Do not keep window aspect ratio when resizing X11 windows.
+(works currently only with \-vo x11, xv, xmga and xvidix)
+
.TP
.B \-noslices
Disable drawing video by 16-pixel height slices/\:bands, instead draws the
diff --git a/cfg-mplayer.h b/cfg-mplayer.h
index 859dc48955..9d14d2d607 100644
--- a/cfg-mplayer.h
+++ b/cfg-mplayer.h
@@ -82,6 +82,7 @@ extern char *mDisplayName;
extern int WinID;
extern int ice_layer;
extern int stop_xscreensaver;
+extern int vo_x11_keepaspect;
#endif
#ifdef HAVE_AA
@@ -294,6 +295,8 @@ static config_t mplayer_opts[]={
{"icelayer", &ice_layer, CONF_TYPE_INT, CONF_RANGE, 0, 15, NULL},
{"stop_xscreensaver", &stop_xscreensaver, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"nostop_xscreensaver", &stop_xscreensaver, CONF_TYPE_FLAG, 0, 1, 0, NULL},
+ {"keepaspect", &vo_x11_keepaspect, CONF_TYPE_FLAG, 0, 0, 1, NULL},
+ {"nokeepaspect", &vo_x11_keepaspect, CONF_TYPE_FLAG, 0, 1, 0, NULL},
#endif
#ifdef HAVE_XINERAMA
diff --git a/libvo/vo_xv.c b/libvo/vo_xv.c
index cdfaf90adb..0395330930 100644
--- a/libvo/vo_xv.c
+++ b/libvo/vo_xv.c
@@ -387,6 +387,8 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, uint32
} else
if ( !(flags&1) ) XMoveResizeWindow( mDisplay,vo_window,hint.x,hint.y,hint.width,hint.height );
+ vo_x11_sizehint( hint.x, hint.y, hint.width, hint.height,0 );
+
if ( vo_gc != None ) XFreeGC( mDisplay,vo_gc );
vo_gc = XCreateGC(mDisplay, vo_window, 0L, &xgcv);
XFlush(mDisplay);
diff --git a/libvo/x11_common.c b/libvo/x11_common.c
index 7c674cfa4d..9cd5bee3c7 100644
--- a/libvo/x11_common.c
+++ b/libvo/x11_common.c
@@ -80,6 +80,7 @@ static int vo_old_y = 0;
static int vo_old_width = 0;
static int vo_old_height = 0;
+int vo_x11_keepaspect = 1;
#ifdef HAVE_XINERAMA
int xinerama_screen = 0;
@@ -656,6 +657,15 @@ int vo_x11_check_events(Display *mydisplay){
void vo_x11_sizehint( int x, int y, int width, int height, int max )
{
vo_hint.flags=PPosition | PSize | PWinGravity;
+ if(vo_x11_keepaspect)
+ {
+ vo_hint.flags |= PAspect;
+ vo_hint.min_aspect.x = width;
+ vo_hint.min_aspect.y = height;
+ vo_hint.max_aspect.x = width;
+ vo_hint.max_aspect.y = height;
+ }
+
vo_hint.x=x; vo_hint.y=y; vo_hint.width=width; vo_hint.height=height;
if ( max )
{