shithub: openh264

Download patch

ref: d0d6842f73dbbd3a7f2a6284a2efa3257dac8251
parent: 4afb83e3b049b00e4e1f061fe8db9012a7e0104c
parent: adc7be9f01629b28027b8f5a365f1af3bd857100
author: HaiboZhu <[email protected]>
date: Mon Jul 28 12:29:09 EDT 2014

Merge pull request #1228 from huili2/dec_ut_api_module

add decoder UT module for API

--- /dev/null
+++ b/test/decoder/DecUT_DecExt.cpp
@@ -1,0 +1,238 @@
+#include <gtest/gtest.h>
+
+#include "codec_def.h"
+#include "codec_app_def.h"
+#include "codec_api.h"
+#include "wels_common_basis.h"
+#include "mem_align.h"
+#include "ls_defines.h"
+
+using namespace WelsDec;
+
+class DecoderInterfaceTest : public ::testing::Test {
+ public:
+  virtual void SetUp() {
+    int rv = WelsCreateDecoder (&m_pDec);
+    ASSERT_EQ (0, rv);
+    ASSERT_TRUE (m_pDec != NULL);
+  }
+
+  virtual void TearDown() {
+    if (m_pDec) {
+      WelsDestroyDecoder (m_pDec);
+    }
+  }
+  //Init members
+  void Init();
+  //Uninit
+  void Uninit() {}
+  //Mock input data for test
+  void MockPacketType (const EWelsNalUnitType eNalUnitType);
+  //Test Initialize/Uninitialize
+  void TestInitUninit();
+  //DECODER_OPTION_DATAFORMAT
+  void TestDataFormat();
+  //DECODER_OPTION_END_OF_STREAM
+  void TestEndOfStream();
+  //DECODER_OPTION_VCL_NAL
+  void TestVclNal();
+  //DECODER_OPTION_TEMPORAL_ID
+  void TestTemporalId();
+  //DECODER_OPTION_FRAME_NUM
+  void TestFrameNum();
+  //DECODER_OPTION_IDR_PIC_ID
+  void TestIdrPicId();
+  //DECODER_OPTION_LTR_MARKING_FLAG
+  void TestLtrMarkingFlag();
+  //DECODER_OPTION_LTR_MARKED_FRAME_NUM
+  void TestLtrMarkedFrameNum();
+  //DECODER_OPTION_ERROR_CON_IDC
+  void TestErrorConIdc();
+  //DECODER_OPTION_TRACE_LEVEL
+  void TestTraceLevel();
+  //DECODER_OPTION_TRACE_CALLBACK
+  void TestTraceCallback();
+  //DECODER_OPTION_TRACE_CALLBACK_CONTEXT
+  void TestTraceCallbackContext();
+  //Do whole tests here
+  void DecoderInterfaceAll();
+
+
+ public:
+  ISVCDecoder* m_pDec;
+  SDecodingParam m_sDecParam;
+  SBufferInfo m_sBufferInfo;
+  uint8_t* m_pData[3];
+  char m_szBuffer[100]; //for mocking packet
+  int m_iBufLength; //record the valid data in m_szBuffer
+};
+
+//Init members
+void DecoderInterfaceTest::Init() {
+  memset (&m_sBufferInfo, 0, sizeof (SBufferInfo));
+  memset (&m_sDecParam, 0, sizeof (SDecodingParam));
+  m_sDecParam.pFileNameRestructed = NULL;
+  m_sDecParam.iOutputColorFormat = rand() % 100;
+  m_sDecParam.uiCpuLoad = rand() % 100;
+  m_sDecParam.uiTargetDqLayer = rand() % 100;
+  m_sDecParam.eEcActiveIdc = (ERROR_CON_IDC) (rand() & 3);
+  m_sDecParam.sVideoProperty.size = sizeof (SVideoProperty);
+  m_sDecParam.sVideoProperty.eVideoBsType = (VIDEO_BITSTREAM_TYPE) (rand() % 3);
+
+  m_pData[0] = m_pData[1] = m_pData[2] = NULL;
+  m_szBuffer[0] = m_szBuffer[1] = m_szBuffer[2] = 0;
+  m_szBuffer[3] = 1;
+  m_iBufLength = 4;
+}
+
+//Mock input data for test
+void DecoderInterfaceTest::MockPacketType (const EWelsNalUnitType eNalUnitType) {
+  switch (eNalUnitType) {
+  case NAL_UNIT_SEI:
+    //TODO
+    break;
+  case NAL_UNIT_SPS:
+    //TODO
+    break;
+  case NAL_UNIT_PPS:
+    //TODO
+    break;
+  case NAL_UNIT_SUBSET_SPS:
+    //TODO
+    break;
+  case NAL_UNIT_PREFIX:
+    //TODO
+    break;
+  case NAL_UNIT_CODED_SLICE:
+    //TODO
+    break;
+  case NAL_UNIT_CODED_SLICE_IDR:
+    //TODO
+    break;
+  default:
+    //TODO
+    break;
+
+    m_szBuffer[m_iBufLength] = '\0';
+    m_iBufLength++; //including '\0'
+
+  }
+}
+
+//Test Initialize/Uninitialize
+void DecoderInterfaceTest::TestInitUninit() {
+  int iOutput;
+  CM_RETURN eRet;
+  //No initialize, no GetOption can be done
+  m_pDec->Uninitialize();
+  eRet = (CM_RETURN) m_pDec->GetOption (DECODER_OPTION_DATAFORMAT, &iOutput);
+  EXPECT_EQ (eRet, cmInitExpected);
+  //Initialize first, can get input color format
+  m_sDecParam.iOutputColorFormat = 20; //just for test
+  m_pDec->Initialize (&m_sDecParam);
+  eRet = (CM_RETURN) m_pDec->GetOption (DECODER_OPTION_DATAFORMAT, &iOutput);
+  EXPECT_EQ (eRet, cmResultSuccess);
+  EXPECT_EQ (20, iOutput);
+
+  //Uninitialize, no GetOption can be done
+  m_pDec->Uninitialize();
+  iOutput = 21;
+  eRet = (CM_RETURN) m_pDec->GetOption (DECODER_OPTION_DATAFORMAT, &iOutput);
+  EXPECT_EQ (iOutput, 21);
+  EXPECT_EQ (eRet, cmInitExpected);
+}
+
+//DECODER_OPTION_DATAFORMAT
+void DecoderInterfaceTest::TestDataFormat() {
+  //TODO
+}
+
+//DECODER_OPTION_END_OF_STREAM
+void DecoderInterfaceTest::TestEndOfStream() {
+  //TODO
+}
+//DECODER_OPTION_VCL_NAL
+void DecoderInterfaceTest::TestVclNal() {
+  //TODO
+}
+
+//DECODER_OPTION_TEMPORAL_ID
+void DecoderInterfaceTest::TestTemporalId() {
+  //TODO
+}
+
+//DECODER_OPTION_FRAME_NUM
+void DecoderInterfaceTest::TestFrameNum() {
+  //TODO
+}
+
+//DECODER_OPTION_IDR_PIC_ID
+void DecoderInterfaceTest::TestIdrPicId() {
+  //TODO
+}
+
+//DECODER_OPTION_LTR_MARKING_FLAG
+void DecoderInterfaceTest::TestLtrMarkingFlag() {
+  //TODO
+}
+
+//DECODER_OPTION_LTR_MARKED_FRAME_NUM
+void DecoderInterfaceTest::TestLtrMarkedFrameNum() {
+  //TODO
+}
+
+//DECODER_OPTION_ERROR_CON_IDC
+void DecoderInterfaceTest::TestErrorConIdc() {
+  //TODO
+}
+
+//DECODER_OPTION_TRACE_LEVEL
+void DecoderInterfaceTest::TestTraceLevel() {
+  //TODO
+}
+
+//DECODER_OPTION_TRACE_CALLBACK
+void DecoderInterfaceTest::TestTraceCallback() {
+  //TODO
+}
+
+//DECODER_OPTION_TRACE_CALLBACK_CONTEXT
+void DecoderInterfaceTest::TestTraceCallbackContext() {
+  //TODO
+}
+
+
+//TEST here for whole tests
+TEST_F (DecoderInterfaceTest, DecoderInterfaceAll) {
+  Init();
+
+  //Initialize Uninitialize
+  TestInitUninit();
+  //DECODER_OPTION_DATAFORMAT
+  TestDataFormat();
+  //DECODER_OPTION_END_OF_STREAM
+  TestEndOfStream();
+  //DECODER_OPTION_VCL_NAL
+  TestVclNal();
+  //DECODER_OPTION_TEMPORAL_ID
+  TestTemporalId();
+  //DECODER_OPTION_FRAME_NUM
+  TestFrameNum();
+  //DECODER_OPTION_IDR_PIC_ID
+  TestIdrPicId();
+  //DECODER_OPTION_LTR_MARKING_FLAG
+  TestLtrMarkingFlag();
+  //DECODER_OPTION_LTR_MARKED_FRAME_NUM
+  TestLtrMarkedFrameNum();
+  //DECODER_OPTION_ERROR_CON_IDC
+  TestErrorConIdc();
+  //DECODER_OPTION_TRACE_LEVEL
+  TestTraceLevel();
+  //DECODER_OPTION_TRACE_CALLBACK
+  TestTraceCallback();
+  //DECODER_OPTION_TRACE_CALLBACK_CONTEXT
+  TestTraceCallbackContext();
+
+}
+
+
--- a/test/decoder/targets.mk
+++ b/test/decoder/targets.mk
@@ -1,6 +1,7 @@
 DECODER_UNITTEST_SRCDIR=test/decoder
 DECODER_UNITTEST_CPP_SRCS=\
 	$(DECODER_UNITTEST_SRCDIR)/DecUT_Deblock.cpp\
+	$(DECODER_UNITTEST_SRCDIR)/DecUT_DecExt.cpp\
 	$(DECODER_UNITTEST_SRCDIR)/DecUT_ErrorConcealment.cpp\
 	$(DECODER_UNITTEST_SRCDIR)/DecUT_IdctResAddPred.cpp\
 	$(DECODER_UNITTEST_SRCDIR)/DecUT_IntraPrediction.cpp\