annotate libvo/geometry.c @ 25317:7f3cb5408f28

Fixed VIDIX color bug that was introduced when Radeon VIDIX driver was synchronized with vidix.sf.net. The red color was saturating. Corrected value fixes the issue and restore the color to the level it used to have before synchronization. Meaning of the value remains unknow but was retrieved from register's value of a Radeon 9000 card, so it may need further testing. Patch by Guillaume Lecerf (foxcore at gmail dot com)
author ben
date Mon, 10 Dec 2007 19:27:46 +0000
parents f48dc20c9185
children d97a607821f1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7866
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
1 /* This file (C) Mark Zealey <mark@zealos.org> 2002, released under GPL */
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
2
9217
420e2b2f8e5a compiler warning fixes patch by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents: 8768
diff changeset
3 #include <stdio.h>
420e2b2f8e5a compiler warning fixes patch by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents: 8768
diff changeset
4 #include <string.h>
7866
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
5 #include "geometry.h"
13787
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 11996
diff changeset
6 #include "mp_msg.h"
7866
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
7
8745
93f78fb709e6 Added support for X style -geometry options (adapted from Henk's patch)
mark
parents: 8254
diff changeset
8 /* 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
9 char *vo_geometry = NULL;
11125
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
10 // set when either width or height is changed
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
11 int geometry_wh_changed = 0;
11996
398c24cecdc7 dont mess with the window position in xinerama when -geometry changes it.
attila
parents: 11125
diff changeset
12 int geometry_xy_changed = 0;
7866
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
13
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
14 #define RESET_GEOMETRY width = height = xoff = yoff = xper = yper = -1;
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
15
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
16 // xpos,ypos: position of the left upper corner
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
17 // widw,widh: width and height of the window
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
18 // scrw,scrh: width and height of the current screen
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
19 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
20 {
8745
93f78fb709e6 Added support for X style -geometry options (adapted from Henk's patch)
mark
parents: 8254
diff changeset
21 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
22
93f78fb709e6 Added support for X style -geometry options (adapted from Henk's patch)
mark
parents: 8254
diff changeset
23 width = height = xoff = yoff = xper = yper = -1;
7866
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
24
8745
93f78fb709e6 Added support for X style -geometry options (adapted from Henk's patch)
mark
parents: 8254
diff changeset
25 if(vo_geometry != NULL) {
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
26 if(sscanf(vo_geometry, "%ix%i+%i+%i", &width, &height, &xoff, &yoff) != 4 )
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
27 {
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
28 RESET_GEOMETRY
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
29 if(sscanf(vo_geometry, "%ix%i", &width, &height) != 2)
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
30 {
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
31 RESET_GEOMETRY
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
32 if(sscanf(vo_geometry, "+%i+%i", &xoff, &yoff) != 2)
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
33 {
14678
58f061d12c83 Fix the behaviour of -geometry according to the documentation.
al
parents: 13787
diff changeset
34 char percent[2];
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
35 RESET_GEOMETRY
15058
f48dc20c9185 - fix gcc warnings, strlcat/strlcpy prototypes
rathann
parents: 14678
diff changeset
36 if(sscanf(vo_geometry, "%i%%:%i%1[%]", &xper, &yper, percent) != 3)
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
37 {
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
38 RESET_GEOMETRY
15058
f48dc20c9185 - fix gcc warnings, strlcat/strlcpy prototypes
rathann
parents: 14678
diff changeset
39 if(sscanf(vo_geometry, "%i:%i%1[%]", &xoff, &yper, percent) != 3)
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
40 {
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
41 RESET_GEOMETRY
14678
58f061d12c83 Fix the behaviour of -geometry according to the documentation.
al
parents: 13787
diff changeset
42 if(sscanf(vo_geometry, "%i%%:%i", &xper, &yoff) != 2)
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
43 {
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
44 RESET_GEOMETRY
14678
58f061d12c83 Fix the behaviour of -geometry according to the documentation.
al
parents: 13787
diff changeset
45 if(sscanf(vo_geometry, "%i:%i", &xoff, &yoff) != 2)
9517
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
15058
f48dc20c9185 - fix gcc warnings, strlcat/strlcpy prototypes
rathann
parents: 14678
diff changeset
48 if(sscanf(vo_geometry, "%i%1[%]", &xper, percent) != 2)
10734
b105d7aba10d remove exit_player and exit references
alex
parents: 9947
diff changeset
49 {
b105d7aba10d remove exit_player and exit references
alex
parents: 9947
diff changeset
50 mp_msg(MSGT_VO, MSGL_ERR,
b105d7aba10d remove exit_player and exit references
alex
parents: 9947
diff changeset
51 "-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
52 return 0;
b105d7aba10d remove exit_player and exit references
alex
parents: 9947
diff changeset
53 }
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
54 }
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
55 }
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
56 }
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
57 }
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
58 }
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
59 }
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
60 }
7866
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
61
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
62 mp_msg(MSGT_VO, MSGL_V,"geometry set to width: %i,"
9947
b552e7939ca2 adding geometry support for xvidix
attila
parents: 9517
diff changeset
63 "height: %i, xoff: %i, yoff: %i, xper: %i, yper: %i\n",
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
64 width, height, xoff, yoff, xper, yper);
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
65
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
66 if(xper >= 0 && xper <= 100) xoff = (scrw - *widw) * ((float)xper / 100.0);
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
67 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
68
9947
b552e7939ca2 adding geometry support for xvidix
attila
parents: 9517
diff changeset
69 mp_msg(MSGT_VO, MSGL_V,"geometry set to width: %i,"
b552e7939ca2 adding geometry support for xvidix
attila
parents: 9517
diff changeset
70 "height: %i, xoff: %i, yoff: %i, xper: %i, yper: %i\n",
b552e7939ca2 adding geometry support for xvidix
attila
parents: 9517
diff changeset
71 width, height, xoff, yoff, xper, yper);
b552e7939ca2 adding geometry support for xvidix
attila
parents: 9517
diff changeset
72 mp_msg(MSGT_VO, MSGL_V,"geometry window parameter: widw: %i,"
b552e7939ca2 adding geometry support for xvidix
attila
parents: 9517
diff changeset
73 " widh: %i, scrw: %i, scrh: %i\n",*widw, *widh, scrw, scrh);
b552e7939ca2 adding geometry support for xvidix
attila
parents: 9517
diff changeset
74
8768
44b7d4c7e61c cosmetics
attila
parents: 8767
diff changeset
75 /* FIXME: better checking of bounds... */
11125
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
76 if( width != -1 && (width < 0 || width > scrw))
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
77 width = (scrw < *widw) ? scrw : *widw;
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
78 if( height != -1 && (height < 0 || height > scrh))
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
79 height = (scrh < *widh) ? scrh : *widh;
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
80 if(xoff != -1 && (xoff < 0 || xoff + width > scrw)) xoff = 0;
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
81 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
82
11125
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
83 if(xoff != -1 && xpos) *xpos = xoff;
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
84 if(yoff != -1 && ypos) *ypos = yoff;
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
85 if(width != -1 && widw) *widw = width;
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
86 if(height != -1 && widh) *widh = height;
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
87
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
88 if( width != -1 || height != -1)
d9478c8e5ffe fix aspect hack
attila
parents: 10734
diff changeset
89 geometry_wh_changed = 1;
11996
398c24cecdc7 dont mess with the window position in xinerama when -geometry changes it.
attila
parents: 11125
diff changeset
90 if( xoff != -1 || yoff != -1)
398c24cecdc7 dont mess with the window position in xinerama when -geometry changes it.
attila
parents: 11125
diff changeset
91 geometry_xy_changed = 1;
8767
e497d7e42d8a fix xv window position problem
attila
parents: 8745
diff changeset
92 }
7866
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
93 return 1;
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
94 }
732a8bfc7681 Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff changeset
95
9517
d65ddafbc404 clean up of -geometry code.
attila
parents: 9217
diff changeset
96 #undef RESET_GEOMETRY