77 lines
2.3 KiB
C++
77 lines
2.3 KiB
C++
#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 nsWelsVP;
|
|
|
|
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) \
|
|
TEST (AdaptiveQuantization, method) {\
|
|
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)
|
|
#if defined(X86_ASM)
|
|
GENERATE_AQTEST (SampleVariance16x16_sse2)
|
|
#endif
|
|
|
|
#if defined(HAVE_NEON)
|
|
GENERATE_AQTEST (SampleVariance16x16_neon)
|
|
#endif
|
|
|
|
#if defined(HAVE_NEON_AARCH64)
|
|
GENERATE_AQTEST (SampleVariance16x16_AArch64_neon)
|
|
#endif
|
|
|