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 / TestResampler.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2009-09-14  |  2.5 KB  |  82 lines

  1. #include <vd2/system/cpuaccel.h>
  2. #include <vd2/system/filesys.h>
  3. #include <vd2/system/memory.h>
  4. #include <vd2/Kasumi/pixmap.h>
  5. #include <vd2/Kasumi/resample.h>
  6. #include "test.h"
  7.  
  8. DEFINE_TEST(Resampler) {
  9.     static const uint32 kCPUModes[]={
  10.         CPUF_SUPPORTS_FPU,
  11.         CPUF_SUPPORTS_FPU | CPUF_SUPPORTS_MMX,
  12.         CPUF_SUPPORTS_FPU | CPUF_SUPPORTS_MMX | CPUF_SUPPORTS_INTEGER_SSE,
  13.         CPUF_SUPPORTS_FPU | CPUF_SUPPORTS_MMX | CPUF_SUPPORTS_INTEGER_SSE | CPUF_SUPPORTS_SSE2,
  14.         CPUF_SUPPORTS_FPU | CPUF_SUPPORTS_MMX | CPUF_SUPPORTS_INTEGER_SSE | CPUF_SUPPORTS_SSE2 | CPUF_SUPPORTS_SSSE3,
  15.         CPUF_SUPPORTS_FPU | CPUF_SUPPORTS_MMX | CPUF_SUPPORTS_INTEGER_SSE | CPUF_SUPPORTS_SSE2 | CPUF_SUPPORTS_SSSE3 | CPUF_SUPPORTS_SSE41,
  16.     };
  17.  
  18.     uint32 availModes = CPUCheckForExtensions();
  19.  
  20.     for(int cpumode=0; cpumode<sizeof(kCPUModes)/sizeof(kCPUModes[0]); ++cpumode) {
  21.         uint32 desiredModes = kCPUModes[cpumode];
  22.  
  23.         if (desiredModes & ~availModes)
  24.             continue;
  25.  
  26.         CPUEnableExtensions(desiredModes);
  27.  
  28.         uint8 dst[32*32];
  29.         uint8 src[33*32];
  30.  
  31.         VDPixmap pxdst;
  32.         pxdst.pitch = 32;
  33.         pxdst.format = nsVDPixmap::kPixFormat_Y8;
  34.  
  35.         VDPixmap pxsrc;
  36.         pxsrc.pitch = 33;
  37.         pxsrc.format = nsVDPixmap::kPixFormat_Y8;
  38.  
  39.         static const IVDPixmapResampler::FilterMode kFilterModes[]={
  40.             IVDPixmapResampler::kFilterLinear,
  41.             IVDPixmapResampler::kFilterCubic,
  42.             IVDPixmapResampler::kFilterLanczos3,
  43.         };
  44.  
  45.         for(int fmodei = 0; fmodei < sizeof(kFilterModes)/sizeof(kFilterModes[0]); ++fmodei) {
  46.             IVDPixmapResampler::FilterMode filterMode = kFilterModes[fmodei];
  47.  
  48.             pxdst.h = 16;
  49.             pxsrc.h = 16;
  50.             for(int dalign = 0; dalign < 4; ++dalign) {
  51.                 for(int dx = 4; dx <= 16; ++dx) {
  52.                     pxdst.data = dst + 4*32 + 4 + dalign;
  53.                     pxdst.w = dx;
  54.  
  55.                     for(int sx = 4; sx <= 16; ++sx) {
  56.                         VDMemset8(src, 0x40, sizeof src);
  57.                         VDMemset8(dst, 0xCD, sizeof dst);
  58.  
  59.                         pxsrc.w = sx;
  60.                         pxsrc.data = src + 4*32 + 4;
  61.  
  62.                         for(int i=0; i<16; ++i)
  63.                             VDMemset8((char *)pxsrc.data + pxsrc.pitch*i, 0xA0, sx);
  64.  
  65.                         VDPixmapResample(pxdst, pxsrc, filterMode);
  66.  
  67.                         TEST_ASSERT(!VDMemCheck8(dst+32*3, 0xCD, 32));
  68.                         for(int i=0; i<16; ++i) {
  69.                             TEST_ASSERT(!VDMemCheck8(dst+32*(4+i), 0xCD, dalign + 4));
  70.                             TEST_ASSERT(!VDMemCheck8(dst+32*(4+i)+dalign+4, 0xA0, dx));
  71.                             TEST_ASSERT(!VDMemCheck8(dst+32*(4+i)+dalign+4+dx, 0xCD, 32 - (4+dalign+dx)));
  72.                         }
  73.                         TEST_ASSERT(!VDMemCheck8(dst+32*20, 0xCD, 32));
  74.                     }
  75.                 }
  76.             }
  77.         }
  78.     }
  79.  
  80.     return 0;
  81. }
  82.