annotate libvo/geometry.c @ 29130:33956c5f5005

Reemit the ID_AID_x_LANG for the track. This allows the identification of the audio track by language code (en or es) rather than by ID (128 or 129). patch by Kevin DeKorte, kdekorte gmail com
author diego
date Sat, 11 Apr 2009 13:51:02 +0000
parents a5f19a8ecc86
children 0f1b5b68af32
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>
29073
a5f19a8ecc86 Get rid of nonsensical limits on -geometry x, y,w and h values, they only
reimar
parents: 27509
diff changeset
23 #include <limits.h>
7866
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
24 #include "geometry.h"
13787
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 11996
diff changeset
25 #include "mp_msg.h"
7866
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
26
8745
93f78fb709e6 Added support for X style -geometry options (adapted from Henk's patch)
mark
parents: 8254
diff changeset
27 /* 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
28 char *vo_geometry = NULL;
11125
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
29 // set when either width or height is changed
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
30 int geometry_wh_changed = 0;
11996
398c24cecdc7 dont mess with the window position in xinerama when -geometry changes it.
attila
parents: 11125
diff changeset
31 int geometry_xy_changed = 0;
7866
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
32
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
33 #define RESET_GEOMETRY width = height = xoff = yoff = xper = yper = -1;
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
34
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
35 // xpos,ypos: position of the left upper corner
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
36 // widw,widh: width and height of the window
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
37 // scrw,scrh: width and height of the current screen
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
38 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
39 {
8745
93f78fb709e6 Added support for X style -geometry options (adapted from Henk's patch)
mark
parents: 8254
diff changeset
40 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
41
29073
a5f19a8ecc86 Get rid of nonsensical limits on -geometry x, y,w and h values, they only
reimar
parents: 27509
diff changeset
42 width = height = xoff = yoff = xper = yper = INT_MIN;
7866
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
43
8745
93f78fb709e6 Added support for X style -geometry options (adapted from Henk's patch)
mark
parents: 8254
diff changeset
44 if(vo_geometry != NULL) {
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
45 if(sscanf(vo_geometry, "%ix%i+%i+%i", &width, &height, &xoff, &yoff) != 4 )
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
46 {
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
47 RESET_GEOMETRY
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
48 if(sscanf(vo_geometry, "%ix%i", &width, &height) != 2)
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
49 {
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
50 RESET_GEOMETRY
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
51 if(sscanf(vo_geometry, "+%i+%i", &xoff, &yoff) != 2)
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
52 {
14678
58f061d12c83 Fix the behaviour of -geometry according to the documentation.
al
parents: 13787
diff changeset
53 char percent[2];
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
54 RESET_GEOMETRY
15058
f48dc20c9185 - fix gcc warnings, strlcat/strlcpy prototypes
rathann
parents: 14678
diff changeset
55 if(sscanf(vo_geometry, "%i%%:%i%1[%]", &xper, &yper, percent) != 3)
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
56 {
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
57 RESET_GEOMETRY
15058
f48dc20c9185 - fix gcc warnings, strlcat/strlcpy prototypes
rathann
parents: 14678
diff changeset
58 if(sscanf(vo_geometry, "%i:%i%1[%]", &xoff, &yper, percent) != 3)
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
59 {
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
60 RESET_GEOMETRY
14678
58f061d12c83 Fix the behaviour of -geometry according to the documentation.
al
parents: 13787
diff changeset
61 if(sscanf(vo_geometry, "%i%%:%i", &xper, &yoff) != 2)
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
62 {
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
63 RESET_GEOMETRY
14678
58f061d12c83 Fix the behaviour of -geometry according to the documentation.
al
parents: 13787
diff changeset
64 if(sscanf(vo_geometry, "%i:%i", &xoff, &yoff) != 2)
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
65 {
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
66 RESET_GEOMETRY
15058
f48dc20c9185 - fix gcc warnings, strlcat/strlcpy prototypes
rathann
parents: 14678
diff changeset
67 if(sscanf(vo_geometry, "%i%1[%]", &xper, percent) != 2)
10734
b105d7aba10d remove exit_player and exit references
alex
parents: 9947
diff changeset
68 {
b105d7aba10d remove exit_player and exit references
alex
parents: 9947
diff changeset
69 mp_msg(MSGT_VO, MSGL_ERR,
b105d7aba10d remove exit_player and exit references
alex
parents: 9947
diff changeset
70 "-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
71 return 0;
b105d7aba10d remove exit_player and exit references
alex
parents: 9947
diff changeset
72 }
9517
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 }
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
79 }
7866
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
80
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
81 mp_msg(MSGT_VO, MSGL_V,"geometry set to width: %i,"
9947
b552e7939ca2 adding geometry support for xvidix
attila
parents: 9517
diff changeset
82 "height: %i, xoff: %i, yoff: %i, xper: %i, yper: %i\n",
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
83 width, height, xoff, yoff, xper, yper);
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
84
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
85 if(xper >= 0 && xper <= 100) xoff = (scrw - *widw) * ((float)xper / 100.0);
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
86 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
87
9947
b552e7939ca2 adding geometry support for xvidix
attila
parents: 9517
diff changeset
88 mp_msg(MSGT_VO, MSGL_V,"geometry set to width: %i,"
b552e7939ca2 adding geometry support for xvidix
attila
parents: 9517
diff changeset
89 "height: %i, xoff: %i, yoff: %i, xper: %i, yper: %i\n",
b552e7939ca2 adding geometry support for xvidix
attila
parents: 9517
diff changeset
90 width, height, xoff, yoff, xper, yper);
b552e7939ca2 adding geometry support for xvidix
attila
parents: 9517
diff changeset
91 mp_msg(MSGT_VO, MSGL_V,"geometry window parameter: widw: %i,"
b552e7939ca2 adding geometry support for xvidix
attila
parents: 9517
diff changeset
92 " widh: %i, scrw: %i, scrh: %i\n",*widw, *widh, scrw, scrh);
b552e7939ca2 adding geometry support for xvidix
attila
parents: 9517
diff changeset
93
29073
a5f19a8ecc86 Get rid of nonsensical limits on -geometry x, y,w and h values, they only
reimar
parents: 27509
diff changeset
94 if (xoff != INT_MIN && xpos) *xpos = xoff;
a5f19a8ecc86 Get rid of nonsensical limits on -geometry x, y,w and h values, they only
reimar
parents: 27509
diff changeset
95 if (yoff != INT_MIN && ypos) *ypos = yoff;
a5f19a8ecc86 Get rid of nonsensical limits on -geometry x, y,w and h values, they only
reimar
parents: 27509
diff changeset
96 if (width > 0 && widw) *widw = width;
a5f19a8ecc86 Get rid of nonsensical limits on -geometry x, y,w and h values, they only
reimar
parents: 27509
diff changeset
97 if (height > 0 && widh) *widh = height;
8745
93f78fb709e6 Added support for X style -geometry options (adapted from Henk's patch)
mark
parents: 8254
diff changeset
98
29073
a5f19a8ecc86 Get rid of nonsensical limits on -geometry x, y,w and h values, they only
reimar
parents: 27509
diff changeset
99 if (width > 0 || height > 0)
11125
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
100 geometry_wh_changed = 1;
29073
a5f19a8ecc86 Get rid of nonsensical limits on -geometry x, y,w and h values, they only
reimar
parents: 27509
diff changeset
101 if (xoff != INT_MIN || yoff != INT_MIN)
11996
398c24cecdc7 dont mess with the window position in xinerama when -geometry changes it.
attila
parents: 11125
diff changeset
102 geometry_xy_changed = 1;
8767
e497d7e42d8a fix xv window position problem
attila
parents: 8745
diff changeset
103 }
7866
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
104 return 1;
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
105 }
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
106
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
107 #undef RESET_GEOMETRY