Showing the changes to codec/encoder/core/src/slice_multi_threading.cpp (1 of 4 files). Show all
Unified · Split
| @@ -628,31 +628,30 @@ int32_t AppendSliceToFrameBs (sWelsEncCtx* pCtx, SLayerBSInfo* pLbi, const int32 · 627 unmodified lines | ||
| 628 | 628 | return iLayerSize; |
| 629 | 629 | } |
| 630 | 630 | |
| 631 | −int32_t WriteSliceBs (sWelsEncCtx* pCtx, uint8_t* pDst, | |
| 632 | − int32_t* pNalLen, | |
| 633 | − int32_t iTotalLeftLength, | |
| 634 | − const int32_t iSliceIdx, | |
| 635 | − int32_t& iSliceSize) { | |
| 636 | − SWelsSliceBs* pSliceBs = &pCtx->pSliceBs[iSliceIdx]; | |
| 637 | − SNalUnitHeaderExt* pNalHdrExt = &pCtx->pCurDqLayer->sLayerInfo.sNalHeaderExt; | |
| 638 | − | |
| 631 | +int32_t WriteSliceBs (sWelsEncCtx* pCtx,SWelsSliceBs* pSliceBs,const int32_t iSliceIdx,int32_t& iSliceSize) { | |
| 639 | 632 | const int32_t kiNalCnt = pSliceBs->iNalIndex; |
| 640 | 633 | int32_t iNalIdx = 0; |
| 641 | 634 | int32_t iNalSize = 0; |
| 642 | − int32_t iReturn = ENC_RETURN_SUCCESS; | |
| 643 | − iSliceSize = 0; | |
| 635 | + int32_t iReturn = ENC_RETURN_SUCCESS; | |
| 636 | + int32_t iTotalLeftLength = (iSliceIdx > 0) ? (pSliceBs->uiSize - pSliceBs->uiBsPos) | |
| 637 | + : (pCtx->iFrameBsSize - pCtx->iPosBsBuffer); | |
| 638 | + SNalUnitHeaderExt* pNalHdrExt = &pCtx->pCurDqLayer->sLayerInfo.sNalHeaderExt; | |
| 639 | + uint8_t* pDst = pSliceBs->pBs; | |
| 640 | + | |
| 644 | 641 | assert (kiNalCnt <= 2); |
| 645 | 642 | if (kiNalCnt > 2) |
| 646 | 643 | return 0; |
| 647 | 644 | |
| 645 | + iSliceSize = 0; | |
| 648 | 646 | while (iNalIdx < kiNalCnt) { |
| 649 | 647 | iNalSize = 0; |
| 650 | 648 | iReturn = WelsEncodeNal (&pSliceBs->sNalList[iNalIdx], pNalHdrExt, iTotalLeftLength - iSliceSize, |
| 651 | 649 | pDst, &iNalSize); |
| 652 | 650 | WELS_VERIFY_RETURN_IFNEQ (iReturn, ENC_RETURN_SUCCESS) |
| 653 | − pNalLen[iNalIdx] = iNalSize; | |
| 654 | − iSliceSize += iNalSize; | |
| 655 | − pDst += iNalSize; | |
| 651 | + | |
| 652 | + pSliceBs->iNalLen[iNalIdx] = iNalSize; | |
| 653 | + iSliceSize += iNalSize; | |
| 654 | + pDst += iNalSize; | |
| 656 | 655 | ++ iNalIdx; |
| 657 | 656 | } |
| 658 | 657 | pSliceBs->uiBsPos = iSliceSize; |
| @@ -761,13 +760,7 @@ WELS_THREAD_ROUTINE_TYPE CodingSliceThreadProc (void* arg) { · 102 unmodified lines | ||
| 761 | 760 | |
| 762 | 761 | WelsUnloadNalForSlice (pSliceBs); |
| 763 | 762 | |
| 764 | − int32_t iLeftBufferSize = (iSliceIdx > 0) ? | |
| 765 | − (pSliceBs->uiSize - pSliceBs->uiBsPos) | |
| 766 | − : (pEncPEncCtx->iFrameBsSize - pEncPEncCtx->iPosBsBuffer); | |
| 767 | − iReturn = WriteSliceBs (pEncPEncCtx, pSliceBs->pBs, | |
| 768 | − &pSliceBs->iNalLen[0], | |
| 769 | − iLeftBufferSize, | |
| 770 | − iSliceIdx, iSliceSize); | |
| 763 | + iReturn = WriteSliceBs (pEncPEncCtx, pSliceBs, iSliceIdx, iSliceSize); | |
| 771 | 764 | if (ENC_RETURN_SUCCESS != iReturn) { |
| 772 | 765 | uiThrdRet = iReturn; |
| 773 | 766 | WELS_THREAD_SIGNAL_AND_BREAK (pEncPEncCtx->pSliceThreading->pSliceCodedEvent, |
| @@ -869,10 +862,7 @@ WELS_THREAD_ROUTINE_TYPE CodingSliceThreadProc (void* arg) { · 95 unmodified lines | ||
| 869 | 862 | |
| 870 | 863 | WelsUnloadNalForSlice (pSliceBs); |
| 871 | 864 | |
| 872 | − int32_t iLeftBufferSize = (iSliceIdx > 0) ? (pSliceBs->uiSize - pSliceBs->uiBsPos) : (pEncPEncCtx->iFrameBsSize - pEncPEncCtx->iPosBsBuffer); | |
| 873 | − iReturn = WriteSliceBs (pEncPEncCtx, pSliceBs->pBs, &pSliceBs->iNalLen[0], | |
| 874 | − iLeftBufferSize, | |
| 875 | − iSliceIdx, iSliceSize); | |
| 865 | + iReturn = WriteSliceBs (pEncPEncCtx, pSliceBs, iSliceIdx, iSliceSize); | |
| 876 | 866 | if (ENC_RETURN_SUCCESS != iReturn) { |
| 877 | 867 | uiThrdRet = iReturn; |
| 878 | 868 | WELS_THREAD_SIGNAL_AND_BREAK (pEncPEncCtx->pSliceThreading->pSliceCodedEvent, |