]> rtime.felk.cvut.cz Git - hercules2020/kcf.git/blobdiff - src/fft.h
Do not use virtual methods in FFT class
[hercules2020/kcf.git] / src / fft.h
index cc1393d45abcd3a96138ac90c52874e336befe5c..9f74de387fc6ff6e3d263bf2e305bbe0a0fa86d0 100644 (file)
--- a/src/fft.h
+++ b/src/fft.h
@@ -4,28 +4,25 @@
 
 #include <opencv2/opencv.hpp>
 #include <vector>
-
-#ifdef CUFFT
-    #include "complexmat.cuh"
-#else
-    #include "complexmat.hpp"
-#endif
+#include <cassert>
+#include "complexmat.hpp"
 
 #ifdef BIG_BATCH
 #define BIG_BATCH_MODE 1
+#define IF_BIG_BATCH(true, false) true
 #else
 #define BIG_BATCH_MODE 0
+#define IF_BIG_BATCH(true, false) false
 #endif
 
 class Fft
 {
 public:
-    virtual void init(unsigned width, unsigned height,unsigned num_of_feats, unsigned num_of_scales) = 0;
-    virtual void set_window(const cv::Mat & window) = 0;
-    virtual void forward(const cv::Mat & real_input, ComplexMat & complex_result, float *real_input_arr) = 0;
-    virtual void forward_window(std::vector<cv::Mat> patch_feats, ComplexMat & complex_result, cv::Mat & fw_all, float *real_input_arr) = 0;
-    virtual void inverse(ComplexMat &  complex_input, cv::Mat & real_result, float *real_result_arr) = 0;
-    virtual ~Fft() = 0;
+    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);
 
     static cv::Size freq_size(cv::Size space_size)
     {
@@ -35,6 +32,12 @@ public:
 #endif
         return ret;
     }
+
+protected:
+    unsigned m_width, m_height, m_num_of_feats;
+#ifdef BIG_BATCH
+    unsigned m_num_of_scales;
+#endif
 };
 
 #endif // FFT_H