]> rtime.felk.cvut.cz Git - hercules2020/kcf.git/blob - src/fft_cufft.h
Added CUFFT support
[hercules2020/kcf.git] / src / fft_cufft.h
1
2 #ifndef FFT_CUDA_H
3 #define FFT_CUDA_H
4
5 #include "fft.h"
6 #include "cuda/cuda_error_check.cuh"
7
8 #if CV_MAJOR_VERSION == 2
9   #include <opencv2/gpu/gpu.hpp>
10   #define CUDA cv::gpu
11 #else
12   #include "opencv2/opencv.hpp"
13   #define CUDA cv::cuda
14 #endif
15
16 #include <cufft.h>
17 #include <cuda_runtime.h>
18
19 struct Scale_vars;
20
21 class cuFFT : public Fft
22 {
23 public:
24     void init(unsigned width, unsigned height, unsigned num_of_feats, unsigned num_of_scales, bool big_batch_mode) override;
25     void set_window(const cv::Mat & window) override;
26     ComplexMat forward(const cv::Mat & input) override;
27     void forward(Scale_vars & vars) override;
28     void forward_raw(Scale_vars & vars, bool all_scales) override;
29     ComplexMat forward_window(const std::vector<cv::Mat> & input) override;
30     void forward_window(Scale_vars & vars) override;
31     cv::Mat inverse(const ComplexMat & input) override;
32     void inverse(Scale_vars & vars) override;
33     float* inverse_raw(const ComplexMat & input) override;
34     ~cuFFT() override;
35 private:
36     cv::Mat m_window;
37     unsigned m_width, m_height, m_num_of_feats, m_num_of_scales;
38     bool m_big_batch_mode;
39     cufftHandle plan_f, plan_f_all_scales, plan_fw, plan_fw_all_scales, plan_i_features,
40      plan_i_features_all_scales, plan_i_1ch, plan_i_1ch_all_scales;
41     float *data_f = nullptr, *data_f_all_scales = nullptr, *data_fw = nullptr, *data_fw_d = nullptr, *data_fw_all_scales = nullptr, *data_fw_all_scales_d = nullptr, *data_i_features = nullptr, *data_i_features_d = nullptr, *data_i_features_all_scales = nullptr, *data_i_features_all_scales_d = nullptr, *data_i_1ch = nullptr, *data_i_1ch_d = nullptr, *data_i_1ch_all_scales = nullptr, *data_i_1ch_all_scales_d = nullptr;
42 };
43
44 #endif // FFT_CUDA_H