History

add new c and assembly functions to optimize downsampler when downscale equal 1:3/1:4

Guangwei Wang committed 11 years ago

Commit 64657d31 parent 69a62ea9 files · +1125 −8Browse files

Showing the changes to test/processing (1 of 9 files). Show all

Unified · Split

test/processing/ProcessUT_DownSample.cpp+88−0
@@ -199,6 +199,79 @@ TEST (DownSampleTest, func) { \ · 198 unmodified lines
199199 } \
200200 }
201201
202+#define GENERATE_DyadicBilinearOneThirdDownsampler_UT(func, ASM, CPUFLAGS) \
203+TEST (DownSampleTest, func) { \
204+ if (ASM) {\
205+ int32_t iCpuCores = 0; \
206+ uint32_t m_uiCpuFeatureFlag = WelsCPUFeatureDetect (&iCpuCores); \
207+ if (0 == (m_uiCpuFeatureFlag & CPUFLAGS)) \
208+ return; \
209+ } \
210+ ENFORCE_STACK_ALIGN_1D (uint8_t, dst_c, 50000, 16); \
211+ ENFORCE_STACK_ALIGN_1D (uint8_t, src_c, 50000, 16); \
212+ int dst_stride_c; \
213+ int src_stride_c; \
214+ int src_width_c; \
215+ int src_height_c; \
216+ ENFORCE_STACK_ALIGN_1D (uint8_t, dst_a, 50000, 16); \
217+ ENFORCE_STACK_ALIGN_1D (uint8_t, src_a, 50000, 16); \
218+ int dst_stride_a; \
219+ int src_stride_a; \
220+ int src_width_a; \
221+ int src_height_a; \
222+ dst_stride_c = dst_stride_a = 560; \
223+ src_stride_c = src_stride_a = 560; \
224+ src_width_c = src_width_a = 480; \
225+ src_height_c = src_height_a = 30; \
226+ for (int j = 0; j < 50000; j++) { \
227+ dst_c[j] = dst_a[j] = rand() % 256; \
228+ src_c[j] = src_a[j] = rand() % 256; \
229+ } \
230+ DyadicBilinearOneThirdDownsampler_c (dst_c, dst_stride_c, src_c, src_stride_c, src_width_c, src_height_c/3); \
231+ func (dst_a, dst_stride_a, src_a, src_stride_a, src_width_a, src_height_a/3); \
232+ for (int j = 0; j < (src_height_c /3 ); j++) { \
233+ for (int m = 0; m < (src_width_c /3); m++) { \
234+ ASSERT_EQ (dst_c[m + j * dst_stride_c], dst_a[m + j * dst_stride_a]); \
235+ } \
236+ } \
237+}
238+
239+#define GENERATE_DyadicBilinearQuarterDownsampler_UT(func, ASM, CPUFLAGS) \
240+TEST (DownSampleTest, func) { \
241+ if (ASM) {\
242+ int32_t iCpuCores = 0; \
243+ uint32_t m_uiCpuFeatureFlag = WelsCPUFeatureDetect (&iCpuCores); \
244+ if (0 == (m_uiCpuFeatureFlag & CPUFLAGS)) \
245+ return; \
246+ } \
247+ ENFORCE_STACK_ALIGN_1D (uint8_t, dst_c, 50000, 16); \
248+ ENFORCE_STACK_ALIGN_1D (uint8_t, src_c, 50000, 16); \
249+ int dst_stride_c; \
250+ int src_stride_c; \
251+ int src_width_c; \
252+ int src_height_c; \
253+ ENFORCE_STACK_ALIGN_1D (uint8_t, dst_a, 50000, 16); \
254+ ENFORCE_STACK_ALIGN_1D (uint8_t, src_a, 50000, 16); \
255+ int dst_stride_a; \
256+ int src_stride_a; \
257+ int src_width_a; \
258+ int src_height_a; \
259+ dst_stride_c = dst_stride_a = 560; \
260+ src_stride_c = src_stride_a = 560; \
261+ src_width_c = src_width_a = 640; \
262+ src_height_c = src_height_a = 80; \
263+ for (int j = 0; j < 50000; j++) { \
264+ dst_c[j] = dst_a[j] = rand() % 256; \
265+ src_c[j] = src_a[j] = rand() % 256; \
266+ } \
267+ DyadicBilinearQuarterDownsampler_c (dst_c, dst_stride_c, src_c, src_stride_c, src_width_c, src_height_c); \
268+ func (dst_a, dst_stride_a, src_a, src_stride_a, src_width_a, src_height_a); \
269+ for (int j = 0; j < (src_height_c >> 2); j++) { \
270+ for (int m = 0; m < (src_width_c >> 2); m++) { \
271+ ASSERT_EQ (dst_c[m + j * dst_stride_c], dst_a[m + j * dst_stride_a]); \
272+ } \
273+ } \
274+}
202275 #define GENERATE_GeneralBilinearDownsampler_UT(func, ref, ASM, CPUFLAGS) \
203276 TEST (DownSampleTest, func) { \
204277 if (ASM) {\
@@ -259,6 +332,13 @@ GENERATE_DyadicBilinearDownsampler_UT (DyadicBilinearDownsamplerWidthx16_ssse3, · 54 unmodified lines
259332 GENERATE_DyadicBilinearDownsampler_UT (DyadicBilinearDownsamplerWidthx32_sse4, 1, WELS_CPU_SSE41)
260333 GENERATE_DyadicBilinearDownsampler_UT (DyadicBilinearDownsamplerWidthx16_sse4, 1, WELS_CPU_SSE41)
261334
335+GENERATE_DyadicBilinearOneThirdDownsampler_UT (DyadicBilinearOneThirdDownsampler_ssse3, 1, WELS_CPU_SSSE3)
336+GENERATE_DyadicBilinearOneThirdDownsampler_UT (DyadicBilinearOneThirdDownsampler_sse4, 1, WELS_CPU_SSE41)
337+
338+GENERATE_DyadicBilinearQuarterDownsampler_UT (DyadicBilinearQuarterDownsampler_sse, 1, WELS_CPU_SSE)
339+GENERATE_DyadicBilinearQuarterDownsampler_UT (DyadicBilinearQuarterDownsampler_ssse3, 1, WELS_CPU_SSSE3)
340+GENERATE_DyadicBilinearQuarterDownsampler_UT (DyadicBilinearQuarterDownsampler_sse4, 1, WELS_CPU_SSE41)
341+
262342 GENERATE_GeneralBilinearDownsampler_UT (GeneralBilinearFastDownsamplerWrap_sse2, GeneralBilinearFastDownsampler_ref, 1,
263343 WELS_CPU_SSE2)
264344 GENERATE_GeneralBilinearDownsampler_UT (GeneralBilinearAccurateDownsamplerWrap_sse2,
@@ -269,6 +349,10 @@ GENERATE_GeneralBilinearDownsampler_UT (GeneralBilinearAccurateDownsamplerWrap_s · 4 unmodified lines
269349 GENERATE_DyadicBilinearDownsampler_UT (DyadicBilinearDownsamplerWidthx32_neon, 1, WELS_CPU_NEON)
270350 GENERATE_DyadicBilinearDownsampler_UT (DyadicBilinearDownsampler_neon, 1, WELS_CPU_NEON)
271351
352+GENERATE_DyadicBilinearOneThirdDownsampler_UT (DyadicBilinearOneThirdDownsampler_neon, 1, WELS_CPU_NEON)
353+
354+GENERATE_DyadicBilinearQuarterDownsampler_UT (DyadicBilinearQuarterDownsampler_neon, 1, WELS_CPU_NEON)
355+
272356 GENERATE_GeneralBilinearDownsampler_UT (GeneralBilinearAccurateDownsamplerWrap_neon,
273357 GeneralBilinearAccurateDownsampler_ref, 1, WELS_CPU_NEON)
274358 #endif
@@ -277,6 +361,10 @@ GENERATE_GeneralBilinearDownsampler_UT (GeneralBilinearAccurateDownsamplerWrap_n · 2 unmodified lines
277361 GENERATE_DyadicBilinearDownsampler_UT (DyadicBilinearDownsamplerWidthx32_AArch64_neon, 1, WELS_CPU_NEON)
278362 GENERATE_DyadicBilinearDownsampler_UT (DyadicBilinearDownsampler_AArch64_neon, 1, WELS_CPU_NEON)
279363
364+GENERATE_DyadicBilinearOneThirdDownsampler_UT (DyadicBilinearOneThirdDownsampler_AArch64_neon, 1, WELS_CPU_NEON)
365+
366+GENERATE_DyadicBilinearQuarterDownsampler_UT (DyadicBilinearQuarterDownsampler_AArch64_neon, 1, WELS_CPU_NEON)
367+
280368 GENERATE_GeneralBilinearDownsampler_UT (GeneralBilinearAccurateDownsamplerWrap_AArch64_neon,
281369 GeneralBilinearAccurateDownsampler_ref, 1, WELS_CPU_NEON)
282370 #endif

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t