The title says it all, move the EWA filter to BLI (currently it's math_interp.c) and use the function from both BI renderer and the compositor. This makes more central place of the algorithm, allowing to have fixes and optimizaitons synchronized across the two usages. This also fixes T41440: Displacement in compositing creates holes Reviewers: campbellbarton, lukastoenne Reviewed By: lukastoenne Maniphest Tasks: T41440 Differential Revision: https://developer.blender.org/D748
69 lines
2.6 KiB
C++
69 lines
2.6 KiB
C++
/*
|
|
* ***** BEGIN GPL LICENSE BLOCK *****
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* The Original Code is Copyright (C) 2012 by Blender Foundation.
|
|
* All rights reserved.
|
|
*
|
|
* The Original Code is: all of this file.
|
|
*
|
|
* Contributor(s): Sergey Sharybin
|
|
*
|
|
* ***** END GPL LICENSE BLOCK *****
|
|
*
|
|
*/
|
|
|
|
#ifndef __BLI_MATH_INTERP_H__
|
|
#define __BLI_MATH_INTERP_H__
|
|
|
|
/** \file BLI_math_interp.h
|
|
* \ingroup bli
|
|
*/
|
|
|
|
void BLI_bicubic_interpolation_fl(const float *buffer, float *output, int width, int height,
|
|
int components, float u, float v);
|
|
|
|
void BLI_bicubic_interpolation_char(const unsigned char *buffer, unsigned char *output, int width, int height,
|
|
int components, float u, float v);
|
|
|
|
void BLI_bilinear_interpolation_fl(const float *buffer, float *output, int width, int height,
|
|
int components, float u, float v);
|
|
|
|
void BLI_bilinear_interpolation_char(const unsigned char *buffer, unsigned char *output, int width, int height,
|
|
int components, float u, float v);
|
|
|
|
#define EWA_MAXIDX 255
|
|
extern const float EWA_WTS[EWA_MAXIDX + 1];
|
|
|
|
typedef void (*ewa_filter_read_pixel_cb) (void *userdata, int x, int y, float result[4]);
|
|
|
|
void BLI_ewa_imp2radangle(float A, float B, float C, float F, float *a, float *b, float *th, float *ecc);
|
|
|
|
/* TODO(sergey): Consider making this function inlined, so the pixel read callback
|
|
* could also be inlined in order to avoid per-pixel function calls.
|
|
*/
|
|
void BLI_ewa_filter(const int width, const int height,
|
|
const bool intpol,
|
|
const bool use_alpha,
|
|
const float uv[2],
|
|
const float du[2],
|
|
const float dv[2],
|
|
ewa_filter_read_pixel_cb read_pixel_cb,
|
|
void *customdata,
|
|
float result[4]);
|
|
|
|
#endif /* __BLI_MATH_INTERP_H__ */
|