ref: 3d532fff80597d355cb9939623447ed709425bed
dir: /test/processing/ProcessUT_AdaptiveQuantization.cpp/
#include <gtest/gtest.h> #include <math.h> #include <string.h> #include "cpu.h" #include "cpu_core.h" #include "util.h" #include "macros.h" #include "IWelsVP.h" #include "AdaptiveQuantization.h" using namespace WelsVP; static void FillWithRandomData (uint8_t* p, int32_t Len) { for (int32_t i = 0; i < Len; i++) { p[i] = rand() % 256; } } void SampleVariance16x16_ref (uint8_t* pRefY, int32_t iRefStride, uint8_t* pSrcY, int32_t iSrcStride, SMotionTextureUnit* pMotionTexture) { uint32_t uiCurSquare = 0, uiSquare = 0; uint16_t uiCurSum = 0, uiSum = 0; for (int32_t y = 0; y < MB_WIDTH_LUMA; y++) { for (int32_t x = 0; x < MB_WIDTH_LUMA; x++) { uint32_t uiDiff = WELS_ABS (pRefY[x] - pSrcY[x]); uiSum += uiDiff; uiSquare += uiDiff * uiDiff; uiCurSum += pSrcY[x]; uiCurSquare += pSrcY[x] * pSrcY[x]; } pRefY += iRefStride; pSrcY += iSrcStride; } uiSum = uiSum >> 8; pMotionTexture->uiMotionIndex = (uiSquare >> 8) - (uiSum * uiSum); uiCurSum = uiCurSum >> 8; pMotionTexture->uiTextureIndex = (uiCurSquare >> 8) - (uiCurSum * uiCurSum); } #define GENERATE_AQTEST(method, flag) \ TEST (AdaptiveQuantization, method) {\ uint32_t uiCPUFlags = WelsCPUFeatureDetect(NULL); \ if ((uiCPUFlags & flag) == 0 && flag != 0) \ return; \ ENFORCE_STACK_ALIGN_1D (uint8_t, pRefY,32*16,16)\ ENFORCE_STACK_ALIGN_1D (uint8_t, pSrcY,48*16,16)\ SMotionTextureUnit pMotionTexture[2];\ FillWithRandomData (pRefY,32*16);\ FillWithRandomData (pSrcY,48*16);\ SampleVariance16x16_ref (pRefY,32,pSrcY,48,&pMotionTexture[0]);\ method(pRefY,32,pSrcY,48,&pMotionTexture[1]);\ ASSERT_EQ(pMotionTexture[0].uiMotionIndex,pMotionTexture[1].uiMotionIndex);\ ASSERT_EQ(pMotionTexture[0].uiMotionIndex,pMotionTexture[1].uiMotionIndex);\ memset (pRefY,0,32*16);\ memset (pSrcY,255,48*16);\ SampleVariance16x16_ref (pRefY,32,pSrcY,48,&pMotionTexture[0]);\ method(pRefY,32,pSrcY,48,&pMotionTexture[1]);\ ASSERT_EQ(pMotionTexture[0].uiMotionIndex,pMotionTexture[1].uiMotionIndex);\ ASSERT_EQ(pMotionTexture[0].uiMotionIndex,pMotionTexture[1].uiMotionIndex);\ } GENERATE_AQTEST (SampleVariance16x16_c, 0) #if defined(X86_ASM) GENERATE_AQTEST (SampleVariance16x16_sse2, WELS_CPU_SSE2) #endif #if defined(HAVE_NEON) GENERATE_AQTEST (SampleVariance16x16_neon, WELS_CPU_NEON) #endif #if defined(HAVE_NEON_AARCH64) GENERATE_AQTEST (SampleVariance16x16_AArch64_neon, WELS_CPU_NEON) #endif