History

re-structure SWelsDecoderContext and others and prepare for the support of multi-threading support.

xiaotiansf committed 7 years ago

Commit 2f5ecec1 parent 9ed97c729 files · +2285 −1568Browse files

Showing the changes to codec/decoder/core/src/mv_pred.cpp (1 of 29 files). Show all

Unified · Split

codec/decoder/core/src/mv_pred.cpp+244−198
@@ -155,7 +155,7 @@ void CopyRectBlock4Cols (void* vdst, void* vsrc, const int32_t stride_dst, const · 154 unmodified lines
155155 memcpy (&dst[stride_dst * 3], &src[stride_src * 3], 16);
156156 }
157157 }
158−void PredPSkipMvFromNeighbor (PDqLayer pCurLayer, int16_t iMvp[2]) {
158+void PredPSkipMvFromNeighbor (PDqLayer pCurDqLayer, int16_t iMvp[2]) {
159159 bool bTopAvail, bLeftTopAvail, bRightTopAvail, bLeftAvail;
160160
161161 int32_t iCurSliceIdc, iTopSliceIdc, iLeftTopSliceIdc, iRightTopSliceIdc, iLeftSliceIdc;
@@ -170,14 +170,14 @@ void PredPSkipMvFromNeighbor (PDqLayer pCurLayer, int16_t iMvp[2]) { · 8 unmodified lines
170170 int8_t iMatchRef;
171171 int16_t iMvA[2], iMvB[2], iMvC[2], iMvD[2];
172172
173− iCurXy = pCurLayer->iMbXyIndex;
174− iCurX = pCurLayer->iMbX;
175− iCurY = pCurLayer->iMbY;
176− iCurSliceIdc = pCurLayer->pSliceIdc[iCurXy];
173+ iCurXy = pCurDqLayer->iMbXyIndex;
174+ iCurX = pCurDqLayer->iMbX;
175+ iCurY = pCurDqLayer->iMbY;
176+ iCurSliceIdc = pCurDqLayer->pSliceIdc[iCurXy];
177177
178178 if (iCurX != 0) {
179179 iLeftXy = iCurXy - 1;
180− iLeftSliceIdc = pCurLayer->pSliceIdc[iLeftXy];
180+ iLeftSliceIdc = pCurDqLayer->pSliceIdc[iLeftXy];
181181 bLeftAvail = (iLeftSliceIdc == iCurSliceIdc);
182182 } else {
183183 bLeftAvail = 0;
@@ -185,19 +185,19 @@ void PredPSkipMvFromNeighbor (PDqLayer pCurLayer, int16_t iMvp[2]) { · 1 unmodified line
185185 }
186186
187187 if (iCurY != 0) {
188− iTopXy = iCurXy - pCurLayer->iMbWidth;
189− iTopSliceIdc = pCurLayer->pSliceIdc[iTopXy];
188+ iTopXy = iCurXy - pCurDqLayer->iMbWidth;
189+ iTopSliceIdc = pCurDqLayer->pSliceIdc[iTopXy];
190190 bTopAvail = (iTopSliceIdc == iCurSliceIdc);
191191 if (iCurX != 0) {
192192 iLeftTopXy = iTopXy - 1;
193− iLeftTopSliceIdc = pCurLayer->pSliceIdc[iLeftTopXy];
193+ iLeftTopSliceIdc = pCurDqLayer->pSliceIdc[iLeftTopXy];
194194 bLeftTopAvail = (iLeftTopSliceIdc == iCurSliceIdc);
195195 } else {
196196 bLeftTopAvail = 0;
197197 }
198− if (iCurX != (pCurLayer->iMbWidth - 1)) {
198+ if (iCurX != (pCurDqLayer->iMbWidth - 1)) {
199199 iRightTopXy = iTopXy + 1;
200− iRightTopSliceIdc = pCurLayer->pSliceIdc[iRightTopXy];
200+ iRightTopSliceIdc = pCurDqLayer->pSliceIdc[iRightTopXy];
201201 bRightTopAvail = (iRightTopSliceIdc == iCurSliceIdc);
202202 } else {
203203 bRightTopAvail = 0;
@@ -208,18 +208,18 @@ void PredPSkipMvFromNeighbor (PDqLayer pCurLayer, int16_t iMvp[2]) { · 4 unmodified lines
208208 bRightTopAvail = 0;
209209 }
210210
211− iLeftType = ((iCurX != 0 && bLeftAvail) ? pCurLayer->pMbType[iLeftXy] : 0);
212− iTopType = ((iCurY != 0 && bTopAvail) ? pCurLayer->pMbType[iTopXy] : 0);
211+ iLeftType = ((iCurX != 0 && bLeftAvail) ? GetMbType (pCurDqLayer)[iLeftXy] : 0);
212+ iTopType = ((iCurY != 0 && bTopAvail) ? GetMbType (pCurDqLayer)[iTopXy] : 0);
213213 iLeftTopType = ((iCurX != 0 && iCurY != 0 && bLeftTopAvail)
214− ? pCurLayer->pMbType[iLeftTopXy] : 0);
215− iRightTopType = ((iCurX != pCurLayer->iMbWidth - 1 && iCurY != 0 && bRightTopAvail)
216− ? pCurLayer->pMbType[iRightTopXy] : 0);
214+ ? GetMbType (pCurDqLayer)[iLeftTopXy] : 0);
215+ iRightTopType = ((iCurX != pCurDqLayer->iMbWidth - 1 && iCurY != 0 && bRightTopAvail)
216+ ? GetMbType (pCurDqLayer)[iRightTopXy] : 0);
217217
218218 /*get neb mv&iRefIdxArray*/
219219 /*left*/
220220 if (bLeftAvail && IS_INTER (iLeftType)) {
221− ST32 (iMvA, LD32 (pCurLayer->pMv[0][iLeftXy][3]));
222− iLeftRef = pCurLayer->pRefIndex[0][iLeftXy][3];
221+ ST32 (iMvA, LD32 (pCurDqLayer->pDec ? pCurDqLayer->pDec->pMv[0][iLeftXy][3] : pCurDqLayer->pMv[0][iLeftXy][3]));
222+ iLeftRef = pCurDqLayer->pDec ? pCurDqLayer->pDec->pRefIndex[0][iLeftXy][3] : pCurDqLayer->pRefIndex[0][iLeftXy][3];
223223 } else {
224224 ST32 (iMvA, 0);
225225 if (0 == bLeftAvail) { //not available
@@ -236,8 +236,8 @@ void PredPSkipMvFromNeighbor (PDqLayer pCurLayer, int16_t iMvp[2]) { · 10 unmodified lines
236236
237237 /*top*/
238238 if (bTopAvail && IS_INTER (iTopType)) {
239− ST32 (iMvB, LD32 (pCurLayer->pMv[0][iTopXy][12]));
240− iTopRef = pCurLayer->pRefIndex[0][iTopXy][12];
239+ ST32 (iMvB, LD32 (pCurDqLayer->pDec ? pCurDqLayer->pDec->pMv[0][iTopXy][12] : pCurDqLayer->pMv[0][iTopXy][12]));
240+ iTopRef = pCurDqLayer->pDec ? pCurDqLayer->pDec->pRefIndex[0][iTopXy][12] : pCurDqLayer->pRefIndex[0][iTopXy][12];
241241 } else {
242242 ST32 (iMvB, 0);
243243 if (0 == bTopAvail) { //not available
@@ -254,8 +254,10 @@ void PredPSkipMvFromNeighbor (PDqLayer pCurLayer, int16_t iMvp[2]) { · 10 unmodified lines
254254
255255 /*right_top*/
256256 if (bRightTopAvail && IS_INTER (iRightTopType)) {
257− ST32 (iMvC, LD32 (pCurLayer->pMv[0][iRightTopXy][12]));
258− iRightTopRef = pCurLayer->pRefIndex[0][iRightTopXy][12];
257+ ST32 (iMvC, LD32 (pCurDqLayer->pDec ? pCurDqLayer->pDec->pMv[0][iRightTopXy][12] :
258+ pCurDqLayer->pMv[0][iRightTopXy][12]));
259+ iRightTopRef = pCurDqLayer->pDec ? pCurDqLayer->pDec->pRefIndex[0][iRightTopXy][12] :
260+ pCurDqLayer->pRefIndex[0][iRightTopXy][12];
259261 } else {
260262 ST32 (iMvC, 0);
261263 if (0 == bRightTopAvail) { //not available
@@ -267,8 +269,9 @@ void PredPSkipMvFromNeighbor (PDqLayer pCurLayer, int16_t iMvp[2]) { · 5 unmodified lines
267269
268270 /*left_top*/
269271 if (bLeftTopAvail && IS_INTER (iLeftTopType)) {
270− ST32 (iMvD, LD32 (pCurLayer->pMv[0][iLeftTopXy][15]));
271− iLeftTopRef = pCurLayer->pRefIndex[0][iLeftTopXy][15];
272+ ST32 (iMvD, LD32 (pCurDqLayer->pDec ? pCurDqLayer->pDec->pMv[0][iLeftTopXy][15] : pCurDqLayer->pMv[0][iLeftTopXy][15]));
273+ iLeftTopRef = pCurDqLayer->pDec ? pCurDqLayer->pDec->pRefIndex[0][iLeftTopXy][15] :
274+ pCurDqLayer->pRefIndex[0][iLeftTopXy][15];
272275 } else {
273276 ST32 (iMvD, 0);
274277 if (0 == bLeftTopAvail) { //not available
@@ -305,11 +308,11 @@ void PredPSkipMvFromNeighbor (PDqLayer pCurLayer, int16_t iMvp[2]) { · 30 unmodified lines
305308 }
306309
307310 int32_t GetColocatedMb (PWelsDecoderContext pCtx, MbType& mbType, SubMbType& subMbType) {
308− PDqLayer pCurLayer = pCtx->pCurDqLayer;
309− int32_t iMbXy = pCurLayer->iMbXyIndex;
311+ PDqLayer pCurDqLayer = pCtx->pCurDqLayer;
312+ int32_t iMbXy = pCurDqLayer->iMbXyIndex;
310313
311− uint32_t is8x8 = IS_Inter_8x8 (pCurLayer->pMbType[iMbXy]);
312− mbType = pCurLayer->pMbType[iMbXy];
314+ uint32_t is8x8 = IS_Inter_8x8 (GetMbType (pCurDqLayer)[iMbXy]);
315+ mbType = GetMbType (pCurDqLayer)[iMbXy];
313316
314317 PPicture colocPic = pCtx->sRefPic.pRefList[LIST_1][0];
315318
@@ -336,43 +339,43 @@ int32_t GetColocatedMb (PWelsDecoderContext pCtx, MbType& mbType, SubMbType& sub · 20 unmodified lines
336339 }
337340
338341 if (IS_INTRA (coloc_mbType)) {
339− SetRectBlock (pCurLayer->iColocIntra, 4, 4, 4 * sizeof (int8_t), 1, sizeof (int8_t));
342+ SetRectBlock (pCurDqLayer->iColocIntra, 4, 4, 4 * sizeof (int8_t), 1, sizeof (int8_t));
340343 return ERR_NONE;
341344 }
342− SetRectBlock (pCurLayer->iColocIntra, 4, 4, 4 * sizeof (int8_t), 0, sizeof (int8_t));
345+ SetRectBlock (pCurDqLayer->iColocIntra, 4, 4, 4 * sizeof (int8_t), 0, sizeof (int8_t));
343346
344347 if (IS_INTER_16x16 (mbType)) {
345348 int16_t iMVZero[2] = { 0 };
346349 int16_t* pMv = IS_TYPE_L1 (coloc_mbType) ? colocPic->pMv[LIST_1][iMbXy][0] : iMVZero;
347− ST32 (pCurLayer->iColocMv[LIST_0][0], LD32 (colocPic->pMv[LIST_0][iMbXy][0]));
348− ST32 (pCurLayer->iColocMv[LIST_1][0], LD32 (pMv));
349− pCurLayer->iColocRefIndex[LIST_0][0] = colocPic->pRefIndex[LIST_0][iMbXy][0];
350− pCurLayer->iColocRefIndex[LIST_1][0] = IS_TYPE_L1 (coloc_mbType) ? colocPic->pRefIndex[LIST_1][iMbXy][0] :
351− REF_NOT_IN_LIST;
350+ ST32 (pCurDqLayer->iColocMv[LIST_0][0], LD32 (colocPic->pMv[LIST_0][iMbXy][0]));
351+ ST32 (pCurDqLayer->iColocMv[LIST_1][0], LD32 (pMv));
352+ pCurDqLayer->iColocRefIndex[LIST_0][0] = colocPic->pRefIndex[LIST_0][iMbXy][0];
353+ pCurDqLayer->iColocRefIndex[LIST_1][0] = IS_TYPE_L1 (coloc_mbType) ? colocPic->pRefIndex[LIST_1][iMbXy][0] :
354+ REF_NOT_IN_LIST;
352355 } else {
353356 if (!pCtx->pSps->bDirect8x8InferenceFlag) {
354− CopyRectBlock4Cols (pCurLayer->iColocMv[LIST_0], colocPic->pMv[LIST_0][iMbXy], 16, 16, 4, 4);
355− CopyRectBlock4Cols (pCurLayer->iColocRefIndex[LIST_0], colocPic->pRefIndex[LIST_0][iMbXy], 4, 4, 4, 1);
357+ CopyRectBlock4Cols (pCurDqLayer->iColocMv[LIST_0], colocPic->pMv[LIST_0][iMbXy], 16, 16, 4, 4);
358+ CopyRectBlock4Cols (pCurDqLayer->iColocRefIndex[LIST_0], colocPic->pRefIndex[LIST_0][iMbXy], 4, 4, 4, 1);
356359 if (IS_TYPE_L1 (coloc_mbType)) {
357− CopyRectBlock4Cols (pCurLayer->iColocMv[LIST_1], colocPic->pMv[LIST_1][iMbXy], 16, 16, 4, 4);
358− CopyRectBlock4Cols (pCurLayer->iColocRefIndex[LIST_1], colocPic->pRefIndex[LIST_1][iMbXy], 4, 4, 4, 1);
360+ CopyRectBlock4Cols (pCurDqLayer->iColocMv[LIST_1], colocPic->pMv[LIST_1][iMbXy], 16, 16, 4, 4);
361+ CopyRectBlock4Cols (pCurDqLayer->iColocRefIndex[LIST_1], colocPic->pRefIndex[LIST_1][iMbXy], 4, 4, 4, 1);
359362 } else { // only forward prediction
360− SetRectBlock (pCurLayer->iColocRefIndex[LIST_1], 4, 4, 4, (uint8_t)REF_NOT_IN_LIST, 1);
363+ SetRectBlock (pCurDqLayer->iColocRefIndex[LIST_1], 4, 4, 4, (uint8_t)REF_NOT_IN_LIST, 1);
361364 }
362365 } else {
363366 for (int32_t listIdx = 0; listIdx < 1 + !! (coloc_mbType & MB_TYPE_L1); listIdx++) {
364− SetRectBlock (pCurLayer->iColocMv[listIdx][0], 2, 2, 16, LD32 (colocPic->pMv[listIdx][iMbXy][0]), 4);
365− SetRectBlock (pCurLayer->iColocMv[listIdx][2], 2, 2, 16, LD32 (colocPic->pMv[listIdx][iMbXy][3]), 4);
366− SetRectBlock (pCurLayer->iColocMv[listIdx][8], 2, 2, 16, LD32 (colocPic->pMv[listIdx][iMbXy][12]), 4);
367− SetRectBlock (pCurLayer->iColocMv[listIdx][10], 2, 2, 16, LD32 (colocPic->pMv[listIdx][iMbXy][15]), 4);
368−
369− SetRectBlock (&pCurLayer->iColocRefIndex[listIdx][0], 2, 2, 4, colocPic->pRefIndex[listIdx][iMbXy][0], 1);
370− SetRectBlock (&pCurLayer->iColocRefIndex[listIdx][2], 2, 2, 4, colocPic->pRefIndex[listIdx][iMbXy][3], 1);
371− SetRectBlock (&pCurLayer->iColocRefIndex[listIdx][8], 2, 2, 4, colocPic->pRefIndex[listIdx][iMbXy][12], 1);
372− SetRectBlock (&pCurLayer->iColocRefIndex[listIdx][10], 2, 2, 4, colocPic->pRefIndex[listIdx][iMbXy][15], 1);
367+ SetRectBlock (pCurDqLayer->iColocMv[listIdx][0], 2, 2, 16, LD32 (colocPic->pMv[listIdx][iMbXy][0]), 4);
368+ SetRectBlock (pCurDqLayer->iColocMv[listIdx][2], 2, 2, 16, LD32 (colocPic->pMv[listIdx][iMbXy][3]), 4);
369+ SetRectBlock (pCurDqLayer->iColocMv[listIdx][8], 2, 2, 16, LD32 (colocPic->pMv[listIdx][iMbXy][12]), 4);
370+ SetRectBlock (pCurDqLayer->iColocMv[listIdx][10], 2, 2, 16, LD32 (colocPic->pMv[listIdx][iMbXy][15]), 4);
371+
372+ SetRectBlock (&pCurDqLayer->iColocRefIndex[listIdx][0], 2, 2, 4, colocPic->pRefIndex[listIdx][iMbXy][0], 1);
373+ SetRectBlock (&pCurDqLayer->iColocRefIndex[listIdx][2], 2, 2, 4, colocPic->pRefIndex[listIdx][iMbXy][3], 1);
374+ SetRectBlock (&pCurDqLayer->iColocRefIndex[listIdx][8], 2, 2, 4, colocPic->pRefIndex[listIdx][iMbXy][12], 1);
375+ SetRectBlock (&pCurDqLayer->iColocRefIndex[listIdx][10], 2, 2, 4, colocPic->pRefIndex[listIdx][iMbXy][15], 1);
373376 }
374377 if (! (coloc_mbType & MB_TYPE_L1)) // only forward prediction
375− SetRectBlock (&pCurLayer->iColocRefIndex[1][0], 4, 4, 4, (uint8_t)REF_NOT_IN_LIST, 1);
378+ SetRectBlock (&pCurDqLayer->iColocRefIndex[1][0], 4, 4, 4, (uint8_t)REF_NOT_IN_LIST, 1);
376379 }
377380 }
378381 return ERR_NONE;
@@ -382,9 +385,9 @@ int32_t PredMvBDirectSpatial (PWelsDecoderContext pCtx, int16_t iMvp[LIST_A][2], · 3 unmodified lines
382385 SubMbType& subMbType) {
383386
384387 int32_t ret = ERR_NONE;
385− PDqLayer pCurLayer = pCtx->pCurDqLayer;
386− int32_t iMbXy = pCurLayer->iMbXyIndex;
387− bool bSkipOrDirect = (IS_SKIP (pCurLayer->pMbType[iMbXy]) | IS_DIRECT (pCurLayer->pMbType[iMbXy])) > 0;
388+ PDqLayer pCurDqLayer = pCtx->pCurDqLayer;
389+ int32_t iMbXy = pCurDqLayer->iMbXyIndex;
390+ bool bSkipOrDirect = (IS_SKIP (GetMbType (pCurDqLayer)[iMbXy]) | IS_DIRECT (GetMbType (pCurDqLayer)[iMbXy])) > 0;
388391
389392 MbType mbType;
390393 ret = GetColocatedMb (pCtx, mbType, subMbType);
@@ -404,15 +407,15 @@ int32_t PredMvBDirectSpatial (PWelsDecoderContext pCtx, int16_t iMvp[LIST_A][2], · 13 unmodified lines
404407 int8_t iDiagonalRef[LIST_A];
405408 int16_t iMvA[LIST_A][2], iMvB[LIST_A][2], iMvC[LIST_A][2], iMvD[LIST_A][2];
406409
407− iCurXy = pCurLayer->iMbXyIndex;
410+ iCurXy = pCurDqLayer->iMbXyIndex;
408411
409− iCurX = pCurLayer->iMbX;
410− iCurY = pCurLayer->iMbY;
411− iCurSliceIdc = pCurLayer->pSliceIdc[iCurXy];
412+ iCurX = pCurDqLayer->iMbX;
413+ iCurY = pCurDqLayer->iMbY;
414+ iCurSliceIdc = pCurDqLayer->pSliceIdc[iCurXy];
412415
413416 if (iCurX != 0) {
414417 iLeftXy = iCurXy - 1;
415− iLeftSliceIdc = pCurLayer->pSliceIdc[iLeftXy];
418+ iLeftSliceIdc = pCurDqLayer->pSliceIdc[iLeftXy];
416419 bLeftAvail = (iLeftSliceIdc == iCurSliceIdc);
417420 } else {
418421 bLeftAvail = 0;
@@ -420,19 +423,19 @@ int32_t PredMvBDirectSpatial (PWelsDecoderContext pCtx, int16_t iMvp[LIST_A][2], · 1 unmodified line
420423 }
421424
422425 if (iCurY != 0) {
423− iTopXy = iCurXy - pCurLayer->iMbWidth;
424− iTopSliceIdc = pCurLayer->pSliceIdc[iTopXy];
426+ iTopXy = iCurXy - pCurDqLayer->iMbWidth;
427+ iTopSliceIdc = pCurDqLayer->pSliceIdc[iTopXy];
425428 bTopAvail = (iTopSliceIdc == iCurSliceIdc);
426429 if (iCurX != 0) {
427430 iLeftTopXy = iTopXy - 1;
428− iLeftTopSliceIdc = pCurLayer->pSliceIdc[iLeftTopXy];
431+ iLeftTopSliceIdc = pCurDqLayer->pSliceIdc[iLeftTopXy];
429432 bLeftTopAvail = (iLeftTopSliceIdc == iCurSliceIdc);
430433 } else {
431434 bLeftTopAvail = 0;
432435 }
433− if (iCurX != (pCurLayer->iMbWidth - 1)) {
436+ if (iCurX != (pCurDqLayer->iMbWidth - 1)) {
434437 iRightTopXy = iTopXy + 1;
435− iRightTopSliceIdc = pCurLayer->pSliceIdc[iRightTopXy];
438+ iRightTopSliceIdc = pCurDqLayer->pSliceIdc[iRightTopXy];
436439 bRightTopAvail = (iRightTopSliceIdc == iCurSliceIdc);
437440 } else {
438441 bRightTopAvail = 0;
@@ -443,20 +446,22 @@ int32_t PredMvBDirectSpatial (PWelsDecoderContext pCtx, int16_t iMvp[LIST_A][2], · 4 unmodified lines
443446 bRightTopAvail = 0;
444447 }
445448
446− iLeftType = ((iCurX != 0 && bLeftAvail) ? pCurLayer->pMbType[iLeftXy] : 0);
447− iTopType = ((iCurY != 0 && bTopAvail) ? pCurLayer->pMbType[iTopXy] : 0);
449+ iLeftType = ((iCurX != 0 && bLeftAvail) ? GetMbType (pCurDqLayer)[iLeftXy] : 0);
450+ iTopType = ((iCurY != 0 && bTopAvail) ? GetMbType (pCurDqLayer)[iTopXy] : 0);
448451 iLeftTopType = ((iCurX != 0 && iCurY != 0 && bLeftTopAvail)
449− ? pCurLayer->pMbType[iLeftTopXy] : 0);
450− iRightTopType = ((iCurX != pCurLayer->iMbWidth - 1 && iCurY != 0 && bRightTopAvail)
451− ? pCurLayer->pMbType[iRightTopXy] : 0);
452+ ? GetMbType (pCurDqLayer)[iLeftTopXy] : 0);
453+ iRightTopType = ((iCurX != pCurDqLayer->iMbWidth - 1 && iCurY != 0 && bRightTopAvail)
454+ ? GetMbType (pCurDqLayer)[iRightTopXy] : 0);
452455
453456 /*get neb mv&iRefIdxArray*/
454457 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
455458
456459 /*left*/
457460 if (bLeftAvail && IS_INTER (iLeftType)) {
458− ST32 (iMvA[listIdx], LD32 (pCurLayer->pMv[listIdx][iLeftXy][3]));
459− iLeftRef[listIdx] = pCurLayer->pRefIndex[listIdx][iLeftXy][3];
461+ ST32 (iMvA[listIdx], LD32 (pCurDqLayer->pDec ? pCurDqLayer->pDec->pMv[listIdx][iLeftXy][3] :
462+ pCurDqLayer->pMv[listIdx][iLeftXy][3]));
463+ iLeftRef[listIdx] = pCurDqLayer->pDec ? pCurDqLayer->pDec->pRefIndex[listIdx][iLeftXy][3] :
464+ pCurDqLayer->pRefIndex[listIdx][iLeftXy][3];
460465 } else {
461466 ST32 (iMvA[listIdx], 0);
462467 if (0 == bLeftAvail) { //not available
@@ -468,8 +473,10 @@ int32_t PredMvBDirectSpatial (PWelsDecoderContext pCtx, int16_t iMvp[LIST_A][2], · 5 unmodified lines
468473
469474 /*top*/
470475 if (bTopAvail && IS_INTER (iTopType)) {
471− ST32 (iMvB[listIdx], LD32 (pCurLayer->pMv[listIdx][iTopXy][12]));
472− iTopRef[listIdx] = pCurLayer->pRefIndex[listIdx][iTopXy][12];
476+ ST32 (iMvB[listIdx], LD32 (pCurDqLayer->pDec ? pCurDqLayer->pDec->pMv[listIdx][iTopXy][12] :
477+ pCurDqLayer->pMv[listIdx][iTopXy][12]));
478+ iTopRef[listIdx] = pCurDqLayer->pDec ? pCurDqLayer->pDec->pRefIndex[listIdx][iTopXy][12] :
479+ pCurDqLayer->pRefIndex[listIdx][iTopXy][12];
473480 } else {
474481 ST32 (iMvB[listIdx], 0);
475482 if (0 == bTopAvail) { //not available
@@ -481,8 +488,10 @@ int32_t PredMvBDirectSpatial (PWelsDecoderContext pCtx, int16_t iMvp[LIST_A][2], · 5 unmodified lines
481488
482489 /*right_top*/
483490 if (bRightTopAvail && IS_INTER (iRightTopType)) {
484− ST32 (iMvC[listIdx], LD32 (pCurLayer->pMv[listIdx][iRightTopXy][12]));
485− iRightTopRef[listIdx] = pCurLayer->pRefIndex[listIdx][iRightTopXy][12];
491+ ST32 (iMvC[listIdx], LD32 (pCurDqLayer->pDec ? pCurDqLayer->pDec->pMv[listIdx][iRightTopXy][12] :
492+ pCurDqLayer->pMv[listIdx][iRightTopXy][12]));
493+ iRightTopRef[listIdx] = pCurDqLayer->pDec ? pCurDqLayer->pDec->pRefIndex[listIdx][iRightTopXy][12] :
494+ pCurDqLayer->pRefIndex[listIdx][iRightTopXy][12];
486495 } else {
487496 ST32 (iMvC[listIdx], 0);
488497 if (0 == bRightTopAvail) { //not available
@@ -493,8 +502,10 @@ int32_t PredMvBDirectSpatial (PWelsDecoderContext pCtx, int16_t iMvp[LIST_A][2], · 4 unmodified lines
493502 }
494503 /*left_top*/
495504 if (bLeftTopAvail && IS_INTER (iLeftTopType)) {
496− ST32 (iMvD[listIdx], LD32 (pCurLayer->pMv[listIdx][iLeftTopXy][15]));
497− iLeftTopRef[listIdx] = pCurLayer->pRefIndex[listIdx][iLeftTopXy][15];
505+ ST32 (iMvD[listIdx], LD32 (pCurDqLayer->pDec ? pCurDqLayer->pDec->pMv[listIdx][iLeftTopXy][15] :
506+ pCurDqLayer->pMv[listIdx][iLeftTopXy][15]));
507+ iLeftTopRef[listIdx] = pCurDqLayer->pDec ? pCurDqLayer->pDec->pRefIndex[listIdx][iLeftTopXy][15] :
508+ pCurDqLayer->pRefIndex[listIdx][iLeftTopXy][15];
498509 } else {
499510 ST32 (iMvD[listIdx], 0);
500511 if (0 == bLeftTopAvail) { //not available
@@ -543,7 +554,7 @@ int32_t PredMvBDirectSpatial (PWelsDecoderContext pCtx, int16_t iMvp[LIST_A][2], · 42 unmodified lines
543554 mbType &= ~MB_TYPE_L0;
544555 subMbType &= ~MB_TYPE_L0;
545556 }
546− pCurLayer->pMbType[iMbXy] = mbType;
557+ GetMbType (pCurDqLayer)[iMbXy] = mbType;
547558
548559 int16_t pMvd[4] = { 0 };
549560
@@ -551,31 +562,31 @@ int32_t PredMvBDirectSpatial (PWelsDecoderContext pCtx, int16_t iMvp[LIST_A][2], · 1 unmodified line
551562
552563 if (IS_INTER_16x16 (mbType)) {
553564 if ((* (int32_t*)iMvp[LIST_0] | * (int32_t*)iMvp[LIST_1])) {
554− if (0 == pCurLayer->iColocIntra[0] && !bIsLongRef
555− && ((pCurLayer->iColocRefIndex[LIST_0][0] == 0 && (unsigned) (pCurLayer->iColocMv[LIST_0][0][0] + 1) <= 2
556− && (unsigned) (pCurLayer->iColocMv[LIST_0][0][1] + 1) <= 2)
557− || (pCurLayer->iColocRefIndex[LIST_0][0] < 0 && pCurLayer->iColocRefIndex[LIST_1][0] == 0
558− && (unsigned) (pCurLayer->iColocMv[LIST_1][0][0] + 1) <= 2
559− && (unsigned) (pCurLayer->iColocMv[LIST_1][0][1] + 1) <= 2))) {
565+ if (0 == pCurDqLayer->iColocIntra[0] && !bIsLongRef
566+ && ((pCurDqLayer->iColocRefIndex[LIST_0][0] == 0 && (unsigned) (pCurDqLayer->iColocMv[LIST_0][0][0] + 1) <= 2
567+ && (unsigned) (pCurDqLayer->iColocMv[LIST_0][0][1] + 1) <= 2)
568+ || (pCurDqLayer->iColocRefIndex[LIST_0][0] < 0 && pCurDqLayer->iColocRefIndex[LIST_1][0] == 0
569+ && (unsigned) (pCurDqLayer->iColocMv[LIST_1][0][0] + 1) <= 2
570+ && (unsigned) (pCurDqLayer->iColocMv[LIST_1][0][1] + 1) <= 2))) {
560571 if (0 >= ref[0]) * (uint32_t*)iMvp[LIST_0] = 0;
561572 if (0 >= ref[1]) * (uint32_t*)iMvp[LIST_1] = 0;
562573 }
563574 }
564− UpdateP16x16DirectCabac (pCurLayer);
575+ UpdateP16x16DirectCabac (pCurDqLayer);
565576 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
566− UpdateP16x16MotionInfo (pCurLayer, listIdx, ref[listIdx], iMvp[listIdx]);
567− UpdateP16x16MvdCabac (pCurLayer, pMvd, listIdx);
577+ UpdateP16x16MotionInfo (pCurDqLayer, listIdx, ref[listIdx], iMvp[listIdx]);
578+ UpdateP16x16MvdCabac (pCurDqLayer, pMvd, listIdx);
568579 }
569580 } else {
570581 if (bSkipOrDirect) {
571582 int8_t pSubPartCount[4], pPartW[4];
572583 for (int32_t i = 0; i < 4; i++) { //Direct 8x8 Ref and mv
573584 int16_t iIdx8 = i << 2;
574− pCurLayer->pSubMbType[iMbXy][i] = subMbType;
585+ pCurDqLayer->pSubMbType[iMbXy][i] = subMbType;
575586 int8_t pRefIndex[LIST_A][30];
576− UpdateP8x8RefIdxCabac (pCurLayer, pRefIndex, iIdx8, ref[LIST_0], LIST_0);
577− UpdateP8x8RefIdxCabac (pCurLayer, pRefIndex, iIdx8, ref[LIST_1], LIST_1);
578− UpdateP8x8DirectCabac (pCurLayer, iIdx8);
587+ UpdateP8x8RefIdxCabac (pCurDqLayer, pRefIndex, iIdx8, ref[LIST_0], LIST_0);
588+ UpdateP8x8RefIdxCabac (pCurDqLayer, pRefIndex, iIdx8, ref[LIST_1], LIST_1);
589+ UpdateP8x8DirectCabac (pCurDqLayer, iIdx8);
579590
580591 pSubPartCount[i] = g_ksInterBSubMbTypeInfo[0].iPartCount;
581592 pPartW[i] = g_ksInterBSubMbTypeInfo[0].iPartWidth;
@@ -584,7 +595,7 @@ int32_t PredMvBDirectSpatial (PWelsDecoderContext pCtx, int16_t iMvp[LIST_A][2], · 2 unmodified lines
584595 pSubPartCount[i] = 4;
585596 pPartW[i] = 1;
586597 }
587− FillSpatialDirect8x8Mv (pCurLayer, iIdx8, pSubPartCount[i], pPartW[i], subMbType, bIsLongRef, iMvp, ref, NULL, NULL);
598+ FillSpatialDirect8x8Mv (pCurDqLayer, iIdx8, pSubPartCount[i], pPartW[i], subMbType, bIsLongRef, iMvp, ref, NULL, NULL);
588599 }
589600 }
590601 }
@@ -594,9 +605,9 @@ int32_t PredMvBDirectSpatial (PWelsDecoderContext pCtx, int16_t iMvp[LIST_A][2], · 3 unmodified lines
594605 int32_t PredBDirectTemporal (PWelsDecoderContext pCtx, int16_t iMvp[LIST_A][2], int8_t ref[LIST_A],
595606 SubMbType& subMbType) {
596607 int32_t ret = ERR_NONE;
597− PDqLayer pCurLayer = pCtx->pCurDqLayer;
598− int32_t iMbXy = pCurLayer->iMbXyIndex;
599− bool bSkipOrDirect = (IS_SKIP (pCurLayer->pMbType[iMbXy]) | IS_DIRECT (pCurLayer->pMbType[iMbXy])) > 0;
608+ PDqLayer pCurDqLayer = pCtx->pCurDqLayer;
609+ int32_t iMbXy = pCurDqLayer->iMbXyIndex;
610+ bool bSkipOrDirect = (IS_SKIP (GetMbType (pCurDqLayer)[iMbXy]) | IS_DIRECT (GetMbType (pCurDqLayer)[iMbXy])) > 0;
600611
601612 MbType mbType;
602613 ret = GetColocatedMb (pCtx, mbType, subMbType);
@@ -604,42 +615,42 @@ int32_t PredBDirectTemporal (PWelsDecoderContext pCtx, int16_t iMvp[LIST_A][2], · 1 unmodified line
604615 return ret;
605616 }
606617
607− pCurLayer->pMbType[iMbXy] = mbType;
618+ GetMbType (pCurDqLayer)[iMbXy] = mbType;
608619
609− PSlice pSlice = &pCurLayer->sLayerInfo.sSliceInLayer;
620+ PSlice pSlice = &pCurDqLayer->sLayerInfo.sSliceInLayer;
610621 PSliceHeader pSliceHeader = &pSlice->sSliceHeaderExt.sSliceHeader;
611622 int16_t pMvd[4] = { 0 };
612623 const int32_t ref0Count = WELS_MIN (pSliceHeader->uiRefCount[LIST_0], pCtx->sRefPic.uiRefCount[LIST_0]);
613624 if (IS_INTER_16x16 (mbType)) {
614625 ref[LIST_0] = 0;
615626 ref[LIST_1] = 0;
616− UpdateP16x16DirectCabac (pCurLayer);
617− UpdateP16x16RefIdx (pCurLayer, LIST_1, ref[LIST_1]);
627+ UpdateP16x16DirectCabac (pCurDqLayer);
628+ UpdateP16x16RefIdx (pCurDqLayer, LIST_1, ref[LIST_1]);
618629 ST64 (iMvp, 0);
619− if (pCurLayer->iColocIntra[0]) {
620− UpdateP16x16MotionOnly (pCurLayer, LIST_0, iMvp[LIST_0]);
621− UpdateP16x16MotionOnly (pCurLayer, LIST_1, iMvp[LIST_1]);
622− UpdateP16x16RefIdx (pCurLayer, LIST_0, ref[LIST_0]);
630+ if (pCurDqLayer->iColocIntra[0]) {
631+ UpdateP16x16MotionOnly (pCurDqLayer, LIST_0, iMvp[LIST_0]);
632+ UpdateP16x16MotionOnly (pCurDqLayer, LIST_1, iMvp[LIST_1]);
633+ UpdateP16x16RefIdx (pCurDqLayer, LIST_0, ref[LIST_0]);
623634 } else {
624635 ref[LIST_0] = 0;
625− int16_t* mv = pCurLayer->iColocMv[LIST_0][0];
626− int8_t colocRefIndexL0 = pCurLayer->iColocRefIndex[LIST_0][0];
636+ int16_t* mv = pCurDqLayer->iColocMv[LIST_0][0];
637+ int8_t colocRefIndexL0 = pCurDqLayer->iColocRefIndex[LIST_0][0];
627638 if (colocRefIndexL0 >= 0) {
628639 ref[LIST_0] = MapColToList0 (pCtx, colocRefIndexL0, ref0Count);
629640 } else {
630− mv = pCurLayer->iColocMv[LIST_1][0];
641+ mv = pCurDqLayer->iColocMv[LIST_1][0];
631642 }
632− UpdateP16x16RefIdx (pCurLayer, LIST_0, ref[LIST_0]);
643+ UpdateP16x16RefIdx (pCurDqLayer, LIST_0, ref[LIST_0]);
633644
634645 iMvp[LIST_0][0] = (pSlice->iMvScale[LIST_0][ref[LIST_0]] * mv[0] + 128) >> 8;
635646 iMvp[LIST_0][1] = (pSlice->iMvScale[LIST_0][ref[LIST_0]] * mv[1] + 128) >> 8;
636− UpdateP16x16MotionOnly (pCurLayer, LIST_0, iMvp[LIST_0]);
647+ UpdateP16x16MotionOnly (pCurDqLayer, LIST_0, iMvp[LIST_0]);
637648 iMvp[LIST_1][0] = iMvp[LIST_0][0] - mv[0];
638649 iMvp[LIST_1][1] = iMvp[LIST_0][1] - mv[1];
639− UpdateP16x16MotionOnly (pCurLayer, LIST_1, iMvp[LIST_1]);
650+ UpdateP16x16MotionOnly (pCurDqLayer, LIST_1, iMvp[LIST_1]);
640651 }
641− UpdateP16x16MvdCabac (pCurLayer, pMvd, LIST_0);
642− UpdateP16x16MvdCabac (pCurLayer, pMvd, LIST_1);
652+ UpdateP16x16MvdCabac (pCurDqLayer, pMvd, LIST_0);
653+ UpdateP16x16MvdCabac (pCurDqLayer, pMvd, LIST_1);
643654 } else {
644655 if (bSkipOrDirect) {
645656 int8_t pSubPartCount[4], pPartW[4];
@@ -647,27 +658,27 @@ int32_t PredBDirectTemporal (PWelsDecoderContext pCtx, int16_t iMvp[LIST_A][2], · 1 unmodified line
647658 for (int32_t i = 0; i < 4; i++) {
648659 int16_t iIdx8 = i << 2;
649660 const uint8_t iScan4Idx = g_kuiScan4[iIdx8];
650− pCurLayer->pSubMbType[iMbXy][i] = subMbType;
661+ pCurDqLayer->pSubMbType[iMbXy][i] = subMbType;
651662
652− int16_t (*mvColoc)[2] = pCurLayer->iColocMv[LIST_0];
663+ int16_t (*mvColoc)[2] = pCurDqLayer->iColocMv[LIST_0];
653664
654665 ref[LIST_1] = 0;
655− UpdateP8x8RefIdxCabac (pCurLayer, pRefIndex, iIdx8, ref[LIST_1], LIST_1);
656− if (pCurLayer->iColocIntra[iScan4Idx]) {
666+ UpdateP8x8RefIdxCabac (pCurDqLayer, pRefIndex, iIdx8, ref[LIST_1], LIST_1);
667+ if (pCurDqLayer->iColocIntra[iScan4Idx]) {
657668 ref[LIST_0] = 0;
658− UpdateP8x8RefIdxCabac (pCurLayer, pRefIndex, iIdx8, ref[LIST_0], LIST_0);
669+ UpdateP8x8RefIdxCabac (pCurDqLayer, pRefIndex, iIdx8, ref[LIST_0], LIST_0);
659670 ST64 (iMvp, 0);
660671 } else {
661672 ref[LIST_0] = 0;
662− int8_t colocRefIndexL0 = pCurLayer->iColocRefIndex[LIST_0][iScan4Idx];
673+ int8_t colocRefIndexL0 = pCurDqLayer->iColocRefIndex[LIST_0][iScan4Idx];
663674 if (colocRefIndexL0 >= 0) {
664675 ref[LIST_0] = MapColToList0 (pCtx, colocRefIndexL0, ref0Count);
665676 } else {
666− mvColoc = pCurLayer->iColocMv[LIST_1];
677+ mvColoc = pCurDqLayer->iColocMv[LIST_1];
667678 }
668− UpdateP8x8RefIdxCabac (pCurLayer, pRefIndex, iIdx8, ref[LIST_0], LIST_0);
679+ UpdateP8x8RefIdxCabac (pCurDqLayer, pRefIndex, iIdx8, ref[LIST_0], LIST_0);
669680 }
670− UpdateP8x8DirectCabac (pCurLayer, iIdx8);
681+ UpdateP8x8DirectCabac (pCurDqLayer, iIdx8);
671682
672683 pSubPartCount[i] = g_ksInterBSubMbTypeInfo[0].iPartCount;
673684 pPartW[i] = g_ksInterBSubMbTypeInfo[0].iPartWidth;
@@ -676,7 +687,7 @@ int32_t PredBDirectTemporal (PWelsDecoderContext pCtx, int16_t iMvp[LIST_A][2], · 2 unmodified lines
676687 pSubPartCount[i] = 4;
677688 pPartW[i] = 1;
678689 }
679− FillTemporalDirect8x8Mv (pCurLayer, iIdx8, pSubPartCount[i], pPartW[i], subMbType, ref, mvColoc, NULL, NULL);
690+ FillTemporalDirect8x8Mv (pCurDqLayer, iIdx8, pSubPartCount[i], pPartW[i], subMbType, ref, mvColoc, NULL, NULL);
680691 }
681692 }
682693 }
@@ -785,14 +796,23 @@ void UpdateP16x16MotionInfo (PDqLayer pCurDqLayer, int32_t listIdx, int8_t iRef, · 102 unmodified lines
785796 //mb
786797 const uint8_t kuiScan4Idx = g_kuiScan4[i];
787798 const uint8_t kuiScan4IdxPlus4 = 4 + kuiScan4Idx;
799+ if (pCurDqLayer->pDec != NULL) {
800+ ST16 (&pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][kuiScan4Idx], kiRef2);
801+ ST16 (&pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][kuiScan4IdxPlus4], kiRef2);
802+
803+ ST32 (pCurDqLayer->pDec->pMv[listIdx][iMbXy][kuiScan4Idx], kiMV32);
804+ ST32 (pCurDqLayer->pDec->pMv[listIdx][iMbXy][1 + kuiScan4Idx], kiMV32);
805+ ST32 (pCurDqLayer->pDec->pMv[listIdx][iMbXy][kuiScan4IdxPlus4], kiMV32);
806+ ST32 (pCurDqLayer->pDec->pMv[listIdx][iMbXy][1 + kuiScan4IdxPlus4], kiMV32);
807+ } else {
808+ ST16 (&pCurDqLayer->pRefIndex[listIdx][iMbXy][kuiScan4Idx], kiRef2);
809+ ST16 (&pCurDqLayer->pRefIndex[listIdx][iMbXy][kuiScan4IdxPlus4], kiRef2);
788810
789− ST16 (&pCurDqLayer->pRefIndex[listIdx][iMbXy][kuiScan4Idx ], kiRef2);
790− ST16 (&pCurDqLayer->pRefIndex[listIdx][iMbXy][kuiScan4IdxPlus4], kiRef2);
791−
792− ST32 (pCurDqLayer->pMv[listIdx][iMbXy][ kuiScan4Idx ], kiMV32);
793− ST32 (pCurDqLayer->pMv[listIdx][iMbXy][1 + kuiScan4Idx ], kiMV32);
794− ST32 (pCurDqLayer->pMv[listIdx][iMbXy][ kuiScan4IdxPlus4], kiMV32);
795− ST32 (pCurDqLayer->pMv[listIdx][iMbXy][1 + kuiScan4IdxPlus4], kiMV32);
811+ ST32 (pCurDqLayer->pMv[listIdx][iMbXy][kuiScan4Idx], kiMV32);
812+ ST32 (pCurDqLayer->pMv[listIdx][iMbXy][1 + kuiScan4Idx], kiMV32);
813+ ST32 (pCurDqLayer->pMv[listIdx][iMbXy][kuiScan4IdxPlus4], kiMV32);
814+ ST32 (pCurDqLayer->pMv[listIdx][iMbXy][1 + kuiScan4IdxPlus4], kiMV32);
815+ }
796816 }
797817 }
798818
@@ -808,8 +828,8 @@ void UpdateP16x16RefIdx (PDqLayer pCurDqLayer, int32_t listIdx, int8_t iRef) { · 9 unmodified lines
808828 const uint8_t kuiScan4Idx = g_kuiScan4[i];
809829 const uint8_t kuiScan4IdxPlus4 = 4 + kuiScan4Idx;
810830
811− ST16 (&pCurDqLayer->pRefIndex[listIdx][iMbXy][kuiScan4Idx], kiRef2);
812− ST16 (&pCurDqLayer->pRefIndex[listIdx][iMbXy][kuiScan4IdxPlus4], kiRef2);
831+ ST16 (&pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][kuiScan4Idx], kiRef2);
832+ ST16 (&pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][kuiScan4IdxPlus4], kiRef2);
813833 }
814834 }
815835
@@ -824,11 +844,17 @@ void UpdateP16x16MotionOnly (PDqLayer pCurDqLayer, int32_t listIdx, int16_t iMVs · 8 unmodified lines
824844 //mb
825845 const uint8_t kuiScan4Idx = g_kuiScan4[i];
826846 const uint8_t kuiScan4IdxPlus4 = 4 + kuiScan4Idx;
827−
828− ST32 (pCurDqLayer->pMv[listIdx][iMbXy][kuiScan4Idx], kiMV32);
829− ST32 (pCurDqLayer->pMv[listIdx][iMbXy][1 + kuiScan4Idx], kiMV32);
830− ST32 (pCurDqLayer->pMv[listIdx][iMbXy][kuiScan4IdxPlus4], kiMV32);
831− ST32 (pCurDqLayer->pMv[listIdx][iMbXy][1 + kuiScan4IdxPlus4], kiMV32);
847+ if (pCurDqLayer->pDec != NULL) {
848+ ST32 (pCurDqLayer->pDec->pMv[listIdx][iMbXy][kuiScan4Idx], kiMV32);
849+ ST32 (pCurDqLayer->pDec->pMv[listIdx][iMbXy][1 + kuiScan4Idx], kiMV32);
850+ ST32 (pCurDqLayer->pDec->pMv[listIdx][iMbXy][kuiScan4IdxPlus4], kiMV32);
851+ ST32 (pCurDqLayer->pDec->pMv[listIdx][iMbXy][1 + kuiScan4IdxPlus4], kiMV32);
852+ } else {
853+ ST32 (pCurDqLayer->pMv[listIdx][iMbXy][kuiScan4Idx], kiMV32);
854+ ST32 (pCurDqLayer->pMv[listIdx][iMbXy][1 + kuiScan4Idx], kiMV32);
855+ ST32 (pCurDqLayer->pMv[listIdx][iMbXy][kuiScan4IdxPlus4], kiMV32);
856+ ST32 (pCurDqLayer->pMv[listIdx][iMbXy][1 + kuiScan4IdxPlus4], kiMV32);
857+ }
832858 }
833859 }
834860
@@ -848,12 +874,21 @@ void UpdateP16x8MotionInfo (PDqLayer pCurDqLayer, int16_t iMotionVector[LIST_A][ · 13 unmodified lines
848874 const uint8_t kuiCacheIdxPlus6 = 6 + kuiCacheIdx;
849875
850876 //mb
851− ST16 (&pCurDqLayer->pRefIndex[listIdx][iMbXy][kuiScan4Idx ], kiRef2);
852− ST16 (&pCurDqLayer->pRefIndex[listIdx][iMbXy][kuiScan4IdxPlus4], kiRef2);
853− ST32 (pCurDqLayer->pMv[listIdx][iMbXy][ kuiScan4Idx ], kiMV32);
854− ST32 (pCurDqLayer->pMv[listIdx][iMbXy][1 + kuiScan4Idx ], kiMV32);
855− ST32 (pCurDqLayer->pMv[listIdx][iMbXy][ kuiScan4IdxPlus4], kiMV32);
856− ST32 (pCurDqLayer->pMv[listIdx][iMbXy][1 + kuiScan4IdxPlus4], kiMV32);
877+ if (pCurDqLayer->pDec != NULL) {
878+ ST16 (&pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][kuiScan4Idx], kiRef2);
879+ ST16 (&pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][kuiScan4IdxPlus4], kiRef2);
880+ ST32 (pCurDqLayer->pDec->pMv[listIdx][iMbXy][kuiScan4Idx], kiMV32);
881+ ST32 (pCurDqLayer->pDec->pMv[listIdx][iMbXy][1 + kuiScan4Idx], kiMV32);
882+ ST32 (pCurDqLayer->pDec->pMv[listIdx][iMbXy][kuiScan4IdxPlus4], kiMV32);
883+ ST32 (pCurDqLayer->pDec->pMv[listIdx][iMbXy][1 + kuiScan4IdxPlus4], kiMV32);
884+ } else {
885+ ST16 (&pCurDqLayer->pRefIndex[listIdx][iMbXy][kuiScan4Idx], kiRef2);
886+ ST16 (&pCurDqLayer->pRefIndex[listIdx][iMbXy][kuiScan4IdxPlus4], kiRef2);
887+ ST32 (pCurDqLayer->pMv[listIdx][iMbXy][kuiScan4Idx], kiMV32);
888+ ST32 (pCurDqLayer->pMv[listIdx][iMbXy][1 + kuiScan4Idx], kiMV32);
889+ ST32 (pCurDqLayer->pMv[listIdx][iMbXy][kuiScan4IdxPlus4], kiMV32);
890+ ST32 (pCurDqLayer->pMv[listIdx][iMbXy][1 + kuiScan4IdxPlus4], kiMV32);
891+ }
857892 //cache
858893 ST16 (&iRefIndex[listIdx][kuiCacheIdx ], kiRef2);
859894 ST16 (&iRefIndex[listIdx][kuiCacheIdxPlus6], kiRef2);
@@ -879,12 +914,21 @@ void UpdateP8x16MotionInfo (PDqLayer pCurDqLayer, int16_t iMotionVector[LIST_A][ · 19 unmodified lines
879914 const uint8_t kuiCacheIdxPlus6 = 6 + kuiCacheIdx;
880915
881916 //mb
882− ST16 (&pCurDqLayer->pRefIndex[listIdx][iMbXy][kuiScan4Idx ], kiRef2);
883− ST16 (&pCurDqLayer->pRefIndex[listIdx][iMbXy][kuiScan4IdxPlus4], kiRef2);
884− ST32 (pCurDqLayer->pMv[listIdx][iMbXy][ kuiScan4Idx ], kiMV32);
885− ST32 (pCurDqLayer->pMv[listIdx][iMbXy][1 + kuiScan4Idx ], kiMV32);
886− ST32 (pCurDqLayer->pMv[listIdx][iMbXy][ kuiScan4IdxPlus4], kiMV32);
887− ST32 (pCurDqLayer->pMv[listIdx][iMbXy][1 + kuiScan4IdxPlus4], kiMV32);
917+ if (pCurDqLayer->pDec != NULL) {
918+ ST16 (&pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][kuiScan4Idx], kiRef2);
919+ ST16 (&pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][kuiScan4IdxPlus4], kiRef2);
920+ ST32 (pCurDqLayer->pDec->pMv[listIdx][iMbXy][kuiScan4Idx], kiMV32);
921+ ST32 (pCurDqLayer->pDec->pMv[listIdx][iMbXy][1 + kuiScan4Idx], kiMV32);
922+ ST32 (pCurDqLayer->pDec->pMv[listIdx][iMbXy][kuiScan4IdxPlus4], kiMV32);
923+ ST32 (pCurDqLayer->pDec->pMv[listIdx][iMbXy][1 + kuiScan4IdxPlus4], kiMV32);
924+ } else {
925+ ST16 (&pCurDqLayer->pRefIndex[listIdx][iMbXy][kuiScan4Idx], kiRef2);
926+ ST16 (&pCurDqLayer->pRefIndex[listIdx][iMbXy][kuiScan4IdxPlus4], kiRef2);
927+ ST32 (pCurDqLayer->pMv[listIdx][iMbXy][kuiScan4Idx], kiMV32);
928+ ST32 (pCurDqLayer->pMv[listIdx][iMbXy][1 + kuiScan4Idx], kiMV32);
929+ ST32 (pCurDqLayer->pMv[listIdx][iMbXy][kuiScan4IdxPlus4], kiMV32);
930+ ST32 (pCurDqLayer->pMv[listIdx][iMbXy][1 + kuiScan4IdxPlus4], kiMV32);
931+ }
888932 //cache
889933 ST16 (&iRefIndex[listIdx][kuiCacheIdx ], kiRef2);
890934 ST16 (&iRefIndex[listIdx][kuiCacheIdxPlus6], kiRef2);
@@ -895,10 +939,10 @@ void UpdateP8x16MotionInfo (PDqLayer pCurDqLayer, int16_t iMotionVector[LIST_A][ · 4 unmodified lines
895939 }
896940 }
897941
898−void FillSpatialDirect8x8Mv (PDqLayer pCurLayer, const int16_t& iIdx8, const int8_t& iPartCount, const int8_t& iPartW,
942+void FillSpatialDirect8x8Mv (PDqLayer pCurDqLayer, const int16_t& iIdx8, const int8_t& iPartCount, const int8_t& iPartW,
899943 const SubMbType& subMbType, const bool& bIsLongRef, int16_t pMvDirect[LIST_A][2], int8_t iRef[LIST_A],
900944 int16_t pMotionVector[LIST_A][30][MV_A], int16_t pMvdCache[LIST_A][30][MV_A]) {
901− int32_t iMbXy = pCurLayer->iMbXyIndex;
945+ int32_t iMbXy = pCurDqLayer->iMbXyIndex;
902946 for (int32_t j = 0; j < iPartCount; j++) {
903947 int8_t iPartIdx = iIdx8 + j * iPartW;
904948 uint8_t iScan4Idx = g_kuiScan4[iPartIdx];
@@ -909,10 +953,10 @@ void FillSpatialDirect8x8Mv (PDqLayer pCurLayer, const int16_t& iIdx8, const int · 4 unmodified lines
909953 if (IS_SUB_8x8 (subMbType)) {
910954 * (uint32_t*)pMV = * (uint32_t*)pMvDirect[LIST_0];
911955 ST32 ((pMV + 2), LD32 (pMV));
912− ST64 (pCurLayer->pMv[LIST_0][iMbXy][iScan4Idx], LD64 (pMV));
913− ST64 (pCurLayer->pMv[LIST_0][iMbXy][iScan4Idx + 4], LD64 (pMV));
914− ST64 (pCurLayer->pMvd[LIST_0][iMbXy][iScan4Idx], 0);
915− ST64 (pCurLayer->pMvd[LIST_0][iMbXy][iScan4Idx + 4], 0);
956+ ST64 (pCurDqLayer->pDec->pMv[LIST_0][iMbXy][iScan4Idx], LD64 (pMV));
957+ ST64 (pCurDqLayer->pDec->pMv[LIST_0][iMbXy][iScan4Idx + 4], LD64 (pMV));
958+ ST64 (pCurDqLayer->pMvd[LIST_0][iMbXy][iScan4Idx], 0);
959+ ST64 (pCurDqLayer->pMvd[LIST_0][iMbXy][iScan4Idx + 4], 0);
916960 if (pMotionVector != NULL) {
917961 ST64 (pMotionVector[LIST_0][iCacheIdx], LD64 (pMV));
918962 ST64 (pMotionVector[LIST_0][iCacheIdx + 6], LD64 (pMV));
@@ -923,10 +967,10 @@ void FillSpatialDirect8x8Mv (PDqLayer pCurLayer, const int16_t& iIdx8, const int · 4 unmodified lines
923967 }
924968 * (uint32_t*)pMV = * (uint32_t*)pMvDirect[LIST_1];
925969 ST32 ((pMV + 2), LD32 (pMV));
926− ST64 (pCurLayer->pMv[LIST_1][iMbXy][iScan4Idx], LD64 (pMV));
927− ST64 (pCurLayer->pMv[LIST_1][iMbXy][iScan4Idx + 4], LD64 (pMV));
928− ST64 (pCurLayer->pMvd[LIST_1][iMbXy][iScan4Idx], 0);
929− ST64 (pCurLayer->pMvd[LIST_1][iMbXy][iScan4Idx + 4], 0);
970+ ST64 (pCurDqLayer->pDec->pMv[LIST_1][iMbXy][iScan4Idx], LD64 (pMV));
971+ ST64 (pCurDqLayer->pDec->pMv[LIST_1][iMbXy][iScan4Idx + 4], LD64 (pMV));
972+ ST64 (pCurDqLayer->pMvd[LIST_1][iMbXy][iScan4Idx], 0);
973+ ST64 (pCurDqLayer->pMvd[LIST_1][iMbXy][iScan4Idx + 4], 0);
930974 if (pMotionVector != NULL) {
931975 ST64 (pMotionVector[LIST_1][iCacheIdx], LD64 (pMV));
932976 ST64 (pMotionVector[LIST_1][iCacheIdx + 6], LD64 (pMV));
@@ -937,8 +981,8 @@ void FillSpatialDirect8x8Mv (PDqLayer pCurLayer, const int16_t& iIdx8, const int · 4 unmodified lines
937981 }
938982 } else { //SUB_4x4
939983 * (uint32_t*)pMV = * (uint32_t*)pMvDirect[LIST_0];
940− ST32 (pCurLayer->pMv[LIST_0][iMbXy][iScan4Idx], LD32 (pMV));
941− ST32 (pCurLayer->pMvd[LIST_0][iMbXy][iScan4Idx], 0);
984+ ST32 (pCurDqLayer->pDec->pMv[LIST_0][iMbXy][iScan4Idx], LD32 (pMV));
985+ ST32 (pCurDqLayer->pMvd[LIST_0][iMbXy][iScan4Idx], 0);
942986 if (pMotionVector != NULL) {
943987 ST32 (pMotionVector[LIST_0][iCacheIdx], LD32 (pMV));
944988 }
@@ -946,8 +990,8 @@ void FillSpatialDirect8x8Mv (PDqLayer pCurLayer, const int16_t& iIdx8, const int · 1 unmodified line
946990 ST32 (pMvdCache[LIST_0][iCacheIdx], 0);
947991 }
948992 * (uint32_t*)pMV = * (uint32_t*)pMvDirect[LIST_1];
949− ST32 (pCurLayer->pMv[LIST_1][iMbXy][iScan4Idx], LD32 (pMV));
950− ST32 (pCurLayer->pMvd[LIST_1][iMbXy][iScan4Idx], 0);
993+ ST32 (pCurDqLayer->pDec->pMv[LIST_1][iMbXy][iScan4Idx], LD32 (pMV));
994+ ST32 (pCurDqLayer->pMvd[LIST_1][iMbXy][iScan4Idx], 0);
951995 if (pMotionVector != NULL) {
952996 ST32 (pMotionVector[LIST_1][iCacheIdx], LD32 (pMV));
953997 }
@@ -956,19 +1000,19 @@ void FillSpatialDirect8x8Mv (PDqLayer pCurLayer, const int16_t& iIdx8, const int · 2 unmodified lines
9561000 }
9571001 }
9581002 if ((* (int32_t*)pMvDirect[LIST_0] | * (int32_t*)pMvDirect[LIST_1])) {
959− uint32_t uiColZeroFlag = (0 == pCurLayer->iColocIntra[iColocIdx]) && !bIsLongRef &&
960− (pCurLayer->iColocRefIndex[LIST_0][iColocIdx] == 0 || (pCurLayer->iColocRefIndex[LIST_0][iColocIdx] < 0
961− && pCurLayer->iColocRefIndex[LIST_1][iColocIdx] == 0));
962− const int16_t (*mvColoc)[2] = 0 == pCurLayer->iColocRefIndex[LIST_0][iColocIdx] ? pCurLayer->iColocMv[LIST_0] :
963− pCurLayer->iColocMv[LIST_1];
1003+ uint32_t uiColZeroFlag = (0 == pCurDqLayer->iColocIntra[iColocIdx]) && !bIsLongRef &&
1004+ (pCurDqLayer->iColocRefIndex[LIST_0][iColocIdx] == 0 || (pCurDqLayer->iColocRefIndex[LIST_0][iColocIdx] < 0
1005+ && pCurDqLayer->iColocRefIndex[LIST_1][iColocIdx] == 0));
1006+ const int16_t (*mvColoc)[2] = 0 == pCurDqLayer->iColocRefIndex[LIST_0][iColocIdx] ? pCurDqLayer->iColocMv[LIST_0] :
1007+ pCurDqLayer->iColocMv[LIST_1];
9641008 const int16_t* mv = mvColoc[iColocIdx];
9651009 if (IS_SUB_8x8 (subMbType)) {
9661010 if (uiColZeroFlag && ((unsigned) (mv[0] + 1) <= 2 && (unsigned) (mv[1] + 1) <= 2)) {
9671011 if (iRef[LIST_0] == 0) {
968− ST64 (pCurLayer->pMv[LIST_0][iMbXy][iScan4Idx], 0);
969− ST64 (pCurLayer->pMv[LIST_0][iMbXy][iScan4Idx + 4], 0);
970− ST64 (pCurLayer->pMvd[LIST_0][iMbXy][iScan4Idx], 0);
971− ST64 (pCurLayer->pMvd[LIST_0][iMbXy][iScan4Idx + 4], 0);
1012+ ST64 (pCurDqLayer->pDec->pMv[LIST_0][iMbXy][iScan4Idx], 0);
1013+ ST64 (pCurDqLayer->pDec->pMv[LIST_0][iMbXy][iScan4Idx + 4], 0);
1014+ ST64 (pCurDqLayer->pMvd[LIST_0][iMbXy][iScan4Idx], 0);
1015+ ST64 (pCurDqLayer->pMvd[LIST_0][iMbXy][iScan4Idx + 4], 0);
9721016 if (pMotionVector != NULL) {
9731017 ST64 (pMotionVector[LIST_0][iCacheIdx], 0);
9741018 ST64 (pMotionVector[LIST_0][iCacheIdx + 6], 0);
@@ -980,10 +1024,10 @@ void FillSpatialDirect8x8Mv (PDqLayer pCurLayer, const int16_t& iIdx8, const int · 5 unmodified lines
9801024 }
9811025
9821026 if (iRef[LIST_1] == 0) {
983− ST64 (pCurLayer->pMv[LIST_1][iMbXy][iScan4Idx], 0);
984− ST64 (pCurLayer->pMv[LIST_1][iMbXy][iScan4Idx + 4], 0);
985− ST64 (pCurLayer->pMvd[LIST_1][iMbXy][iScan4Idx], 0);
986− ST64 (pCurLayer->pMvd[LIST_1][iMbXy][iScan4Idx + 4], 0);
1027+ ST64 (pCurDqLayer->pDec->pMv[LIST_1][iMbXy][iScan4Idx], 0);
1028+ ST64 (pCurDqLayer->pDec->pMv[LIST_1][iMbXy][iScan4Idx + 4], 0);
1029+ ST64 (pCurDqLayer->pMvd[LIST_1][iMbXy][iScan4Idx], 0);
1030+ ST64 (pCurDqLayer->pMvd[LIST_1][iMbXy][iScan4Idx + 4], 0);
9871031 if (pMotionVector != NULL) {
9881032 ST64 (pMotionVector[LIST_1][iCacheIdx], 0);
9891033 ST64 (pMotionVector[LIST_1][iCacheIdx + 6], 0);
@@ -997,8 +1041,8 @@ void FillSpatialDirect8x8Mv (PDqLayer pCurLayer, const int16_t& iIdx8, const int · 7 unmodified lines
9971041 } else {
9981042 if (uiColZeroFlag && ((unsigned) (mv[0] + 1) <= 2 && (unsigned) (mv[1] + 1) <= 2)) {
9991043 if (iRef[LIST_0] == 0) {
1000− ST32 (pCurLayer->pMv[LIST_0][iMbXy][iScan4Idx], 0);
1001− ST32 (pCurLayer->pMvd[LIST_0][iMbXy][iScan4Idx], 0);
1044+ ST32 (pCurDqLayer->pDec->pMv[LIST_0][iMbXy][iScan4Idx], 0);
1045+ ST32 (pCurDqLayer->pMvd[LIST_0][iMbXy][iScan4Idx], 0);
10021046 if (pMotionVector != NULL) {
10031047 ST32 (pMotionVector[LIST_0][iCacheIdx], 0);
10041048 }
@@ -1007,8 +1051,8 @@ void FillSpatialDirect8x8Mv (PDqLayer pCurLayer, const int16_t& iIdx8, const int · 2 unmodified lines
10071051 }
10081052 }
10091053 if (iRef[LIST_1] == 0) {
1010− ST32 (pCurLayer->pMv[LIST_1][iMbXy][iScan4Idx], 0);
1011− ST32 (pCurLayer->pMvd[LIST_1][iMbXy][iScan4Idx], 0);
1054+ ST32 (pCurDqLayer->pDec->pMv[LIST_1][iMbXy][iScan4Idx], 0);
1055+ ST32 (pCurDqLayer->pMvd[LIST_1][iMbXy][iScan4Idx], 0);
10121056 if (pMotionVector != NULL) {
10131057 ST32 (pMotionVector[LIST_1][iCacheIdx], 0);
10141058 }
@@ -1022,11 +1066,12 @@ void FillSpatialDirect8x8Mv (PDqLayer pCurLayer, const int16_t& iIdx8, const int · 7 unmodified lines
10221066 }
10231067 }
10241068
1025−void FillTemporalDirect8x8Mv (PDqLayer pCurLayer, const int16_t& iIdx8, const int8_t& iPartCount, const int8_t& iPartW,
1069+void FillTemporalDirect8x8Mv (PDqLayer pCurDqLayer, const int16_t& iIdx8, const int8_t& iPartCount,
1070+ const int8_t& iPartW,
10261071 const SubMbType& subMbType, int8_t iRef[LIST_A], int16_t (*mvColoc)[2], int16_t pMotionVector[LIST_A][30][MV_A],
10271072 int16_t pMvdCache[LIST_A][30][MV_A]) {
1028− PSlice pSlice = &pCurLayer->sLayerInfo.sSliceInLayer;
1029− int32_t iMbXy = pCurLayer->iMbXyIndex;
1073+ PSlice pSlice = &pCurDqLayer->sLayerInfo.sSliceInLayer;
1074+ int32_t iMbXy = pCurDqLayer->iMbXyIndex;
10301075 int16_t pMvDirect[LIST_A][2] = { { 0, 0 }, { 0, 0 } };
10311076 for (int32_t j = 0; j < iPartCount; j++) {
10321077 int8_t iPartIdx = iIdx8 + j * iPartW;
@@ -1038,16 +1083,16 @@ void FillTemporalDirect8x8Mv (PDqLayer pCurLayer, const int16_t& iIdx8, const in · 5 unmodified lines
10381083
10391084 int16_t pMV[4] = { 0 };
10401085 if (IS_SUB_8x8 (subMbType)) {
1041− if (!pCurLayer->iColocIntra[iColocIdx]) {
1086+ if (!pCurDqLayer->iColocIntra[iColocIdx]) {
10421087 pMvDirect[LIST_0][0] = (pSlice->iMvScale[LIST_0][iRef[LIST_0]] * mv[0] + 128) >> 8;
10431088 pMvDirect[LIST_0][1] = (pSlice->iMvScale[LIST_0][iRef[LIST_0]] * mv[1] + 128) >> 8;
10441089 }
10451090 ST32 (pMV, LD32 (pMvDirect[LIST_0]));
10461091 ST32 ((pMV + 2), LD32 (pMvDirect[LIST_0]));
1047− ST64 (pCurLayer->pMv[LIST_0][iMbXy][iScan4Idx], LD64 (pMV));
1048− ST64 (pCurLayer->pMv[LIST_0][iMbXy][iScan4Idx + 4], LD64 (pMV));
1049− ST64 (pCurLayer->pMvd[LIST_0][iMbXy][iScan4Idx], 0);
1050− ST64 (pCurLayer->pMvd[LIST_0][iMbXy][iScan4Idx + 4], 0);
1092+ ST64 (pCurDqLayer->pDec->pMv[LIST_0][iMbXy][iScan4Idx], LD64 (pMV));
1093+ ST64 (pCurDqLayer->pDec->pMv[LIST_0][iMbXy][iScan4Idx + 4], LD64 (pMV));
1094+ ST64 (pCurDqLayer->pMvd[LIST_0][iMbXy][iScan4Idx], 0);
1095+ ST64 (pCurDqLayer->pMvd[LIST_0][iMbXy][iScan4Idx + 4], 0);
10511096 if (pMotionVector != NULL) {
10521097 ST64 (pMotionVector[LIST_0][iCacheIdx], LD64 (pMV));
10531098 ST64 (pMotionVector[LIST_0][iCacheIdx + 6], LD64 (pMV));
@@ -1056,16 +1101,16 @@ void FillTemporalDirect8x8Mv (PDqLayer pCurLayer, const int16_t& iIdx8, const in · 2 unmodified lines
10561101 ST64 (pMvdCache[LIST_0][iCacheIdx], 0);
10571102 ST64 (pMvdCache[LIST_0][iCacheIdx + 6], 0);
10581103 }
1059− if (!pCurLayer->iColocIntra[g_kuiScan4[iIdx8]]) {
1104+ if (!pCurDqLayer->iColocIntra[g_kuiScan4[iIdx8]]) {
10601105 pMvDirect[LIST_1][0] = pMvDirect[LIST_0][0] - mv[0];
10611106 pMvDirect[LIST_1][1] = pMvDirect[LIST_0][1] - mv[1];
10621107 }
10631108 ST32 (pMV, LD32 (pMvDirect[LIST_1]));
10641109 ST32 ((pMV + 2), LD32 (pMvDirect[LIST_1]));
1065− ST64 (pCurLayer->pMv[LIST_1][iMbXy][iScan4Idx], LD64 (pMV));
1066− ST64 (pCurLayer->pMv[LIST_1][iMbXy][iScan4Idx + 4], LD64 (pMV));
1067− ST64 (pCurLayer->pMvd[LIST_1][iMbXy][iScan4Idx], 0);
1068− ST64 (pCurLayer->pMvd[LIST_1][iMbXy][iScan4Idx + 4], 0);
1110+ ST64 (pCurDqLayer->pDec->pMv[LIST_1][iMbXy][iScan4Idx], LD64 (pMV));
1111+ ST64 (pCurDqLayer->pDec->pMv[LIST_1][iMbXy][iScan4Idx + 4], LD64 (pMV));
1112+ ST64 (pCurDqLayer->pMvd[LIST_1][iMbXy][iScan4Idx], 0);
1113+ ST64 (pCurDqLayer->pMvd[LIST_1][iMbXy][iScan4Idx + 4], 0);
10691114 if (pMotionVector != NULL) {
10701115 ST64 (pMotionVector[LIST_1][iCacheIdx], LD64 (pMV));
10711116 ST64 (pMotionVector[LIST_1][iCacheIdx + 6], LD64 (pMV));
@@ -1075,24 +1120,24 @@ void FillTemporalDirect8x8Mv (PDqLayer pCurLayer, const int16_t& iIdx8, const in · 3 unmodified lines
10751120 ST64 (pMvdCache[LIST_1][iCacheIdx + 6], 0);
10761121 }
10771122 } else { //SUB_4x4
1078− if (!pCurLayer->iColocIntra[iColocIdx]) {
1123+ if (!pCurDqLayer->iColocIntra[iColocIdx]) {
10791124 pMvDirect[LIST_0][0] = (pSlice->iMvScale[LIST_0][iRef[LIST_0]] * mv[0] + 128) >> 8;
10801125 pMvDirect[LIST_0][1] = (pSlice->iMvScale[LIST_0][iRef[LIST_0]] * mv[1] + 128) >> 8;
10811126 }
1082− ST32 (pCurLayer->pMv[LIST_0][iMbXy][iScan4Idx], LD32 (pMvDirect[LIST_0]));
1083− ST32 (pCurLayer->pMvd[LIST_0][iMbXy][iScan4Idx], 0);
1127+ ST32 (pCurDqLayer->pDec->pMv[LIST_0][iMbXy][iScan4Idx], LD32 (pMvDirect[LIST_0]));
1128+ ST32 (pCurDqLayer->pMvd[LIST_0][iMbXy][iScan4Idx], 0);
10841129 if (pMotionVector != NULL) {
10851130 ST32 (pMotionVector[LIST_0][iCacheIdx], LD32 (pMvDirect[LIST_0]));
10861131 }
10871132 if (pMvdCache != NULL) {
10881133 ST32 (pMvdCache[LIST_0][iCacheIdx], 0);
10891134 }
1090− if (!pCurLayer->iColocIntra[iColocIdx]) {
1135+ if (!pCurDqLayer->iColocIntra[iColocIdx]) {
10911136 pMvDirect[LIST_1][0] = pMvDirect[LIST_0][0] - mv[0];
10921137 pMvDirect[LIST_1][1] = pMvDirect[LIST_0][1] - mv[1];
10931138 }
1094− ST32 (pCurLayer->pMv[LIST_1][iMbXy][iScan4Idx], LD32 (pMvDirect[LIST_1]));
1095− ST32 (pCurLayer->pMvd[LIST_1][iMbXy][iScan4Idx], 0);
1139+ ST32 (pCurDqLayer->pDec->pMv[LIST_1][iMbXy][iScan4Idx], LD32 (pMvDirect[LIST_1]));
1140+ ST32 (pCurDqLayer->pMvd[LIST_1][iMbXy][iScan4Idx], 0);
10961141 if (pMotionVector != NULL) {
10971142 ST32 (pMotionVector[LIST_1][iCacheIdx], LD32 (pMvDirect[LIST_1]));
10981143 }
@@ -1122,8 +1167,9 @@ int8_t MapColToList0 (PWelsDecoderContext& pCtx, const int8_t& colocRefIndexL0, · 23 unmodified lines
11221167 void Update8x8RefIdx (PDqLayer& pCurDqLayer, const int16_t& iPartIdx, const int32_t& listIdx, const int8_t& iRef) {
11231168 int32_t iMbXy = pCurDqLayer->iMbXyIndex;
11241169 const uint8_t iScan4Idx = g_kuiScan4[iPartIdx];
1125− pCurDqLayer->pRefIndex[listIdx][iMbXy][iScan4Idx] = pCurDqLayer->pRefIndex[listIdx][iMbXy][iScan4Idx + 1] =
1126− pCurDqLayer->pRefIndex[listIdx][iMbXy][iScan4Idx + 4] = pCurDqLayer->pRefIndex[listIdx][iMbXy][iScan4Idx + 5] = iRef;
1170+ pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][iScan4Idx] = pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][iScan4Idx + 1] =
1171+ pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][iScan4Idx + 4] = pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][iScan4Idx +
1172+ 5] = iRef;
11271173
11281174 }
11291175 } // namespace WelsDec

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