X-Git-Url: http://rtime.felk.cvut.cz/gitweb/hercules2020/kcf.git/blobdiff_plain/99a5220a74c18aa8f13938f09cd9b6bafd3878e1..87b7b7429bc2d4e7bf7aa278b2a6e5c6afc08d45:/src/fft_cufft.h diff --git a/src/fft_cufft.h b/src/fft_cufft.h index 44c3556..4241c06 100644 --- a/src/fft_cufft.h +++ b/src/fft_cufft.h @@ -1,44 +1,38 @@ - #ifndef FFT_CUDA_H #define FFT_CUDA_H -#include "fft.h" -#include "cuda/cuda_error_check.cuh" - -#if CV_MAJOR_VERSION == 2 - #include - #define CUDA cv::gpu -#else - #include "opencv2/opencv.hpp" - #define CUDA cv::cuda -#endif - #include #include +#include -struct Scale_vars; +#include "fft.h" +#include "cuda_error_check.hpp" +#include "pragmas.h" + +struct ThreadCtx; class cuFFT : public Fft { public: - void init(unsigned width, unsigned height, unsigned num_of_feats, unsigned num_of_scales, bool big_batch_mode) override; - void set_window(const cv::Mat & window) override; - ComplexMat forward(const cv::Mat & input) override; - void forward(Scale_vars & vars) override; - void forward_raw(Scale_vars & vars, bool all_scales) override; - ComplexMat forward_window(const std::vector & input) override; - void forward_window(Scale_vars & vars) override; - cv::Mat inverse(const ComplexMat & input) override; - void inverse(Scale_vars & vars) override; - float* inverse_raw(const ComplexMat & input) override; - ~cuFFT() override; + cuFFT(); + void init(unsigned width, unsigned height, unsigned num_of_feats, unsigned num_of_scales); + void set_window(const MatDynMem &window); + void forward(const MatScales &real_input, ComplexMat &complex_result); + void forward_window(MatScaleFeats &patch_feats_in, ComplexMat &complex_result, MatScaleFeats &tmp); + void inverse(ComplexMat &complex_input, MatScales &real_result); + ~cuFFT(); + +protected: + cufftHandle create_plan_fwd(uint howmany) const; + cufftHandle create_plan_inv(uint howmany) const; + private: cv::Mat m_window; - unsigned m_width, m_height, m_num_of_feats, m_num_of_scales; - bool m_big_batch_mode; - cufftHandle plan_f, plan_f_all_scales, plan_fw, plan_fw_all_scales, plan_i_features, - plan_i_features_all_scales, plan_i_1ch, plan_i_1ch_all_scales; - 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; + cufftHandle plan_f, plan_fw, plan_i_1ch; +#ifdef BIG_BATCH + cufftHandle plan_f_all_scales, plan_fw_all_scales, plan_i_all_scales; +#endif + cublasHandle_t cublas; }; #endif // FFT_CUDA_H