|
73 | 73 |
|
74 | 74 | #include <opencv2/core/hal/hal.hpp>
|
75 | 75 | #include "opencv2/core/hal/intrin.hpp"
|
| 76 | +#include <opencv2/core/utils/buffer_area.private.hpp> |
76 | 77 |
|
77 | 78 | namespace cv {
|
78 | 79 |
|
@@ -167,23 +168,17 @@ float calcOrientationHist(
|
167 | 168 | int i, j, k, len = (radius*2+1)*(radius*2+1);
|
168 | 169 |
|
169 | 170 | float expf_scale = -1.f/(2.f * sigma * sigma);
|
170 |
| -#if CV_SIMD |
171 |
| - AutoBuffer<float> bufX(len + v_float32::nlanes); |
172 |
| - AutoBuffer<float> bufY(len + v_float32::nlanes); |
173 |
| - AutoBuffer<float> bufO(len + v_float32::nlanes); |
174 |
| - AutoBuffer<float> bufW(len + v_float32::nlanes); |
175 |
| - AutoBuffer<float> bufT(n+4 + v_float32::nlanes); |
176 |
| - float *X = alignPtr(bufX.data(), CV_SIMD_WIDTH); |
177 |
| - float *Y = alignPtr(bufY.data(), CV_SIMD_WIDTH); |
178 |
| - float *Mag = X; |
179 |
| - float *Ori = alignPtr(bufO.data(), CV_SIMD_WIDTH); |
180 |
| - float *W = alignPtr(bufW.data(), CV_SIMD_WIDTH); |
181 |
| - float *temphist = alignPtr(bufT.data(), CV_SIMD_WIDTH)+2; |
182 |
| -#else |
183 |
| - AutoBuffer<float> buf(len*4 + n+4); |
184 |
| - float *X = buf.data(), *Y = X + len, *Mag = X, *Ori = Y + len, *W = Ori + len; |
185 |
| - float* temphist = W + len + 2; |
186 |
| -#endif |
| 171 | + |
| 172 | + cv::utils::BufferArea area; |
| 173 | + float *X = 0, *Y = 0, *Mag, *Ori = 0, *W = 0, *temphist = 0; |
| 174 | + area.allocate(X, len, CV_SIMD_WIDTH); |
| 175 | + area.allocate(Y, len, CV_SIMD_WIDTH); |
| 176 | + area.allocate(Ori, len, CV_SIMD_WIDTH); |
| 177 | + area.allocate(W, len, CV_SIMD_WIDTH); |
| 178 | + area.allocate(temphist, n+4, CV_SIMD_WIDTH); |
| 179 | + area.commit(); |
| 180 | + temphist += 2; |
| 181 | + Mag = X; |
187 | 182 |
|
188 | 183 | for( i = 0; i < n; i++ )
|
189 | 184 | temphist[i] = 0.f;
|
@@ -656,7 +651,7 @@ void calcSIFTDescriptor(
|
656 | 651 | v_float32 v_rco011 = v_rc01*obin, v_rco010 = v_rc01 - v_rco011;
|
657 | 652 | v_float32 v_rco001 = v_rc00*obin, v_rco000 = v_rc00 - v_rco001;
|
658 | 653 |
|
659 |
| - v_int32 idx = v_fma(v_fma(r0+__1, __d_plus_2, c0+__1), __n_plus_2, o0); |
| 654 | + v_int32 idx = v_muladd(v_muladd(r0+__1, __d_plus_2, c0+__1), __n_plus_2, o0); |
660 | 655 | v_store_aligned(idx_buf, idx);
|
661 | 656 |
|
662 | 657 | v_store_aligned(rco_buf, v_rco000);
|
|
0 commit comments