MCPcopy Create free account
hub / github.com/cisco/openh264 / WelsFillCacheInterCabac

Function WelsFillCacheInterCabac

codec/decoder/core/src/parse_mb_syn_cavlc.cpp:247–386  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

245}
246
247void 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

Calls 1

Tested by

no test coverage detected