From 8c56a4a1ed7d90004a33bab02a1c6e5669718d11 Mon Sep 17 00:00:00 2001 From: Timothy Gu Date: Wed, 10 Feb 2016 09:05:30 +0000 Subject: [PATCH] vf_blend: Move C dsp function mapping to separate function --- libavfilter/blend.h | 1 + libavfilter/vf_blend.c | 87 ++++++++++++++++++++++-------------------- 2 files changed, 47 insertions(+), 41 deletions(-) diff --git a/libavfilter/blend.h b/libavfilter/blend.h index 7003505d0a..ccef13618e 100644 --- a/libavfilter/blend.h +++ b/libavfilter/blend.h @@ -71,6 +71,7 @@ typedef struct FilterParams { struct FilterParams *param, double *values); } FilterParams; +void ff_blend_init(FilterParams *param, int is_16bit); void ff_blend_init_x86(FilterParams *param, int is_16bit); #endif /* AVFILTER_BLEND_H */ diff --git a/libavfilter/vf_blend.c b/libavfilter/vf_blend.c index 61aa17ebeb..ea63a20090 100644 --- a/libavfilter/vf_blend.c +++ b/libavfilter/vf_blend.c @@ -437,6 +437,51 @@ static av_cold void uninit(AVFilterContext *ctx) av_expr_free(s->params[i].e); } +void ff_blend_init(FilterParams *param, int is_16bit) +{ + switch (param->mode) { + case BLEND_ADDITION: param->blend = is_16bit ? blend_addition_16bit : blend_addition_8bit; break; + case BLEND_ADDITION128: param->blend = is_16bit ? blend_addition128_16bit : blend_addition128_8bit; break; + case BLEND_AND: param->blend = is_16bit ? blend_and_16bit : blend_and_8bit; break; + case BLEND_AVERAGE: param->blend = is_16bit ? blend_average_16bit : blend_average_8bit; break; + case BLEND_BURN: param->blend = is_16bit ? blend_burn_16bit : blend_burn_8bit; break; + case BLEND_DARKEN: param->blend = is_16bit ? blend_darken_16bit : blend_darken_8bit; break; + case BLEND_DIFFERENCE: param->blend = is_16bit ? blend_difference_16bit : blend_difference_8bit; break; + case BLEND_DIFFERENCE128: param->blend = is_16bit ? blend_difference128_16bit: blend_difference128_8bit; break; + case BLEND_DIVIDE: param->blend = is_16bit ? blend_divide_16bit : blend_divide_8bit; break; + case BLEND_DODGE: param->blend = is_16bit ? blend_dodge_16bit : blend_dodge_8bit; break; + case BLEND_EXCLUSION: param->blend = is_16bit ? blend_exclusion_16bit : blend_exclusion_8bit; break; + case BLEND_GLOW: param->blend = is_16bit ? blend_glow_16bit : blend_glow_8bit; break; + case BLEND_HARDLIGHT: param->blend = is_16bit ? blend_hardlight_16bit : blend_hardlight_8bit; break; + case BLEND_HARDMIX: param->blend = is_16bit ? blend_hardmix_16bit : blend_hardmix_8bit; break; + case BLEND_LIGHTEN: param->blend = is_16bit ? blend_lighten_16bit : blend_lighten_8bit; break; + case BLEND_LINEARLIGHT:param->blend = is_16bit ? blend_linearlight_16bit: blend_linearlight_8bit;break; + case BLEND_MULTIPLY: param->blend = is_16bit ? blend_multiply_16bit : blend_multiply_8bit; break; + case BLEND_MULTIPLY128:param->blend = is_16bit ? blend_multiply128_16bit: blend_multiply128_8bit;break; + case BLEND_NEGATION: param->blend = is_16bit ? blend_negation_16bit : blend_negation_8bit; break; + case BLEND_NORMAL: param->blend = param->opacity == 1 ? blend_copytop : + param->opacity == 0 ? blend_copybottom : + is_16bit ? blend_normal_16bit : blend_normal_8bit; break; + case BLEND_OR: param->blend = is_16bit ? blend_or_16bit : blend_or_8bit; break; + case BLEND_OVERLAY: param->blend = is_16bit ? blend_overlay_16bit : blend_overlay_8bit; break; + case BLEND_PHOENIX: param->blend = is_16bit ? blend_phoenix_16bit : blend_phoenix_8bit; break; + case BLEND_PINLIGHT: param->blend = is_16bit ? blend_pinlight_16bit : blend_pinlight_8bit; break; + case BLEND_REFLECT: param->blend = is_16bit ? blend_reflect_16bit : blend_reflect_8bit; break; + case BLEND_SCREEN: param->blend = is_16bit ? blend_screen_16bit : blend_screen_8bit; break; + case BLEND_SOFTLIGHT: param->blend = is_16bit ? blend_softlight_16bit : blend_softlight_8bit; break; + case BLEND_SUBTRACT: param->blend = is_16bit ? blend_subtract_16bit : blend_subtract_8bit; break; + case BLEND_VIVIDLIGHT: param->blend = is_16bit ? blend_vividlight_16bit : blend_vividlight_8bit; break; + case BLEND_XOR: param->blend = is_16bit ? blend_xor_16bit : blend_xor_8bit; break; + } + + if (param->opacity == 0 && param->mode != BLEND_NORMAL) { + param->blend = blend_copytop; + } + + if (ARCH_X86) + ff_blend_init_x86(param, is_16bit); +} + static int config_output(AVFilterLink *outlink) { AVFilterContext *ctx = outlink->src; @@ -493,47 +538,7 @@ static int config_output(AVFilterLink *outlink) if (s->all_opacity < 1) param->opacity = s->all_opacity; - switch (param->mode) { - case BLEND_ADDITION: param->blend = is_16bit ? blend_addition_16bit : blend_addition_8bit; break; - case BLEND_ADDITION128: param->blend = is_16bit ? blend_addition128_16bit : blend_addition128_8bit; break; - case BLEND_AND: param->blend = is_16bit ? blend_and_16bit : blend_and_8bit; break; - case BLEND_AVERAGE: param->blend = is_16bit ? blend_average_16bit : blend_average_8bit; break; - case BLEND_BURN: param->blend = is_16bit ? blend_burn_16bit : blend_burn_8bit; break; - case BLEND_DARKEN: param->blend = is_16bit ? blend_darken_16bit : blend_darken_8bit; break; - case BLEND_DIFFERENCE: param->blend = is_16bit ? blend_difference_16bit : blend_difference_8bit; break; - case BLEND_DIFFERENCE128: param->blend = is_16bit ? blend_difference128_16bit: blend_difference128_8bit; break; - case BLEND_DIVIDE: param->blend = is_16bit ? blend_divide_16bit : blend_divide_8bit; break; - case BLEND_DODGE: param->blend = is_16bit ? blend_dodge_16bit : blend_dodge_8bit; break; - case BLEND_EXCLUSION: param->blend = is_16bit ? blend_exclusion_16bit : blend_exclusion_8bit; break; - case BLEND_GLOW: param->blend = is_16bit ? blend_glow_16bit : blend_glow_8bit; break; - case BLEND_HARDLIGHT: param->blend = is_16bit ? blend_hardlight_16bit : blend_hardlight_8bit; break; - case BLEND_HARDMIX: param->blend = is_16bit ? blend_hardmix_16bit : blend_hardmix_8bit; break; - case BLEND_LIGHTEN: param->blend = is_16bit ? blend_lighten_16bit : blend_lighten_8bit; break; - case BLEND_LINEARLIGHT:param->blend = is_16bit ? blend_linearlight_16bit: blend_linearlight_8bit;break; - case BLEND_MULTIPLY: param->blend = is_16bit ? blend_multiply_16bit : blend_multiply_8bit; break; - case BLEND_MULTIPLY128:param->blend = is_16bit ? blend_multiply128_16bit: blend_multiply128_8bit;break; - case BLEND_NEGATION: param->blend = is_16bit ? blend_negation_16bit : blend_negation_8bit; break; - case BLEND_NORMAL: param->blend = param->opacity == 1 ? blend_copytop : - param->opacity == 0 ? blend_copybottom : - is_16bit ? blend_normal_16bit : blend_normal_8bit; break; - case BLEND_OR: param->blend = is_16bit ? blend_or_16bit : blend_or_8bit; break; - case BLEND_OVERLAY: param->blend = is_16bit ? blend_overlay_16bit : blend_overlay_8bit; break; - case BLEND_PHOENIX: param->blend = is_16bit ? blend_phoenix_16bit : blend_phoenix_8bit; break; - case BLEND_PINLIGHT: param->blend = is_16bit ? blend_pinlight_16bit : blend_pinlight_8bit; break; - case BLEND_REFLECT: param->blend = is_16bit ? blend_reflect_16bit : blend_reflect_8bit; break; - case BLEND_SCREEN: param->blend = is_16bit ? blend_screen_16bit : blend_screen_8bit; break; - case BLEND_SOFTLIGHT: param->blend = is_16bit ? blend_softlight_16bit : blend_softlight_8bit; break; - case BLEND_SUBTRACT: param->blend = is_16bit ? blend_subtract_16bit : blend_subtract_8bit; break; - case BLEND_VIVIDLIGHT: param->blend = is_16bit ? blend_vividlight_16bit : blend_vividlight_8bit; break; - case BLEND_XOR: param->blend = is_16bit ? blend_xor_16bit : blend_xor_8bit; break; - } - - if (ARCH_X86) - ff_blend_init_x86(param, is_16bit); - - if (param->opacity == 0 && param->mode != BLEND_NORMAL) { - param->blend = blend_copytop; - } + ff_blend_init(param, is_16bit); if (s->all_expr && !param->expr_str) { param->expr_str = av_strdup(s->all_expr);