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
226 fDlp->sSliceCfg.sSliceArgument.uiSliceMbNum[iIdx] = 0;226 fDlp->sSliceCfg.sSliceArgument.uiSliceMbNum[iIdx] = 0;
227 }227 }
228 break;228 break;
229 case SM_FIXEDSLCNUM_SLICE:229 case SM_FIXEDSLCNUM_SLICE:{
230 case SM_AUTO_SLICE:{
231 fDlp->sSliceCfg.sSliceArgument.uiSliceSizeConstraint = 0;230 fDlp->sSliceCfg.sSliceArgument.uiSliceSizeConstraint = 0;
232 231
233 iMbWidth = (kiPicWidth + 15) >> 4;232 iMbWidth = (kiPicWidth + 15) >> 4;
@@ -235,7 +234,7 @@ int32_t ParamValidationExt (sWelsEncCtx*pCtx,SWelsSvcCodingParam* pCodingParam) · 1 unmodified line
235 iMbNumInFrame = iMbWidth * iMbHeight;234 iMbNumInFrame = iMbWidth * iMbHeight;
236 iMaxSliceNum = MAX_SLICES_NUM;235 iMaxSliceNum = MAX_SLICES_NUM;
237 if (fDlp->sSliceCfg.sSliceArgument.uiSliceNum <= 0236 if (fDlp->sSliceCfg.sSliceArgument.uiSliceNum <= 0
238 || fDlp->sSliceCfg.sSliceArgument.uiSliceNum > iMaxSliceNum) {237 || fDlp->sSliceCfg.sSliceArgument.uiSliceNum > iMaxSliceNum) {
239 WelsLog (pCtx, WELS_LOG_ERROR, "ParamValidationExt(), invalid uiSliceNum (%d) settings!\n", fDlp->sSliceCfg.sSliceArgument.uiSliceNum);238 WelsLog (pCtx, WELS_LOG_ERROR, "ParamValidationExt(), invalid uiSliceNum (%d) settings!\n", fDlp->sSliceCfg.sSliceArgument.uiSliceNum);
240 return ENC_RETURN_UNSUPPORTED_PARA;239 return ENC_RETURN_UNSUPPORTED_PARA;
241 }240 }
@@ -267,6 +266,10 @@ int32_t ParamValidationExt (sWelsEncCtx*pCtx,SWelsSvcCodingParam* pCodingParam) · 25 unmodified lines
267 }266 }
268 }267 }
269 break;268 break;
269 case SM_AUTO_SLICE:{
270 fDlp->sSliceCfg.sSliceArgument.uiSliceSizeConstraint = 0;
271 }
272 break;
270 case SM_RASTER_SLICE: {273 case SM_RASTER_SLICE: {
271 fDlp->sSliceCfg.sSliceArgument.uiSliceSizeConstraint = 0;274 fDlp->sSliceCfg.sSliceArgument.uiSliceSizeConstraint = 0;
272 275
@@ -1704,7 +1707,6 @@ int32_t InitSliceSettings (SWelsSvcCodingParam* pCodingParam, const int32_t kiCp · 1431 unmodified lines
1704 break; // go through for MT_ENABLED & SM_DYN_SLICE?1707 break; // go through for MT_ENABLED & SM_DYN_SLICE?
1705//#endif//MT_ENABLED1708//#endif//MT_ENABLED
1706 case SM_FIXEDSLCNUM_SLICE:1709 case SM_FIXEDSLCNUM_SLICE:
1707 case SM_AUTO_SLICE:
1708 if (iSliceNum > iMaxSliceCount)1710 if (iSliceNum > iMaxSliceCount)
1709 iMaxSliceCount = iSliceNum;1711 iMaxSliceCount = iSliceNum;
1710 // need perform check due uiSliceNum might change, although has been initialized somewhere outside1712 // 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
1726 if (iSliceNum > iMaxSliceCount)1728 if (iSliceNum > iMaxSliceCount)
1727 iMaxSliceCount = iSliceNum;1729 iMaxSliceCount = iSliceNum;
1728 break;1730 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;
1729 default:1765 default:
1730 break;1766 break;
1731 }1767 }

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