Showing the changes to test/api/encode_decode_api_test.cpp (1 of 1 file). Show all
Unified · Split
| @@ -7,7 +7,7 @@ · 6 unmodified lines | ||
| 7 | 7 | #include <string> |
| 8 | 8 | |
| 9 | 9 | struct EncodeDecodeFileParamBase { |
| 10 | − const char* fileName; | |
| 10 | + int numframes; | |
| 11 | 11 | int width; |
| 12 | 12 | int height; |
| 13 | 13 | float frameRate; |
| @@ -56,7 +56,7 @@ class EncodeDecodeTestBase : public ::testing::Test, · 42 unmodified lines | ||
| 56 | 56 | SBufferInfo dstBufInfo_; |
| 57 | 57 | }; |
| 58 | 58 | |
| 59 | −class EncodeDecodeTestVclNal : public EncodeDecodeTestBase { | |
| 59 | +class EncodeDecodeTestAPI : public EncodeDecodeTestBase { | |
| 60 | 60 | public: |
| 61 | 61 | void SetUp() { |
| 62 | 62 | EncodeDecodeTestBase::SetUp(); |
| @@ -72,18 +72,10 @@ class EncodeDecodeTestVclNal : public EncodeDecodeTestBase { · 9 unmodified lines | ||
| 72 | 72 | }; |
| 73 | 73 | |
| 74 | 74 | static const EncodeDecodeFileParamBase kFileParamArray = |
| 75 | −{"res/CiscoVT2people_160x96_6fps.yuv", 160, 96, 6.0f}; | |
| 75 | +{300, 160, 96, 6.0f}; | |
| 76 | 76 | |
| 77 | −TEST_F (EncodeDecodeTestVclNal, DecoderVclNal) { | |
| 77 | +TEST_F (EncodeDecodeTestAPI, DecoderVclNal) { | |
| 78 | 78 | EncodeDecodeFileParamBase p = kFileParamArray; |
| 79 | − FileInputStream fileStream; | |
| 80 | −#if defined(ANDROID_NDK) | |
| 81 | − std::string filename = std::string ("/sdcard/") + p.fileName; | |
| 82 | − ASSERT_TRUE (fileStream.Open (filename.c_str())); | |
| 83 | −#else | |
| 84 | − ASSERT_TRUE (fileStream.Open (p.fileName)); | |
| 85 | −#endif | |
| 86 | − | |
| 87 | 79 | prepareParam (p.width, p.height, p.frameRate); |
| 88 | 80 | int rv = encoder_->InitializeExt (¶m_); |
| 89 | 81 | ASSERT_TRUE (rv == cmResultSuccess); |
| @@ -108,7 +100,9 @@ TEST_F (EncodeDecodeTestVclNal, DecoderVclNal) { · 18 unmodified lines | ||
| 108 | 100 | pic.pData[0] = buf_.data(); |
| 109 | 101 | pic.pData[1] = pic.pData[0] + p.width * p.height; |
| 110 | 102 | pic.pData[2] = pic.pData[1] + (p.width * p.height >> 2); |
| 111 | − while (fileStream.read (buf_.data(), frameSize) == frameSize) { | |
| 103 | + int iIdx = 0; | |
| 104 | + while (iIdx <= p.numframes) { | |
| 105 | + memset (buf_.data(), rand() % 256, frameSize); | |
| 112 | 106 | rv = encoder_->EncodeFrame (&pic, &info); |
| 113 | 107 | ASSERT_TRUE (rv == cmResultSuccess); |
| 114 | 108 | //decoding after each encoding frame |
| @@ -124,8 +118,121 @@ TEST_F (EncodeDecodeTestVclNal, DecoderVclNal) { · 9 unmodified lines | ||
| 124 | 118 | ASSERT_TRUE (rv == cmResultSuccess); |
| 125 | 119 | rv = decoder_->GetOption (DECODER_OPTION_VCL_NAL, &vclNal); |
| 126 | 120 | EXPECT_EQ (vclNal, FEEDBACK_VCL_NAL); |
| 121 | + iIdx++; | |
| 122 | + } //while | |
| 123 | + //ignore last frame | |
| 124 | +} | |
| 125 | + | |
| 126 | +TEST_F (EncodeDecodeTestAPI, GetOptionFramenum) { | |
| 127 | + EncodeDecodeFileParamBase p = kFileParamArray; | |
| 128 | + prepareParam (p.width, p.height, p.frameRate); | |
| 129 | + int rv = encoder_->InitializeExt (¶m_); | |
| 130 | + ASSERT_TRUE (rv == cmResultSuccess); | |
| 131 | + | |
| 132 | + //init for encoder | |
| 133 | + // I420: 1(Y) + 1/4(U) + 1/4(V) | |
| 134 | + int frameSize = p.width * p.height * 3 / 2; | |
| 135 | + | |
| 136 | + buf_.SetLength (frameSize); | |
| 137 | + ASSERT_TRUE (buf_.Length() == (size_t)frameSize); | |
| 138 | + | |
| 139 | + SFrameBSInfo info; | |
| 140 | + memset (&info, 0, sizeof (SFrameBSInfo)); | |
| 141 | + | |
| 142 | + SSourcePicture pic; | |
| 143 | + memset (&pic, 0, sizeof (SSourcePicture)); | |
| 144 | + pic.iPicWidth = p.width; | |
| 145 | + pic.iPicHeight = p.height; | |
| 146 | + pic.iColorFormat = videoFormatI420; | |
| 147 | + pic.iStride[0] = pic.iPicWidth; | |
| 148 | + pic.iStride[1] = pic.iStride[2] = pic.iPicWidth >> 1; | |
| 149 | + pic.pData[0] = buf_.data(); | |
| 150 | + pic.pData[1] = pic.pData[0] + p.width * p.height; | |
| 151 | + pic.pData[2] = pic.pData[1] + (p.width * p.height >> 2); | |
| 152 | + int32_t iEncFrameNum = -1; | |
| 153 | + int32_t iDecFrameNum; | |
| 154 | + int iIdx = 0; | |
| 155 | + while (iIdx <= p.numframes) { | |
| 156 | + memset (buf_.data(), rand() % 256, frameSize); | |
| 157 | + rv = encoder_->EncodeFrame (&pic, &info); | |
| 158 | + ASSERT_TRUE (rv == cmResultSuccess); | |
| 159 | + //decoding after each encoding frame | |
| 160 | + int len = 0; | |
| 161 | + encToDecData (info, len); | |
| 162 | + unsigned char* pData[3] = { NULL }; | |
| 163 | + memset (&dstBufInfo_, 0, sizeof (SBufferInfo)); | |
| 164 | + rv = decoder_->DecodeFrame2 (info.sLayerInfo[0].pBsBuf, len, pData, &dstBufInfo_); | |
| 165 | + ASSERT_TRUE (rv == cmResultSuccess); | |
| 166 | + decoder_->GetOption (DECODER_OPTION_FRAME_NUM, &iDecFrameNum); | |
| 167 | + EXPECT_EQ (iDecFrameNum, -1); | |
| 168 | + iEncFrameNum++; | |
| 169 | + rv = decoder_->DecodeFrame2 (NULL, 0, pData, &dstBufInfo_); //reconstruction | |
| 170 | + ASSERT_TRUE (rv == cmResultSuccess); | |
| 171 | + decoder_->GetOption (DECODER_OPTION_FRAME_NUM, &iDecFrameNum); | |
| 172 | + EXPECT_EQ (iEncFrameNum, iDecFrameNum); | |
| 173 | + iIdx++; | |
| 174 | + } //while | |
| 175 | + //ignore last frame | |
| 176 | +} | |
| 177 | + | |
| 178 | +TEST_F (EncodeDecodeTestAPI, GetOptionIDR) { | |
| 179 | + EncodeDecodeFileParamBase p = kFileParamArray; | |
| 180 | + prepareParam (p.width, p.height, p.frameRate); | |
| 181 | + int rv = encoder_->InitializeExt (¶m_); | |
| 182 | + ASSERT_TRUE (rv == cmResultSuccess); | |
| 183 | + | |
| 184 | + //init for encoder | |
| 185 | + // I420: 1(Y) + 1/4(U) + 1/4(V) | |
| 186 | + int frameSize = p.width * p.height * 3 / 2; | |
| 187 | + | |
| 188 | + buf_.SetLength (frameSize); | |
| 189 | + ASSERT_TRUE (buf_.Length() == (size_t)frameSize); | |
| 127 | 190 | |
| 191 | + SFrameBSInfo info; | |
| 192 | + memset (&info, 0, sizeof (SFrameBSInfo)); | |
| 193 | + | |
| 194 | + SSourcePicture pic; | |
| 195 | + memset (&pic, 0, sizeof (SSourcePicture)); | |
| 196 | + pic.iPicWidth = p.width; | |
| 197 | + pic.iPicHeight = p.height; | |
| 198 | + pic.iColorFormat = videoFormatI420; | |
| 199 | + pic.iStride[0] = pic.iPicWidth; | |
| 200 | + pic.iStride[1] = pic.iStride[2] = pic.iPicWidth >> 1; | |
| 201 | + pic.pData[0] = buf_.data(); | |
| 202 | + pic.pData[1] = pic.pData[0] + p.width * p.height; | |
| 203 | + pic.pData[2] = pic.pData[1] + (p.width * p.height >> 2); | |
| 204 | + int32_t iEncCurIdrPicId = 0; | |
| 205 | + int32_t iDecCurIdrPicId; | |
| 206 | + int32_t iIDRPeriod = 1; | |
| 207 | + int32_t iSpsPpsIdAddition = 0; | |
| 208 | + int iIdx = 0; | |
| 209 | + while (iIdx <= p.numframes) { | |
| 210 | + memset (buf_.data(), rand() % 256, frameSize); | |
| 211 | + iSpsPpsIdAddition = rand() % 2; | |
| 212 | + iIDRPeriod = (rand() % 150) + 1; | |
| 213 | + encoder_->SetOption (ENCODER_OPTION_IDR_INTERVAL, &iIDRPeriod); | |
| 214 | + encoder_->SetOption (ENCODER_OPTION_ENABLE_SPS_PPS_ID_ADDITION, &iSpsPpsIdAddition); | |
| 215 | + rv = encoder_->EncodeFrame (&pic, &info); | |
| 216 | + ASSERT_TRUE (rv == cmResultSuccess); | |
| 217 | + if (info.eFrameType == videoFrameTypeIDR) { | |
| 218 | + iEncCurIdrPicId = (iSpsPpsIdAddition == 0) ? 0 : (iEncCurIdrPicId + 1); | |
| 219 | + } | |
| 220 | + //decoding after each encoding frame | |
| 221 | + int len = 0; | |
| 222 | + encToDecData (info, len); | |
| 223 | + unsigned char* pData[3] = { NULL }; | |
| 224 | + memset (&dstBufInfo_, 0, sizeof (SBufferInfo)); | |
| 225 | + rv = decoder_->DecodeFrame2 (info.sLayerInfo[0].pBsBuf, len, pData, &dstBufInfo_); | |
| 226 | + ASSERT_TRUE (rv == cmResultSuccess); | |
| 227 | + decoder_->GetOption (DECODER_OPTION_IDR_PIC_ID, &iDecCurIdrPicId); | |
| 228 | + EXPECT_EQ (iDecCurIdrPicId, iEncCurIdrPicId); | |
| 229 | + rv = decoder_->DecodeFrame2 (NULL, 0, pData, &dstBufInfo_); //reconstruction | |
| 230 | + ASSERT_TRUE (rv == cmResultSuccess); | |
| 231 | + decoder_->GetOption (DECODER_OPTION_IDR_PIC_ID, &iDecCurIdrPicId); | |
| 232 | + EXPECT_EQ (iDecCurIdrPicId, iEncCurIdrPicId); | |
| 233 | + iIdx++; | |
| 128 | 234 | } //while |
| 129 | 235 | //ignore last frame |
| 130 | 236 | } |
| 131 | 237 | |
| 238 | + | |