fix an improper mb-size assignment
This commit is contained in:
parent
7c868cab4d
commit
38ffbf7df4
@ -280,33 +280,33 @@ bool GomValidCheckSliceMbNum (const int32_t kiMbWidth, const int32_t kiMbHeight,
|
|||||||
iGomSize = kiMbWidth * GOM_ROW_MODE0_360P;
|
iGomSize = kiMbWidth * GOM_ROW_MODE0_360P;
|
||||||
else
|
else
|
||||||
iGomSize = kiMbWidth * GOM_ROW_MODE0_720P;
|
iGomSize = kiMbWidth * GOM_ROW_MODE0_720P;
|
||||||
|
|
||||||
iMinimalMbNum = iGomSize;
|
|
||||||
iMaximalMbNum = kiMbNumInFrame - (kuiSliceNum - 1) * iMinimalMbNum;
|
|
||||||
|
|
||||||
while (uiSliceIdx + 1 < kuiSliceNum) {
|
|
||||||
// GOM boundary aligned
|
// GOM boundary aligned
|
||||||
int32_t iNumMbAssigning = WELS_DIV_ROUND (INT_MULTIPLY * kiMbNumPerSlice, iGomSize * INT_MULTIPLY) * iGomSize;
|
int32_t iNumMbAssigning = WELS_DIV_ROUND (INT_MULTIPLY * kiMbNumPerSlice, iGomSize * INT_MULTIPLY) * iGomSize;
|
||||||
|
int32_t iCurNumMbAssigning = 0;
|
||||||
|
|
||||||
|
iMinimalMbNum = iGomSize;
|
||||||
|
while (uiSliceIdx + 1 < kuiSliceNum) {
|
||||||
|
iMaximalMbNum = iNumMbLeft - (kuiSliceNum - uiSliceIdx - 1) * iMinimalMbNum; // get maximal num_mb in left parts
|
||||||
|
|
||||||
// make sure one GOM at least in each slice for safe
|
// make sure one GOM at least in each slice for safe
|
||||||
if (iNumMbAssigning < iMinimalMbNum)
|
if (iNumMbAssigning < iMinimalMbNum)
|
||||||
iNumMbAssigning = iMinimalMbNum;
|
iCurNumMbAssigning = iMinimalMbNum;
|
||||||
else if (iNumMbAssigning > iMaximalMbNum)
|
else if (iNumMbAssigning > iMaximalMbNum)
|
||||||
iNumMbAssigning = iMaximalMbNum;
|
iCurNumMbAssigning = ( iMaximalMbNum / iGomSize ) * iGomSize;
|
||||||
|
else
|
||||||
|
iCurNumMbAssigning = iNumMbAssigning;
|
||||||
|
|
||||||
if (iNumMbAssigning <= 0) {
|
if (iCurNumMbAssigning <= 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
iNumMbLeft -= iNumMbAssigning;
|
iNumMbLeft -= iCurNumMbAssigning;
|
||||||
if (iNumMbLeft <= 0) {
|
if (iNumMbLeft <= 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
pSlicesAssignList[uiSliceIdx] = iNumMbAssigning;
|
pSlicesAssignList[uiSliceIdx] = iCurNumMbAssigning;
|
||||||
|
|
||||||
++ uiSliceIdx;
|
++ uiSliceIdx;
|
||||||
iMaximalMbNum = iNumMbLeft - (kuiSliceNum - uiSliceIdx - 1) * iMinimalMbNum; // get maximal num_mb in left parts
|
|
||||||
}
|
}
|
||||||
pSlicesAssignList[uiSliceIdx] = iNumMbLeft;
|
pSlicesAssignList[uiSliceIdx] = iNumMbLeft;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user