1276 lines · 46.5 KB · C++
RawDownload
#include <gtest/gtest.h>#include "codec_def.h"#include "utils/BufferedData.h"#include "utils/FileInputStream.h"#include "BaseDecoderTest.h"#include "BaseEncoderTest.h"#include "wels_common_defs.h"#include "utils/HashFunctions.h"#include <string>#include <vector>#include "encode_decode_api_test.h"using namespace WelsCommon; static void TestOutPutTrace (void* ctx, int level, const char* string) {  STraceUnit* pTraceUnit = (STraceUnit*) ctx;  EXPECT_LE (level, pTraceUnit->iTarLevel);} TEST_P (EncodeDecodeTestAPI, DecoderVclNal) {  EncodeDecodeFileParamBase p = GetParam();  prepareParamDefault (1, p.slicenum, p.width, p.height, p.frameRate, &param_);  encoder_->Uninitialize();  int rv = encoder_->InitializeExt (&param_);  ASSERT_TRUE (rv == cmResultSuccess);   int32_t iTraceLevel = WELS_LOG_QUIET;  encoder_->SetOption (ENCODER_OPTION_TRACE_LEVEL, &iTraceLevel);  decoder_->SetOption (DECODER_OPTION_TRACE_LEVEL, &iTraceLevel);   ASSERT_TRUE (InitialEncDec (p.width, p.height));   int iIdx = 0;  while (iIdx <= p.numframes) {     EncodeOneFrame (0);     //decoding after each encoding frame    int vclNal, len = 0;    encToDecData (info, len);    unsigned char* pData[3] = { NULL };    memset (&dstBufInfo_, 0, sizeof (SBufferInfo));    rv = decoder_->DecodeFrame2 (info.sLayerInfo[0].pBsBuf, len, pData, &dstBufInfo_);    ASSERT_TRUE (rv == cmResultSuccess);    rv = decoder_->GetOption (DECODER_OPTION_VCL_NAL, &vclNal);    EXPECT_EQ (vclNal, FEEDBACK_UNKNOWN_NAL); //no reconstruction, unknown return    rv = decoder_->DecodeFrame2 (NULL, 0, pData, &dstBufInfo_); //reconstruction    ASSERT_TRUE (rv == cmResultSuccess);    rv = decoder_->GetOption (DECODER_OPTION_VCL_NAL, &vclNal);    EXPECT_EQ (vclNal, FEEDBACK_VCL_NAL);    iIdx++;  } //while  //ignore last frame} TEST_P (EncodeDecodeTestAPI, GetOptionFramenum) {  EncodeDecodeFileParamBase p = GetParam();  prepareParamDefault (1, p.slicenum,  p.width, p.height, p.frameRate, &param_);  encoder_->Uninitialize();  int rv = encoder_->InitializeExt (&param_);  ASSERT_TRUE (rv == cmResultSuccess);   int32_t iTraceLevel = WELS_LOG_QUIET;  encoder_->SetOption (ENCODER_OPTION_TRACE_LEVEL, &iTraceLevel);  decoder_->SetOption (DECODER_OPTION_TRACE_LEVEL, &iTraceLevel);   ASSERT_TRUE (InitialEncDec (p.width, p.height));   int32_t iEncFrameNum = -1;  int32_t iDecFrameNum;  int iIdx = 0;  while (iIdx <= p.numframes) {    EncodeOneFrame (0);    //decoding after each encoding frame    int len = 0;    encToDecData (info, len);    unsigned char* pData[3] = { NULL };    memset (&dstBufInfo_, 0, sizeof (SBufferInfo));    rv = decoder_->DecodeFrame2 (info.sLayerInfo[0].pBsBuf, len, pData, &dstBufInfo_);    ASSERT_TRUE (rv == cmResultSuccess);    decoder_->GetOption (DECODER_OPTION_FRAME_NUM, &iDecFrameNum);    EXPECT_EQ (iDecFrameNum, -1);    iEncFrameNum++;    rv = decoder_->DecodeFrame2 (NULL, 0, pData, &dstBufInfo_); //reconstruction    ASSERT_TRUE (rv == cmResultSuccess);    decoder_->GetOption (DECODER_OPTION_FRAME_NUM, &iDecFrameNum);    EXPECT_EQ (iEncFrameNum, iDecFrameNum);    iIdx++;  } //while  //ignore last frame} TEST_P (EncodeDecodeTestAPI, GetOptionIDR) {  EncodeDecodeFileParamBase p = GetParam();  prepareParamDefault (1, p.slicenum,  p.width, p.height, p.frameRate, &param_);  encoder_->Uninitialize();  int rv = encoder_->InitializeExt (&param_);  ASSERT_TRUE (rv == cmResultSuccess);   //init for encoder  // I420: 1(Y) + 1/4(U) + 1/4(V)  int32_t iTraceLevel = WELS_LOG_QUIET;  encoder_->SetOption (ENCODER_OPTION_TRACE_LEVEL, &iTraceLevel);  decoder_->SetOption (DECODER_OPTION_TRACE_LEVEL, &iTraceLevel);   ASSERT_TRUE (InitialEncDec (p.width, p.height));   int32_t iEncCurIdrPicId = 0;  int32_t iDecCurIdrPicId;  int32_t iIDRPeriod = 1;  int32_t iSpsPpsIdAddition = 0;  int iIdx = 0;  while (iIdx <= p.numframes) {    iSpsPpsIdAddition = rand() %                        2; //the current strategy supports more than 2 modes, but the switch between the modes>2 is not allowed    iIDRPeriod = (rand() % 150) + 1;    encoder_->SetOption (ENCODER_OPTION_IDR_INTERVAL, &iIDRPeriod);    encoder_->SetOption (ENCODER_OPTION_SPS_PPS_ID_STRATEGY, &iSpsPpsIdAddition);     EncodeOneFrame (0);     if (info.eFrameType == videoFrameTypeIDR) {      iEncCurIdrPicId = iEncCurIdrPicId + 1;    }    //decoding after each encoding frame    int len = 0;    encToDecData (info, len);    unsigned char* pData[3] = { NULL };    memset (&dstBufInfo_, 0, sizeof (SBufferInfo));    rv = decoder_->DecodeFrame2 (info.sLayerInfo[0].pBsBuf, len, pData, &dstBufInfo_);    ASSERT_TRUE (rv == cmResultSuccess);    decoder_->GetOption (DECODER_OPTION_IDR_PIC_ID, &iDecCurIdrPicId);    EXPECT_EQ (iDecCurIdrPicId, iEncCurIdrPicId);    rv = decoder_->DecodeFrame2 (NULL, 0, pData, &dstBufInfo_); //reconstruction    ASSERT_TRUE (rv == cmResultSuccess);    decoder_->GetOption (DECODER_OPTION_IDR_PIC_ID, &iDecCurIdrPicId);    EXPECT_EQ (iDecCurIdrPicId, iEncCurIdrPicId);    iIdx++;  } //while  //ignore last frame} TEST_P (EncodeDecodeTestAPI, InOutTimeStamp) {  EncodeDecodeFileParamBase p = GetParam();  prepareParamDefault (1, p.slicenum,  p.width, p.height, p.frameRate, &param_);  encoder_->Uninitialize();  int rv = encoder_->InitializeExt (&param_);  ASSERT_TRUE (rv == cmResultSuccess);   ASSERT_TRUE (InitialEncDec (p.width, p.height));  int32_t iTraceLevel = WELS_LOG_QUIET;  encoder_->SetOption (ENCODER_OPTION_TRACE_LEVEL, &iTraceLevel);  decoder_->SetOption (DECODER_OPTION_TRACE_LEVEL, &iTraceLevel);  int32_t iSpsPpsIdAddition = 1;  encoder_->SetOption (ENCODER_OPTION_SPS_PPS_ID_STRATEGY, &iSpsPpsIdAddition);  int32_t iIDRPeriod = 60;  encoder_->SetOption (ENCODER_OPTION_IDR_INTERVAL, &iIDRPeriod);  SLTRConfig sLtrConfigVal;  sLtrConfigVal.bEnableLongTermReference = 1;  sLtrConfigVal.iLTRRefNum = 1;  encoder_->SetOption (ENCODER_OPTION_LTR, &sLtrConfigVal);  int32_t iLtrPeriod = 2;  encoder_->SetOption (ENCODER_LTR_MARKING_PERIOD, &iLtrPeriod);  int iIdx = 0;  int iSkipedBytes;  unsigned long long uiEncTimeStamp = 100;  while (iIdx <= p.numframes) {    EncodeOneFrame (1);    //decoding after each encoding frame    int len = 0;    encToDecData (info, len);    unsigned char* pData[3] = { NULL };    memset (&dstBufInfo_, 0, sizeof (SBufferInfo));    uint32_t uiEcIdc = ERROR_CON_SLICE_COPY_CROSS_IDR_FREEZE_RES_CHANGE;    decoder_->SetOption (DECODER_OPTION_ERROR_CON_IDC, &uiEcIdc);    dstBufInfo_.uiInBsTimeStamp = uiEncTimeStamp;    rv = decoder_->DecodeFrame2 (info.sLayerInfo[0].pBsBuf, len, pData, &dstBufInfo_);    memset (&dstBufInfo_, 0, sizeof (SBufferInfo));    dstBufInfo_.uiInBsTimeStamp = uiEncTimeStamp;    rv = decoder_->DecodeFrame2 (NULL, 0, pData, &dstBufInfo_); //reconstruction    if (dstBufInfo_.iBufferStatus == 1) {      EXPECT_EQ (uiEncTimeStamp, dstBufInfo_.uiOutYuvTimeStamp);    }    iIdx++;    uiEncTimeStamp++;  }  (void) iSkipedBytes;} TEST_P (EncodeDecodeTestAPI, GetOptionIsRefPic) {  EncodeDecodeFileParamBase p = GetParam();  prepareParamDefault (1, p.slicenum, p.width, p.height, p.frameRate, &param_);  encoder_->Uninitialize();  int rv = encoder_->InitializeExt (&param_);  ASSERT_TRUE (rv == cmResultSuccess);   ASSERT_TRUE (InitialEncDec (p.width, p.height));  int32_t iTraceLevel = WELS_LOG_QUIET;  encoder_->SetOption (ENCODER_OPTION_TRACE_LEVEL, &iTraceLevel);  decoder_->SetOption (DECODER_OPTION_TRACE_LEVEL, &iTraceLevel);  int iIdx = 0;  int iSkipedBytes;  int iIsRefPic;  decoder_->GetOption (DECODER_OPTION_IS_REF_PIC, &iIsRefPic);  ASSERT_EQ (iIsRefPic, -1);   while (iIdx <= p.numframes) {    EncodeOneFrame (1);    //decoding after each encoding frame    int len = 0;    encToDecData (info, len);    unsigned char* pData[3] = { NULL };    memset (&dstBufInfo_, 0, sizeof (SBufferInfo));    rv = decoder_->DecodeFrame2 (info.sLayerInfo[0].pBsBuf, len, pData, &dstBufInfo_);    memset (&dstBufInfo_, 0, sizeof (SBufferInfo));    decoder_->GetOption (DECODER_OPTION_IS_REF_PIC, &iIsRefPic);    ASSERT_EQ (iIsRefPic, -1);    rv = decoder_->DecodeFrame2 (NULL, 0, pData, &dstBufInfo_); //reconstruction    if (dstBufInfo_.iBufferStatus == 1) {      decoder_->GetOption (DECODER_OPTION_IS_REF_PIC, &iIsRefPic);      ASSERT_TRUE (iIsRefPic >= 0);    }    iIdx++;  }  (void)iSkipedBytes;} TEST_P (EncodeDecodeTestAPI, GetOptionTid_AVC_NOPREFIX) {  SLTRMarkingFeedback m_LTR_Marking_Feedback;  SLTRRecoverRequest m_LTR_Recover_Request;  m_LTR_Recover_Request.uiIDRPicId = 0;  m_LTR_Recover_Request.iLayerId = 0;  m_LTR_Marking_Feedback.iLayerId = 0;  EncodeDecodeFileParamBase p = GetParam();  prepareParamDefault (1, p.slicenum,  p.width, p.height, p.frameRate, &param_);  param_.bPrefixNalAddingCtrl = false;  param_.iTemporalLayerNum = (rand() % 4) + 1;  encoder_->Uninitialize();  int rv = encoder_->InitializeExt (&param_);  ASSERT_TRUE (rv == cmResultSuccess);  m_LTR_Recover_Request.uiFeedbackType = NO_RECOVERY_REQUSET;  ASSERT_TRUE (InitialEncDec (p.width, p.height));  int32_t iTraceLevel = WELS_LOG_QUIET;  encoder_->SetOption (ENCODER_OPTION_TRACE_LEVEL, &iTraceLevel);  decoder_->SetOption (DECODER_OPTION_TRACE_LEVEL, &iTraceLevel);  int32_t iSpsPpsIdAddition = 1;  encoder_->SetOption (ENCODER_OPTION_SPS_PPS_ID_STRATEGY, &iSpsPpsIdAddition);  int32_t iIDRPeriod = 60;  encoder_->SetOption (ENCODER_OPTION_IDR_INTERVAL, &iIDRPeriod);  SLTRConfig sLtrConfigVal;  sLtrConfigVal.bEnableLongTermReference = 1;  sLtrConfigVal.iLTRRefNum = 1;  encoder_->SetOption (ENCODER_OPTION_LTR, &sLtrConfigVal);  int32_t iLtrPeriod = 2;  encoder_->SetOption (ENCODER_LTR_MARKING_PERIOD, &iLtrPeriod);  int iIdx = 0;  int iLossIdx = 0;  bool bVCLLoss = false;  while (iIdx <= p.numframes) {    EncodeOneFrame (1);    if (m_LTR_Recover_Request.uiFeedbackType == IDR_RECOVERY_REQUEST) {      ASSERT_TRUE (info.eFrameType == videoFrameTypeIDR);    }    //decoding after each encoding frame    int len = 0;    encToDecData (info, len);    unsigned char* pData[3] = { NULL };    memset (&dstBufInfo_, 0, sizeof (SBufferInfo));    SimulateNALLoss (info.sLayerInfo[0].pBsBuf, len, &m_SLostSim, p.pLossSequence, p.bLostPara, iLossIdx, bVCLLoss);    rv = decoder_->DecodeFrame2 (info.sLayerInfo[0].pBsBuf, len, pData, &dstBufInfo_);    int iTid = -1;    decoder_->GetOption (DECODER_OPTION_TEMPORAL_ID, &iTid);    if (iTid != -1) {      ASSERT_EQ (iTid, 0);    }    m_LTR_Recover_Request.uiFeedbackType = NO_RECOVERY_REQUSET;    LTRRecoveryRequest (decoder_, encoder_, &m_LTR_Recover_Request, rv, true);    rv = decoder_->DecodeFrame2 (NULL, 0, pData, &dstBufInfo_); //reconstruction    decoder_->GetOption (DECODER_OPTION_TEMPORAL_ID, &iTid);    std::vector<SLostSim>::iterator iter = m_SLostSim.begin();    bool bHasVCL = false;    for (unsigned int k = 0; k < m_SLostSim.size(); k++) {      if (IS_VCL_NAL (iter->eNalType, 0) && iter->isLost == false) {        bHasVCL = true;        break;      }      iter++;    }    (void) bHasVCL;    if (iTid != -1) {      ASSERT_EQ (iTid, 0);    }    LTRRecoveryRequest (decoder_, encoder_, &m_LTR_Recover_Request, rv, true);    LTRMarkFeedback (decoder_, encoder_, &m_LTR_Marking_Feedback, rv);    iIdx++;  }} TEST_P (EncodeDecodeTestAPI, GetOptionTid_AVC_WITH_PREFIX_NOLOSS) {  SLTRMarkingFeedback m_LTR_Marking_Feedback;  SLTRRecoverRequest m_LTR_Recover_Request;  m_LTR_Recover_Request.uiIDRPicId = 0;  m_LTR_Recover_Request.iLayerId = 0;  m_LTR_Marking_Feedback.iLayerId = 0;  EncodeDecodeFileParamBase p = GetParam();  prepareParamDefault (1, p.slicenum,  p.width, p.height, p.frameRate, &param_);  param_.bPrefixNalAddingCtrl = true;  param_.iTemporalLayerNum = (rand() % 4) + 1;  param_.iSpatialLayerNum = 1;  encoder_->Uninitialize();  int rv = encoder_->InitializeExt (&param_);  ASSERT_TRUE (rv == cmResultSuccess);  m_LTR_Recover_Request.uiFeedbackType = NO_RECOVERY_REQUSET;   ASSERT_TRUE (InitialEncDec (p.width, p.height));  int32_t iTraceLevel = WELS_LOG_QUIET;  encoder_->SetOption (ENCODER_OPTION_TRACE_LEVEL, &iTraceLevel);  decoder_->SetOption (DECODER_OPTION_TRACE_LEVEL, &iTraceLevel);  int32_t iSpsPpsIdAddition = 1;  encoder_->SetOption (ENCODER_OPTION_SPS_PPS_ID_STRATEGY, &iSpsPpsIdAddition);  int32_t iIDRPeriod = 60;  encoder_->SetOption (ENCODER_OPTION_IDR_INTERVAL, &iIDRPeriod);  SLTRConfig sLtrConfigVal;  sLtrConfigVal.bEnableLongTermReference = 1;  sLtrConfigVal.iLTRRefNum = 1;  encoder_->SetOption (ENCODER_OPTION_LTR, &sLtrConfigVal);  int32_t iLtrPeriod = 2;  encoder_->SetOption (ENCODER_LTR_MARKING_PERIOD, &iLtrPeriod);  int iIdx = 0;  while (iIdx <= p.numframes) {    EncodeOneFrame (1);    if (m_LTR_Recover_Request.uiFeedbackType == IDR_RECOVERY_REQUEST) {      ASSERT_TRUE (info.eFrameType == videoFrameTypeIDR);    }    //decoding after each encoding frame    int len = 0;    encToDecData (info, len);    unsigned char* pData[3] = { NULL };    memset (&dstBufInfo_, 0, sizeof (SBufferInfo));    ExtractDidNal (&info, len, &m_SLostSim, 0);    rv = decoder_->DecodeFrame2 (info.sLayerInfo[0].pBsBuf, len, pData, &dstBufInfo_);    int iTid = -1;    decoder_->GetOption (DECODER_OPTION_TEMPORAL_ID, &iTid);    ASSERT_EQ (iTid, -1);    m_LTR_Recover_Request.uiFeedbackType = NO_RECOVERY_REQUSET;    LTRRecoveryRequest (decoder_, encoder_, &m_LTR_Recover_Request, rv, true);    rv = decoder_->DecodeFrame2 (NULL, 0, pData, &dstBufInfo_); //reconstruction    decoder_->GetOption (DECODER_OPTION_TEMPORAL_ID, &iTid);    ASSERT_EQ (iTid, info.sLayerInfo[0].uiTemporalId);    LTRRecoveryRequest (decoder_, encoder_, &m_LTR_Recover_Request, rv, true);    LTRMarkFeedback (decoder_, encoder_, &m_LTR_Marking_Feedback, rv);    iIdx++;  }} TEST_P (EncodeDecodeTestAPI, GetOptionTid_SVC_L1_NOLOSS) {  SLTRMarkingFeedback m_LTR_Marking_Feedback;  SLTRRecoverRequest m_LTR_Recover_Request;  m_LTR_Recover_Request.uiIDRPicId = 0;  m_LTR_Recover_Request.iLayerId = 0;  m_LTR_Marking_Feedback.iLayerId = 0;  EncodeDecodeFileParamBase p = GetParam();  prepareParamDefault (2, p.slicenum,  p.width, p.height, p.frameRate, &param_);  param_.iTemporalLayerNum = (rand() % 4) + 1;  param_.iSpatialLayerNum = 2;  encoder_->Uninitialize();  int rv = encoder_->InitializeExt (&param_);  ASSERT_TRUE (rv == cmResultSuccess);  m_LTR_Recover_Request.uiFeedbackType = NO_RECOVERY_REQUSET;   ASSERT_TRUE (InitialEncDec (p.width, p.height));  int32_t iTraceLevel = WELS_LOG_QUIET;  encoder_->SetOption (ENCODER_OPTION_TRACE_LEVEL, &iTraceLevel);  decoder_->SetOption (DECODER_OPTION_TRACE_LEVEL, &iTraceLevel);  int32_t iSpsPpsIdAddition = 1;  encoder_->SetOption (ENCODER_OPTION_SPS_PPS_ID_STRATEGY, &iSpsPpsIdAddition);  int32_t iIDRPeriod = 60;  encoder_->SetOption (ENCODER_OPTION_IDR_INTERVAL, &iIDRPeriod);  SLTRConfig sLtrConfigVal;  sLtrConfigVal.bEnableLongTermReference = 1;  sLtrConfigVal.iLTRRefNum = 1;  encoder_->SetOption (ENCODER_OPTION_LTR, &sLtrConfigVal);  int32_t iLtrPeriod = 2;  encoder_->SetOption (ENCODER_LTR_MARKING_PERIOD, &iLtrPeriod);  int iIdx = 0;  while (iIdx <= p.numframes) {    EncodeOneFrame (1);    if (m_LTR_Recover_Request.uiFeedbackType == IDR_RECOVERY_REQUEST) {      ASSERT_TRUE (info.eFrameType == videoFrameTypeIDR);    }    //decoding after each encoding frame    int len = 0;    encToDecData (info, len);    unsigned char* pData[3] = { NULL };    memset (&dstBufInfo_, 0, sizeof (SBufferInfo));    ExtractDidNal (&info, len, &m_SLostSim, 1);    rv = decoder_->DecodeFrame2 (info.sLayerInfo[0].pBsBuf, len, pData, &dstBufInfo_);    int iTid = -1;    decoder_->GetOption (DECODER_OPTION_TEMPORAL_ID, &iTid);    ASSERT_EQ (iTid, -1);    m_LTR_Recover_Request.uiFeedbackType = NO_RECOVERY_REQUSET;    LTRRecoveryRequest (decoder_, encoder_, &m_LTR_Recover_Request, rv, true);    rv = decoder_->DecodeFrame2 (NULL, 0, pData, &dstBufInfo_); //reconstruction    decoder_->GetOption (DECODER_OPTION_TEMPORAL_ID, &iTid);    ASSERT_EQ (iTid, info.sLayerInfo[0].uiTemporalId);    LTRRecoveryRequest (decoder_, encoder_, &m_LTR_Recover_Request, rv, true);    LTRMarkFeedback (decoder_, encoder_, &m_LTR_Marking_Feedback, rv);    iIdx++;  }}   TEST_P (EncodeDecodeTestAPI, SetOption_Trace) {  SLTRMarkingFeedback m_LTR_Marking_Feedback;  SLTRRecoverRequest m_LTR_Recover_Request;  m_LTR_Recover_Request.uiIDRPicId = 0;  m_LTR_Recover_Request.iLayerId = 0;  m_LTR_Marking_Feedback.iLayerId = 0;  EncodeDecodeFileParamBase p = GetParam();  prepareParamDefault (1, p.slicenum,  p.width, p.height, p.frameRate, &param_);  param_.iSpatialLayerNum = 1;   int rv = encoder_->InitializeExt (&param_);  ASSERT_TRUE (rv == cmResultSuccess);  m_LTR_Recover_Request.uiFeedbackType = NO_RECOVERY_REQUSET;   ASSERT_TRUE (InitialEncDec (p.width, p.height));  int32_t iTraceLevel = WELS_LOG_QUIET;  pFunc = TestOutPutTrace;  pTraceInfo = &sTrace;  sTrace.iTarLevel = iTraceLevel;  encoder_->SetOption (ENCODER_OPTION_TRACE_LEVEL, &iTraceLevel);  decoder_->SetOption (DECODER_OPTION_TRACE_LEVEL, &iTraceLevel);  encoder_->SetOption (ENCODER_OPTION_TRACE_CALLBACK, &pFunc);  encoder_->SetOption (ENCODER_OPTION_TRACE_CALLBACK_CONTEXT, &pTraceInfo);  decoder_->SetOption (DECODER_OPTION_TRACE_CALLBACK, &pFunc);  decoder_->SetOption (DECODER_OPTION_TRACE_CALLBACK_CONTEXT, &pTraceInfo);    int32_t iSpsPpsIdAddition = 1;  encoder_->SetOption (ENCODER_OPTION_SPS_PPS_ID_STRATEGY, &iSpsPpsIdAddition);  int32_t iIDRPeriod = 60;  encoder_->SetOption (ENCODER_OPTION_IDR_INTERVAL, &iIDRPeriod);  SLTRConfig sLtrConfigVal;  sLtrConfigVal.bEnableLongTermReference = 1;  sLtrConfigVal.iLTRRefNum = 1;  encoder_->SetOption (ENCODER_OPTION_LTR, &sLtrConfigVal);  int32_t iLtrPeriod = 2;  encoder_->SetOption (ENCODER_LTR_MARKING_PERIOD, &iLtrPeriod);  int iIdx = 0;  int iLossIdx = 0;  bool bVCLLoss = false;  while (iIdx <= p.numframes) {    iTraceLevel = rand() % 33;    sTrace.iTarLevel = iTraceLevel;    encoder_->SetOption (ENCODER_OPTION_TRACE_LEVEL, &iTraceLevel);    decoder_->SetOption (DECODER_OPTION_TRACE_LEVEL, &iTraceLevel);    EncodeOneFrame (1);    if (m_LTR_Recover_Request.uiFeedbackType == IDR_RECOVERY_REQUEST) {      ASSERT_TRUE (info.eFrameType == videoFrameTypeIDR);    }    //decoding after each encoding frame    int len = 0;    encToDecData (info, len);    unsigned char* pData[3] = { NULL };    memset (&dstBufInfo_, 0, sizeof (SBufferInfo));    ExtractDidNal (&info, len, &m_SLostSim, 0);    SimulateNALLoss (info.sLayerInfo[0].pBsBuf, len, &m_SLostSim, p.pLossSequence, p.bLostPara, iLossIdx, bVCLLoss);    rv = decoder_->DecodeFrame2 (info.sLayerInfo[0].pBsBuf, len, pData, &dstBufInfo_);    m_LTR_Recover_Request.uiFeedbackType = NO_RECOVERY_REQUSET;    LTRRecoveryRequest (decoder_, encoder_, &m_LTR_Recover_Request, rv, true);    rv = decoder_->DecodeFrame2 (NULL, 0, pData, &dstBufInfo_); //reconstruction    LTRRecoveryRequest (decoder_, encoder_, &m_LTR_Recover_Request, rv, true);    LTRMarkFeedback (decoder_, encoder_, &m_LTR_Marking_Feedback, rv);    iIdx++;  }} TEST_P (EncodeDecodeTestAPI, SetOption_Trace_NULL) {  SLTRMarkingFeedback m_LTR_Marking_Feedback;  SLTRRecoverRequest m_LTR_Recover_Request;  m_LTR_Recover_Request.uiIDRPicId = 0;  m_LTR_Recover_Request.iLayerId = 0;  m_LTR_Marking_Feedback.iLayerId = 0;  EncodeDecodeFileParamBase p = GetParam();  prepareParamDefault (1, p.slicenum,  p.width, p.height, p.frameRate, &param_);  param_.iSpatialLayerNum = 1;  int rv = encoder_->InitializeExt (&param_);  ASSERT_TRUE (rv == cmResultSuccess);  m_LTR_Recover_Request.uiFeedbackType = NO_RECOVERY_REQUSET;   ASSERT_TRUE (InitialEncDec (p.width, p.height));   int32_t iTraceLevel = WELS_LOG_QUIET;  pFunc = NULL;  pTraceInfo = NULL;  encoder_->SetOption (ENCODER_OPTION_TRACE_CALLBACK, &pFunc);  encoder_->SetOption (ENCODER_OPTION_TRACE_CALLBACK_CONTEXT, &pTraceInfo);  decoder_->SetOption (DECODER_OPTION_TRACE_CALLBACK, &pFunc);  decoder_->SetOption (DECODER_OPTION_TRACE_CALLBACK_CONTEXT, &pTraceInfo);

Lines 1–500 of 1276.

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t