2.5x faster for 8-bit mode without autovectorization in GCC, 2x slower with it on x86. However, since the platforms we enable GCC autovectorization on most probably has support for SSE2 optimization (added in the subsequent commit), this commit should in general do good. --- libavfilter/vf_blend.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/libavfilter/vf_blend.c b/libavfilter/vf_blend.c index 2b734b4..b9e5add 100644 --- a/libavfilter/vf_blend.c +++ b/libavfilter/vf_blend.c @@ -240,7 +240,7 @@ DEFINE_BLEND8(hardlight, (B < 128) ? MULTIPLY(2, B, A) : SCREEN(2, B, A)) DEFINE_BLEND8(hardmix, (A < (255 - B)) ? 0: 255) DEFINE_BLEND8(darken, FFMIN(A, B)) DEFINE_BLEND8(lighten, FFMAX(A, B)) -DEFINE_BLEND8(divide, av_clip_uint8(((float)A / ((float)B) * 255))) +DEFINE_BLEND8(divide, av_clip_uint8(B == 0 ? 255 : 255 * A / B)) DEFINE_BLEND8(dodge, DODGE(A, B)) DEFINE_BLEND8(burn, BURN(A, B)) DEFINE_BLEND8(softlight, (A > 127) ? B + (255 - B) * (A - 127.5) / 127.5 * (0.5 - fabs(B - 127.5) / 255): B - B * ((127.5 - A) / 127.5) * (0.5 - fabs(B - 127.5)/255)) @@ -280,7 +280,7 @@ DEFINE_BLEND16(hardlight, (B < 32768) ? MULTIPLY(2, B, A) : SCREEN(2, B, A)) DEFINE_BLEND16(hardmix, (A < (65535 - B)) ? 0: 65535) DEFINE_BLEND16(darken, FFMIN(A, B)) DEFINE_BLEND16(lighten, FFMAX(A, B)) -DEFINE_BLEND16(divide, av_clip_uint16(((float)A / ((float)B) * 65535))) +DEFINE_BLEND16(divide, av_clip_uint16(B == 0 ? 65535 : 65535 * A / B)) DEFINE_BLEND16(dodge, DODGE(A, B)) DEFINE_BLEND16(burn, BURN(A, B)) DEFINE_BLEND16(softlight, (A > 32767) ? B + (65535 - B) * (A - 32767.5) / 32767.5 * (0.5 - fabs(B - 32767.5) / 65535): B - B * ((32767.5 - A) / 32767.5) * (0.5 - fabs(B - 32767.5)/65535)) -- 2.1.4 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel