Mercurial > mplayer.hg
diff libvo/x11_common.c @ 10359:772571c63d45
move xv_set_eq to x11_common
author | iive |
---|---|
date | Tue, 01 Jul 2003 21:37:20 +0000 |
parents | 87043624b0d8 |
children | ccd39742b64c |
line wrap: on
line diff
--- a/libvo/x11_common.c Tue Jul 01 19:23:08 2003 +0000 +++ b/libvo/x11_common.c Tue Jul 01 21:37:20 2003 +0000 @@ -36,6 +36,11 @@ #include <X11/XF86keysym.h> #endif +#ifdef HAVE_XV +#include <X11/extensions/Xv.h> +#include <X11/extensions/Xvlib.h> +#endif + #include "../input/input.h" #include "../input/mouse.h" @@ -1390,5 +1395,138 @@ else return VO_NOTIMPL; return VO_TRUE; } +#ifdef HAVE_XV +int vo_xv_set_eq(uint32_t xv_port, char *name, int value) +{ + XvAttribute *attributes; + int i,howmany, xv_atom; + mp_dbg(MSGT_VO, MSGL_V, "xv_set_eq called! (%s, %d)\n", name, value); + /* get available attributes */ + attributes = XvQueryPortAttributes(mDisplay, xv_port, &howmany); + for (i = 0; i < howmany && attributes; i++) + if (attributes[i].flags & XvSettable) + { + xv_atom = XInternAtom(mDisplay, attributes[i].name, True); +/* since we have SET_DEFAULTS first in our list, we can check if it's available + then trigger it if it's ok so that the other values are at default upon query */ + if (xv_atom != None) + { + int hue = 0,port_value,port_min,port_max; + + if(!strcmp(attributes[i].name,"XV_BRIGHTNESS") && + (!strcasecmp(name, "brightness"))) + port_value = value; + else + if(!strcmp(attributes[i].name,"XV_CONTRAST") && + (!strcasecmp(name, "contrast"))) + port_value = value; + else + if(!strcmp(attributes[i].name,"XV_SATURATION") && + (!strcasecmp(name, "saturation"))) + port_value = value; + else + if(!strcmp(attributes[i].name,"XV_HUE") && + (!strcasecmp(name, "hue"))) + { port_value = value; hue=1; } + else + /* Note: since 22.01.2002 GATOS supports these attrs for radeons (NK) */ + if(!strcmp(attributes[i].name,"XV_RED_INTENSITY") && + (!strcasecmp(name, "red_intensity"))) + port_value = value; + else + if(!strcmp(attributes[i].name,"XV_GREEN_INTENSITY") && + (!strcasecmp(name, "green_intensity"))) + port_value = value; + else + if(!strcmp(attributes[i].name,"XV_BLUE_INTENSITY") && + (!strcasecmp(name, "blue_intensity"))) + port_value = value; + else continue; + + port_min = attributes[i].min_value; + port_max = attributes[i].max_value; + + /* nvidia hue workaround */ + if ( hue && port_min == 0 && port_max == 360 ){ + port_value = (port_value>=0) ? (port_value-100) : (port_value+100); + } + + // -100 -> min + // 0 -> (max+min)/2 + // +100 -> max + port_value = (port_value+100)*(port_max-port_min)/200+port_min; + XvSetPortAttribute(mDisplay, xv_port, xv_atom, port_value); + return(VO_TRUE); + } + } + return(VO_FALSE); +} + +int vo_xv_get_eq(uint32_t xv_port, char *name, int *value) +{ + + XvAttribute *attributes; + int i,howmany, xv_atom; + + /* get available attributes */ + attributes = XvQueryPortAttributes(mDisplay, xv_port, &howmany); + for (i = 0; i < howmany && attributes; i++) + if (attributes[i].flags & XvGettable) + { + xv_atom = XInternAtom(mDisplay, attributes[i].name, True); +/* since we have SET_DEFAULTS first in our list, we can check if it's available + then trigger it if it's ok so that the other values are at default upon query */ + if (xv_atom != None) + { + int val, port_value=0, port_min, port_max; + + XvGetPortAttribute(mDisplay, xv_port, xv_atom, &port_value); + + port_min = attributes[i].min_value; + port_max = attributes[i].max_value; + val=(port_value-port_min)*200/(port_max-port_min)-100; + + if(!strcmp(attributes[i].name,"XV_BRIGHTNESS") && + (!strcasecmp(name, "brightness"))) + *value = val; + else + if(!strcmp(attributes[i].name,"XV_CONTRAST") && + (!strcasecmp(name, "contrast"))) + *value = val; + else + if(!strcmp(attributes[i].name,"XV_SATURATION") && + (!strcasecmp(name, "saturation"))) + *value = val; + else + if(!strcmp(attributes[i].name,"XV_HUE") && + (!strcasecmp(name, "hue"))){ + /* nasty nvidia detect */ + if (port_min == 0 && port_max == 360) + *value = (val>=0) ? (val-100) : (val+100); + else + *value = val; + } else + /* Note: since 22.01.2002 GATOS supports these attrs for radeons (NK) */ + if(!strcmp(attributes[i].name,"XV_RED_INTENSITY") && + (!strcasecmp(name, "red_intensity"))) + *value = val; + else + if(!strcmp(attributes[i].name,"XV_GREEN_INTENSITY") && + (!strcasecmp(name, "green_intensity"))) + *value = val; + else + if(!strcmp(attributes[i].name,"XV_BLUE_INTENSITY") && + (!strcasecmp(name, "blue_intensity"))) + *value = val; + else continue; + + mp_dbg(MSGT_VO, MSGL_V, "xv_get_eq called! (%s, %d)\n", name, *value); + return(VO_TRUE); + } + } + return(VO_FALSE); +} + +#endif