1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
/* Copyright (c) 2006-2012 Filip Wasilewski <http://en.ig.ma/>
* Copyright (c) 2012-2016 The PyWavelets Developers
* <https://github.com/PyWavelets/pywt>
* See COPYING for license details.
*/
/* Wavelet transforms using convolution functions defined in convolution.h */
#include "templating.h"
#ifndef TYPE
#error TYPE must be defined here.
#else
#include "wt.h"
#if defined _MSC_VER
#define restrict __restrict
#elif defined __GNUC__
#define restrict __restrict__
#endif
/* _a suffix - wavelet transform approximations */
/* _d suffix - wavelet transform details */
int CAT(TYPE, _downcoef_axis)(const TYPE * const restrict input, const ArrayInfo input_info,
TYPE * const restrict output, const ArrayInfo output_info,
const DiscreteWavelet * const restrict wavelet, const size_t axis,
const Coefficient detail, const MODE dwt_mode,
const size_t swt_level,
const DiscreteTransformType transform);
// a_info and d_info are pointers, as they may be NULL
int CAT(TYPE, _idwt_axis)(const TYPE * const restrict coefs_a, const ArrayInfo * a_info,
const TYPE * const restrict coefs_d, const ArrayInfo * d_info,
TYPE * const restrict output, const ArrayInfo output_info,
const DiscreteWavelet * const restrict wavelet,
const size_t axis, const MODE mode);
/* Single level decomposition */
int CAT(TYPE, _dec_a)(const TYPE * const restrict input, const size_t input_len,
const DiscreteWavelet * const restrict wavelet,
TYPE * const restrict output, const size_t output_len,
const MODE mode);
int CAT(TYPE, _dec_d)(const TYPE * const restrict input, const size_t input_len,
const DiscreteWavelet * const restrict wavelet,
TYPE * const restrict output, const size_t output_len,
const MODE mode);
/* Single level reconstruction */
int CAT(TYPE, _rec_a)(const TYPE * const restrict coeffs_a, const size_t coeffs_len,
const DiscreteWavelet * const restrict wavelet,
TYPE * const restrict output, const size_t output_len);
int CAT(TYPE, _rec_d)(const TYPE * const restrict coeffs_d, const size_t coeffs_len,
const DiscreteWavelet * const restrict wavelet,
TYPE * const restrict output, const size_t output_len);
/* Single level IDWT reconstruction */
int CAT(TYPE, _idwt)(const TYPE * const restrict coeffs_a, const size_t coeffs_a_len,
const TYPE * const restrict coeffs_d, const size_t coeffs_d_len,
TYPE * const restrict output, const size_t output_len,
const DiscreteWavelet * const restrict wavelet, const MODE mode);
/* SWT decomposition at given level */
int CAT(TYPE, _swt_a)(const TYPE * const restrict input, pywt_index_t input_len,
const DiscreteWavelet * const restrict wavelet,
TYPE * const restrict output, pywt_index_t output_len,
unsigned int level);
int CAT(TYPE, _swt_d)(const TYPE * const restrict input, pywt_index_t input_len,
const DiscreteWavelet * const restrict wavelet,
TYPE * const restrict output, pywt_index_t output_len,
unsigned int level);
int CAT(TYPE, _swt_axis)(const TYPE * const restrict input, const ArrayInfo input_info,
TYPE * const restrict output, const ArrayInfo output_info,
const DiscreteWavelet * const restrict wavelet, const size_t axis,
const Coefficient detail, unsigned int level);
#endif /* TYPE */
#undef restrict
|