149 lines · 4.9 KB · Text
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;  TEST_F (EncodeDecodeTestAPI, LogEncoding) {#define DEBUG_FILE_SAVE  //FillInit  //int iSpatialLayerNum = $SPATIAL_NUM;  //int iWidth       = $SOURCE_WIDTH;  //int iHeight      = $SOURCE_HEIGHT;  //int iEncFrameNum = $TOTAL_FRMS;   //FillFirstParam  int iTraceLevel = WELS_LOG_INFO;  int rv = encoder_->SetOption (ENCODER_OPTION_TRACE_LEVEL, &iTraceLevel);  rv = encoder_->InitializeExt (&param_);  EXPECT_TRUE (rv == cmResultSuccess);   unsigned char*  pBsBuf[MAX_SPATIAL_LAYER_NUM];  int aLen[MAX_SPATIAL_LAYER_NUM] = {0};  ISVCDecoder* decoder[MAX_SPATIAL_LAYER_NUM]; #ifdef DEBUG_FILE_SAVE  FILE* fEnc[MAX_SPATIAL_LAYER_NUM];  fEnc[0] = fopen ("enc0.264", "wb");  fEnc[1] = fopen ("enc1.264", "wb");  fEnc[2] = fopen ("enc2.264", "wb");  fEnc[3] = fopen ("enc3.264", "wb");#endif   int iIdx = 0;   //create decoder  for (iIdx = 0; iIdx < iSpatialLayerNum; iIdx++) {    pBsBuf[iIdx] = static_cast<unsigned char*> (malloc (iWidth * iHeight * 3 * sizeof (unsigned char) / 2));    EXPECT_TRUE (pBsBuf[iIdx] != NULL);    aLen[iIdx] = 0;     long rv = WelsCreateDecoder (&decoder[iIdx]);    EXPECT_TRUE (0 == rv);    EXPECT_TRUE (decoder[iIdx] != NULL);     SDecodingParam decParam;    memset (&decParam, 0, sizeof (SDecodingParam));    decParam.uiTargetDqLayer = UCHAR_MAX;    decParam.eEcActiveIdc = ERROR_CON_SLICE_COPY;    decParam.sVideoProperty.eVideoBsType = VIDEO_BITSTREAM_DEFAULT;     rv = decoder[iIdx]->Initialize (&decParam);    EXPECT_TRUE (0 == rv);  }    for (int iFrame = 0; iFrame < iEncFrameNum; iFrame++) {    int iResult;    int iLayerLen = 0;    unsigned char* pData[3] = { NULL }; 	if (iFrame % 10 == 0) {		printf("current iFrame=%d\n", iFrame);	}     //FillParam     ASSERT_TRUE (InitialEncDec (param_.iPicWidth, param_.iPicHeight));    rv = encoder_->SetOption (ENCODER_OPTION_SVC_ENCODE_PARAM_EXT, &param_);    ASSERT_TRUE (rv == cmResultSuccess) << "SetOption Failed pParam: rv = " << rv;    EncodeOneFrame (0);     // init    for (iIdx = 0; iIdx < iSpatialLayerNum; iIdx++) {      aLen[iIdx] = 0;    }    for (int iLayer = 0; iLayer < info.iLayerNum; ++iLayer) {      iLayerLen = 0;      const SLayerBSInfo& layerInfo = info.sLayerInfo[iLayer];      const int kiFirstNalType = ((* (layerInfo.pBsBuf + 4)) & 0x1f);      if (param_.bSimulcastAVC) {        ASSERT_TRUE ((kiFirstNalType == NAL_SPS) || (kiFirstNalType == NAL_PPS) || (kiFirstNalType == NAL_SLICE)                     || (kiFirstNalType == NAL_SLICE_IDR) || (kiFirstNalType == NAL_SEI));      }      for (int iNal = 0; iNal < layerInfo.iNalCount; ++iNal) {        iLayerLen += layerInfo.pNalLengthInByte[iNal];      }       if (param_.bSimulcastAVC) {        iIdx = layerInfo.uiSpatialId;        EXPECT_TRUE (iIdx < iSpatialLayerNum);        memcpy ((pBsBuf[iIdx] + aLen[iIdx]), layerInfo.pBsBuf, iLayerLen * sizeof (unsigned char));        aLen[iIdx] += iLayerLen;      } else {        if (layerInfo.uiLayerType == NON_VIDEO_CODING_LAYER) {          // under SimulcastSVC, need to copy non-VCL to all layers          for (iIdx = 0; iIdx < param_.iSpatialLayerNum; iIdx++) {            memcpy ((pBsBuf[iIdx] + aLen[iIdx]), layerInfo.pBsBuf, iLayerLen * sizeof (unsigned char));            aLen[iIdx] += iLayerLen;          }        } else {          iIdx = layerInfo.uiSpatialId;          EXPECT_TRUE (iIdx < iSpatialLayerNum);          memcpy ((pBsBuf[iIdx] + aLen[iIdx]), layerInfo.pBsBuf, iLayerLen * sizeof (unsigned char));          aLen[iIdx] += iLayerLen;        }      }    }     for (iIdx = 0; iIdx < iSpatialLayerNum; iIdx++) {      pData[0] = pData[1] = pData[2] = 0;      memset (&dstBufInfo_, 0, sizeof (SBufferInfo));       if (aLen[iIdx] > 0) {#ifdef DEBUG_FILE_SAVE        fwrite (pBsBuf[iIdx], aLen[iIdx], 1, fEnc[iIdx]);#endif        iResult = decoder[iIdx]->DecodeFrame2 (pBsBuf[iIdx], aLen[iIdx], pData, &dstBufInfo_);        EXPECT_TRUE (iResult == cmResultSuccess) << "iResult=" << iResult << " iFrame = " << iFrame << " LayerIdx=" << iIdx;         iResult = decoder[iIdx]->DecodeFrame2 (NULL, 0, pData, &dstBufInfo_);        EXPECT_TRUE (iResult == cmResultSuccess) << "iResult=" << iResult << " iFrame = " << iFrame << " LayerIdx=" << iIdx;        EXPECT_EQ (dstBufInfo_.iBufferStatus, 1) << "LayerIdx=" << iIdx << " LayerLen=" << aLen[iIdx] << " iFrame = " << iFrame;      }    }  }    for (iIdx = 0; iIdx < iSpatialLayerNum; iIdx++) {    free (pBsBuf[iIdx]);     if (decoder[iIdx] != NULL) {      decoder[iIdx]->Uninitialize();      WelsDestroyDecoder (decoder[iIdx]);    }  }#ifdef DEBUG_FILE_SAVE  for (int i = 0; i < MAX_SPATIAL_LAYER_NUM; i++) {    fclose (fEnc[i]);  }#endif}

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