| 603 | } |
| 604 | |
| 605 | int32_t InitBsBuffer (PWelsDecoderContext pCtx) { |
| 606 | if (pCtx == NULL) |
| 607 | return ERR_INFO_INVALID_PTR; |
| 608 | |
| 609 | CMemoryAlign* pMa = pCtx->pMemAlign; |
| 610 | |
| 611 | pCtx->iMaxBsBufferSizeInByte = MIN_ACCESS_UNIT_CAPACITY * MAX_BUFFERED_NUM; |
| 612 | if ((pCtx->sRawData.pHead = static_cast<uint8_t*> (pMa->WelsMallocz (pCtx->iMaxBsBufferSizeInByte, |
| 613 | "pCtx->sRawData.pHead"))) == NULL) { |
| 614 | return ERR_INFO_OUT_OF_MEMORY; |
| 615 | } |
| 616 | pCtx->sRawData.pStartPos = pCtx->sRawData.pCurPos = pCtx->sRawData.pHead; |
| 617 | pCtx->sRawData.pEnd = pCtx->sRawData.pHead + pCtx->iMaxBsBufferSizeInByte; |
| 618 | if (pCtx->pParam->bParseOnly) { |
| 619 | pCtx->pParserBsInfo = static_cast<SParserBsInfo*> (pMa->WelsMallocz (sizeof (SParserBsInfo), "pCtx->pParserBsInfo")); |
| 620 | if (pCtx->pParserBsInfo == NULL) { |
| 621 | return ERR_INFO_OUT_OF_MEMORY; |
| 622 | } |
| 623 | memset (pCtx->pParserBsInfo, 0, sizeof (SParserBsInfo)); |
| 624 | pCtx->pParserBsInfo->pDstBuff = static_cast<uint8_t*> (pMa->WelsMallocz (MAX_ACCESS_UNIT_CAPACITY * sizeof (uint8_t), |
| 625 | "pCtx->pParserBsInfo->pDstBuff")); |
| 626 | if (pCtx->pParserBsInfo->pDstBuff == NULL) { |
| 627 | return ERR_INFO_OUT_OF_MEMORY; |
| 628 | } |
| 629 | memset (pCtx->pParserBsInfo->pDstBuff, 0, MAX_ACCESS_UNIT_CAPACITY * sizeof (uint8_t)); |
| 630 | |
| 631 | if ((pCtx->sSavedData.pHead = static_cast<uint8_t*> (pMa->WelsMallocz (pCtx->iMaxBsBufferSizeInByte, |
| 632 | "pCtx->sSavedData.pHead"))) == NULL) { |
| 633 | return ERR_INFO_OUT_OF_MEMORY; |
| 634 | } |
| 635 | pCtx->sSavedData.pStartPos = pCtx->sSavedData.pCurPos = pCtx->sSavedData.pHead; |
| 636 | pCtx->sSavedData.pEnd = pCtx->sSavedData.pHead + pCtx->iMaxBsBufferSizeInByte; |
| 637 | |
| 638 | pCtx->iMaxNalNum = MAX_NAL_UNITS_IN_LAYER + 2; //2 reserved for SPS+PPS |
| 639 | pCtx->pParserBsInfo->pNalLenInByte = static_cast<int*> (pMa->WelsMallocz (pCtx->iMaxNalNum * sizeof (int), |
| 640 | "pCtx->pParserBsInfo->pNalLenInByte")); |
| 641 | if (pCtx->pParserBsInfo->pNalLenInByte == NULL) { |
| 642 | return ERR_INFO_OUT_OF_MEMORY; |
| 643 | } |
| 644 | } |
| 645 | return ERR_NONE; |
| 646 | } |
| 647 | |
| 648 | int32_t ExpandBsBuffer (PWelsDecoderContext pCtx, const int kiSrcLen) { |
| 649 | if (pCtx == NULL) |
no test coverage detected