ref: 6a8f6c9b8e88cfbccc6a24bbdac518b4fc6e605b
parent: f6c37b009664288d066e8c9efd4adf10e4b7a6d0
author: Karina <[email protected]>
date: Wed May 3 06:32:08 EDT 2017
use cavlc if profile is baseline(following profile set)
--- a/codec/encoder/core/src/encoder_ext.cpp
+++ b/codec/encoder/core/src/encoder_ext.cpp
@@ -132,10 +132,6 @@
uiProfileIdc);
pLayerInfo->uiProfileIdc = PRO_BASELINE;
}
- if (pParam->iEntropyCodingModeFlag && pLayerInfo->uiProfileIdc == PRO_BASELINE) {
- pLayerInfo->uiProfileIdc = PRO_MAIN;
- WelsLog (pLogCtx, WELS_LOG_WARNING, "layerId(%d) change to main profile because cabac is enabled", iLayer);
- }
} else {
if (iLayer == SPATIAL_LAYER_0) {
if ((uiProfileIdc != PRO_BASELINE) && (uiProfileIdc != PRO_MAIN) && (uiProfileIdc != PRO_HIGH)) {
@@ -143,10 +139,6 @@
uiProfileIdc);
pLayerInfo->uiProfileIdc = PRO_BASELINE;
}
- if (pParam->iEntropyCodingModeFlag && (pLayerInfo->uiProfileIdc == PRO_BASELINE)) {
- pLayerInfo->uiProfileIdc = PRO_MAIN;
- WelsLog (pLogCtx, WELS_LOG_WARNING, "layerId(%d) change to main profile because cabac is enabled", iLayer);
- }
} else {
if ((uiProfileIdc != PRO_SCALABLE_BASELINE) && (uiProfileIdc != PRO_SCALABLE_HIGH)) {
pLayerInfo->uiProfileIdc = PRO_SCALABLE_BASELINE;
@@ -153,10 +145,6 @@
WelsLog (pLogCtx, WELS_LOG_WARNING, "layerId(%d) doesn't support profile(%d), change to scalable baseline profile",
iLayer, uiProfileIdc);
}
- if (pParam->iEntropyCodingModeFlag && (pLayerInfo->uiProfileIdc == PRO_SCALABLE_BASELINE)) {
- pLayerInfo->uiProfileIdc = PRO_SCALABLE_HIGH;
- WelsLog (pLogCtx, WELS_LOG_WARNING, "layerId(%d) change to scalable hight profile because cabac is enabled", iLayer);
- }
}
}
}
@@ -645,7 +633,15 @@
break;
}
}
-
+ for (i = 0; i < pCodingParam->iSpatialLayerNum; ++ i) {
+ SSpatialLayerConfig* pLayerInfo = &pCodingParam->sSpatialLayers[i];
+ if ((pLayerInfo->uiProfileIdc == PRO_BASELINE) || (pLayerInfo->uiProfileIdc == PRO_SCALABLE_BASELINE)) {
+ if (pCodingParam->iEntropyCodingModeFlag != 0) {
+ pCodingParam->iEntropyCodingModeFlag = 0;
+ WelsLog (pLogCtx, WELS_LOG_WARNING, "layerId(%d) Profile is baseline, Change CABAC to CAVLC",i);
+ }
+ }
+ }
return ParamValidation (pLogCtx, pCodingParam);
}
@@ -728,7 +724,7 @@
* \return 0 - successful; otherwise failed
*/
int32_t AcquireLayersNals (sWelsEncCtx** ppCtx, SWelsSvcCodingParam* pParam, int32_t* pCountLayers,
- int32_t* pCountNals) {
+ int32_t* pCountNals) {
int32_t iCountNumLayers = 0;
int32_t iCountNumNals = 0;
int32_t iNumDependencyLayers = 0;
@@ -2415,7 +2411,7 @@
else if (iPartitionNum > AVERSLICENUM_CONSTRAINT)
iPartitionNum = AVERSLICENUM_CONSTRAINT; // AVERSLICENUM_CONSTRAINT might be variable, however not fixed by MACRO
iCountMbNumPerPartition /= iPartitionNum;
- if(iCountMbNumPerPartition == 0 || iCountMbNumPerPartition == 1) {
+ if (iCountMbNumPerPartition == 0 || iCountMbNumPerPartition == 1) {
iCountMbNumPerPartition = kiMbNumInFrame;
iPartitionNum = 1;
}
@@ -2444,7 +2440,7 @@
++ i;
}
- while(i<MAX_THREADS_NUM) {
+ while (i < MAX_THREADS_NUM) {
pCurDq->FirstMbIdxOfPartition[i] = 0;
pCurDq->EndMbIdxOfPartition[i] = 0;
pCurDq->LastCodedMbIdxOfPartition[i] = 0;
@@ -2489,7 +2485,7 @@
//MINPACKETSIZE_CONSTRAINT
//suppose 16 byte per mb at average
uiMiniPacketSize = (uint32_t) (uiFrmByte / pSliceCtx->iMaxSliceNumConstraint);
- if (pSliceCtx->uiSliceSizeConstraint < uiMiniPacketSize ) {
+ if (pSliceCtx->uiSliceSizeConstraint < uiMiniPacketSize) {
WelsLog (& (pCtx->sLogCtx),
WELS_LOG_WARNING,
"Set-SliceConstraint(%d) too small for current resolution (MB# %d) under QP/BR!",
@@ -3655,7 +3651,7 @@
WelsLoadNal (pCtx->pOut, eNalType, eNalRefIdc);
assert (0 == (int) pCurSlice->iSliceIdx);
- pCtx->iEncoderError = SetSliceBoundaryInfo(pCtx->pCurDqLayer, pCurSlice, 0);
+ pCtx->iEncoderError = SetSliceBoundaryInfo (pCtx->pCurDqLayer, pCurSlice, 0);
WELS_VERIFY_RETURN_IFNEQ (pCtx->iEncoderError, ENC_RETURN_SUCCESS)
pCtx->iEncoderError = WelsCodeOneSlice (pCtx, pCurSlice, eNalType);
@@ -3748,10 +3744,10 @@
++ iIdx;
}
- int32_t iRet = InitAllSlicesInThread(pCtx);
+ int32_t iRet = InitAllSlicesInThread (pCtx);
if (iRet) {
WelsLog (pLogCtx, WELS_LOG_ERROR,
- "WelsEncoderEncodeExt(), multi-slice (mode %d) InitAllSlicesInThread() error!",
+ "WelsEncoderEncodeExt(), multi-slice (mode %d) InitAllSlicesInThread() error!",
pParam->sSliceArgument.uiSliceMode);
return ENC_RETURN_UNEXPECTED;
}
@@ -3796,7 +3792,7 @@
pCurSlice = &pCtx->pCurDqLayer->sSliceBufferInfo[0].pSliceBuffer[iSliceIdx];
assert (iSliceIdx == pCurSlice->iSliceIdx);
- pCtx->iEncoderError = SetSliceBoundaryInfo(pCtx->pCurDqLayer, pCurSlice, iSliceIdx);
+ pCtx->iEncoderError = SetSliceBoundaryInfo (pCtx->pCurDqLayer, pCurSlice, iSliceIdx);
pCtx->iEncoderError = WelsCodeOneSlice (pCtx, pCurSlice, eNalType);
WELS_VERIFY_RETURN_IFNEQ (pCtx->iEncoderError, ENC_RETURN_SUCCESS)
@@ -4426,7 +4422,7 @@
int32_t iRet = 0;
iRet = FrameBsRealloc (pCtx, pFrameBsInfo, pLayerBsInfo, pCtx->pCurDqLayer->iMaxSliceNum);
- if(ENC_RETURN_SUCCESS != iRet) {
+ if (ENC_RETURN_SUCCESS != iRet) {
return iRet;
}
@@ -4470,7 +4466,8 @@
int32_t iPayloadSize = 0;
SSlice* pCurSlice = NULL;
- if (iSliceIdx >= (pCurLayer->sSliceBufferInfo[uSlcBuffIdx].iMaxSliceNum - kiSliceIdxStep)) { // insufficient memory in pSliceInLayer[]
+ if (iSliceIdx >= (pCurLayer->sSliceBufferInfo[uSlcBuffIdx].iMaxSliceNum -
+ kiSliceIdxStep)) { // insufficient memory in pSliceInLayer[]
if (pCtx->iActiveThreadsNum == 1) {
//only single thread support re-alloc now
if (DynSliceRealloc (pCtx, pFrameBSInfo, pLayerBsInfo)) {
--- a/test/api/BaseEncoderTest.cpp
+++ b/test/api/BaseEncoderTest.cpp
@@ -20,7 +20,6 @@
param.iPicWidth = pEncParamExt->iPicWidth;
param.iPicHeight = pEncParamExt->iPicHeight;
param.iTargetBitrate = 5000000;
-
return encoder->Initialize (¶m);
} else {
SEncParamExt param;
@@ -36,7 +35,8 @@
param.bIsLosslessLink = pEncParamExt->bIsLosslessLink;
param.bEnableLongTermReference = pEncParamExt->bEnableLongTermReference;
param.iEntropyCodingModeFlag = pEncParamExt->iEntropyCodingModeFlag ? 1 : 0;
- if (eSliceMode != SM_SINGLE_SLICE && eSliceMode != SM_SIZELIMITED_SLICE) //SM_SIZELIMITED_SLICE don't support multi-thread now
+ if (eSliceMode != SM_SINGLE_SLICE
+ && eSliceMode != SM_SIZELIMITED_SLICE) //SM_SIZELIMITED_SLICE don't support multi-thread now
param.iMultipleThreadIdc = 2;
for (int i = 0; i < param.iSpatialLayerNum; i++) {
@@ -57,9 +57,11 @@
param.iMultipleThreadIdc = 4;
param.bUseLoadBalancing = false;
}
+ if (param.iEntropyCodingModeFlag) {
+ param.sSpatialLayers[i].uiProfileIdc = PRO_MAIN;
+ }
}
param.iTargetBitrate *= param.iSpatialLayerNum;
-
return encoder->InitializeExt (¶m);
}
}
--- a/test/api/encode_options_test.cpp
+++ b/test/api/encode_options_test.cpp
@@ -1973,10 +1973,7 @@
if ((iEncProfileIdc != PRO_BASELINE) && (iEncProfileIdc != PRO_MAIN) && (iEncProfileIdc != PRO_HIGH)) {
iEncProfileIdc = PRO_BASELINE;
}
- if ((iEncProfileIdc == PRO_BASELINE) && (sParam.iEntropyCodingModeFlag == 1))
- iEncProfileIdc = PRO_MAIN;
-
ASSERT_TRUE (iDecProfileIdc == iEncProfileIdc) << "enc_profile = " << iEncProfileIdc << " dec_profile = " <<
iDecProfileIdc;
@@ -2036,9 +2033,6 @@
if ((iEncProfileIdc != PRO_BASELINE) && (iEncProfileIdc != PRO_MAIN) && (iEncProfileIdc != PRO_HIGH)) {
iEncProfileIdc = PRO_BASELINE;
}
- if ((iEncProfileIdc == PRO_BASELINE) && (sParam.iEntropyCodingModeFlag == 1))
- iEncProfileIdc = PRO_MAIN;
-
ASSERT_TRUE (iDecProfileIdc == iEncProfileIdc) << "enc_profile = " << iEncProfileIdc << " dec_profile = " <<
iDecProfileIdc;