aboutsummaryrefslogblamecommitdiffstats
path: root/libglitter_redistribute_energy_double.c
blob: 3eb39e0e5cf66ee5765c620f71cfeb742f276540 (plain) (tree)















































































                                                                                                                              
/* See LICENSE file for copyright and license details. */
#include "common.h"
#ifndef TEST


static void
hselfconvolute(double *restrict raster, size_t rowsize, size_t width, size_t height, size_t kernelsize, const double *hkernel)
{
	/* TODO */
}


static void
hconvolute(double *restrict output, const double *restrict input, size_t output_rowsize, size_t input_rowsize,
           size_t width, size_t height, size_t kernelsize, const double *kernel)
{
	/* TODO */
}


static void
vconvolute(double *restrict output, const double *restrict input, size_t output_rowsize, size_t input_rowsize,
           size_t width, size_t height, size_t kernelsize, const double *kernel)
{
	/* TODO */
}


static void
copyraster(double *restrict output, const double *restrict input, size_t output_rowsize,
           size_t input_rowsize, size_t width, size_t height)
{
	size_t y;
	for (y = 0; y < height; y++) {
		memcpy(output, input, width * sizeof(double));
		output = &output[output_rowsize];
		input = &input[input_rowsize];
	}
}


void
libglitter_redistribute_energy_double(double *restrict output, const double *restrict input, /* TODO add man page */
                                      size_t output_rowsize, size_t input_rowsize, size_t width,
                                      size_t height, size_t hkernelsize, size_t vkernelsize,
                                      const double *hkernel, const double *vkernel)
{
	/* TODO Can we allow output==input ? */
	if (vkernelsize > 1) {
		vconvolute(output, input, output_rowsize, input_rowsize, width, height, vkernelsize, vkernel);
		if (hkernelsize > 1)
			hselfconvolute(output, output_rowsize, width, height, hkernelsize, hkernel);
	} else if (hkernelsize > 1) {
		vconvolute(output, input, output_rowsize, input_rowsize, width, height, hkernelsize, hkernel);
	} else {
		copyraster(output, input, output_rowsize, input_rowsize, width, height);
	}
}


#else


#define TOLERANCE 0.0001

static int
eq(double a, double b)
{
	double r = a - b;
	return (r < 0 ? -r : r) < TOLERANCE;
}

int
main(void)
{
	return 0; /* TODO add test */
}


#endif