History

3Author: ruil2 <ruil2@cisco.com> modify the parameter verification for SM_AUTO_SLICE mode -- uiSliceNum iis ignored

ruil2 committed 12 years ago

Commit c7f2a0b1 parent cece1fe5 files · +48 −8Browse files

Showing the changes to codec/encoder/core/src/encoder_ext.cpp (1 of 5 files). Show all

Unified · Split

codec/encoder/core/src/encoder_ext.cpp+40−4
@@ -226,8 +226,7 @@ int32_t ParamValidationExt (sWelsEncCtx*pCtx,SWelsSvcCodingParam* pCodingParam) · 225 unmodified lines
226226 fDlp->sSliceCfg.sSliceArgument.uiSliceMbNum[iIdx] = 0;
227227 }
228228 break;
229− case SM_FIXEDSLCNUM_SLICE:
230− case SM_AUTO_SLICE:{
229+ case SM_FIXEDSLCNUM_SLICE:{
231230 fDlp->sSliceCfg.sSliceArgument.uiSliceSizeConstraint = 0;
232231
233232 iMbWidth = (kiPicWidth + 15) >> 4;
@@ -235,7 +234,7 @@ int32_t ParamValidationExt (sWelsEncCtx*pCtx,SWelsSvcCodingParam* pCodingParam) · 1 unmodified line
235234 iMbNumInFrame = iMbWidth * iMbHeight;
236235 iMaxSliceNum = MAX_SLICES_NUM;
237236 if (fDlp->sSliceCfg.sSliceArgument.uiSliceNum <= 0
238− || fDlp->sSliceCfg.sSliceArgument.uiSliceNum > iMaxSliceNum) {
237+ || fDlp->sSliceCfg.sSliceArgument.uiSliceNum > iMaxSliceNum) {
239238 WelsLog (pCtx, WELS_LOG_ERROR, "ParamValidationExt(), invalid uiSliceNum (%d) settings!\n", fDlp->sSliceCfg.sSliceArgument.uiSliceNum);
240239 return ENC_RETURN_UNSUPPORTED_PARA;
241240 }
@@ -267,6 +266,10 @@ int32_t ParamValidationExt (sWelsEncCtx*pCtx,SWelsSvcCodingParam* pCodingParam) · 25 unmodified lines
267266 }
268267 }
269268 break;
269+ case SM_AUTO_SLICE:{
270+ fDlp->sSliceCfg.sSliceArgument.uiSliceSizeConstraint = 0;
271+ }
272+ break;
270273 case SM_RASTER_SLICE: {
271274 fDlp->sSliceCfg.sSliceArgument.uiSliceSizeConstraint = 0;
272275
@@ -1704,7 +1707,6 @@ int32_t InitSliceSettings (SWelsSvcCodingParam* pCodingParam, const int32_t kiCp · 1431 unmodified lines
17041707 break; // go through for MT_ENABLED & SM_DYN_SLICE?
17051708 //#endif//MT_ENABLED
17061709 case SM_FIXEDSLCNUM_SLICE:
1707− case SM_AUTO_SLICE:
17081710 if (iSliceNum > iMaxSliceCount)
17091711 iMaxSliceCount = iSliceNum;
17101712 // need perform check due uiSliceNum might change, although has been initialized somewhere outside
@@ -1726,6 +1728,40 @@ int32_t InitSliceSettings (SWelsSvcCodingParam* pCodingParam, const int32_t kiCp · 15 unmodified lines
17261728 if (iSliceNum > iMaxSliceCount)
17271729 iMaxSliceCount = iSliceNum;
17281730 break;
1731+ case SM_AUTO_SLICE:
1732+ iMaxSliceCount = MAX_SLICES_NUM;
1733+ pDlp->sSliceCfg.sSliceArgument.uiSliceNum = kiCpuCores;
1734+ if (pDlp->sSliceCfg.sSliceArgument.uiSliceNum > iMaxSliceCount){
1735+ pDlp->sSliceCfg.sSliceArgument.uiSliceNum = iMaxSliceCount;
1736+ }
1737+ if (pDlp->sSliceCfg.sSliceArgument.uiSliceNum == 1) {
1738+ WelsLog (NULL, WELS_LOG_DEBUG,
1739+ "InitSliceSettings(), uiSliceNum(%d) you set for SM_AUTO_SLICE, now turn to SM_SINGLE_SLICE type!\n",
1740+ pDlp->sSliceCfg.sSliceArgument.uiSliceNum);
1741+ pDlp->sSliceCfg.uiSliceMode = SM_SINGLE_SLICE;
1742+ break;
1743+ }
1744+ if (pCodingParam->bEnableRc) { // multiple slices verify with gom
1745+ //check uiSliceNum
1746+ GomValidCheckSliceNum (kiMbWidth, kiMbHeight, &pDlp->sSliceCfg.sSliceArgument.uiSliceNum);
1747+ assert (pDlp->sSliceCfg.sSliceArgument.uiSliceNum > 1);
1748+ //set uiSliceMbNum with current uiSliceNum
1749+ GomValidCheckSliceMbNum (kiMbWidth, kiMbHeight, &pDlp->sSliceCfg.sSliceArgument);
1750+ } else if (!CheckFixedSliceNumMultiSliceSetting (kiMbNumInFrame,
1751+ &pDlp->sSliceCfg.sSliceArgument)) { // verify interleave mode settings
1752+ //check uiSliceMbNum with current uiSliceNum
1753+ WelsLog (NULL, WELS_LOG_ERROR, "InitSliceSettings(), invalid uiSliceMbNum (%d) settings!,now turn to SM_SINGLE_SLICE type\n",
1754+ pDlp->sSliceCfg.sSliceArgument.uiSliceMbNum[0]);
1755+ pDlp->sSliceCfg.uiSliceMode = SM_SINGLE_SLICE;
1756+ pDlp->sSliceCfg.sSliceArgument.uiSliceNum = 1;
1757+ }
1758+ // considering the coding efficient and performance, iCountMbNum constraint by MIN_NUM_MB_PER_SLICE condition of multi-pSlice mode settting
1759+ if (kiMbNumInFrame <= MIN_NUM_MB_PER_SLICE) {
1760+ pDlp->sSliceCfg.uiSliceMode = SM_SINGLE_SLICE;
1761+ pDlp->sSliceCfg.sSliceArgument.uiSliceNum = 1;
1762+ break;
1763+ }
1764+ break;
17291765 default:
17301766 break;
17311767 }

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t