ref: 604e4677a842d18830b9aa685a70c73bb6d0d454
parent: ff5976515f5dbc4fbf48d6e56832866211e46468
author: huade <[email protected]>
date: Tue Dec 20 02:28:31 EST 2016
Multi-thread-fixed:RBC#1687:refactor for InitSliceHeadWithBase()
--- a/codec/encoder/core/inc/svc_encode_slice.h
+++ b/codec/encoder/core/inc/svc_encode_slice.h
@@ -102,6 +102,10 @@
CMemoryAlign* pMa,
const char* kpTag);
+void InitSliceHeadWithBase (SSlice* pSlice, SSlice* pBaseSlice);
+
+void InitSliceRefInfoWithBase (SSlice* pSlice, SSlice* pBaseSlice, const uint8_t kuiRefCount);
+
int32_t InitSliceList (sWelsEncCtx* pCtx,
SDqLayer* pDqLayer,
SSlice*& pSliceList,
--- a/codec/encoder/core/src/encoder_ext.cpp
+++ b/codec/encoder/core/src/encoder_ext.cpp
@@ -2519,7 +2519,6 @@
SPicture* pDecPic = pCtx->pDecPic;
SDqLayer* pCurDq = pCtx->pCurDqLayer;
SSlice* pBaseSlice = pCurDq->ppSliceInLayer[0];
- SSlice* pSlice = NULL;
const uint8_t kiCurDid = pCtx->uiDependencyId;
const bool kbUseSubsetSpsFlag = (!pParam->bSimulcastAVC) && (kiCurDid > BASE_DEPENDENCY_ID);
SSpatialLayerConfig* fDlp = &pParam->sSpatialLayers[kiCurDid];
@@ -2565,13 +2564,7 @@
iIdx = 1;
while (iIdx < iSliceCount) {
- pSlice = pCurDq->ppSliceInLayer[iIdx];
-
- pSlice->sSliceHeaderExt.sSliceHeader.iPpsId = pBaseSlice->sSliceHeaderExt.sSliceHeader.iPpsId;
- pSlice->sSliceHeaderExt.sSliceHeader.pPps = pBaseSlice->sSliceHeaderExt.sSliceHeader.pPps;
- pSlice->sSliceHeaderExt.sSliceHeader.iSpsId = pBaseSlice->sSliceHeaderExt.sSliceHeader.iSpsId;
- pSlice->sSliceHeaderExt.sSliceHeader.pSps = pBaseSlice->sSliceHeaderExt.sSliceHeader.pSps;
- pSlice->bSliceHeaderExtFlag = pBaseSlice->bSliceHeaderExtFlag;
+ InitSliceHeadWithBase (pCurDq->ppSliceInLayer[iIdx], pBaseSlice);
++ iIdx;
}
@@ -3780,6 +3773,9 @@
pParam->sSliceArgument.uiSliceMode, pCtx->iEncoderError);
return pCtx->iEncoderError;
}
+
+ //TO DO: add update ppSliceInLayer module based on pSliceInThread[ThreadNum]
+ // UpdateSliceInLayerInfo(); // reordering
//TO DO: add update ppSliceInLayer module based on pSliceInThread[ThreadNum]
// UpdateSliceInLayerInfo(); // reordering
--- a/codec/encoder/core/src/ref_list_mgr_svc.cpp
+++ b/codec/encoder/core/src/ref_list_mgr_svc.cpp
@@ -984,7 +984,6 @@
const int32_t iSliceNum = GetCurrentSliceNum (pCtx->pCurDqLayer);
-
ppSliceList = pCtx->pCurDqLayer->ppSliceInLayer;
WlesMarkMMCORefInfoScreen (pCtx, pLtr, ppSliceList, iSliceNum);
--- a/codec/encoder/core/src/svc_enc_slice_segment.cpp
+++ b/codec/encoder/core/src/svc_enc_slice_segment.cpp
@@ -537,7 +537,6 @@
return -1;
}
-
return ppSliceInLayer[kuiSliceIdc]->sSliceHeaderExt.sSliceHeader.iFirstMbInSlice;
}
--- a/codec/encoder/core/src/svc_encode_slice.cpp
+++ b/codec/encoder/core/src/svc_encode_slice.cpp
@@ -1093,25 +1093,27 @@
return ENC_RETURN_SUCCESS;
}
-static inline int32_t InitSliceHeadWithBase (SSlice* pSlice, SSlice* pBaseSlice, const uint8_t kuiRefCount) {
+void InitSliceHeadWithBase (SSlice* pSlice, SSlice* pBaseSlice) {
SSliceHeaderExt* pBaseSHExt = &pBaseSlice->sSliceHeaderExt;
SSliceHeaderExt* pSHExt = &pSlice->sSliceHeaderExt;
- if (NULL == pSlice || NULL == pBaseSlice)
- return ENC_RETURN_INVALIDINPUT;
-
pSlice->bSliceHeaderExtFlag = pBaseSlice->bSliceHeaderExtFlag;
pSHExt->sSliceHeader.iPpsId = pBaseSHExt->sSliceHeader.iPpsId;
pSHExt->sSliceHeader.pPps = pBaseSHExt->sSliceHeader.pPps;
pSHExt->sSliceHeader.iSpsId = pBaseSHExt->sSliceHeader.iSpsId;
pSHExt->sSliceHeader.pSps = pBaseSHExt->sSliceHeader.pSps;
+}
+
+void InitSliceRefInfoWithBase (SSlice* pSlice, SSlice* pBaseSlice, const uint8_t kuiRefCount) {
+ SSliceHeaderExt* pBaseSHExt = &pBaseSlice->sSliceHeaderExt;
+ SSliceHeaderExt* pSHExt = &pSlice->sSliceHeaderExt;
+
pSHExt->sSliceHeader.uiRefCount = kuiRefCount;
memcpy (&pSHExt->sSliceHeader.sRefMarking, &pBaseSHExt->sSliceHeader.sRefMarking, sizeof (SRefPicMarking));
memcpy (&pSHExt->sSliceHeader.sRefReordering, &pBaseSHExt->sSliceHeader.sRefReordering,
sizeof (SRefPicListReorderSyntax));
- return ENC_RETURN_SUCCESS;
-
}
+
static inline int32_t InitSliceRC (SSlice* pSlice, const int32_t kiGlobalQp, const int32_t kiBitsPerMb) {
if (NULL == pSlice || kiGlobalQp < 0 || kiBitsPerMb < 0)
@@ -1197,11 +1199,8 @@
return iRet;
}
- iRet = InitSliceHeadWithBase (pSlice, pBaseSlice, pCtx->iNumRef0);
- if (ENC_RETURN_SUCCESS != iRet) {
- FreeSliceBuffer(pNewSliceList, kiMaxSliceNumNew, pMA, "ReallocateSliceList()::InitSliceBsBuffer()");
- return iRet;
- }
+ InitSliceHeadWithBase (pSlice, pBaseSlice);
+ InitSliceRefInfoWithBase (pSlice, pBaseSlice, pCtx->iNumRef0);
iRet = InitSliceRC (pSlice, pCtx->iGlobalQp, iBitsPerMb);
if (ENC_RETURN_SUCCESS != iRet) {