MCPcopy Create free account
hub / github.com/cisco/openh264 / DecodeBs

Method DecodeBs

test/decoder/DecUT_ParseSyntax.cpp:228–295  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

226}
227
228bool DecoderParseSyntaxTest::DecodeBs (const char* sFileName, EDecCase eDecCase) {
229
230 uint8_t* pBuf = NULL;
231 int32_t iBufPos = 0;
232 int32_t iFileSize;
233 int32_t i = 0;
234 int32_t iSliceSize;
235 int32_t iEndOfStreamFlag = 0;
236 FILE* pH264File;
237 uint8_t uiStartCode[4] = {0, 0, 0, 1};
238 int iRet = 0;
239
240#if defined(ANDROID_NDK)
241 std::string filename = std::string ("/sdcard/") + sFileName;
242 if ((pH264File = fopen (filename.c_str(), "rb")) == NULL)
243 return false;
244#else
245 if ((pH264File = fopen (sFileName, "rb")) == NULL)
246 return false;
247#endif
248 fseek (pH264File, 0L, SEEK_END);
249 iFileSize = (int32_t) ftell (pH264File);
250 fseek (pH264File, 0L, SEEK_SET);
251 pBuf = new uint8_t[iFileSize + 4];
252 if (pBuf == NULL) {
253 fclose (pH264File);
254 return false;
255 }
256 if ((fread (pBuf, 1, iFileSize, pH264File) != (unsigned int) iFileSize)) {
257 fclose (pH264File);
258 if (pBuf) {
259 delete[] pBuf;
260 pBuf = NULL;
261 }
262 return false;
263 }
264 memcpy (pBuf + iFileSize, &uiStartCode[0], 4); //confirmed_safe_unsafe_usage
265 while (true) {
266 if (iBufPos >= iFileSize) {
267 iEndOfStreamFlag = true;
268 if (iEndOfStreamFlag)
269 m_pDec->SetOption (DECODER_OPTION_END_OF_STREAM, (void*)&iEndOfStreamFlag);
270 break;
271 }
272 for (i = 0; i < iFileSize; i++) {
273 if ((pBuf[iBufPos + i] == 0 && pBuf[iBufPos + i + 1] == 0 && pBuf[iBufPos + i + 2] == 0 && pBuf[iBufPos + i + 3] == 1
274 && i > 0)) {
275 break;
276 }
277 }
278 iSliceSize = i;
279 iRet |= DecodeFrame (pBuf + iBufPos, iSliceSize, m_pData, &m_sBufferInfo, m_pCtx);
280 iBufPos += iSliceSize;
281 }
282 if (eDecCase == CorrectDec) {
283 EXPECT_TRUE (iRet == dsErrorFree);
284 } else if (eDecCase == ErrorDec) {
285 EXPECT_TRUE ((iRet & (dsBitstreamError | dsRefLost | dsDataErrorConcealed)) != 0) << "iRet = " << iRet;

Callers

nothing calls this directly

Calls 2

DecodeFrameFunction · 0.85
SetOptionMethod · 0.45

Tested by

no test coverage detected