2465 lines · 95.0 KB · C++
RawDownload
  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;  int iSkipedBytes;  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));    iSkipedBytes = SimulateNALLoss (info.sLayerInfo[0].pBsBuf, len, &m_SLostSim, p.pLossSequence, p.bLostPara, iLossIdx,                                    bVCLLoss);    uint32_t uiEcIdc = rand() % 2 == 1 ? ERROR_CON_DISABLE : ERROR_CON_SLICE_COPY;    decoder_->SetOption (DECODER_OPTION_ERROR_CON_IDC, &uiEcIdc);    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++;  }  (void) iSkipedBytes;} TEST_P (EncodeDecodeTestAPI, InOutTimeStamp) {  EncodeDecodeFileParamBase p = GetParam();  prepareParam (1, p.slicenum,  p.width, p.height, p.frameRate);  encoder_->Uninitialize();  int rv = encoder_->InitializeExt (&param_);  ASSERT_TRUE (rv == cmResultSuccess);    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_ENABLE_SPS_PPS_ID_ADDITION, &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, GetOptionTid_AVC_NOPREFIX) {  SLTRMarkingFeedback m_LTR_Marking_Feedback;  SLTRRecoverRequest m_LTR_Recover_Request;  m_LTR_Recover_Request.uiIDRPicId = 0;  EncodeDecodeFileParamBase p = GetParam();  prepareParam (1, p.slicenum,  p.width, p.height, p.frameRate);  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;  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_ENABLE_SPS_PPS_ID_ADDITION, &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;  EncodeDecodeFileParamBase p = GetParam();  prepareParam (1, p.slicenum,  p.width, p.height, p.frameRate);  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;   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_ENABLE_SPS_PPS_ID_ADDITION, &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;  EncodeDecodeFileParamBase p = GetParam();  prepareParam (2, p.slicenum,  p.width, p.height, p.frameRate);  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;   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_ENABLE_SPS_PPS_ID_ADDITION, &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;  EncodeDecodeFileParamBase p = GetParam();  prepareParam (1, p.slicenum,  p.width, p.height, p.frameRate);  param_.iSpatialLayerNum = 1;   int rv = encoder_->InitializeExt (&param_);  ASSERT_TRUE (rv == cmResultSuccess);  m_LTR_Recover_Request.uiFeedbackType = NO_RECOVERY_REQUSET;   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_ENABLE_SPS_PPS_ID_ADDITION, &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;  EncodeDecodeFileParamBase p = GetParam();  prepareParam (1, p.slicenum,  p.width, p.height, p.frameRate);  param_.iSpatialLayerNum = 1;  int rv = encoder_->InitializeExt (&param_);  ASSERT_TRUE (rv == cmResultSuccess);  m_LTR_Recover_Request.uiFeedbackType = NO_RECOVERY_REQUSET;   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);  encoder_->SetOption (ENCODER_OPTION_TRACE_LEVEL, &iTraceLevel);  decoder_->SetOption (DECODER_OPTION_TRACE_LEVEL, &iTraceLevel);   int32_t iSpsPpsIdAddition = 1;  encoder_->SetOption (ENCODER_OPTION_ENABLE_SPS_PPS_ID_ADDITION, &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;    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++;  }} INSTANTIATE_TEST_CASE_P (EncodeDecodeTestBase, EncodeDecodeTestAPI,                         ::testing::ValuesIn (kFileParamArray)); TEST_P (EncodeDecodeTestAPI, SetOptionECIDC_GeneralSliceChange) {  uint32_t uiEcIdc;  uint32_t uiGet;  EncodeDecodeFileParamBase p = GetParam();  prepareParam (1, p.slicenum,  p.width, p.height, p.frameRate);  param_.iSpatialLayerNum = 1;  encoder_->Uninitialize();  int rv = encoder_->InitializeExt (&param_);  ASSERT_TRUE (rv == cmResultSuccess);  decoder_->GetOption (DECODER_OPTION_ERROR_CON_IDC, &uiGet);  EXPECT_EQ (uiGet, (uint32_t) ERROR_CON_SLICE_COPY); //default value should be ERROR_CON_SLICE_COPY   uiEcIdc = 0;  decoder_->SetOption (DECODER_OPTION_ERROR_CON_IDC, &uiEcIdc);  decoder_->GetOption (DECODER_OPTION_ERROR_CON_IDC, &uiGet);  EXPECT_EQ (uiGet, uiEcIdc);   //Start for enc/dec   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;  bool bVCLLoss = false;  int iPacketNum;  int len;  int iTotalSliceSize;   //enc/dec pictures  while (iIdx <= p.numframes) {    EncodeOneFrame (1);    //decoding after each encoding frame    len = 0;    iPacketNum = 0;    iTotalSliceSize = 0;    unsigned char* pData[3] = { NULL };    memset (&dstBufInfo_, 0, sizeof (SBufferInfo));    while (iPacketNum < info.sLayerInfo[0].iNalCount) {      encToDecSliceData (0, iPacketNum, info, len);      uiEcIdc = (ERROR_CON_IDC) (rand() % 2);      decoder_->SetOption (DECODER_OPTION_ERROR_CON_IDC, &uiEcIdc);      decoder_->GetOption (DECODER_OPTION_ERROR_CON_IDC, &uiGet);      EXPECT_EQ (uiGet, uiEcIdc);       bVCLLoss = rand() & 1; //loss or not      if (!bVCLLoss) { //not loss        rv = decoder_->DecodeFrame2 (info.sLayerInfo[0].pBsBuf + iTotalSliceSize,                                     info.sLayerInfo[0].pNalLengthInByte[iPacketNum], pData, &dstBufInfo_);        if (uiEcIdc == ERROR_CON_DISABLE)          EXPECT_EQ (dstBufInfo_.iBufferStatus, 0);      }      //EC_IDC should not change till now      decoder_->GetOption (DECODER_OPTION_ERROR_CON_IDC, &uiGet);      EXPECT_EQ (uiGet, uiEcIdc);      //Set again inside      uiEcIdc = (ERROR_CON_IDC) (rand() % 2);      decoder_->SetOption (DECODER_OPTION_ERROR_CON_IDC, &uiEcIdc);      decoder_->GetOption (DECODER_OPTION_ERROR_CON_IDC, &uiGet);      EXPECT_EQ (uiGet, uiEcIdc);       rv = decoder_->DecodeFrame2 (NULL, 0, pData, &dstBufInfo_); //reconstruction      //EXPECT_EQ (dstBufInfo_.iBufferStatus, 0);      if (uiEcIdc == ERROR_CON_DISABLE && rv != 0)        EXPECT_EQ (dstBufInfo_.iBufferStatus, 0);       //deal with next slice      iTotalSliceSize += len;      iPacketNum++;    } //while slice    iIdx++;  } //while frame} //This case contain 1 slice per picture//coding order:                 0   1   2   3   4   5   6   7//frame type:                   IDR P   P   P   P   P   P   P//EC_IDC:                       0   0   0   2   0   0   1   1//loss:                         N   Y   N   N   N   Y   Y   N TEST_F (EncodeDecodeTestAPI, SetOptionECIDC_SpecificFrameChange) {  uint32_t uiEcIdc;  uint32_t uiGet;  EncodeDecodeFileParamBase p = kFileParamArray[0];  prepareParam (1, p.slicenum,  p.width, p.height, p.frameRate);  param_.iSpatialLayerNum = 1;  encoder_->Uninitialize();  int rv = encoder_->InitializeExt (&param_);  ASSERT_TRUE (rv == cmResultSuccess);  decoder_->GetOption (DECODER_OPTION_ERROR_CON_IDC, &uiGet);  EXPECT_EQ (uiGet, (ERROR_CON_IDC) ERROR_CON_SLICE_COPY); //default value should be ERROR_CON_SLICE_COPY  int32_t iTraceLevel = WELS_LOG_QUIET;  encoder_->SetOption (ENCODER_OPTION_TRACE_LEVEL, &iTraceLevel);  decoder_->SetOption (DECODER_OPTION_TRACE_LEVEL, &iTraceLevel);   //set EC=DISABLE  uiEcIdc = (uint32_t) (ERROR_CON_DISABLE);  decoder_->SetOption (DECODER_OPTION_ERROR_CON_IDC, &uiEcIdc);  decoder_->GetOption (DECODER_OPTION_ERROR_CON_IDC, &uiGet);  EXPECT_EQ (uiGet, uiEcIdc);   //Start for enc/dec  int iIdx = 0;  int len = 0;  unsigned char* pData[3] = { NULL };   InitialEncDec (p.width, p.height);  //Frame 0: IDR, EC_IDC=DISABLE, loss = 0  EncodeOneFrame (1);  encToDecData (info, len);

Lines 1001–1500 of 2465. Previous lines

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