#include <gtest/gtest.h>#include <math.h>#include <stdlib.h>#include <time.h> #include "cpu_core.h"#include "cpu.h"#include "macros.h"#include "encode_mb_aux.h"#include "wels_func_ptr_def.h"#include "copy_mb.h" using namespace WelsEnc;#define MBCOPYTEST_NUM 1000static void FillWithRandomData (uint8_t* p, int32_t Len) { for (int32_t i = 0; i < Len; i++) { p[i] = rand() % 256; }} TEST (MBCopyFunTest, pfCopy8x8Aligned) { ENFORCE_STACK_ALIGN_1D (uint8_t, pSrcAlign, 16 * 64 + 1, 16) ENFORCE_STACK_ALIGN_2D (uint8_t, pDstAlign, 2, 16 * 32 + 16, 16) int32_t iCpuCores = 0; SWelsFuncPtrList sFuncPtrList; uint32_t m_uiCpuFeatureFlag = WelsCPUFeatureDetect (&iCpuCores); WelsInitEncodingFuncs (&sFuncPtrList, m_uiCpuFeatureFlag); for (int32_t k = 0; k < MBCOPYTEST_NUM; k++) { memset (pDstAlign[0], 0, 16 * 32 + 1); memset (pDstAlign[1], 0, 16 * 32 + 1); FillWithRandomData ((uint8_t*)pSrcAlign, 16 * 64 + 1); WelsCopy8x8_c (pDstAlign[0], 32, pSrcAlign, 64); sFuncPtrList.pfCopy8x8Aligned (pDstAlign[1], 32, pSrcAlign, 64); for (int32_t i = 0; i < 16 * 32 + 1; i++) { ASSERT_EQ (pDstAlign[0][i], pDstAlign[1][i]); } } } TEST (MBCopyFunTest, pfCopy8x16Aligned) { ENFORCE_STACK_ALIGN_1D (uint8_t, pSrcAlign, 16 * 64 + 1, 16) ENFORCE_STACK_ALIGN_2D (uint8_t, pDstAlign, 2, 16 * 32 + 16, 16) int32_t iCpuCores = 0; SWelsFuncPtrList sFuncPtrList; uint32_t m_uiCpuFeatureFlag = WelsCPUFeatureDetect (&iCpuCores); WelsInitEncodingFuncs (&sFuncPtrList, m_uiCpuFeatureFlag); for (int32_t k = 0; k < MBCOPYTEST_NUM; k++) { memset (pDstAlign[0], 0, 16 * 32 + 1); memset (pDstAlign[1], 0, 16 * 32 + 1); FillWithRandomData ((uint8_t*)pSrcAlign, 16 * 64 + 1); WelsCopy8x16_c (pDstAlign[0], 32, pSrcAlign, 64); sFuncPtrList.pfCopy8x16Aligned (pDstAlign[1], 32, pSrcAlign, 64); for (int32_t i = 0; i < 16 * 32 + 1; i++) { ASSERT_EQ (pDstAlign[0][i], pDstAlign[1][i]); } } } TEST (MBCopyFunTest, pfCopy16x16Aligned) { ENFORCE_STACK_ALIGN_1D (uint8_t, pSrcAlign, 16 * 64 + 1, 16) ENFORCE_STACK_ALIGN_2D (uint8_t, pDstAlign, 2, 16 * 32 + 16, 16) int32_t iCpuCores = 0; SWelsFuncPtrList sFuncPtrList; uint32_t m_uiCpuFeatureFlag = WelsCPUFeatureDetect (&iCpuCores); WelsInitEncodingFuncs (&sFuncPtrList, m_uiCpuFeatureFlag); for (int32_t k = 0; k < MBCOPYTEST_NUM; k++) { memset (pDstAlign[0], 0, 16 * 32 + 1); memset (pDstAlign[1], 0, 16 * 32 + 1); FillWithRandomData ((uint8_t*)pSrcAlign, 16 * 64 + 1); WelsCopy16x16_c (pDstAlign[0], 32, pSrcAlign, 64); sFuncPtrList.pfCopy16x16Aligned (pDstAlign[1], 32, pSrcAlign, 64); for (int32_t i = 0; i < 16 * 32 + 1; i++) { ASSERT_EQ (pDstAlign[0][i], pDstAlign[1][i]); } } } TEST (MBCopyFunTest, pfCopy16x8NotAligned) { ENFORCE_STACK_ALIGN_1D (uint8_t, pSrcAlign, 16 * 64 + 1, 16) ENFORCE_STACK_ALIGN_2D (uint8_t, pDstAlign, 2, 16 * 32 + 16, 16) int32_t iCpuCores = 0; SWelsFuncPtrList sFuncPtrList; uint32_t m_uiCpuFeatureFlag = WelsCPUFeatureDetect (&iCpuCores); WelsInitEncodingFuncs (&sFuncPtrList, m_uiCpuFeatureFlag); for (int32_t k = 0; k < MBCOPYTEST_NUM; k++) { memset (pDstAlign[0], 0, 16 * 32 + 1); memset (pDstAlign[1], 0, 16 * 32 + 1); FillWithRandomData ((uint8_t*)pSrcAlign, 16 * 64 + 1); WelsCopy16x8_c (pDstAlign[0], 32, pSrcAlign + 1, 64); sFuncPtrList.pfCopy16x8NotAligned (pDstAlign[1], 32, pSrcAlign + 1, 64); for (int32_t i = 0; i < 16 * 32 + 1; i++) { ASSERT_EQ (pDstAlign[0][i], pDstAlign[1][i]); } } } TEST (MBCopyFunTest, pfCopy16x16NotAligned) { ENFORCE_STACK_ALIGN_1D (uint8_t, pSrcAlign, 16 * 64 + 1, 16) ENFORCE_STACK_ALIGN_2D (uint8_t, pDstAlign, 2, 16 * 32 + 16, 16) int32_t iCpuCores = 0; SWelsFuncPtrList sFuncPtrList; uint32_t m_uiCpuFeatureFlag = WelsCPUFeatureDetect (&iCpuCores); WelsInitEncodingFuncs (&sFuncPtrList, m_uiCpuFeatureFlag); for (int32_t k = 0; k < MBCOPYTEST_NUM; k++) { memset (pDstAlign[0], 0, 16 * 32 + 1); memset (pDstAlign[1], 0, 16 * 32 + 1); FillWithRandomData ((uint8_t*)pSrcAlign, 16 * 64 + 1); WelsCopy16x16_c (pDstAlign[0], 32, pSrcAlign + 1, 64); sFuncPtrList.pfCopy16x16NotAligned (pDstAlign[1], 32, pSrcAlign + 1, 64); for (int32_t i = 0; i < 16 * 32 + 1; i++) { ASSERT_EQ (pDstAlign[0][i], pDstAlign[1][i]); } } }
#include <gtest/gtest.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include "cpu_core.h"
#include "cpu.h"
#include "macros.h"
#include "encode_mb_aux.h"
#include "wels_func_ptr_def.h"
#include "copy_mb.h"
using namespace WelsEnc;
#define MBCOPYTEST_NUM 1000
static void FillWithRandomData (uint8_t* p, int32_t Len) {
for (int32_t i = 0; i < Len; i++) {
p[i] = rand() % 256;
}
}
TEST (MBCopyFunTest, pfCopy8x8Aligned) {
ENFORCE_STACK_ALIGN_1D (uint8_t, pSrcAlign, 16 * 64 + 1, 16)
ENFORCE_STACK_ALIGN_2D (uint8_t, pDstAlign, 2, 16 * 32 + 16, 16)
int32_t iCpuCores = 0;
SWelsFuncPtrList sFuncPtrList;
uint32_t m_uiCpuFeatureFlag = WelsCPUFeatureDetect (&iCpuCores);
WelsInitEncodingFuncs (&sFuncPtrList, m_uiCpuFeatureFlag);
for (int32_t k = 0; k < MBCOPYTEST_NUM; k++) {
memset (pDstAlign[0], 0, 16 * 32 + 1);
memset (pDstAlign[1], 0, 16 * 32 + 1);
FillWithRandomData ((uint8_t*)pSrcAlign, 16 * 64 + 1);
WelsCopy8x8_c (pDstAlign[0], 32, pSrcAlign, 64);
sFuncPtrList.pfCopy8x8Aligned (pDstAlign[1], 32, pSrcAlign, 64);
for (int32_t i = 0; i < 16 * 32 + 1; i++) {
ASSERT_EQ (pDstAlign[0][i], pDstAlign[1][i]);
}
}
}
TEST (MBCopyFunTest, pfCopy8x16Aligned) {
ENFORCE_STACK_ALIGN_1D (uint8_t, pSrcAlign, 16 * 64 + 1, 16)
ENFORCE_STACK_ALIGN_2D (uint8_t, pDstAlign, 2, 16 * 32 + 16, 16)
int32_t iCpuCores = 0;
SWelsFuncPtrList sFuncPtrList;
uint32_t m_uiCpuFeatureFlag = WelsCPUFeatureDetect (&iCpuCores);
WelsInitEncodingFuncs (&sFuncPtrList, m_uiCpuFeatureFlag);
for (int32_t k = 0; k < MBCOPYTEST_NUM; k++) {
memset (pDstAlign[0], 0, 16 * 32 + 1);
memset (pDstAlign[1], 0, 16 * 32 + 1);
FillWithRandomData ((uint8_t*)pSrcAlign, 16 * 64 + 1);
WelsCopy8x16_c (pDstAlign[0], 32, pSrcAlign, 64);
sFuncPtrList.pfCopy8x16Aligned (pDstAlign[1], 32, pSrcAlign, 64);
for (int32_t i = 0; i < 16 * 32 + 1; i++) {
ASSERT_EQ (pDstAlign[0][i], pDstAlign[1][i]);
}
}
}
TEST (MBCopyFunTest, pfCopy16x16Aligned) {
ENFORCE_STACK_ALIGN_1D (uint8_t, pSrcAlign, 16 * 64 + 1, 16)
ENFORCE_STACK_ALIGN_2D (uint8_t, pDstAlign, 2, 16 * 32 + 16, 16)
int32_t iCpuCores = 0;
SWelsFuncPtrList sFuncPtrList;
uint32_t m_uiCpuFeatureFlag = WelsCPUFeatureDetect (&iCpuCores);
WelsInitEncodingFuncs (&sFuncPtrList, m_uiCpuFeatureFlag);
for (int32_t k = 0; k < MBCOPYTEST_NUM; k++) {
memset (pDstAlign[0], 0, 16 * 32 + 1);
memset (pDstAlign[1], 0, 16 * 32 + 1);
FillWithRandomData ((uint8_t*)pSrcAlign, 16 * 64 + 1);
WelsCopy16x16_c (pDstAlign[0], 32, pSrcAlign, 64);
sFuncPtrList.pfCopy16x16Aligned (pDstAlign[1], 32, pSrcAlign, 64);
for (int32_t i = 0; i < 16 * 32 + 1; i++) {
ASSERT_EQ (pDstAlign[0][i], pDstAlign[1][i]);
}
}
}
TEST (MBCopyFunTest, pfCopy16x8NotAligned) {
ENFORCE_STACK_ALIGN_1D (uint8_t, pSrcAlign, 16 * 64 + 1, 16)
ENFORCE_STACK_ALIGN_2D (uint8_t, pDstAlign, 2, 16 * 32 + 16, 16)
int32_t iCpuCores = 0;
SWelsFuncPtrList sFuncPtrList;
uint32_t m_uiCpuFeatureFlag = WelsCPUFeatureDetect (&iCpuCores);
WelsInitEncodingFuncs (&sFuncPtrList, m_uiCpuFeatureFlag);
for (int32_t k = 0; k < MBCOPYTEST_NUM; k++) {
memset (pDstAlign[0], 0, 16 * 32 + 1);
memset (pDstAlign[1], 0, 16 * 32 + 1);
FillWithRandomData ((uint8_t*)pSrcAlign, 16 * 64 + 1);
WelsCopy16x8_c (pDstAlign[0], 32, pSrcAlign + 1, 64);
sFuncPtrList.pfCopy16x8NotAligned (pDstAlign[1], 32, pSrcAlign + 1, 64);
for (int32_t i = 0; i < 16 * 32 + 1; i++) {
ASSERT_EQ (pDstAlign[0][i], pDstAlign[1][i]);
}
}
}
TEST (MBCopyFunTest, pfCopy16x16NotAligned) {
ENFORCE_STACK_ALIGN_1D (uint8_t, pSrcAlign, 16 * 64 + 1, 16)
ENFORCE_STACK_ALIGN_2D (uint8_t, pDstAlign, 2, 16 * 32 + 16, 16)
int32_t iCpuCores = 0;
SWelsFuncPtrList sFuncPtrList;
uint32_t m_uiCpuFeatureFlag = WelsCPUFeatureDetect (&iCpuCores);
WelsInitEncodingFuncs (&sFuncPtrList, m_uiCpuFeatureFlag);
for (int32_t k = 0; k < MBCOPYTEST_NUM; k++) {
memset (pDstAlign[0], 0, 16 * 32 + 1);
memset (pDstAlign[1], 0, 16 * 32 + 1);
FillWithRandomData ((uint8_t*)pSrcAlign, 16 * 64 + 1);
WelsCopy16x16_c (pDstAlign[0], 32, pSrcAlign + 1, 64);
sFuncPtrList.pfCopy16x16NotAligned (pDstAlign[1], 32, pSrcAlign + 1, 64);
for (int32_t i = 0; i < 16 * 32 + 1; i++) {
ASSERT_EQ (pDstAlign[0][i], pDstAlign[1][i]);
}
}
}