diff options
author | iive <iive@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2003-07-01 21:37:20 +0000 |
---|---|---|
committer | iive <iive@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2003-07-01 21:37:20 +0000 |
commit | a078b2a474f9fe105444a0620de4cbaf63eece7b (patch) | |
tree | e6db0a0a01d0e4ae7c6e7265371d10996ccb6df9 /libvo/x11_common.c | |
parent | 5bd84cbaaf4bf291e422a659474f4635c5504615 (diff) | |
download | mpv-a078b2a474f9fe105444a0620de4cbaf63eece7b.tar.bz2 mpv-a078b2a474f9fe105444a0620de4cbaf63eece7b.tar.xz |
move xv_set_eq to x11_common
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@10360 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo/x11_common.c')
-rw-r--r-- | libvo/x11_common.c | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/libvo/x11_common.c b/libvo/x11_common.c index 682d295290..330a0e3c60 100644 --- a/libvo/x11_common.c +++ b/libvo/x11_common.c @@ -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 @@ uint32_t vo_x11_get_equalizer(char *name, int *value) 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 |