| 245 | } |
| 246 | |
| 247 | void WelsFillCacheInterCabac (PWelsNeighAvail pNeighAvail, uint8_t* pNonZeroCount, int16_t iMvArray[LIST_A][30][MV_A], |
| 248 | int16_t iMvdCache[LIST_A][30][MV_A], int8_t iRefIdxArray[LIST_A][30], PDqLayer pCurDqLayer) { |
| 249 | int32_t iCurXy = pCurDqLayer->iMbXyIndex; |
| 250 | int32_t iTopXy = 0; |
| 251 | int32_t iLeftXy = 0; |
| 252 | int32_t iLeftTopXy = 0; |
| 253 | int32_t iRightTopXy = 0; |
| 254 | |
| 255 | PSlice pSlice = &pCurDqLayer->sLayerInfo.sSliceInLayer; |
| 256 | PSliceHeader pSliceHeader = &pSlice->sSliceHeaderExt.sSliceHeader; |
| 257 | int32_t listCount = 1; |
| 258 | if (pSliceHeader->eSliceType == B_SLICE) { |
| 259 | listCount = 2; |
| 260 | } |
| 261 | //stuff non_zero_coeff_count from pNeighAvail(left and top) |
| 262 | WelsFillCacheNonZeroCount (pNeighAvail, pNonZeroCount, pCurDqLayer); |
| 263 | |
| 264 | if (pNeighAvail->iTopAvail) { |
| 265 | iTopXy = iCurXy - pCurDqLayer->iMbWidth; |
| 266 | } |
| 267 | if (pNeighAvail->iLeftAvail) { |
| 268 | iLeftXy = iCurXy - 1; |
| 269 | } |
| 270 | if (pNeighAvail->iLeftTopAvail) { |
| 271 | iLeftTopXy = iCurXy - 1 - pCurDqLayer->iMbWidth; |
| 272 | } |
| 273 | if (pNeighAvail->iRightTopAvail) { |
| 274 | iRightTopXy = iCurXy + 1 - pCurDqLayer->iMbWidth; |
| 275 | } |
| 276 | |
| 277 | for (int32_t listIdx = 0; listIdx < listCount; ++listIdx) { |
| 278 | //stuff mv_cache and iRefIdxArray from left and top (inter) |
| 279 | if (pNeighAvail->iLeftAvail && IS_INTER (pNeighAvail->iLeftType)) { |
| 280 | ST32 (iMvArray[listIdx][6], LD32 (pCurDqLayer->pDec->pMv[listIdx][iLeftXy][3])); |
| 281 | ST32 (iMvArray[listIdx][12], LD32 (pCurDqLayer->pDec->pMv[listIdx][iLeftXy][7])); |
| 282 | ST32 (iMvArray[listIdx][18], LD32 (pCurDqLayer->pDec->pMv[listIdx][iLeftXy][11])); |
| 283 | ST32 (iMvArray[listIdx][24], LD32 (pCurDqLayer->pDec->pMv[listIdx][iLeftXy][15])); |
| 284 | |
| 285 | ST32 (iMvdCache[listIdx][6], LD32 (pCurDqLayer->pMvd[listIdx][iLeftXy][3])); |
| 286 | ST32 (iMvdCache[listIdx][12], LD32 (pCurDqLayer->pMvd[listIdx][iLeftXy][7])); |
| 287 | ST32 (iMvdCache[listIdx][18], LD32 (pCurDqLayer->pMvd[listIdx][iLeftXy][11])); |
| 288 | ST32 (iMvdCache[listIdx][24], LD32 (pCurDqLayer->pMvd[listIdx][iLeftXy][15])); |
| 289 | |
| 290 | iRefIdxArray[listIdx][6] = pCurDqLayer->pDec->pRefIndex[listIdx][iLeftXy][3]; |
| 291 | iRefIdxArray[listIdx][12] = pCurDqLayer->pDec->pRefIndex[listIdx][iLeftXy][7]; |
| 292 | iRefIdxArray[listIdx][18] = pCurDqLayer->pDec->pRefIndex[listIdx][iLeftXy][11]; |
| 293 | iRefIdxArray[listIdx][24] = pCurDqLayer->pDec->pRefIndex[listIdx][iLeftXy][15]; |
| 294 | } else { |
| 295 | ST32 (iMvArray[listIdx][6], 0); |
| 296 | ST32 (iMvArray[listIdx][12], 0); |
| 297 | ST32 (iMvArray[listIdx][18], 0); |
| 298 | ST32 (iMvArray[listIdx][24], 0); |
| 299 | |
| 300 | ST32 (iMvdCache[listIdx][6], 0); |
| 301 | ST32 (iMvdCache[listIdx][12], 0); |
| 302 | ST32 (iMvdCache[listIdx][18], 0); |
| 303 | ST32 (iMvdCache[listIdx][24], 0); |
| 304 |
no test coverage detected