refact WriteSliceBs()
This commit is contained in:
parent
a422180695
commit
4a4ade1201
@ -98,11 +98,7 @@ void TrackSliceConsumeTime (sWelsEncCtx* pCtx, int32_t* pDidList, const int32_t
|
||||
#endif//defined(MT_DEBUG)
|
||||
|
||||
void SetOneSliceBsBufferUnderMultithread(sWelsEncCtx* pCtx, const int32_t kiThreadIdx, const int32_t iSliceIdx);
|
||||
int32_t WriteSliceBs (sWelsEncCtx* pCtx, uint8_t* pDst,
|
||||
int32_t* pNalLen,
|
||||
int32_t iTotalLeftLength,
|
||||
const int32_t iSliceIdx,
|
||||
int32_t& iSliceSize);
|
||||
int32_t WriteSliceBs (sWelsEncCtx* pCtx,SWelsSliceBs* pSliceBs,const int32_t iSliceIdx,int32_t& iSliceSize);
|
||||
}
|
||||
|
||||
#endif//SVC_SLICE_MULTIPLE_THREADING_H__
|
||||
|
@ -49,7 +49,7 @@ namespace WelsEnc {
|
||||
extern int32_t WriteSliceToFrameBs (sWelsEncCtx* pCtx, SLayerBSInfo* pLbi, uint8_t* pFrameBsBuffer,
|
||||
const int32_t iSliceIdx,
|
||||
int32_t& iSliceSize);
|
||||
extern int32_t WriteSliceBs (sWelsEncCtx* pCtx, uint8_t* pSliceBsBuf, const int32_t iSliceIdx, int32_t& iSliceSize);
|
||||
extern int32_t WriteSliceBs (sWelsEncCtx* pCtx,SWelsSliceBs* pSliceBs,const int32_t iSliceIdx, int32_t& iSliceSize);
|
||||
|
||||
class CWelsSliceEncodingTask : public CWelsBaseTask {
|
||||
public:
|
||||
|
@ -628,31 +628,30 @@ int32_t AppendSliceToFrameBs (sWelsEncCtx* pCtx, SLayerBSInfo* pLbi, const int32
|
||||
return iLayerSize;
|
||||
}
|
||||
|
||||
int32_t WriteSliceBs (sWelsEncCtx* pCtx, uint8_t* pDst,
|
||||
int32_t* pNalLen,
|
||||
int32_t iTotalLeftLength,
|
||||
const int32_t iSliceIdx,
|
||||
int32_t& iSliceSize) {
|
||||
SWelsSliceBs* pSliceBs = &pCtx->pSliceBs[iSliceIdx];
|
||||
SNalUnitHeaderExt* pNalHdrExt = &pCtx->pCurDqLayer->sLayerInfo.sNalHeaderExt;
|
||||
|
||||
int32_t WriteSliceBs (sWelsEncCtx* pCtx,SWelsSliceBs* pSliceBs,const int32_t iSliceIdx,int32_t& iSliceSize) {
|
||||
const int32_t kiNalCnt = pSliceBs->iNalIndex;
|
||||
int32_t iNalIdx = 0;
|
||||
int32_t iNalSize = 0;
|
||||
int32_t iReturn = ENC_RETURN_SUCCESS;
|
||||
iSliceSize = 0;
|
||||
int32_t iReturn = ENC_RETURN_SUCCESS;
|
||||
int32_t iTotalLeftLength = (iSliceIdx > 0) ? (pSliceBs->uiSize - pSliceBs->uiBsPos)
|
||||
: (pCtx->iFrameBsSize - pCtx->iPosBsBuffer);
|
||||
SNalUnitHeaderExt* pNalHdrExt = &pCtx->pCurDqLayer->sLayerInfo.sNalHeaderExt;
|
||||
uint8_t* pDst = pSliceBs->pBs;
|
||||
|
||||
assert (kiNalCnt <= 2);
|
||||
if (kiNalCnt > 2)
|
||||
return 0;
|
||||
|
||||
iSliceSize = 0;
|
||||
while (iNalIdx < kiNalCnt) {
|
||||
iNalSize = 0;
|
||||
iReturn = WelsEncodeNal (&pSliceBs->sNalList[iNalIdx], pNalHdrExt, iTotalLeftLength - iSliceSize,
|
||||
pDst, &iNalSize);
|
||||
WELS_VERIFY_RETURN_IFNEQ (iReturn, ENC_RETURN_SUCCESS)
|
||||
pNalLen[iNalIdx] = iNalSize;
|
||||
iSliceSize += iNalSize;
|
||||
pDst += iNalSize;
|
||||
|
||||
pSliceBs->iNalLen[iNalIdx] = iNalSize;
|
||||
iSliceSize += iNalSize;
|
||||
pDst += iNalSize;
|
||||
++ iNalIdx;
|
||||
}
|
||||
pSliceBs->uiBsPos = iSliceSize;
|
||||
@ -761,13 +760,7 @@ WELS_THREAD_ROUTINE_TYPE CodingSliceThreadProc (void* arg) {
|
||||
|
||||
WelsUnloadNalForSlice (pSliceBs);
|
||||
|
||||
int32_t iLeftBufferSize = (iSliceIdx > 0) ?
|
||||
(pSliceBs->uiSize - pSliceBs->uiBsPos)
|
||||
: (pEncPEncCtx->iFrameBsSize - pEncPEncCtx->iPosBsBuffer);
|
||||
iReturn = WriteSliceBs (pEncPEncCtx, pSliceBs->pBs,
|
||||
&pSliceBs->iNalLen[0],
|
||||
iLeftBufferSize,
|
||||
iSliceIdx, iSliceSize);
|
||||
iReturn = WriteSliceBs (pEncPEncCtx, pSliceBs, iSliceIdx, iSliceSize);
|
||||
if (ENC_RETURN_SUCCESS != iReturn) {
|
||||
uiThrdRet = iReturn;
|
||||
WELS_THREAD_SIGNAL_AND_BREAK (pEncPEncCtx->pSliceThreading->pSliceCodedEvent,
|
||||
@ -869,10 +862,7 @@ WELS_THREAD_ROUTINE_TYPE CodingSliceThreadProc (void* arg) {
|
||||
|
||||
WelsUnloadNalForSlice (pSliceBs);
|
||||
|
||||
int32_t iLeftBufferSize = (iSliceIdx > 0) ? (pSliceBs->uiSize - pSliceBs->uiBsPos) : (pEncPEncCtx->iFrameBsSize - pEncPEncCtx->iPosBsBuffer);
|
||||
iReturn = WriteSliceBs (pEncPEncCtx, pSliceBs->pBs, &pSliceBs->iNalLen[0],
|
||||
iLeftBufferSize,
|
||||
iSliceIdx, iSliceSize);
|
||||
iReturn = WriteSliceBs (pEncPEncCtx, pSliceBs, iSliceIdx, iSliceSize);
|
||||
if (ENC_RETURN_SUCCESS != iReturn) {
|
||||
uiThrdRet = iReturn;
|
||||
WELS_THREAD_SIGNAL_AND_BREAK (pEncPEncCtx->pSliceThreading->pSliceCodedEvent,
|
||||
|
@ -165,12 +165,8 @@ WelsErrorType CWelsSliceEncodingTask::ExecuteTask() {
|
||||
WelsUnloadNalForSlice (m_pSliceBs);
|
||||
|
||||
m_iSliceSize = 0;
|
||||
int32_t iLeftBufferSize = (m_iSliceIdx > 0) ? (m_pSliceBs->uiSize - (int32_t) (m_pSliceBs->sBsWrite.pCurBuf -
|
||||
m_pSliceBs->sBsWrite.pStartBuf)) : (m_pCtx->iFrameBsSize - m_pCtx->iPosBsBuffer);
|
||||
iReturn = WriteSliceBs (m_pCtx, m_pSliceBs->pBs,
|
||||
&m_pSliceBs->iNalLen[0],
|
||||
iLeftBufferSize,
|
||||
m_iSliceIdx, m_iSliceSize);
|
||||
iReturn = WriteSliceBs (m_pCtx, m_pSliceBs, m_iSliceIdx, m_iSliceSize);
|
||||
|
||||
if (ENC_RETURN_SUCCESS != iReturn) {
|
||||
WelsLog (&m_pCtx->sLogCtx, WELS_LOG_WARNING,
|
||||
"[MT] CWelsSliceEncodingTask ExecuteTask(), WriteSliceBs not successful: coding_idx %d, um_iSliceIdx %d",
|
||||
|
Loading…
x
Reference in New Issue
Block a user