| 294 | return true; |
| 295 | } |
| 296 | bool 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 | } |
nothing calls this directly
no test coverage detected