avfilter/vf_bilateral_cuda: refactor use of pow to simple multiplication

This commit is contained in:
Timo Rothenpieler 2022-09-03 20:02:03 +02:00
parent 416923346a
commit 6512dd6cb5
1 changed files with 5 additions and 6 deletions

View File

@ -33,11 +33,10 @@ extern "C"
*/
__device__ static inline float norm_squared(float4 first_yuv, float4 second_yuv)
{
float ans = 0;
ans += __powf(first_yuv.x - second_yuv.x, 2);
ans += __powf(first_yuv.y - second_yuv.y, 2);
ans += __powf(first_yuv.z - second_yuv.z, 2);
return ans;
float x = first_yuv.x - second_yuv.x;
float y = first_yuv.y - second_yuv.y;
float z = first_yuv.z - second_yuv.z;
return (x*x) + (y*y) + (z*z);
}
/**
@ -52,7 +51,7 @@ __device__ static inline float calculate_w(int x, int y, int r, int c,
float sigma_space, float sigma_color)
{
float first_term, second_term;
first_term = (__powf(x - r, 2) + __powf(y - c, 2)) / (2 * sigma_space * sigma_space);
first_term = (((x - r) * (x - r)) + ((y - c) * (y - c))) / (2 * sigma_space * sigma_space);
second_term = norm_squared(pixel_value, neighbor_value) / (2 * sigma_color * sigma_color);
return __expf(-first_term - second_term);
}