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

Method ParseBs

test/decoder/DecUT_ParseSyntax.cpp:296–371  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

294 return true;
295}
296bool DecoderParseSyntaxTest::ParseBs (const char* sFileName, EDecCase eDecCase) {
297
298 uint8_t* pBuf = NULL;
299 int32_t iBufPos = 0;
300 int32_t iFileSize;
301 int32_t i = 0;
302 int32_t iSliceSize;
303 int32_t iSliceIndex = 0;
304 int32_t iEndOfStreamFlag = 0;
305 FILE* pH264File;
306 uint8_t uiStartCode[4] = { 0, 0, 0, 1 };
307 int iRet = 0;
308
309#if defined(ANDROID_NDK)
310 std::string filename = std::string ("/sdcard/") + sFileName;
311 if ((pH264File = fopen (filename.c_str(), "rb")) == NULL)
312 return false;
313#else
314 if ((pH264File = fopen (sFileName, "rb")) == NULL)
315 return false;
316#endif
317 fseek (pH264File, 0L, SEEK_END);
318 iFileSize = (int32_t)ftell (pH264File);
319 fseek (pH264File, 0L, SEEK_SET);
320 pBuf = new uint8_t[iFileSize + 4];
321 if (pBuf == NULL) {
322 fclose (pH264File);
323 return false;
324 }
325 if (fread (pBuf, 1, iFileSize, pH264File) != (unsigned int)iFileSize) {
326 fclose (pH264File);
327 if (pBuf) {
328 delete[] pBuf;
329 pBuf = NULL;
330 }
331 return false;
332 }
333 memcpy (pBuf + iFileSize, &uiStartCode[0], 4); //confirmed_safe_unsafe_usage
334 while (true) {
335 if (iBufPos >= iFileSize) {
336 iEndOfStreamFlag = true;
337 if (iEndOfStreamFlag)
338 m_pDec->SetOption (DECODER_OPTION_END_OF_STREAM, (void*)&iEndOfStreamFlag);
339 break;
340 }
341 for (i = 0; i < iFileSize; i++) {
342 if ((pBuf[iBufPos + i] == 0 && pBuf[iBufPos + i + 1] == 0 && pBuf[iBufPos + i + 2] == 0 && pBuf[iBufPos + i + 3] == 1
343 && i > 0)) {
344 break;
345 }
346 }
347 iSliceSize = i;
348 memset (&m_sParserBsInfo, 0, sizeof (SParserBsInfo));
349 iRet |= m_pDec->DecodeParser (pBuf + iBufPos, iSliceSize, &m_sParserBsInfo);
350 iRet |= m_pDec->DecodeParser (NULL, 0, &m_sParserBsInfo);
351 if (eDecCase == CorrectParseOnly) {
352 EXPECT_TRUE (iRet == dsErrorFree || iRet == dsFramePending);
353 }

Callers

nothing calls this directly

Calls 2

SetOptionMethod · 0.45
DecodeParserMethod · 0.45

Tested by

no test coverage detected