| 212 | } |
| 213 | |
| 214 | int32_t DecodeTerminateCabac (PWelsCabacDecEngine pDecEngine, uint32_t& uiBinVal) { |
| 215 | int32_t iErrorInfo = ERR_NONE; |
| 216 | uint64_t uiRange = pDecEngine->uiRange - 2; |
| 217 | uint64_t uiOffset = pDecEngine->uiOffset; |
| 218 | |
| 219 | if (uiOffset >= (uiRange << pDecEngine->iBitsLeft)) { |
| 220 | uiBinVal = 1; |
| 221 | } else { |
| 222 | uiBinVal = 0; |
| 223 | // Renorm |
| 224 | if (uiRange < WELS_CABAC_QUARTER) { |
| 225 | int32_t iRenorm = g_kRenormTable256[uiRange]; |
| 226 | pDecEngine->uiRange = (uiRange << iRenorm); |
| 227 | pDecEngine->iBitsLeft -= iRenorm; |
| 228 | if (pDecEngine->iBitsLeft < 0) { |
| 229 | uint32_t uiVal = 0; |
| 230 | int32_t iNumBitsRead = 0; |
| 231 | iErrorInfo = Read32BitsCabac (pDecEngine, uiVal, iNumBitsRead); |
| 232 | pDecEngine->uiOffset = (pDecEngine->uiOffset << iNumBitsRead) | uiVal; |
| 233 | pDecEngine->iBitsLeft += iNumBitsRead; |
| 234 | } |
| 235 | if (iErrorInfo && pDecEngine->iBitsLeft < 0) { |
| 236 | return iErrorInfo; |
| 237 | } |
| 238 | return ERR_NONE; |
| 239 | } else { |
| 240 | pDecEngine->uiRange = uiRange; |
| 241 | return ERR_NONE; |
| 242 | } |
| 243 | } |
| 244 | return ERR_NONE; |
| 245 | } |
| 246 | |
| 247 | int32_t DecodeUnaryBinCabac (PWelsCabacDecEngine pDecEngine, PWelsCabacCtx pBinCtx, int32_t iCtxOffset, |
| 248 | uint32_t& uiSymVal) { |
no test coverage detected