Mercurial > mplayer.hg
diff libvo/geometry.c @ 7866:732a8bfc7681
Added the -geometry option (supports fbdev and tdfxfb drivers)
author | mark |
---|---|
date | Wed, 23 Oct 2002 16:52:54 +0000 |
parents | |
children | 9fc45fe0d444 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libvo/geometry.c Wed Oct 23 16:52:54 2002 +0000 @@ -0,0 +1,80 @@ +/* This file (C) Mark Zealey <mark@zealos.org> 2002, released under GPL */ + +#include "geometry.h" +#include "../mp_msg.h" +#include <string.h> + +/* A string of the form xpos[%]:ypos[%] */ +char *vo_geometry = NULL; + +int geometry_error() +{ + mp_msg(MSGT_VO, MSGL_ERR, "-geometry option format incorrect (%s)\n", vo_geometry); + exit_player(NULL); /* ????? what else could we do ? */ + return 0; +} + +int get_num(char *s, int *num, char *end) +{ + char *e; + long int t; + + t = strtol(s, &e, 10); + + if(e != end) + return 0; + + *num = t; + return 1; +} + +int geometry(int *xpos, int *ypos, int scrw, int scrh, int vidw, int vidh, int fs) +{ + int xper = 0, yper = 0; + int glen; + char *colpos; + + *xpos = 0; *ypos = 0; + + if(vo_geometry == NULL) + return 1; + + glen = strlen(vo_geometry); + colpos = strchr(vo_geometry, ':'); + if(colpos == NULL) + colpos = (char *)(vo_geometry + glen); + + /* Parse the x bit */ + if(colpos[-1] == '%') { + if(!get_num(vo_geometry, &xper, colpos - 1)) + return geometry_error(); + } else { + if(!get_num(vo_geometry, xpos, colpos)) + return geometry_error(); + } + + if(*colpos != '\0') + if(vo_geometry[glen - 1] == '%') { + if(!get_num(colpos + 1, &yper, vo_geometry + glen - 1)) + return geometry_error(); + } else { + if(!get_num(colpos + 1, ypos, vo_geometry + glen)) + return geometry_error(); + } + + if(xper) + *xpos = (scrw - vidw) * ((float)xper / 100.0); + if(yper) + *ypos = (scrh - vidh) * ((float)yper / 100.0); + + if(*xpos + vidw > scrw) { + mp_msg(MSGT_VO, MSGL_ERR, "X position is too large\n"); + return geometry_error(); + } + if(*ypos + vidh > scrh) { + mp_msg(MSGT_VO, MSGL_ERR, "Y position is too large\n"); + return geometry_error(); + } + + return 1; +}