openh264/test/encoder/EncUT_ExpandPic.cpp

151 lines
4.3 KiB
C++
Raw Normal View History

2014-03-28 10:36:14 +08:00
#include<gtest/gtest.h>
#include<stdlib.h>
#include "wels_func_ptr_def.h"
#include "expand_pic.h"
using namespace WelsSVCEnc;
2014-05-30 11:05:31 +08:00
TEST (ExpandPicTest, TestExpandPictureLuma_c) {
2014-03-28 10:36:14 +08:00
SWelsFuncPtrList sFuncList;
2014-05-30 11:05:31 +08:00
InitExpandPictureFunc (& (sFuncList.sExpandPicFunc), 0);
2014-03-28 10:36:14 +08:00
2014-05-30 11:05:31 +08:00
int32_t iPicW = rand() % 256 + 1;
int32_t iPicH = rand() % 256 + 1;
int32_t iStride = iPicW + rand() % 16 + 1 + PADDING_LENGTH * 2;
2014-03-28 10:36:14 +08:00
const int32_t kiPaddingLen = PADDING_LENGTH;
2014-05-30 11:05:31 +08:00
const int32_t kiMemSize = (iStride + kiPaddingLen * 2) * (iPicH + kiPaddingLen * 2);
2014-03-28 10:36:14 +08:00
2014-05-30 11:05:31 +08:00
uint8_t* pRef = new uint8_t[kiMemSize];
2014-03-28 10:36:14 +08:00
2014-05-30 11:05:31 +08:00
for (int i = 0; i < kiMemSize; i++)
pRef[i] = rand() % 256 + 1;
2014-03-28 10:36:14 +08:00
2014-05-30 11:05:31 +08:00
uint8_t* pDst = pRef + kiPaddingLen * iStride + kiPaddingLen;
2014-03-28 10:36:14 +08:00
2014-05-30 11:05:31 +08:00
sFuncList.sExpandPicFunc.pfExpandLumaPicture (pDst, iStride, iPicW, iPicH);
2014-03-28 10:36:14 +08:00
int k = 0;
//top and top corner
2014-05-30 11:05:31 +08:00
for (int i = 0; i < kiPaddingLen; i++) {
for (int j = 0; j < iPicW + 2 * kiPaddingLen; j++) {
2014-03-28 10:36:14 +08:00
if (j < kiPaddingLen) {
2014-05-30 11:05:31 +08:00
EXPECT_EQ (pRef[k + j], pDst[0]);
} else if (j >= iPicW + kiPaddingLen) {
EXPECT_EQ (pRef[k + j], pDst[iPicW - 1]);
2014-03-28 10:36:14 +08:00
} else
2014-05-30 11:05:31 +08:00
EXPECT_EQ (pRef[k + j], pDst[j - kiPaddingLen]);
2014-03-28 10:36:14 +08:00
}
k += iStride;
}
k = (iPicH + kiPaddingLen - 1) * iStride;
//bottom and bottom corner
2014-05-30 11:05:31 +08:00
for (int i = iPicH + kiPaddingLen; i < iPicH + 2 * kiPaddingLen; i++) {
for (int j = 0; j < iPicW + 2 * kiPaddingLen; j++) {
2014-03-28 10:36:14 +08:00
if (j < kiPaddingLen) {
2014-05-30 11:05:31 +08:00
EXPECT_EQ (pRef[k + j], pDst[ (iPicH - 1) * iStride]);
} else if (j >= iPicW + kiPaddingLen) {
EXPECT_EQ (pRef[k + j], pDst[ (iPicH - 1) * iStride + iPicW - 1]);
2014-03-28 10:36:14 +08:00
} else
2014-05-30 11:05:31 +08:00
EXPECT_EQ (pRef[k + j], pDst[ (iPicH - 1) * iStride + j - kiPaddingLen]);
2014-03-28 10:36:14 +08:00
}
k += iStride;
}
k = kiPaddingLen * iStride;
int l = 0;
2014-05-30 11:05:31 +08:00
for (int i = 0; i < iPicH - 1; i++) { //left
for (int j = 0; j < kiPaddingLen; j++) {
EXPECT_EQ (pRef[k + j], pDst[l]);
2014-03-28 10:36:14 +08:00
}
k += iStride;
l += iStride;
}
k = kiPaddingLen * iStride;
l = 0;
2014-05-30 11:05:31 +08:00
for (int i = 0; i < iPicH - 1; i++) { //right
for (int j = iPicW + kiPaddingLen; j < iPicW + 2 * kiPaddingLen; j++) {
EXPECT_EQ (pRef[k + j], pDst[l + iPicW - 1]);
2014-03-28 10:36:14 +08:00
}
k += iStride;
l += iStride;
}
delete []pRef;
}
2014-05-30 11:05:31 +08:00
TEST (ExpandPicTest, TestExpandPictureChroma_c) {
2014-03-28 10:36:14 +08:00
SWelsFuncPtrList sFuncList;
2014-05-30 11:05:31 +08:00
InitExpandPictureFunc (& (sFuncList.sExpandPicFunc), 0);
2014-03-28 10:36:14 +08:00
2014-05-30 11:05:31 +08:00
int32_t iPicW = rand() % 256 + 1;
int32_t iPicH = rand() % 256 + 1;
2014-03-28 10:36:14 +08:00
2014-05-30 11:05:31 +08:00
const int32_t kiPaddingLen = (PADDING_LENGTH >> 1);
int32_t iStride = iPicW + rand() % 16 + 1 + kiPaddingLen * 2;
2014-03-28 10:36:14 +08:00
2014-05-30 11:05:31 +08:00
const int32_t kiMemSize = (iStride + kiPaddingLen * 2) * (iPicH + kiPaddingLen * 2);
2014-03-28 10:36:14 +08:00
2014-05-30 11:05:31 +08:00
uint8_t* pRef = new uint8_t[kiMemSize];
2014-03-28 10:36:14 +08:00
2014-05-30 11:05:31 +08:00
for (int i = 0; i < kiMemSize; i++)
pRef[i] = rand() % 256 + 1;
2014-03-28 10:36:14 +08:00
2014-05-30 11:05:31 +08:00
uint8_t* pDst = pRef + kiPaddingLen * iStride + kiPaddingLen;
2014-03-28 10:36:14 +08:00
2014-05-30 11:05:31 +08:00
sFuncList.sExpandPicFunc.pfExpandChromaPicture[0] (pDst, iStride, iPicW, iPicH);
2014-03-28 10:36:14 +08:00
int k = 0;
//top and top corner
2014-05-30 11:05:31 +08:00
for (int i = 0; i < kiPaddingLen; i++) {
for (int j = 0; j < iPicW + 2 * kiPaddingLen; j++) {
2014-03-28 10:36:14 +08:00
if (j < kiPaddingLen) {
2014-05-30 11:05:31 +08:00
EXPECT_EQ (pRef[k + j], pDst[0]);
} else if (j >= iPicW + kiPaddingLen) {
EXPECT_EQ (pRef[k + j], pDst[iPicW - 1]);
2014-03-28 10:36:14 +08:00
} else
2014-05-30 11:05:31 +08:00
EXPECT_EQ (pRef[k + j], pDst[j - kiPaddingLen]);
2014-03-28 10:36:14 +08:00
}
k += iStride;
}
k = (iPicH + kiPaddingLen - 1) * iStride;
//bottom and bottom corner
2014-05-30 11:05:31 +08:00
for (int i = iPicH + kiPaddingLen; i < iPicH + 2 * kiPaddingLen; i++) {
for (int j = 0; j < iPicW + 2 * kiPaddingLen; j++) {
2014-03-28 10:36:14 +08:00
if (j < kiPaddingLen) {
2014-05-30 11:05:31 +08:00
EXPECT_EQ (pRef[k + j], pDst[ (iPicH - 1) * iStride]);
} else if (j >= iPicW + kiPaddingLen) {
EXPECT_EQ (pRef[k + j], pDst[ (iPicH - 1) * iStride + iPicW - 1]);
2014-03-28 10:36:14 +08:00
} else
2014-05-30 11:05:31 +08:00
EXPECT_EQ (pRef[k + j], pDst[ (iPicH - 1) * iStride + j - kiPaddingLen]);
2014-03-28 10:36:14 +08:00
}
k += iStride;
}
k = kiPaddingLen * iStride;
2014-05-30 11:05:31 +08:00
int l = 0;
for (int i = 0; i < iPicH - 1; i++) { //left
for (int j = 0; j < kiPaddingLen; j++) {
EXPECT_EQ (pRef[k + j], pDst[l]);
2014-03-28 10:36:14 +08:00
}
k += iStride;
l += iStride;
}
k = kiPaddingLen * iStride;
l = 0;
2014-05-30 11:05:31 +08:00
for (int i = 0; i < iPicH - 1; i++) { //right
for (int j = iPicW + kiPaddingLen; j < iPicW + 2 * kiPaddingLen; j++) {
EXPECT_EQ (pRef[k + j], pDst[l + iPicW - 1]);
2014-03-28 10:36:14 +08:00
}
k += iStride;
l += iStride;
}
delete []pRef;
}