annotate libvo/geometry.c @ 28883:c3f295ceae51

Do not call waveOutReset in uninit if you should wait till playing finishes, and retry waveOutClose if it fails due to still playing.
author reimar
date Mon, 09 Mar 2009 19:15:20 +0000
parents d97a607821f1
children a5f19a8ecc86
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27509
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 15058
diff changeset
1 /*
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 15058
diff changeset
2 * copyright (C) 2002 Mark Zealey <mark@zealos.org>
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 15058
diff changeset
3 *
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 15058
diff changeset
4 * This file is part of MPlayer.
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 15058
diff changeset
5 *
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 15058
diff changeset
6 * MPlayer is free software; you can redistribute it and/or modify
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 15058
diff changeset
7 * it under the terms of the GNU General Public License as published by
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 15058
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 15058
diff changeset
9 * (at your option) any later version.
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 15058
diff changeset
10 *
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 15058
diff changeset
11 * MPlayer is distributed in the hope that it will be useful,
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 15058
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 15058
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 15058
diff changeset
14 * GNU General Public License for more details.
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 15058
diff changeset
15 *
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 15058
diff changeset
16 * You should have received a copy of the GNU General Public License along
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 15058
diff changeset
17 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 15058
diff changeset
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 15058
diff changeset
19 */
7866
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
20
9217
420e2b2f8e5a compiler warning fixes patch by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents: 8768
diff changeset
21 #include <stdio.h>
420e2b2f8e5a compiler warning fixes patch by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents: 8768
diff changeset
22 #include <string.h>
7866
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
23 #include "geometry.h"
13787
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 11996
diff changeset
24 #include "mp_msg.h"
7866
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
25
8745
93f78fb709e6 Added support for X style -geometry options (adapted from Henk's patch)
mark
parents: 8254
diff changeset
26 /* A string of the form [WxH][+X+Y] or xpos[%]:ypos[%] */
7866
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
27 char *vo_geometry = NULL;
11125
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
28 // set when either width or height is changed
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
29 int geometry_wh_changed = 0;
11996
398c24cecdc7 dont mess with the window position in xinerama when -geometry changes it.
attila
parents: 11125
diff changeset
30 int geometry_xy_changed = 0;
7866
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
31
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
32 #define RESET_GEOMETRY width = height = xoff = yoff = xper = yper = -1;
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
33
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
34 // xpos,ypos: position of the left upper corner
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
35 // widw,widh: width and height of the window
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
36 // scrw,scrh: width and height of the current screen
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
37 int geometry(int *xpos, int *ypos, int *widw, int *widh, int scrw, int scrh)
7866
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
38 {
8745
93f78fb709e6 Added support for X style -geometry options (adapted from Henk's patch)
mark
parents: 8254
diff changeset
39 int width, height, xoff, yoff, xper, yper;
93f78fb709e6 Added support for X style -geometry options (adapted from Henk's patch)
mark
parents: 8254
diff changeset
40
93f78fb709e6 Added support for X style -geometry options (adapted from Henk's patch)
mark
parents: 8254
diff changeset
41 width = height = xoff = yoff = xper = yper = -1;
7866
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
42
8745
93f78fb709e6 Added support for X style -geometry options (adapted from Henk's patch)
mark
parents: 8254
diff changeset
43 if(vo_geometry != NULL) {
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
44 if(sscanf(vo_geometry, "%ix%i+%i+%i", &width, &height, &xoff, &yoff) != 4 )
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
45 {
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
46 RESET_GEOMETRY
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
47 if(sscanf(vo_geometry, "%ix%i", &width, &height) != 2)
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
48 {
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
49 RESET_GEOMETRY
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
50 if(sscanf(vo_geometry, "+%i+%i", &xoff, &yoff) != 2)
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
51 {
14678
58f061d12c83 Fix the behaviour of -geometry according to the documentation.
al
parents: 13787
diff changeset
52 char percent[2];
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
53 RESET_GEOMETRY
15058
f48dc20c9185 - fix gcc warnings, strlcat/strlcpy prototypes
rathann
parents: 14678
diff changeset
54 if(sscanf(vo_geometry, "%i%%:%i%1[%]", &xper, &yper, percent) != 3)
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
55 {
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
56 RESET_GEOMETRY
15058
f48dc20c9185 - fix gcc warnings, strlcat/strlcpy prototypes
rathann
parents: 14678
diff changeset
57 if(sscanf(vo_geometry, "%i:%i%1[%]", &xoff, &yper, percent) != 3)
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
58 {
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
59 RESET_GEOMETRY
14678
58f061d12c83 Fix the behaviour of -geometry according to the documentation.
al
parents: 13787
diff changeset
60 if(sscanf(vo_geometry, "%i%%:%i", &xper, &yoff) != 2)
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
61 {
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
62 RESET_GEOMETRY
14678
58f061d12c83 Fix the behaviour of -geometry according to the documentation.
al
parents: 13787
diff changeset
63 if(sscanf(vo_geometry, "%i:%i", &xoff, &yoff) != 2)
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
64 {
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
65 RESET_GEOMETRY
15058
f48dc20c9185 - fix gcc warnings, strlcat/strlcpy prototypes
rathann
parents: 14678
diff changeset
66 if(sscanf(vo_geometry, "%i%1[%]", &xper, percent) != 2)
10734
b105d7aba10d remove exit_player and exit references
alex
parents: 9947
diff changeset
67 {
b105d7aba10d remove exit_player and exit references
alex
parents: 9947
diff changeset
68 mp_msg(MSGT_VO, MSGL_ERR,
b105d7aba10d remove exit_player and exit references
alex
parents: 9947
diff changeset
69 "-geometry must be in [WxH][+X+Y] | [X[%%]:[Y[%%]]] format, incorrect (%s)\n", vo_geometry);
b105d7aba10d remove exit_player and exit references
alex
parents: 9947
diff changeset
70 return 0;
b105d7aba10d remove exit_player and exit references
alex
parents: 9947
diff changeset
71 }
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
72 }
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
73 }
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
74 }
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
75 }
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
76 }
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
77 }
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
78 }
7866
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
79
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
80 mp_msg(MSGT_VO, MSGL_V,"geometry set to width: %i,"
9947
b552e7939ca2 adding geometry support for xvidix
attila
parents: 9517
diff changeset
81 "height: %i, xoff: %i, yoff: %i, xper: %i, yper: %i\n",
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
82 width, height, xoff, yoff, xper, yper);
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
83
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
84 if(xper >= 0 && xper <= 100) xoff = (scrw - *widw) * ((float)xper / 100.0);
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
85 if(yper >= 0 && yper <= 100) yoff = (scrh - *widh) * ((float)yper / 100.0);
7866
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
86
9947
b552e7939ca2 adding geometry support for xvidix
attila
parents: 9517
diff changeset
87 mp_msg(MSGT_VO, MSGL_V,"geometry set to width: %i,"
b552e7939ca2 adding geometry support for xvidix
attila
parents: 9517
diff changeset
88 "height: %i, xoff: %i, yoff: %i, xper: %i, yper: %i\n",
b552e7939ca2 adding geometry support for xvidix
attila
parents: 9517
diff changeset
89 width, height, xoff, yoff, xper, yper);
b552e7939ca2 adding geometry support for xvidix
attila
parents: 9517
diff changeset
90 mp_msg(MSGT_VO, MSGL_V,"geometry window parameter: widw: %i,"
b552e7939ca2 adding geometry support for xvidix
attila
parents: 9517
diff changeset
91 " widh: %i, scrw: %i, scrh: %i\n",*widw, *widh, scrw, scrh);
b552e7939ca2 adding geometry support for xvidix
attila
parents: 9517
diff changeset
92
8768
44b7d4c7e61c cosmetics
attila
parents: 8767
diff changeset
93 /* FIXME: better checking of bounds... */
11125
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
94 if( width != -1 && (width < 0 || width > scrw))
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
95 width = (scrw < *widw) ? scrw : *widw;
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
96 if( height != -1 && (height < 0 || height > scrh))
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
97 height = (scrh < *widh) ? scrh : *widh;
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
98 if(xoff != -1 && (xoff < 0 || xoff + width > scrw)) xoff = 0;
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
99 if(yoff != -1 && (yoff < 0 || yoff + height > scrh)) yoff = 0;
8745
93f78fb709e6 Added support for X style -geometry options (adapted from Henk's patch)
mark
parents: 8254
diff changeset
100
11125
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
101 if(xoff != -1 && xpos) *xpos = xoff;
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
102 if(yoff != -1 && ypos) *ypos = yoff;
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
103 if(width != -1 && widw) *widw = width;
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
104 if(height != -1 && widh) *widh = height;
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
105
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
106 if( width != -1 || height != -1)
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
107 geometry_wh_changed = 1;
11996
398c24cecdc7 dont mess with the window position in xinerama when -geometry changes it.
attila
parents: 11125
diff changeset
108 if( xoff != -1 || yoff != -1)
398c24cecdc7 dont mess with the window position in xinerama when -geometry changes it.
attila
parents: 11125
diff changeset
109 geometry_xy_changed = 1;
8767
e497d7e42d8a fix xv window position problem
attila
parents: 8745
diff changeset
110 }
7866
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
111 return 1;
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
112 }
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
113
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
114 #undef RESET_GEOMETRY