mirror of
https://github.com/mpv-player/mpv
synced 2025-03-25 04:38:01 +00:00
Simplify equalizer handling for vo gl
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@26854 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
3a79c1562b
commit
2f0fd9d6cc
@ -912,6 +912,26 @@ static int preinit(const char *arg)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define MASK_ALL_YUV (~(1 << YUV_CONVERSION_NONE))
|
||||||
|
#define MASK_NOT_COMBINERS (~((1 << YUV_CONVERSION_NONE) | (1 << YUV_CONVERSION_COMBINERS) | (1 << YUV_CONVERSION_COMBINERS_ATI)))
|
||||||
|
#define MASK_GAMMA_SUPPORT (MASK_NOT_COMBINERS & ~(1 << YUV_CONVERSION_FRAGMENT))
|
||||||
|
|
||||||
|
static const struct {
|
||||||
|
const char *name;
|
||||||
|
int *value;
|
||||||
|
int supportmask;
|
||||||
|
} eq_map[] = {
|
||||||
|
{"brightness", &eq_bri, MASK_NOT_COMBINERS},
|
||||||
|
{"contrast", &eq_cont, MASK_NOT_COMBINERS},
|
||||||
|
{"saturation", &eq_sat, MASK_ALL_YUV },
|
||||||
|
{"hue", &eq_hue, MASK_ALL_YUV },
|
||||||
|
{"gamma", &eq_rgamma, MASK_GAMMA_SUPPORT},
|
||||||
|
{"red_gamma", &eq_rgamma, MASK_GAMMA_SUPPORT},
|
||||||
|
{"green_gamma", &eq_ggamma, MASK_GAMMA_SUPPORT},
|
||||||
|
{"blue_gamma", &eq_bgamma, MASK_GAMMA_SUPPORT},
|
||||||
|
{NULL, NULL, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
static int control(uint32_t request, void *data, ...)
|
static int control(uint32_t request, void *data, ...)
|
||||||
{
|
{
|
||||||
switch (request) {
|
switch (request) {
|
||||||
@ -966,75 +986,33 @@ static int control(uint32_t request, void *data, ...)
|
|||||||
return VO_TRUE;
|
return VO_TRUE;
|
||||||
case VOCTRL_GET_EQUALIZER:
|
case VOCTRL_GET_EQUALIZER:
|
||||||
if (image_format == IMGFMT_YV12) {
|
if (image_format == IMGFMT_YV12) {
|
||||||
|
int i;
|
||||||
va_list va;
|
va_list va;
|
||||||
int *value;
|
int *value;
|
||||||
va_start(va, data);
|
va_start(va, data);
|
||||||
value = va_arg(va, int *);
|
value = va_arg(va, int *);
|
||||||
va_end(va);
|
va_end(va);
|
||||||
if (strcasecmp(data, "brightness") == 0) {
|
for (i = 0; eq_map[i].name; i++)
|
||||||
*value = eq_bri;
|
if (strcmp(data, eq_map[i].name) == 0) break;
|
||||||
if (use_yuv == YUV_CONVERSION_COMBINERS) break; // not supported
|
if (!(eq_map[i].supportmask & (1 << use_yuv)))
|
||||||
} else if (strcasecmp(data, "contrast") == 0) {
|
break;
|
||||||
*value = eq_cont;
|
*value = *eq_map[i].value;
|
||||||
if (use_yuv == YUV_CONVERSION_COMBINERS) break; // not supported
|
|
||||||
} else if (strcasecmp(data, "saturation") == 0) {
|
|
||||||
*value = eq_sat;
|
|
||||||
} else if (strcasecmp(data, "hue") == 0) {
|
|
||||||
*value = eq_hue;
|
|
||||||
} else if (strcasecmp(data, "gamma") == 0) {
|
|
||||||
*value = eq_rgamma;
|
|
||||||
if (use_yuv == YUV_CONVERSION_COMBINERS ||
|
|
||||||
use_yuv == YUV_CONVERSION_FRAGMENT) break; // not supported
|
|
||||||
} else if (strcasecmp(data, "red_gamma") == 0) {
|
|
||||||
*value = eq_rgamma;
|
|
||||||
if (use_yuv == YUV_CONVERSION_COMBINERS ||
|
|
||||||
use_yuv == YUV_CONVERSION_FRAGMENT) break; // not supported
|
|
||||||
} else if (strcasecmp(data, "green_gamma") == 0) {
|
|
||||||
*value = eq_ggamma;
|
|
||||||
if (use_yuv == YUV_CONVERSION_COMBINERS ||
|
|
||||||
use_yuv == YUV_CONVERSION_FRAGMENT) break; // not supported
|
|
||||||
} else if (strcasecmp(data, "blue_gamma") == 0) {
|
|
||||||
*value = eq_bgamma;
|
|
||||||
if (use_yuv == YUV_CONVERSION_COMBINERS ||
|
|
||||||
use_yuv == YUV_CONVERSION_FRAGMENT) break; // not supported
|
|
||||||
}
|
|
||||||
return VO_TRUE;
|
return VO_TRUE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case VOCTRL_SET_EQUALIZER:
|
case VOCTRL_SET_EQUALIZER:
|
||||||
if (image_format == IMGFMT_YV12) {
|
if (image_format == IMGFMT_YV12) {
|
||||||
|
int i;
|
||||||
va_list va;
|
va_list va;
|
||||||
int value;
|
int value;
|
||||||
va_start(va, data);
|
va_start(va, data);
|
||||||
value = va_arg(va, int);
|
value = va_arg(va, int);
|
||||||
va_end(va);
|
va_end(va);
|
||||||
if (strcasecmp(data, "brightness") == 0) {
|
for (i = 0; eq_map[i].name; i++)
|
||||||
eq_bri = value;
|
if (strcmp(data, eq_map[i].name) == 0) break;
|
||||||
if (use_yuv == YUV_CONVERSION_COMBINERS) break; // not supported
|
if (!(eq_map[i].supportmask & (1 << use_yuv)))
|
||||||
} else if (strcasecmp(data, "contrast") == 0) {
|
break;
|
||||||
eq_cont = value;
|
*eq_map[i].value = value;
|
||||||
if (use_yuv == YUV_CONVERSION_COMBINERS) break; // not supported
|
|
||||||
} else if (strcasecmp(data, "saturation") == 0) {
|
|
||||||
eq_sat = value;
|
|
||||||
} else if (strcasecmp(data, "hue") == 0) {
|
|
||||||
eq_hue = value;
|
|
||||||
} else if (strcasecmp(data, "gamma") == 0) {
|
|
||||||
eq_rgamma = eq_ggamma = eq_bgamma = value;
|
|
||||||
if (use_yuv == YUV_CONVERSION_COMBINERS ||
|
|
||||||
use_yuv == YUV_CONVERSION_FRAGMENT) break; // not supported
|
|
||||||
} else if (strcasecmp(data, "red_gamma") == 0) {
|
|
||||||
eq_rgamma = value;
|
|
||||||
if (use_yuv == YUV_CONVERSION_COMBINERS ||
|
|
||||||
use_yuv == YUV_CONVERSION_FRAGMENT) break; // not supported
|
|
||||||
} else if (strcasecmp(data, "green_gamma") == 0) {
|
|
||||||
eq_ggamma = value;
|
|
||||||
if (use_yuv == YUV_CONVERSION_COMBINERS ||
|
|
||||||
use_yuv == YUV_CONVERSION_FRAGMENT) break; // not supported
|
|
||||||
} else if (strcasecmp(data, "blue_gamma") == 0) {
|
|
||||||
eq_bgamma = value;
|
|
||||||
if (use_yuv == YUV_CONVERSION_COMBINERS ||
|
|
||||||
use_yuv == YUV_CONVERSION_FRAGMENT) break; // not supported
|
|
||||||
}
|
|
||||||
update_yuvconv();
|
update_yuvconv();
|
||||||
return VO_TRUE;
|
return VO_TRUE;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user