diff options
author | wm4 <wm4@nowhere> | 2015-03-01 22:31:35 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2015-03-01 22:32:38 +0100 |
commit | 08199a64d2e7e9f1a9430f0258a98285cdf1c902 (patch) | |
tree | 1f8cdc615dba3a835b7914063314b3d7e3f75ff5 /video/sws_utils.c | |
parent | 1bbf1eb3ce2bdb0ef3ec3b045074bcb2f3af6a7a (diff) | |
download | mpv-08199a64d2e7e9f1a9430f0258a98285cdf1c902.tar.bz2 mpv-08199a64d2e7e9f1a9430f0258a98285cdf1c902.tar.xz |
vf_scale: libswscale is being stupid
This time (there are a lot of times), libswscale randomly ignores
brightness/saturation/contrast settings.
Looking at MPlayer code, it appears the return value of
sws_setColorspaceDetails() signals if changing these settings is
supported at all.
(Nevermind that supporting this feature has almost 0 value, and
obviously eats maintenance time.)
Diffstat (limited to 'video/sws_utils.c')
-rw-r--r-- | video/sws_utils.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/video/sws_utils.c b/video/sws_utils.c index 7f3cd089ac..6d8329cabe 100644 --- a/video/sws_utils.c +++ b/video/sws_utils.c @@ -238,9 +238,11 @@ int mp_sws_reinit(struct mp_sws_context *ctx) // This can fail even with normal operation, e.g. if a conversion path // simply does not support these settings. - sws_setColorspaceDetails(ctx->sws, sws_getCoefficients(s_csp), s_range, - sws_getCoefficients(d_csp), d_range, - ctx->brightness, ctx->contrast, ctx->saturation); + int r = + sws_setColorspaceDetails(ctx->sws, sws_getCoefficients(s_csp), s_range, + sws_getCoefficients(d_csp), d_range, + ctx->brightness, ctx->contrast, ctx->saturation); + ctx->supports_csp = r >= 0; if (sws_init_context(ctx->sws, ctx->src_filter, ctx->dst_filter) < 0) return -1; @@ -294,6 +296,8 @@ int mp_image_sw_blur_scale(struct mp_image *dst, struct mp_image *src, int mp_sws_get_vf_equalizer(struct mp_sws_context *sws, struct vf_seteq *eq) { + if (!sws->supports_csp) + return 0; if (!strcmp(eq->item, "brightness")) eq->value = ((sws->brightness * 100) + (1 << 15)) >> 16; else if (!strcmp(eq->item, "contrast")) @@ -307,6 +311,8 @@ int mp_sws_get_vf_equalizer(struct mp_sws_context *sws, struct vf_seteq *eq) int mp_sws_set_vf_equalizer(struct mp_sws_context *sws, struct vf_seteq *eq) { + if (!sws->supports_csp) + return 0; if (!strcmp(eq->item, "brightness")) sws->brightness = ((eq->value << 16) + 50) / 100; else if (!strcmp(eq->item, "contrast")) |