vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Wed Feb 26 20:19:07 2020 +0200| [8d5ec2524e087fe177503a585679d0787b7d41fe] | committer: Rémi Denis-Courmont
vdpau/adjust: avoid custom vlc_atomic.h, relax order > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=8d5ec2524e087fe177503a585679d0787b7d41fe --- modules/hw/vdpau/adjust.c | 49 +++++++++++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/modules/hw/vdpau/adjust.c b/modules/hw/vdpau/adjust.c index abba194695..9535963263 100644 --- a/modules/hw/vdpau/adjust.c +++ b/modules/hw/vdpau/adjust.c @@ -22,6 +22,7 @@ # include "config.h" #endif +#include <stdatomic.h> #include <stdlib.h> #include <math.h> @@ -34,10 +35,10 @@ typedef struct { - vlc_atomic_float brightness; - vlc_atomic_float contrast; - vlc_atomic_float saturation; - vlc_atomic_float hue; + _Atomic float brightness; + _Atomic float contrast; + _Atomic float saturation; + _Atomic float hue; } filter_sys_t; static float vlc_to_vdp_brightness(float brightness) @@ -53,7 +54,10 @@ static float vlc_to_vdp_brightness(float brightness) static int BrightnessCallback(vlc_object_t *obj, const char *varname, vlc_value_t prev, vlc_value_t cur, void *data) { - vlc_atomic_store_float(data, vlc_to_vdp_brightness(cur.f_float)); + _Atomic float *atom = data; + + atomic_store_explicit(atom, vlc_to_vdp_brightness(cur.f_float), + memory_order_relaxed); (void) obj; (void) varname; (void) prev; return VLC_SUCCESS; } @@ -70,7 +74,10 @@ static float vlc_to_vdp_contrast(float contrast) static int ContrastCallback(vlc_object_t *obj, const char *varname, vlc_value_t prev, vlc_value_t cur, void *data) { - vlc_atomic_store_float(data, vlc_to_vdp_contrast(cur.f_float)); + _Atomic float *atom = data; + + atomic_store_explicit(atom, vlc_to_vdp_contrast(cur.f_float), + memory_order_relaxed); (void) obj; (void) varname; (void) prev; return VLC_SUCCESS; } @@ -80,7 +87,10 @@ static int ContrastCallback(vlc_object_t *obj, const char *varname, static int SaturationCallback(vlc_object_t *obj, const char *varname, vlc_value_t prev, vlc_value_t cur, void *data) { - vlc_atomic_store_float(data, vlc_to_vdp_saturation(cur.f_float)); + _Atomic float *atom = data; + + atomic_store_explicit(atom, vlc_to_vdp_saturation(cur.f_float), + memory_order_relaxed); (void) obj; (void) varname; (void) prev; return VLC_SUCCESS; } @@ -99,24 +109,29 @@ static float vlc_to_vdp_hue(float hue) static int HueCallback(vlc_object_t *obj, const char *varname, vlc_value_t prev, vlc_value_t cur, void *data) { + _Atomic float *atom = data; - vlc_atomic_store_float(data, vlc_to_vdp_hue(cur.f_float)); + atomic_store_explicit(atom, vlc_to_vdp_hue(cur.f_float), + memory_order_relaxed); (void) obj; (void) varname; (void) prev; return VLC_SUCCESS; } static picture_t *Adjust(filter_t *filter, picture_t *pic) { - filter_sys_t *sys = filter->p_sys; + const filter_sys_t *sys = filter->p_sys; vlc_vdp_video_field_t *f = VDPAU_FIELD_FROM_PICCTX(pic->context); if (unlikely(f == NULL)) return pic; - f->procamp.brightness = vlc_atomic_load_float(&sys->brightness); - f->procamp.contrast = vlc_atomic_load_float(&sys->contrast); - f->procamp.saturation = vlc_atomic_load_float(&sys->saturation); - f->procamp.hue = vlc_atomic_load_float(&sys->hue); + f->procamp.brightness = atomic_load_explicit(&sys->brightness, + memory_order_relaxed); + f->procamp.contrast = atomic_load_explicit(&sys->contrast, + memory_order_relaxed); + f->procamp.saturation = atomic_load_explicit(&sys->saturation, + memory_order_relaxed); + f->procamp.hue = atomic_load_explicit(&sys->hue, memory_order_relaxed); return pic; } @@ -154,20 +169,20 @@ static int Open(vlc_object_t *obj) f = var_CreateGetFloatCommand(filter, "brightness"); var_AddCallback(filter, "brightness", BrightnessCallback, &sys->brightness); - vlc_atomic_init_float(&sys->brightness, vlc_to_vdp_brightness(f)); + atomic_init(&sys->brightness, vlc_to_vdp_brightness(f)); f = var_CreateGetFloatCommand(filter, "contrast"); var_AddCallback(filter, "contrast", ContrastCallback, &sys->contrast); - vlc_atomic_init_float(&sys->contrast, vlc_to_vdp_contrast(f)); + atomic_init(&sys->contrast, vlc_to_vdp_contrast(f)); f = var_CreateGetFloatCommand(filter, "saturation"); var_AddCallback(filter, "saturation", SaturationCallback, &sys->saturation); - vlc_atomic_init_float(&sys->saturation, vlc_to_vdp_saturation(f)); + atomic_init(&sys->saturation, vlc_to_vdp_saturation(f)); i = var_CreateGetFloatCommand(filter, "hue"); var_AddCallback(filter, "hue", HueCallback, &sys->hue); - vlc_atomic_init_float(&sys->hue, vlc_to_vdp_hue(i)); + atomic_init(&sys->hue, vlc_to_vdp_hue(i)); return VLC_SUCCESS; } _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
