add encoder interface UT for IDR request
This commit is contained in:
parent
3ef97dc0c9
commit
44faa1c9a7
118
test/encoder/EncUT_EncoderExt.cpp
Normal file
118
test/encoder/EncUT_EncoderExt.cpp
Normal file
@ -0,0 +1,118 @@
|
||||
#include<gtest/gtest.h>
|
||||
#include<stdlib.h>
|
||||
#include "codec_api.h"
|
||||
#include "welsEncoderExt.h"
|
||||
|
||||
using namespace WelsSVCEnc;
|
||||
|
||||
class EncoderInterfaceTest : public ::testing::Test {
|
||||
public:
|
||||
virtual void SetUp() {
|
||||
pPtrEnc = new CWelsH264SVCEncoder();
|
||||
pParamExt = new SEncParamExt();
|
||||
pSrcPic = new SSourcePicture;
|
||||
pOption = new SEncParamExt();
|
||||
pYUV = NULL;
|
||||
|
||||
m_iWidth = 1280;
|
||||
m_iHeight = 720;
|
||||
m_iPicResSize = m_iWidth * m_iHeight * 3 >> 1;
|
||||
pYUV = new uint8_t [m_iPicResSize];
|
||||
}
|
||||
void TemporalLayerSettingTest();
|
||||
virtual void TearDown() {
|
||||
delete pPtrEnc;
|
||||
delete pParamExt;
|
||||
delete pOption;
|
||||
delete pSrcPic;
|
||||
delete []pYUV;
|
||||
}
|
||||
public:
|
||||
CWelsH264SVCEncoder* pPtrEnc;
|
||||
SEncParamExt* pParamExt;
|
||||
SSourcePicture* pSrcPic;
|
||||
SEncParamExt* pOption;
|
||||
uint8_t* pYUV;
|
||||
|
||||
int32_t m_iWidth;
|
||||
int32_t m_iHeight;
|
||||
int32_t m_iPicResSize;
|
||||
};
|
||||
|
||||
void EncoderInterfaceTest::TemporalLayerSettingTest() {
|
||||
|
||||
pParamExt->iInputCsp = 23;
|
||||
pParamExt->iPicWidth = m_iWidth;
|
||||
pParamExt->iPicHeight = m_iHeight;
|
||||
pParamExt->iTargetBitrate = 60000;
|
||||
pParamExt->sSpatialLayers[0].iVideoHeight = pParamExt->iPicHeight;
|
||||
pParamExt->sSpatialLayers[0].iVideoWidth = pParamExt->iPicWidth;
|
||||
pParamExt->sSpatialLayers[0].iSpatialBitrate = 50000;
|
||||
pParamExt->iTemporalLayerNum = 1;
|
||||
pParamExt->iSpatialLayerNum = 1;
|
||||
|
||||
int32_t iResult = pPtrEnc->InitializeExt (pParamExt);
|
||||
EXPECT_EQ (iResult, static_cast<int32_t> (cmResultSuccess));
|
||||
|
||||
pSrcPic->iColorFormat = videoFormatI420;
|
||||
pSrcPic->uiTimeStamp = 0;
|
||||
pSrcPic->iPicWidth = pParamExt->iPicWidth;
|
||||
pSrcPic->iPicHeight = pParamExt->iPicHeight;
|
||||
|
||||
for (int32_t i = 0; i < m_iPicResSize; i++)
|
||||
pYUV[i] = rand() % 256;
|
||||
|
||||
pSrcPic->iStride[0] = m_iWidth;
|
||||
pSrcPic->iStride[1] = pSrcPic->iStride[2] = pSrcPic->iStride[0] >> 1;
|
||||
|
||||
pSrcPic->pData[0] = pYUV;
|
||||
pSrcPic->pData[1] = pSrcPic->pData[0] + (m_iWidth * m_iHeight);
|
||||
pSrcPic->pData[2] = pSrcPic->pData[1] + (m_iWidth * m_iHeight >> 2);
|
||||
|
||||
SFrameBSInfo sFbi;
|
||||
memset (&sFbi, 0, sizeof (SFrameBSInfo));
|
||||
|
||||
iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi);
|
||||
EXPECT_EQ (iResult, static_cast<int32_t> (cmResultSuccess));
|
||||
EXPECT_EQ (sFbi.eFrameType, static_cast<int32_t> (videoFrameTypeIDR));
|
||||
|
||||
pSrcPic->uiTimeStamp = 30;
|
||||
iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi);
|
||||
EXPECT_EQ (iResult, static_cast<int32_t> (cmResultSuccess));
|
||||
EXPECT_EQ (sFbi.eFrameType, static_cast<int32_t> (videoFrameTypeP));
|
||||
|
||||
memcpy (pOption, pParamExt, sizeof (SEncParamExt));
|
||||
pOption ->iTemporalLayerNum = 4;
|
||||
|
||||
ENCODER_OPTION eOptionId = ENCODER_OPTION_SVC_ENCODE_PARAM_EXT;
|
||||
iResult = pPtrEnc->SetOption (eOptionId, pOption);
|
||||
EXPECT_EQ (iResult, static_cast<int32_t> (cmResultSuccess));
|
||||
|
||||
pSrcPic->uiTimeStamp = 60;
|
||||
iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi);
|
||||
EXPECT_EQ (iResult, static_cast<int32_t> (cmResultSuccess));
|
||||
EXPECT_EQ (sFbi.eFrameType, static_cast<int32_t> (videoFrameTypeIDR));
|
||||
|
||||
pOption ->iTemporalLayerNum = 2;
|
||||
iResult = pPtrEnc->SetOption (eOptionId, pOption);
|
||||
EXPECT_EQ (iResult, static_cast<int32_t> (cmResultSuccess));
|
||||
pSrcPic->uiTimeStamp = 90;
|
||||
iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi);
|
||||
EXPECT_EQ (iResult, static_cast<int32_t> (cmResultSuccess));
|
||||
EXPECT_EQ (sFbi.eFrameType, static_cast<int32_t> (videoFrameTypeP));
|
||||
|
||||
pOption ->iTemporalLayerNum = 4;
|
||||
iResult = pPtrEnc->SetOption (eOptionId, pOption);
|
||||
EXPECT_EQ (iResult, static_cast<int32_t> (cmResultSuccess));
|
||||
pSrcPic->uiTimeStamp = 120;
|
||||
iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi);
|
||||
EXPECT_EQ (iResult, static_cast<int32_t> (cmResultSuccess));
|
||||
EXPECT_EQ (sFbi.eFrameType, static_cast<int32_t> (videoFrameTypeP));
|
||||
|
||||
pPtrEnc->Uninitialize();
|
||||
|
||||
}
|
||||
|
||||
TEST_F (EncoderInterfaceTest, TestTemporalLayerSetting) {
|
||||
TemporalLayerSettingTest();
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
ENCODER_UNITTEST_SRCDIR=test/encoder
|
||||
ENCODER_UNITTEST_CPP_SRCS=\
|
||||
$(ENCODER_UNITTEST_SRCDIR)/EncUT_DecodeMbAux.cpp\
|
||||
$(ENCODER_UNITTEST_SRCDIR)/EncUT_EncoderExt.cpp\
|
||||
$(ENCODER_UNITTEST_SRCDIR)/EncUT_EncoderMb.cpp\
|
||||
$(ENCODER_UNITTEST_SRCDIR)/EncUT_EncoderMbAux.cpp\
|
||||
$(ENCODER_UNITTEST_SRCDIR)/EncUT_ExpGolomb.cpp\
|
||||
|
Loading…
x
Reference in New Issue
Block a user