Showing the changes to codec/decoder/core/src/deblocking.cpp (1 of 2 files). Show all
Unified · Split
| @@ -62,6 +62,30 @@ namespace WelsDec { · 61 unmodified lines | |||
| 62 | ( WELS_ABS( iMotionVector[iMbXy][iIndex][1] - iMotionVector[iMbBn][iNeighIndex][1] ) >= 4 )\ | 62 | ( WELS_ABS( iMotionVector[iMbXy][iIndex][1] - iMotionVector[iMbBn][iNeighIndex][1] ) >= 4 )\ |
| 63 | ) | 63 | ) |
| 64 | 64 | ||
| 65 | #define ON_MB_BS_MV_DIFF(iMV_A, iMV_B, iMbXy, iMbBn, iIndex, iNeighIndex) \ | ||
| 66 | (\ | ||
| 67 | (( WELS_ABS( iMV_A[iMbXy][iIndex][0] - iMV_B[iMbBn][iNeighIndex][0] ) >= 4 ) || \ | ||
| 68 | ( WELS_ABS( iMV_A[iMbXy][iIndex][1] - iMV_B[iMbBn][iNeighIndex][1] ) >= 4 ))\ | ||
| 69 | ) | ||
| 70 | |||
| 71 | #define IN_MB_BS_MV_DIFF(iMV_A, iMV_B, iMbXy, iIndex, iNeighIndex) \ | ||
| 72 | (\ | ||
| 73 | (( WELS_ABS( iMV_A[iMbXy][iIndex][0] - iMV_B[iMbXy][iNeighIndex][0] ) >= 4 ) | \ | ||
| 74 | ( WELS_ABS( iMV_A[iMbXy][iIndex][1] - iMV_B[iMbXy][iNeighIndex][1] ) >= 4 )) \ | ||
| 75 | ) | ||
| 76 | |||
| 77 | //On MB Boundary strength | ||
| 78 | //Apply for B_SLICE | ||
| 79 | #define ON_MB_BS(ref_p0, ref_q0, ref_p1, ref_q1, mv0, mv1, iMbXy, iMbBn, iIndex, iNeighIndex) \ | ||
| 80 | (\ | ||
| 81 | (ref_p0 != ref_p1) ? \ | ||
| 82 | ((ref_p0 == ref_q0) ? \ | ||
| 83 | (ON_MB_BS_MV_DIFF (mv0, mv0, iMbXy, iMbBn, iIndex, iNeighIndex) || ON_MB_BS_MV_DIFF (mv1, mv1, iMbXy, iMbBn, iIndex, iNeighIndex)) : \ | ||
| 84 | (ON_MB_BS_MV_DIFF (mv0, mv1, iMbXy, iMbBn, iIndex, iNeighIndex) || ON_MB_BS_MV_DIFF (mv1, mv0, iMbXy, iMbBn, iIndex, iNeighIndex))) : \ | ||
| 85 | ((ON_MB_BS_MV_DIFF (mv0, mv0, iMbXy, iMbBn, iIndex, iNeighIndex) || ON_MB_BS_MV_DIFF (mv1, mv1, iMbXy, iMbBn, iIndex, iNeighIndex)) && \ | ||
| 86 | (ON_MB_BS_MV_DIFF (mv0, mv1, iMbXy, iMbBn, iIndex, iNeighIndex) || ON_MB_BS_MV_DIFF (mv1, mv0, iMbXy, iMbBn, iIndex, iNeighIndex))) \ | ||
| 87 | ) | ||
| 88 | |||
| 65 | #if defined(SAME_MB_DIFF_REFIDX) | 89 | #if defined(SAME_MB_DIFF_REFIDX) |
| 66 | #define SMB_EDGE_MV(pRefPics, iMotionVector, iIndex, iNeighIndex) \ | 90 | #define SMB_EDGE_MV(pRefPics, iMotionVector, iIndex, iNeighIndex) \ |
| 67 | (\ | 91 | (\ |
| @@ -76,9 +100,40 @@ namespace WelsDec { · 8 unmodified lines | |||
| 76 | ) | 100 | ) |
| 77 | #endif | 101 | #endif |
| 78 | 102 | ||
| 103 | #if defined(SAME_MB_DIFF_REFIDX) | ||
| 104 | #define IN_SMB_EDGE_MV(refs, mv, iMbXy, iIndex, iNeigborIndex) \ | ||
| 105 | (\ | ||
| 106 | (((refs[LIST_0][iIndex] == refs[LIST_0][iNeigborIndex]) && (refs[LIST_1][iIndex] == refs[LIST_1][iNeigborIndex])) || \ | ||
| 107 | ((refs[LIST_0][iIndex] == refs[LIST_1][iNeigborIndex]) && (refs[LIST_1][iIndex] == refs[LIST_0][iNeigborIndex]))) ? \ | ||
| 108 | ((refs[LIST_0][iIndex] != refs[LIST_1][iIndex]) ? \ | ||
| 109 | ((refs[LIST_0][iIndex] == refs[LIST_0][iNeigborIndex]) ? \ | ||
| 110 | (IN_MB_BS_MV_DIFF (mv[LIST_0], mv[LIST_0], iMbXy, iIndex, iNeigborIndex) | IN_MB_BS_MV_DIFF (mv[LIST_1], mv[LIST_1], iMbXy, iIndex, iNeigborIndex)) : \ | ||
| 111 | (IN_MB_BS_MV_DIFF (mv[LIST_0], mv[LIST_1], iMbXy, iIndex, iNeigborIndex) | IN_MB_BS_MV_DIFF (mv[LIST_1], mv[LIST_0], iMbXy, iIndex, iNeigborIndex))) : \ | ||
| 112 | ((IN_MB_BS_MV_DIFF (mv[LIST_0], mv[LIST_0], iMbXy, iIndex, iNeigborIndex) | IN_MB_BS_MV_DIFF (mv[LIST_1], mv[LIST_1], iMbXy, iIndex, iNeigborIndex)) && \ | ||
| 113 | (IN_MB_BS_MV_DIFF (mv[LIST_0], mv[LIST_1], iMbXy, iIndex, iNeigborIndex) | IN_MB_BS_MV_DIFF (mv[LIST_1], mv[LIST_0], iMbXy, iIndex, iNeigborIndex)))) : 1 \ | ||
| 114 | ) | ||
| 115 | #else | ||
| 116 | #define IN_SMB_EDGE_MV(refs, mv, iMbXy, iIndex, iNeigborIndex) \ | ||
| 117 | (\ | ||
| 118 | !!(((refs[LIST_0][iIndex] == refs[LIST_0][iNeigborIndex]) && (refs[LIST_1][iIndex] == refs[LIST_1][iNeigborIndex])) || \ | ||
| 119 | ((refs[LIST_0][iIndex] == refs[LIST_1][iNeigborIndex]) && (refs[LIST_1][iIndex] == refs[LIST_0][iNeigborIndex]))) ? \ | ||
| 120 | ((refs[LIST_0][iIndex] != refs[LIST_1][iIndex]) ? \ | ||
| 121 | ((refs[LIST_0][iIndex] == refs[LIST_0][iNeigborIndex]) ? \ | ||
| 122 | (IN_MB_BS_MV_DIFF (mv[LIST_0], mv[LIST_0], iMbXy, iIndex, iNeigborIndex) | IN_MB_BS_MV_DIFF (mv[LIST_1], mv[LIST_1], iMbXy, iIndex, iNeigborIndex)) : \ | ||
| 123 | (IN_MB_BS_MV_DIFF (mv[LIST_0], mv[LIST_1], iMbXy, iIndex, iNeigborIndex) | IN_MB_BS_MV_DIFF (mv[LIST_1], mv[LIST_0], iMbXy, iIndex, iNeigborIndex))) : \ | ||
| 124 | ((IN_MB_BS_MV_DIFF (mv[LIST_0], mv[LIST_0], iMbXy, iIndex, iNeigborIndex) | IN_MB_BS_MV_DIFF (mv[LIST_1], mv[LIST_1], iMbXy, iIndex, iNeigborIndex)) && \ | ||
| 125 | (IN_MB_BS_MV_DIFF (mv[LIST_0], mv[LIST_1], iMbXy, iIndex, iNeigborIndex) | IN_MB_BS_MV_DIFF (mv[LIST_1], mv[LIST_0], iMbXy, iIndex, iNeigborIndex)))) : 1 \ | ||
| 126 | ) | ||
| 127 | #endif | ||
| 128 | |||
| 79 | #define BS_EDGE(bsx1, pRefPics, iMotionVector, iIndex, iNeighIndex) \ | 129 | #define BS_EDGE(bsx1, pRefPics, iMotionVector, iIndex, iNeighIndex) \ |
| 80 | ( (bsx1|SMB_EDGE_MV(pRefPics, iMotionVector, iIndex, iNeighIndex))<<((uint8_t)(!!bsx1))) | 130 | ( (bsx1|SMB_EDGE_MV(pRefPics, iMotionVector, iIndex, iNeighIndex))<<((uint8_t)(!!bsx1))) |
| 81 | 131 | ||
| 132 | //Inside MB Boundary strength | ||
| 133 | //Apply for B_SLICE | ||
| 134 | #define IN_BS_EDGE(bsx1, refs, mv, iMbXy, iIndex, iNeigborIndex) \ | ||
| 135 | ( (bsx1|IN_SMB_EDGE_MV(refs, mv, iMbXy, iIndex, iNeigborIndex))<<((uint8_t)(!!bsx1))) | ||
| 136 | |||
| 82 | #define GET_ALPHA_BETA_FROM_QP(iQp, iAlphaOffset, iBetaOffset, iIndex, iAlpha, iBeta) \ | 137 | #define GET_ALPHA_BETA_FROM_QP(iQp, iAlphaOffset, iBetaOffset, iIndex, iAlpha, iBeta) \ |
| 83 | {\ | 138 | {\ |
| 84 | iIndex = (iQp + iAlphaOffset);\ | 139 | iIndex = (iQp + iAlphaOffset);\ |
| @@ -319,51 +374,23 @@ void static inline DeblockingBSliceBSInsideMBNormal (PDeblockingFilter pFilter, · 234 unmodified lines | |||
| 319 | //vertical | 374 | //vertical |
| 320 | int8_t iIndex = g_kuiMbCountScan4Idx[1 << 2]; | 375 | int8_t iIndex = g_kuiMbCountScan4Idx[1 << 2]; |
| 321 | int8_t iNeigborIndex = g_kuiMbCountScan4Idx[0]; | 376 | int8_t iNeigborIndex = g_kuiMbCountScan4Idx[0]; |
| 322 | nBS[0][2][0] = nBS[0][2][1] = 1; | 377 | nBS[0][2][0] = nBS[0][2][1] = IN_BS_EDGE ((i8x8NnzTab[0] | i8x8NnzTab[1]), iRefs, pCurDqLayer->pDec->pMv, iMbXy, |
| 323 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | 378 | iIndex, iNeigborIndex); |
| 324 | if (iRefs[listIdx][iIndex] && iRefs[listIdx][iNeigborIndex]) { | ||
| 325 | nBS[0][2][0] = nBS[0][2][1] = BS_EDGE ((i8x8NnzTab[0] | i8x8NnzTab[1]), iRefs[listIdx], | ||
| 326 | pCurDqLayer->pDec->pMv[listIdx][iMbXy], | ||
| 327 | iIndex, iNeigborIndex); | ||
| 328 | break; | ||
| 329 | } | ||
| 330 | } | ||
| 331 | iIndex = g_kuiMbCountScan4Idx[3 << 2]; | 379 | iIndex = g_kuiMbCountScan4Idx[3 << 2]; |
| 332 | iNeigborIndex = g_kuiMbCountScan4Idx[2 << 2]; | 380 | iNeigborIndex = g_kuiMbCountScan4Idx[2 << 2]; |
| 333 | nBS[0][2][2] = nBS[0][2][3] = 1; | 381 | nBS[0][2][2] = nBS[0][2][3] = IN_BS_EDGE ((i8x8NnzTab[2] | i8x8NnzTab[3]), iRefs, pCurDqLayer->pDec->pMv, iMbXy, |
| 334 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | 382 | iIndex, iNeigborIndex); |
| 335 | if (iRefs[listIdx][iIndex] && iRefs[listIdx][iNeigborIndex]) { | ||
| 336 | nBS[0][2][2] = nBS[0][2][3] = BS_EDGE ((i8x8NnzTab[2] | i8x8NnzTab[3]), iRefs[listIdx], | ||
| 337 | pCurDqLayer->pDec->pMv[listIdx][iMbXy], | ||
| 338 | iIndex, iNeigborIndex); | ||
| 339 | break; | ||
| 340 | } | ||
| 341 | } | ||
| 342 | 383 | ||
| 343 | //horizontal | 384 | //horizontal |
| 344 | iIndex = g_kuiMbCountScan4Idx[2 << 2]; | 385 | iIndex = g_kuiMbCountScan4Idx[2 << 2]; |
| 345 | iNeigborIndex = g_kuiMbCountScan4Idx[0]; | 386 | iNeigborIndex = g_kuiMbCountScan4Idx[0]; |
| 346 | nBS[1][2][0] = nBS[1][2][1] = 1; | 387 | nBS[1][2][0] = nBS[1][2][1] = IN_BS_EDGE ((i8x8NnzTab[0] | i8x8NnzTab[2]), iRefs, pCurDqLayer->pDec->pMv, iMbXy, |
| 347 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | 388 | iIndex, iNeigborIndex); |
| 348 | if (iRefs[listIdx][iIndex] && iRefs[listIdx][iNeigborIndex]) { | ||
| 349 | nBS[1][2][0] = nBS[1][2][1] = BS_EDGE ((i8x8NnzTab[0] | i8x8NnzTab[2]), iRefs[listIdx], | ||
| 350 | pCurDqLayer->pDec->pMv[listIdx][iMbXy], | ||
| 351 | iIndex, iNeigborIndex); | ||
| 352 | break; | ||
| 353 | } | ||
| 354 | } | ||
| 355 | 389 | ||
| 356 | iIndex = g_kuiMbCountScan4Idx[3 << 2]; | 390 | iIndex = g_kuiMbCountScan4Idx[3 << 2]; |
| 357 | iNeigborIndex = g_kuiMbCountScan4Idx[1 << 2]; | 391 | iNeigborIndex = g_kuiMbCountScan4Idx[1 << 2]; |
| 358 | nBS[1][2][2] = nBS[1][2][3] = 1; | 392 | nBS[1][2][2] = nBS[1][2][3] = IN_BS_EDGE ((i8x8NnzTab[1] | i8x8NnzTab[3]), iRefs, pCurDqLayer->pDec->pMv, iMbXy, |
| 359 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | 393 | iIndex, iNeigborIndex); |
| 360 | if (iRefs[listIdx][iIndex] && iRefs[listIdx][iNeigborIndex]) { | ||
| 361 | nBS[1][2][2] = nBS[1][2][3] = BS_EDGE ((i8x8NnzTab[1] | i8x8NnzTab[3]), iRefs[listIdx], | ||
| 362 | pCurDqLayer->pDec->pMv[listIdx][iMbXy], | ||
| 363 | iIndex, iNeigborIndex); | ||
| 364 | break; | ||
| 365 | } | ||
| 366 | } | ||
| 367 | } else { | 394 | } else { |
| 368 | uiNnz32b0 = * (uint32_t*) (pNnzTab + 0); | 395 | uiNnz32b0 = * (uint32_t*) (pNnzTab + 0); |
| 369 | uiNnz32b1 = * (uint32_t*) (pNnzTab + 4); | 396 | uiNnz32b1 = * (uint32_t*) (pNnzTab + 4); |
| @@ -372,190 +399,51 @@ void static inline DeblockingBSliceBSInsideMBNormal (PDeblockingFilter pFilter, · 2 unmodified lines | |||
| 372 | 399 | ||
| 373 | for (int i = 0; i < 3; i++) | 400 | for (int i = 0; i < 3; i++) |
| 374 | uiBsx4[i] = pNnzTab[i] | pNnzTab[i + 1]; | 401 | uiBsx4[i] = pNnzTab[i] | pNnzTab[i + 1]; |
| 375 | nBS[0][1][0] = 1; | 402 | nBS[0][1][0] = IN_BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pDec->pMv, iMbXy, 1, 0); |
| 376 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | 403 | nBS[0][2][0] = IN_BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pDec->pMv, iMbXy, 2, 1); |
| 377 | if (iRefs[listIdx][1] && iRefs[listIdx][0]) { | 404 | nBS[0][3][0] = IN_BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pDec->pMv, iMbXy, 3, 2); |
| 378 | nBS[0][1][0] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 1, 0); | ||
| 379 | break; | ||
| 380 | } | ||
| 381 | } | ||
| 382 | nBS[0][2][0] = 1; | ||
| 383 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | ||
| 384 | if (iRefs[listIdx][2] && iRefs[listIdx][1]) { | ||
| 385 | nBS[0][2][0] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 2, 1); | ||
| 386 | break; | ||
| 387 | } | ||
| 388 | } | ||
| 389 | nBS[0][3][0] = 1; | ||
| 390 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | ||
| 391 | if (iRefs[listIdx][3] && iRefs[listIdx][2]) { | ||
| 392 | nBS[0][3][0] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 3, 2); | ||
| 393 | break; | ||
| 394 | } | ||
| 395 | } | ||
| 396 | 405 | ||
| 397 | for (int i = 0; i < 3; i++) | 406 | for (int i = 0; i < 3; i++) |
| 398 | uiBsx4[i] = pNnzTab[4 + i] | pNnzTab[4 + i + 1]; | 407 | uiBsx4[i] = pNnzTab[4 + i] | pNnzTab[4 + i + 1]; |
| 399 | nBS[0][1][1] = 1; | 408 | nBS[0][1][1] = IN_BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pDec->pMv, iMbXy, 5, 4); |
| 400 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | 409 | nBS[0][2][1] = IN_BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pDec->pMv, iMbXy, 6, 5); |
| 401 | if (iRefs[listIdx][5] && iRefs[listIdx][4]) { | 410 | nBS[0][3][1] = IN_BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pDec->pMv, iMbXy, 7, 6); |
| 402 | nBS[0][1][1] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 5, 4); | ||
| 403 | break; | ||
| 404 | } | ||
| 405 | } | ||
| 406 | nBS[0][2][1] = 1; | ||
| 407 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | ||
| 408 | if (iRefs[listIdx][6] && iRefs[listIdx][5]) { | ||
| 409 | nBS[0][2][1] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 6, 5); | ||
| 410 | break; | ||
| 411 | } | ||
| 412 | } | ||
| 413 | nBS[0][3][1] = 1; | ||
| 414 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | ||
| 415 | if (iRefs[listIdx][7] && iRefs[listIdx][6]) { | ||
| 416 | nBS[0][3][1] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 7, 6); | ||
| 417 | break; | ||
| 418 | } | ||
| 419 | } | ||
| 420 | 411 | ||
| 421 | for (int i = 0; i < 3; i++) | 412 | for (int i = 0; i < 3; i++) |
| 422 | uiBsx4[i] = pNnzTab[8 + i] | pNnzTab[8 + i + 1]; | 413 | uiBsx4[i] = pNnzTab[8 + i] | pNnzTab[8 + i + 1]; |
| 423 | nBS[0][1][2] = 1; | 414 | nBS[0][1][2] = IN_BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pDec->pMv, iMbXy, 9, 8); |
| 424 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | 415 | nBS[0][2][2] = IN_BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pDec->pMv, iMbXy, 10, 9); |
| 425 | if (iRefs[listIdx][9] && iRefs[listIdx][8]) { | 416 | nBS[0][3][2] = IN_BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pDec->pMv, iMbXy, 11, 10); |
| 426 | nBS[0][1][2] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 9, 8); | ||
| 427 | break; | ||
| 428 | } | ||
| 429 | } | ||
| 430 | nBS[0][2][2] = 1; | ||
| 431 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | ||
| 432 | if (iRefs[listIdx][10] && iRefs[listIdx][9]) { | ||
| 433 | nBS[0][2][2] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 10, 9); | ||
| 434 | break; | ||
| 435 | } | ||
| 436 | } | ||
| 437 | nBS[0][3][2] = 1; | ||
| 438 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | ||
| 439 | if (iRefs[listIdx][11] && iRefs[listIdx][10]) { | ||
| 440 | nBS[0][3][2] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 11, 10); | ||
| 441 | break; | ||
| 442 | } | ||
| 443 | } | ||
| 444 | 417 | ||
| 445 | for (int i = 0; i < 3; i++) | 418 | for (int i = 0; i < 3; i++) |
| 446 | uiBsx4[i] = pNnzTab[12 + i] | pNnzTab[12 + i + 1]; | 419 | uiBsx4[i] = pNnzTab[12 + i] | pNnzTab[12 + i + 1]; |
| 447 | nBS[0][1][3] = 1; | 420 | nBS[0][1][3] = IN_BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pDec->pMv, iMbXy, 13, 12); |
| 448 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | 421 | nBS[0][2][3] = IN_BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pDec->pMv, iMbXy, 14, 13); |
| 449 | if (iRefs[listIdx][13] && iRefs[listIdx][12]) { | 422 | nBS[0][3][3] = IN_BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pDec->pMv, iMbXy, 15, 14); |
| 450 | nBS[0][1][3] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 13, 12); | ||
| 451 | break; | ||
| 452 | } | ||
| 453 | } | ||
| 454 | nBS[0][2][3] = 1; | ||
| 455 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | ||
| 456 | if (iRefs[listIdx][14] && iRefs[listIdx][13]) { | ||
| 457 | nBS[0][2][3] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 14, 13); | ||
| 458 | break; | ||
| 459 | } | ||
| 460 | } | ||
| 461 | nBS[0][3][3] = 1; | ||
| 462 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | ||
| 463 | if (iRefs[listIdx][15] && iRefs[listIdx][14]) { | ||
| 464 | nBS[0][3][3] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 15, 14); | ||
| 465 | break; | ||
| 466 | } | ||
| 467 | } | ||
| 468 | 423 | ||
| 469 | // horizontal | 424 | // horizontal |
| 470 | * (uint32_t*)uiBsx4 = (uiNnz32b0 | uiNnz32b1); | 425 | * (uint32_t*)uiBsx4 = (uiNnz32b0 | uiNnz32b1); |
| 471 | nBS[1][1][0] = 1; | 426 | nBS[1][1][0] = IN_BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pDec->pMv, iMbXy, 4, 0); |
| 472 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | 427 | nBS[1][1][1] = IN_BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pDec->pMv, iMbXy, 5, 1); |
| 473 | if (iRefs[listIdx][4] && iRefs[listIdx][0]) { | 428 | nBS[1][1][2] = IN_BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pDec->pMv, iMbXy, 6, 2); |
| 474 | nBS[1][1][0] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 4, 0); | 429 | nBS[1][1][3] = IN_BS_EDGE (uiBsx4[3], iRefs, pCurDqLayer->pDec->pMv, iMbXy, 7, 3); |
| 475 | break; | ||
| 476 | } | ||
| 477 | } | ||
| 478 | nBS[1][1][1] = 1; | ||
| 479 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | ||
| 480 | if (iRefs[listIdx][5] && iRefs[listIdx][1]) { | ||
| 481 | nBS[1][1][1] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 5, 1); | ||
| 482 | break; | ||
| 483 | } | ||
| 484 | } | ||
| 485 | nBS[1][1][2] = 1; | ||
| 486 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | ||
| 487 | if (iRefs[listIdx][6] && iRefs[listIdx][2]) { | ||
| 488 | nBS[1][1][2] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 6, 2); | ||
| 489 | break; | ||
| 490 | } | ||
| 491 | } | ||
| 492 | nBS[1][1][3] = 1; | ||
| 493 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | ||
| 494 | if (iRefs[listIdx][7] && iRefs[listIdx][3]) { | ||
| 495 | nBS[1][1][3] = BS_EDGE (uiBsx4[3], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 7, 3); | ||
| 496 | break; | ||
| 497 | } | ||
| 498 | } | ||
| 499 | 430 | ||
| 500 | * (uint32_t*)uiBsx4 = (uiNnz32b1 | uiNnz32b2); | 431 | * (uint32_t*)uiBsx4 = (uiNnz32b1 | uiNnz32b2); |
| 501 | nBS[1][2][0] = 1; | 432 | nBS[1][2][0] = IN_BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pDec->pMv, iMbXy, 8, 4); |
| 502 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | 433 | nBS[1][2][1] = IN_BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pDec->pMv, iMbXy, 9, 5); |
| 503 | if (iRefs[listIdx][8] && iRefs[listIdx][4]) { | 434 | nBS[1][2][2] = IN_BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pDec->pMv, iMbXy, 10, 6); |
| 504 | nBS[1][2][0] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 8, 4); | 435 | nBS[1][2][3] = IN_BS_EDGE (uiBsx4[3], iRefs, pCurDqLayer->pDec->pMv, iMbXy, 11, 7); |
| 505 | break; | ||
| 506 | } | ||
| 507 | } | ||
| 508 | nBS[1][2][1] = 1; | ||
| 509 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | ||
| 510 | if (iRefs[listIdx][9] && iRefs[listIdx][5]) { | ||
| 511 | nBS[1][2][1] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 9, 5); | ||
| 512 | break; | ||
| 513 | } | ||
| 514 | } | ||
| 515 | nBS[1][2][2] = 1; | ||
| 516 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | ||
| 517 | if (iRefs[listIdx][10] && iRefs[listIdx][6]) { | ||
| 518 | nBS[1][2][2] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 10, 6); | ||
| 519 | break; | ||
| 520 | } | ||
| 521 | } | ||
| 522 | nBS[1][2][3] = 1; | ||
| 523 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | ||
| 524 | if (iRefs[listIdx][11] && iRefs[listIdx][7]) { | ||
| 525 | nBS[1][2][3] = BS_EDGE (uiBsx4[3], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 11, 7); | ||
| 526 | break; | ||
| 527 | } | ||
| 528 | } | ||
| 529 | 436 | ||
| 530 | * (uint32_t*)uiBsx4 = (uiNnz32b2 | uiNnz32b3); | 437 | * (uint32_t*)uiBsx4 = (uiNnz32b2 | uiNnz32b3); |
| 531 | nBS[1][3][0] = 1; | 438 | nBS[1][3][0] = IN_BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pDec->pMv, iMbXy, 12, 8); |
| 532 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | 439 | nBS[1][3][1] = IN_BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pDec->pMv, iMbXy, 13, 9); |
| 533 | if (iRefs[listIdx][12] && iRefs[listIdx][8]) { | 440 | nBS[1][3][2] = IN_BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pDec->pMv, iMbXy, 14, 10); |
| 534 | nBS[1][3][0] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 12, 8); | 441 | nBS[1][3][3] = IN_BS_EDGE (uiBsx4[3], iRefs, pCurDqLayer->pDec->pMv, iMbXy, 15, 11); |
| 535 | break; | 442 | for (int ii = 0; ii < 2; ii++) |
| 536 | } | 443 | for (int jj = 1; jj < 4; jj++) |
| 537 | } | 444 | for (int kk = 0; kk < 4; kk++) |
| 538 | nBS[1][3][1] = 1; | 445 | if (nBS[ii][jj][kk] > 1) |
| 539 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | 446 | nBS[ii][jj][kk] = nBS[ii][jj][kk]; |
| 540 | if (iRefs[listIdx][13] && iRefs[listIdx][9]) { | ||
| 541 | nBS[1][3][1] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 13, 9); | ||
| 542 | break; | ||
| 543 | } | ||
| 544 | } | ||
| 545 | nBS[1][3][2] = 1; | ||
| 546 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | ||
| 547 | if (iRefs[listIdx][14] && iRefs[listIdx][10]) { | ||
| 548 | nBS[1][3][2] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 14, 10); | ||
| 549 | break; | ||
| 550 | } | ||
| 551 | } | ||
| 552 | nBS[1][3][3] = 1; | ||
| 553 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | ||
| 554 | if (iRefs[listIdx][15] && iRefs[listIdx][11]) { | ||
| 555 | nBS[1][3][3] = BS_EDGE (uiBsx4[3], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 15, 11); | ||
| 556 | break; | ||
| 557 | } | ||
| 558 | } | ||
| 559 | } | 447 | } |
| 560 | } | 448 | } |
| 561 | 449 | ||
| @@ -662,7 +550,9 @@ uint32_t DeblockingBSliceBsMarginalMBAvcbase (PDeblockingFilter pFilter, PDqLay · 100 unmodified lines | |||
| 662 | const uint8_t* pBnIdx = &g_kuiTableBIdx[iEdge][4]; | 550 | const uint8_t* pBnIdx = &g_kuiTableBIdx[iEdge][4]; |
| 663 | const uint8_t* pB8x8Idx = &g_kuiTableB8x8Idx[iEdge][0]; | 551 | const uint8_t* pB8x8Idx = &g_kuiTableB8x8Idx[iEdge][0]; |
| 664 | const uint8_t* pBn8x8Idx = &g_kuiTableB8x8Idx[iEdge][8]; | 552 | const uint8_t* pBn8x8Idx = &g_kuiTableB8x8Idx[iEdge][8]; |
| 665 | PPicture ref0, ref1; | 553 | PPicture ref_p0, ref_p1, ref_q0, ref_q1; |
| 554 | int8_t (*iRefIdx0)[MB_BLOCK4x4_NUM] = pCurDqLayer->pDec->pRefIndex[LIST_0]; | ||
| 555 | int8_t (*iRefIdx1)[MB_BLOCK4x4_NUM] = pCurDqLayer->pDec->pRefIndex[LIST_1]; | ||
| 666 | 556 | ||
| 667 | if (pCurDqLayer->pTransformSize8x8Flag[iMbXy] && pCurDqLayer->pTransformSize8x8Flag[iNeighMb]) { | 557 | if (pCurDqLayer->pTransformSize8x8Flag[iMbXy] && pCurDqLayer->pTransformSize8x8Flag[iNeighMb]) { |
| 668 | for (i = 0; i < 2; i++) { | 558 | for (i = 0; i < 2; i++) { |
| @@ -674,16 +564,19 @@ uint32_t DeblockingBSliceBsMarginalMBAvcbase (PDeblockingFilter pFilter, PDqLay · 5 unmodified lines | |||
| 674 | pBS[i << 1] = pBS[1 + (i << 1)] = 2; | 564 | pBS[i << 1] = pBS[1 + (i << 1)] = 2; |
| 675 | } else { | 565 | } else { |
| 676 | pBS[i << 1] = pBS[1 + (i << 1)] = 1; | 566 | pBS[i << 1] = pBS[1 + (i << 1)] = 1; |
| 677 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | 567 | ref_p0 = iRefIdx0[iMbXy][*pB8x8Idx] > REF_NOT_IN_LIST ? pFilter->pRefPics[LIST_0][iRefIdx0[iMbXy][*pB8x8Idx]] : NULL; |
| 678 | if (pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][*pB8x8Idx] > REF_NOT_IN_LIST | 568 | ref_q0 = iRefIdx0[iNeighMb][*pBn8x8Idx] > REF_NOT_IN_LIST ? pFilter->pRefPics[LIST_0][iRefIdx0[iNeighMb][*pBn8x8Idx]] : |
| 679 | && pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][*pBn8x8Idx] > REF_NOT_IN_LIST) { | 569 | NULL; |
| 680 | int8_t (*iRefIdx)[MB_BLOCK4x4_NUM] = pCurDqLayer->pDec->pRefIndex[listIdx]; | 570 | ref_p1 = iRefIdx1[iMbXy][*pB8x8Idx] > REF_NOT_IN_LIST ? pFilter->pRefPics[LIST_1][iRefIdx1[iMbXy][*pB8x8Idx]] : NULL; |
| 681 | ref0 = pFilter->pRefPics[listIdx][iRefIdx[iMbXy][*pB8x8Idx]]; | 571 | ref_q1 = iRefIdx1[iNeighMb][*pBn8x8Idx] > REF_NOT_IN_LIST ? pFilter->pRefPics[LIST_1][iRefIdx1[iNeighMb][*pBn8x8Idx]] : |
| 682 | ref1 = pFilter->pRefPics[listIdx][iRefIdx[iNeighMb][*pBn8x8Idx]]; | 572 | NULL; |
| 683 | pBS[i << 1] = pBS[1 + (i << 1)] = MB_BS_MV (ref0, ref1, pCurDqLayer->pDec->pMv[listIdx], iMbXy, iNeighMb, | 573 | if (((ref_p0 == ref_q0) && (ref_p1 == ref_q1)) || ((ref_p0 == ref_q1) && (ref_p1 == ref_q0))) { |
| 684 | *pB8x8Idx, *pBn8x8Idx); | 574 | int16_t (*pMv0)[MB_BLOCK4x4_NUM][MV_A] = pCurDqLayer->pDec != NULL ? pCurDqLayer->pDec->pMv[LIST_0] : |
| 685 | break; | 575 | pCurDqLayer->pMv[LIST_0]; |
| 686 | } | 576 | int16_t (*pMv1)[MB_BLOCK4x4_NUM][MV_A] = pCurDqLayer->pDec != NULL ? pCurDqLayer->pDec->pMv[LIST_1] : |
| 577 | pCurDqLayer->pMv[LIST_1]; | ||
| 578 | pBS[i << 1] = pBS[1 + (i << 1)] = ON_MB_BS (ref_p0, ref_q0, ref_p1, ref_q1, pMv0, pMv1, iMbXy, iNeighMb, *pB8x8Idx, | ||
| 579 | *pBn8x8Idx); | ||
| 687 | } | 580 | } |
| 688 | } | 581 | } |
| 689 | pB8x8Idx += 4; | 582 | pB8x8Idx += 4; |
| @@ -700,16 +593,18 @@ uint32_t DeblockingBSliceBsMarginalMBAvcbase (PDeblockingFilter pFilter, PDqLay · 10 unmodified lines | |||
| 700 | pBS[j + (i << 1)] = 2; | 593 | pBS[j + (i << 1)] = 2; |
| 701 | } else { | 594 | } else { |
| 702 | pBS[j + (i << 1)] = 1; | 595 | pBS[j + (i << 1)] = 1; |
| 703 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | 596 | ref_p0 = iRefIdx0[iMbXy][*pB8x8Idx] > REF_NOT_IN_LIST ? pFilter->pRefPics[LIST_0][iRefIdx0[iMbXy][*pB8x8Idx]] : NULL; |
| 704 | if (pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][*pB8x8Idx] > REF_NOT_IN_LIST | 597 | ref_q0 = iRefIdx0[iNeighMb][*pBnIdx] > REF_NOT_IN_LIST ? pFilter->pRefPics[LIST_0][iRefIdx0[iNeighMb][*pBnIdx]] : |
| 705 | && pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][*pBnIdx] > REF_NOT_IN_LIST) { | 598 | NULL; |
| 706 | int8_t (*iRefIdx)[MB_BLOCK4x4_NUM] = pCurDqLayer->pDec->pRefIndex[listIdx]; | 599 | ref_p1 = iRefIdx1[iMbXy][*pB8x8Idx] > REF_NOT_IN_LIST ? pFilter->pRefPics[LIST_1][iRefIdx1[iMbXy][*pB8x8Idx]] : NULL; |
| 707 | ref0 = pFilter->pRefPics[listIdx][iRefIdx[iMbXy][*pB8x8Idx]]; | 600 | ref_q1 = iRefIdx1[iNeighMb][*pBnIdx] > REF_NOT_IN_LIST ? pFilter->pRefPics[LIST_1][iRefIdx1[iNeighMb][*pBnIdx]] : |
| 708 | ref1 = pFilter->pRefPics[listIdx][iRefIdx[iNeighMb][*pBnIdx]]; | 601 | NULL; |
| 709 | pBS[j + (i << 1)] = MB_BS_MV (ref0, ref1, pCurDqLayer->pDec->pMv[listIdx], iMbXy, iNeighMb, *pB8x8Idx, | 602 | if (((ref_p0 == ref_q0) && (ref_p1 == ref_q1)) || ((ref_p0 == ref_q1) && (ref_p1 == ref_q0))) { |
| 710 | *pBnIdx); | 603 | int16_t (*pMv0)[MB_BLOCK4x4_NUM][MV_A] = pCurDqLayer->pDec != NULL ? pCurDqLayer->pDec->pMv[LIST_0] : |
| 711 | break; | 604 | pCurDqLayer->pMv[LIST_0]; |
| 712 | } | 605 | int16_t (*pMv1)[MB_BLOCK4x4_NUM][MV_A] = pCurDqLayer->pDec != NULL ? pCurDqLayer->pDec->pMv[LIST_1] : |
| 606 | pCurDqLayer->pMv[LIST_1]; | ||
| 607 | pBS[j + (i << 1)] = ON_MB_BS (ref_p0, ref_q0, ref_p1, ref_q1, pMv0, pMv1, iMbXy, iNeighMb, *pB8x8Idx, *pBnIdx); | ||
| 713 | } | 608 | } |
| 714 | } | 609 | } |
| 715 | pBnIdx++; | 610 | pBnIdx++; |
| @@ -727,15 +622,18 @@ uint32_t DeblockingBSliceBsMarginalMBAvcbase (PDeblockingFilter pFilter, PDqLay · 11 unmodified lines | |||
| 727 | pBS[j + (i << 1)] = 2; | 622 | pBS[j + (i << 1)] = 2; |
| 728 | } else { | 623 | } else { |
| 729 | pBS[j + (i << 1)] = 1; | 624 | pBS[j + (i << 1)] = 1; |
| 730 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | 625 | ref_p0 = iRefIdx0[iMbXy][*pBIdx] > REF_NOT_IN_LIST ? pFilter->pRefPics[LIST_0][iRefIdx0[iMbXy][*pBIdx]] : NULL; |
| 731 | if (pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][*pBIdx] > REF_NOT_IN_LIST | 626 | ref_q0 = iRefIdx0[iNeighMb][*pBn8x8Idx] > REF_NOT_IN_LIST ? pFilter->pRefPics[LIST_0][iRefIdx0[iNeighMb][*pBn8x8Idx]] : |
| 732 | && pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][*pBn8x8Idx] > REF_NOT_IN_LIST) { | 627 | NULL; |
| 733 | int8_t (*iRefIdx)[MB_BLOCK4x4_NUM] = pCurDqLayer->pDec->pRefIndex[listIdx]; | 628 | ref_p1 = iRefIdx1[iMbXy][*pBIdx] > REF_NOT_IN_LIST ? pFilter->pRefPics[LIST_1][iRefIdx1[iMbXy][*pBIdx]] : NULL; |
| 734 | ref0 = pFilter->pRefPics[listIdx][iRefIdx[iMbXy][*pBIdx]]; | 629 | ref_q1 = iRefIdx1[iNeighMb][*pBn8x8Idx] > REF_NOT_IN_LIST ? pFilter->pRefPics[LIST_1][iRefIdx1[iNeighMb][*pBn8x8Idx]] : |
| 735 | ref1 = pFilter->pRefPics[listIdx][iRefIdx[iNeighMb][*pBn8x8Idx]]; | 630 | NULL; |
| 736 | pBS[j + (i << 1)] = MB_BS_MV (ref0, ref1, pCurDqLayer->pDec->pMv[listIdx], iMbXy, iNeighMb, *pBIdx, *pBn8x8Idx); | 631 | if (((ref_p0 == ref_q0) && (ref_p1 == ref_q1)) || ((ref_p0 == ref_q1) && (ref_p1 == ref_q0))) { |
| 737 | break; | 632 | int16_t (*pMv0)[MB_BLOCK4x4_NUM][MV_A] = pCurDqLayer->pDec != NULL ? pCurDqLayer->pDec->pMv[LIST_0] : |
| 738 | } | 633 | pCurDqLayer->pMv[LIST_0]; |
| 634 | int16_t (*pMv1)[MB_BLOCK4x4_NUM][MV_A] = pCurDqLayer->pDec != NULL ? pCurDqLayer->pDec->pMv[LIST_1] : | ||
| 635 | pCurDqLayer->pMv[LIST_1]; | ||
| 636 | pBS[j + (i << 1)] = ON_MB_BS (ref_p0, ref_q0, ref_p1, ref_q1, pMv0, pMv1, iMbXy, iNeighMb, *pBIdx, *pBn8x8Idx); | ||
| 739 | } | 637 | } |
| 740 | } | 638 | } |
| 741 | pBIdx++; | 639 | pBIdx++; |
| @@ -749,15 +647,18 @@ uint32_t DeblockingBSliceBsMarginalMBAvcbase (PDeblockingFilter pFilter, PDqLay · 7 unmodified lines | |||
| 749 | pBS[i] = 2; | 647 | pBS[i] = 2; |
| 750 | } else { | 648 | } else { |
| 751 | pBS[i] = 1; | 649 | pBS[i] = 1; |
| 752 | for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) { | 650 | ref_p0 = iRefIdx0[iMbXy][*pBIdx] > REF_NOT_IN_LIST ? pFilter->pRefPics[LIST_0][iRefIdx0[iMbXy][*pBIdx]] : NULL; |
| 753 | if (pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][*pBIdx] > REF_NOT_IN_LIST | 651 | ref_q0 = iRefIdx0[iNeighMb][*pBnIdx] > REF_NOT_IN_LIST ? pFilter->pRefPics[LIST_0][iRefIdx0[iNeighMb][*pBnIdx]] : |
| 754 | && pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][*pBnIdx] > REF_NOT_IN_LIST) { | 652 | NULL; |
| 755 | int8_t (*iRefIdx)[MB_BLOCK4x4_NUM] = pCurDqLayer->pDec->pRefIndex[listIdx]; | 653 | ref_p1 = iRefIdx1[iMbXy][*pBIdx] > REF_NOT_IN_LIST ? pFilter->pRefPics[LIST_1][iRefIdx1[iMbXy][*pBIdx]] : NULL; |
| 756 | ref0 = pFilter->pRefPics[listIdx][iRefIdx[iMbXy][*pBIdx]]; | 654 | ref_q1 = iRefIdx1[iNeighMb][*pBnIdx] > REF_NOT_IN_LIST ? pFilter->pRefPics[LIST_1][iRefIdx1[iNeighMb][*pBnIdx]] : |
| 757 | ref1 = pFilter->pRefPics[listIdx][iRefIdx[iNeighMb][*pBnIdx]]; | 655 | NULL; |
| 758 | pBS[i] = MB_BS_MV (ref0, ref1, pCurDqLayer->pDec->pMv[listIdx], iMbXy, iNeighMb, *pBIdx, *pBnIdx); | 656 | if (((ref_p0 == ref_q0) && (ref_p1 == ref_q1)) || ((ref_p0 == ref_q1) && (ref_p1 == ref_q0))) { |
| 759 | break; | 657 | int16_t (*pMv0)[MB_BLOCK4x4_NUM][MV_A] = pCurDqLayer->pDec != NULL ? pCurDqLayer->pDec->pMv[LIST_0] : |
| 760 | } | 658 | pCurDqLayer->pMv[LIST_0]; |
| 659 | int16_t (*pMv1)[MB_BLOCK4x4_NUM][MV_A] = pCurDqLayer->pDec != NULL ? pCurDqLayer->pDec->pMv[LIST_1] : | ||
| 660 | pCurDqLayer->pMv[LIST_1]; | ||
| 661 | pBS[i] = ON_MB_BS (ref_p0, ref_q0, ref_p1, ref_q1, pMv0, pMv1, iMbXy, iNeighMb, *pBIdx, *pBnIdx); | ||
| 761 | } | 662 | } |
| 762 | } | 663 | } |
| 763 | pBIdx++; | 664 | pBIdx++; |