home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 275 / DPCS0111DVD.ISO / Toolkit / Audio-Visual / VirtualDub / Source / VirtualDub-1.9.10-src.7z / src / test / source / TestAudioConvert.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2009-09-14  |  2.0 KB  |  91 lines

  1. #include <vd2/system/filesys.h>
  2. #include <vd2/Priss/convert.h>
  3. #include "test.h"
  4.  
  5. void testint(tpVDConvertPCM fnScalar, tpVDConvertPCM fnMMX) {
  6.     char buf1[256];
  7.     char buf2[256];
  8.     char buf3[256];
  9.     int i;
  10.  
  11.     for(i=0; i<256; ++i)
  12.         buf1[i] = rand();
  13.  
  14.     for(i=0; i<64; ++i) {
  15.         memcpy(buf2, buf1, sizeof buf2);
  16.         memcpy(buf3, buf1, sizeof buf3);
  17.  
  18.         fnScalar(buf2+16, buf1+16, i);
  19.         fnMMX   (buf3+16, buf1+16, i);
  20.  
  21.         for(int j=0; j<256; ++j)
  22.             TEST_ASSERT(buf2[j] == buf3[j]);
  23.     }
  24. }
  25.  
  26. void testfp1(tpVDConvertPCM fnScalar, tpVDConvertPCM fnSSE) {
  27.     float __declspec(align(16)) buf1[64];
  28.     char buf2[256];
  29.     char buf3[256];
  30.     int i;
  31.  
  32.     for(i=0; i<64; ++i)
  33.         buf1[i] = (float)((((double)rand() / RAND_MAX) - 0.5) * 2.2);
  34.  
  35.     for(int p=0; p<16; ++p) {
  36.         for(int o=0; o<4; ++o) {
  37.             for(i=0; i<32; ++i) {
  38.                 memcpy(buf2, buf1, sizeof buf2);
  39.                 memcpy(buf3, buf1, sizeof buf3);
  40.  
  41.                 fnScalar(buf2+4+p, buf1+4+o, i);
  42.                 fnSSE   (buf3+4+p, buf1+4+o, i);
  43.  
  44.                 for(int j=0; j<256; ++j)
  45.                     TEST_ASSERT(buf2[j] == buf3[j]);
  46.             }
  47.         }
  48.     }
  49. }
  50.  
  51. void testfp2(tpVDConvertPCM fnScalar, tpVDConvertPCM fnSSE) {
  52.     float buf0[64];
  53.     char buf1[256];
  54.     float buf2[64];
  55.     float buf3[64];
  56.     int i;
  57.  
  58.     for(i=0; i<64; ++i)
  59.         buf0[i] = (float)rand();
  60.  
  61.     for(i=0; i<256; ++i)
  62.         buf1[i] = rand();
  63.  
  64.     for(int p=0; p<4; ++p) {
  65.         for(int o=0; o<16; ++o) {
  66.             for(i=0; i<32; ++i) {
  67.                 memcpy(buf2, buf0, sizeof buf2);
  68.                 memcpy(buf3, buf0, sizeof buf3);
  69.  
  70.                 fnScalar(buf2+4+p, buf1+4+o, i);
  71.                 fnSSE   (buf3+4+p, buf1+4+o, i);
  72.  
  73.                 for(int j=0; j<64; ++j)
  74.                     TEST_ASSERT(buf2[j] == buf3[j]);
  75.             }
  76.         }
  77.     }
  78. }
  79.  
  80. DEFINE_TEST(AudioConvert) {
  81. #ifdef _M_IX86
  82.     testint(VDConvertPCM8ToPCM16, VDConvertPCM8ToPCM16_MMX);
  83.     testint(VDConvertPCM16ToPCM8, VDConvertPCM16ToPCM8_MMX);
  84.     testfp1(VDConvertPCM32FToPCM16, VDConvertPCM32FToPCM16_SSE);
  85.     testfp1(VDConvertPCM32FToPCM8, VDConvertPCM32FToPCM8_SSE);
  86.     testfp2(VDConvertPCM16ToPCM32F, VDConvertPCM16ToPCM32F_SSE);
  87.     testfp2(VDConvertPCM8ToPCM32F, VDConvertPCM8ToPCM32F_SSE);
  88. #endif
  89.     return 0;
  90. }
  91.