History

deblocking: Disambiguate reference pictures

Macroblocks can refer to the same reference picture using different indices when the same picture appears in multiple slots in the current reference picture lists. That leads to calculating the wrong loop filter strength for edge processing, and small errors in the conformance suite on (for example) CVWP5_TOSHIBA_E.264 and others. Modify the test-suite and checksums for affected test files where this situation occurs.

Jan Schmidt committed 7 years ago

Commit 398da801 parent 579a5bc5 files · +197 −137Browse files

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

Unified · Split

codec/decoder/core/src/deblocking.cpp+163−116
@@ -55,17 +55,17 @@ namespace WelsDec { · 54 unmodified lines
55#define g_kiBetaTable(x) g_kiBetaTable[(x)+12]55#define g_kiBetaTable(x) g_kiBetaTable[(x)+12]
56#define g_kiTc0Table(x) g_kiTc0Table[(x)+12]56#define g_kiTc0Table(x) g_kiTc0Table[(x)+12]
57 57
58#define MB_BS_MV(iRefIndex, iMotionVector, iMbXy, iMbBn, iIndex, iNeighIndex) \58#define MB_BS_MV(pRefPic0, pRefPic1, iMotionVector, iMbXy, iMbBn, iIndex, iNeighIndex) \
59(\59(\
60 ( iRefIndex[iMbXy][iIndex] - iRefIndex[iMbBn][iNeighIndex] )||\60 ( pRefPic0 != pRefPic1) ||\
61 ( WELS_ABS( iMotionVector[iMbXy][iIndex][0] - iMotionVector[iMbBn][iNeighIndex][0] ) >= 4 ) ||\61 ( WELS_ABS( iMotionVector[iMbXy][iIndex][0] - iMotionVector[iMbBn][iNeighIndex][0] ) >= 4 ) ||\
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#if defined(SAME_MB_DIFF_REFIDX)65#if defined(SAME_MB_DIFF_REFIDX)
66#define SMB_EDGE_MV(iRefIndex, iMotionVector, iIndex, iNeighIndex) \66#define SMB_EDGE_MV(pRefPics, iMotionVector, iIndex, iNeighIndex) \
67(\67(\
68 ( iRefIndex[iIndex] - iRefIndex[iNeighIndex] )||(\68 ( pRefPics[iIndex] != pRefPics[iNeighIndex] )||(\
69 ( WELS_ABS( iMotionVector[iIndex][0] - iMotionVector[iNeighIndex][0] ) &(~3) ) |\69 ( WELS_ABS( iMotionVector[iIndex][0] - iMotionVector[iNeighIndex][0] ) &(~3) ) |\
70 ( WELS_ABS( iMotionVector[iIndex][1] - iMotionVector[iNeighIndex][1] ) &(~3) ))\70 ( WELS_ABS( iMotionVector[iIndex][1] - iMotionVector[iNeighIndex][1] ) &(~3) ))\
71)71)
@@ -76,8 +76,8 @@ namespace WelsDec { · 4 unmodified lines
76)76)
77#endif77#endif
78 78
79#define BS_EDGE(bsx1, iRefIndex, iMotionVector, iIndex, iNeighIndex) \79#define BS_EDGE(bsx1, pRefPics, iMotionVector, iIndex, iNeighIndex) \
80( (bsx1|SMB_EDGE_MV(iRefIndex, iMotionVector, iIndex, iNeighIndex))<<((uint8_t)(!!bsx1)))80( (bsx1|SMB_EDGE_MV(pRefPics, iMotionVector, iIndex, iNeighIndex))<<((uint8_t)(!!bsx1)))
81 81
82#define GET_ALPHA_BETA_FROM_QP(iQp, iAlphaOffset, iBetaOffset, iIndex, iAlpha, iBeta) \82#define GET_ALPHA_BETA_FROM_QP(iQp, iAlphaOffset, iBetaOffset, iIndex, iAlpha, iBeta) \
83{\83{\
@@ -201,14 +201,24 @@ void inline DeblockingBSInsideMBAvsbase8x8 (int8_t* pNnzTab, uint8_t nBS[2][4][4 · 117 unmodified lines
201 nBS[1][2][2] = nBS[1][2][3] = (i8x8NnzTab[1] | i8x8NnzTab[3]) << iLShiftFactor;201 nBS[1][2][2] = nBS[1][2][3] = (i8x8NnzTab[1] | i8x8NnzTab[3]) << iLShiftFactor;
202}202}
203 203
204void static inline DeblockingBSInsideMBNormal (PDqLayer pCurDqLayer, uint8_t nBS[2][4][4], int8_t* pNnzTab,204void static inline DeblockingBSInsideMBNormal (PDeblockingFilter pFilter, PDqLayer pCurDqLayer, uint8_t nBS[2][4][4], int8_t* pNnzTab,
205 int32_t iMbXy) {205 int32_t iMbXy) {
206 uint32_t uiNnz32b0, uiNnz32b1, uiNnz32b2, uiNnz32b3;206 uint32_t uiNnz32b0, uiNnz32b1, uiNnz32b2, uiNnz32b3;
207 int8_t* iRefIndex = pCurDqLayer->pRefIndex[LIST_0][iMbXy];207 int8_t* iRefIdx = pCurDqLayer->pRefIndex[LIST_0][iMbXy];
208 void *iRefs[MB_BLOCK4x4_NUM];
209 int i;
208 ENFORCE_STACK_ALIGN_1D (uint8_t, uiBsx4, 4, 4);210 ENFORCE_STACK_ALIGN_1D (uint8_t, uiBsx4, 4, 4);
209 211
210 int8_t i8x8NnzTab[4];212 int8_t i8x8NnzTab[4];
211 213
214 /* Look up each reference picture based on indices */
215 for (i = 0; i < MB_BLOCK4x4_NUM; i++) {
216 if (iRefIdx[i] > REF_NOT_IN_LIST)
217 iRefs[i] = pFilter->pRefPics[LIST_0][iRefIdx[i]];
218 else
219 iRefs[i] = NULL;
220 }
221
212 if (pCurDqLayer->pTransformSize8x8Flag[iMbXy]) {222 if (pCurDqLayer->pTransformSize8x8Flag[iMbXy]) {
213 for (int32_t i = 0; i < 4; i++) {223 for (int32_t i = 0; i < 4; i++) {
214 int32_t iBlkIdx = i << 2;224 int32_t iBlkIdx = i << 2;
@@ -216,15 +226,15 @@ void static inline DeblockingBSInsideMBNormal (PDqLayer pCurDqLayer, uint8_t nBS · 1 unmodified line
216 pNnzTab[g_kuiMbCountScan4Idx[iBlkIdx + 2]] | pNnzTab[g_kuiMbCountScan4Idx[iBlkIdx + 3]]);226 pNnzTab[g_kuiMbCountScan4Idx[iBlkIdx + 2]] | pNnzTab[g_kuiMbCountScan4Idx[iBlkIdx + 3]]);
217 }227 }
218 //vertical228 //vertical
219 nBS[0][2][0] = nBS[0][2][1] = BS_EDGE ((i8x8NnzTab[0] | i8x8NnzTab[1]), iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy],229 nBS[0][2][0] = nBS[0][2][1] = BS_EDGE ((i8x8NnzTab[0] | i8x8NnzTab[1]), iRefs, pCurDqLayer->pMv[LIST_0][iMbXy],
220 g_kuiMbCountScan4Idx[1 << 2], g_kuiMbCountScan4Idx[0]);230 g_kuiMbCountScan4Idx[1 << 2], g_kuiMbCountScan4Idx[0]);
221 nBS[0][2][2] = nBS[0][2][3] = BS_EDGE ((i8x8NnzTab[2] | i8x8NnzTab[3]), iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy],231 nBS[0][2][2] = nBS[0][2][3] = BS_EDGE ((i8x8NnzTab[2] | i8x8NnzTab[3]), iRefs, pCurDqLayer->pMv[LIST_0][iMbXy],
222 g_kuiMbCountScan4Idx[3 << 2], g_kuiMbCountScan4Idx[2 << 2]);232 g_kuiMbCountScan4Idx[3 << 2], g_kuiMbCountScan4Idx[2 << 2]);
223 233
224 //horizontal234 //horizontal
225 nBS[1][2][0] = nBS[1][2][1] = BS_EDGE ((i8x8NnzTab[0] | i8x8NnzTab[2]), iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy],235 nBS[1][2][0] = nBS[1][2][1] = BS_EDGE ((i8x8NnzTab[0] | i8x8NnzTab[2]), iRefs, pCurDqLayer->pMv[LIST_0][iMbXy],
226 g_kuiMbCountScan4Idx[2 << 2], g_kuiMbCountScan4Idx[0]);236 g_kuiMbCountScan4Idx[2 << 2], g_kuiMbCountScan4Idx[0]);
227 nBS[1][2][2] = nBS[1][2][3] = BS_EDGE ((i8x8NnzTab[1] | i8x8NnzTab[3]), iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy],237 nBS[1][2][2] = nBS[1][2][3] = BS_EDGE ((i8x8NnzTab[1] | i8x8NnzTab[3]), iRefs, pCurDqLayer->pMv[LIST_0][iMbXy],
228 g_kuiMbCountScan4Idx[3 << 2], g_kuiMbCountScan4Idx[1 << 2]);238 g_kuiMbCountScan4Idx[3 << 2], g_kuiMbCountScan4Idx[1 << 2]);
229 } else {239 } else {
230 uiNnz32b0 = * (uint32_t*) (pNnzTab + 0);240 uiNnz32b0 = * (uint32_t*) (pNnzTab + 0);
@@ -234,58 +244,69 @@ void static inline DeblockingBSInsideMBNormal (PDqLayer pCurDqLayer, uint8_t nBS · 3 unmodified lines
234 244
235 for (int i = 0; i < 3; i++)245 for (int i = 0; i < 3; i++)
236 uiBsx4[i] = pNnzTab[i] | pNnzTab[i + 1];246 uiBsx4[i] = pNnzTab[i] | pNnzTab[i + 1];
237 nBS[0][1][0] = BS_EDGE (uiBsx4[0], iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy], 1, 0);247 nBS[0][1][0] = BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 1, 0);
238 nBS[0][2][0] = BS_EDGE (uiBsx4[1], iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy], 2, 1);248 nBS[0][2][0] = BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 2, 1);
239 nBS[0][3][0] = BS_EDGE (uiBsx4[2], iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy], 3, 2);249 nBS[0][3][0] = BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 3, 2);
240 250
241 for (int i = 0; i < 3; i++)251 for (int i = 0; i < 3; i++)
242 uiBsx4[i] = pNnzTab[4 + i] | pNnzTab[4 + i + 1];252 uiBsx4[i] = pNnzTab[4 + i] | pNnzTab[4 + i + 1];
243 nBS[0][1][1] = BS_EDGE (uiBsx4[0], iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy], 5, 4);253 nBS[0][1][1] = BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 5, 4);
244 nBS[0][2][1] = BS_EDGE (uiBsx4[1], iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy], 6, 5);254 nBS[0][2][1] = BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 6, 5);
245 nBS[0][3][1] = BS_EDGE (uiBsx4[2], iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy], 7, 6);255 nBS[0][3][1] = BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 7, 6);
246 256
247 for (int i = 0; i < 3; i++)257 for (int i = 0; i < 3; i++)
248 uiBsx4[i] = pNnzTab[8 + i] | pNnzTab[8 + i + 1];258 uiBsx4[i] = pNnzTab[8 + i] | pNnzTab[8 + i + 1];
249 nBS[0][1][2] = BS_EDGE (uiBsx4[0], iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy], 9, 8);259 nBS[0][1][2] = BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 9, 8);
250 nBS[0][2][2] = BS_EDGE (uiBsx4[1], iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy], 10, 9);260 nBS[0][2][2] = BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 10, 9);
251 nBS[0][3][2] = BS_EDGE (uiBsx4[2], iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy], 11, 10);261 nBS[0][3][2] = BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 11, 10);
252 262
253 for (int i = 0; i < 3; i++)263 for (int i = 0; i < 3; i++)
254 uiBsx4[i] = pNnzTab[12 + i] | pNnzTab[12 + i + 1];264 uiBsx4[i] = pNnzTab[12 + i] | pNnzTab[12 + i + 1];
255 nBS[0][1][3] = BS_EDGE (uiBsx4[0], iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy], 13, 12);265 nBS[0][1][3] = BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 13, 12);
256 nBS[0][2][3] = BS_EDGE (uiBsx4[1], iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy], 14, 13);266 nBS[0][2][3] = BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 14, 13);
257 nBS[0][3][3] = BS_EDGE (uiBsx4[2], iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy], 15, 14);267 nBS[0][3][3] = BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 15, 14);
258 268
259 // horizontal269 // horizontal
260 * (uint32_t*)uiBsx4 = (uiNnz32b0 | uiNnz32b1);270 * (uint32_t*)uiBsx4 = (uiNnz32b0 | uiNnz32b1);
261 nBS[1][1][0] = BS_EDGE (uiBsx4[0], iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy], 4, 0);271 nBS[1][1][0] = BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 4, 0);
262 nBS[1][1][1] = BS_EDGE (uiBsx4[1], iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy], 5, 1);272 nBS[1][1][1] = BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 5, 1);
263 nBS[1][1][2] = BS_EDGE (uiBsx4[2], iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy], 6, 2);273 nBS[1][1][2] = BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 6, 2);
264 nBS[1][1][3] = BS_EDGE (uiBsx4[3], iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy], 7, 3);274 nBS[1][1][3] = BS_EDGE (uiBsx4[3], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 7, 3);
265 275
266 * (uint32_t*)uiBsx4 = (uiNnz32b1 | uiNnz32b2);276 * (uint32_t*)uiBsx4 = (uiNnz32b1 | uiNnz32b2);
267 nBS[1][2][0] = BS_EDGE (uiBsx4[0], iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy], 8, 4);277 nBS[1][2][0] = BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 8, 4);
268 nBS[1][2][1] = BS_EDGE (uiBsx4[1], iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy], 9, 5);278 nBS[1][2][1] = BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 9, 5);
269 nBS[1][2][2] = BS_EDGE (uiBsx4[2], iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy], 10, 6);279 nBS[1][2][2] = BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 10, 6);
270 nBS[1][2][3] = BS_EDGE (uiBsx4[3], iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy], 11, 7);280 nBS[1][2][3] = BS_EDGE (uiBsx4[3], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 11, 7);
271 281
272 * (uint32_t*)uiBsx4 = (uiNnz32b2 | uiNnz32b3);282 * (uint32_t*)uiBsx4 = (uiNnz32b2 | uiNnz32b3);
273 nBS[1][3][0] = BS_EDGE (uiBsx4[0], iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy], 12, 8);283 nBS[1][3][0] = BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 12, 8);
274 nBS[1][3][1] = BS_EDGE (uiBsx4[1], iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy], 13, 9);284 nBS[1][3][1] = BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 13, 9);
275 nBS[1][3][2] = BS_EDGE (uiBsx4[2], iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy], 14, 10);285 nBS[1][3][2] = BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 14, 10);
276 nBS[1][3][3] = BS_EDGE (uiBsx4[3], iRefIndex, pCurDqLayer->pMv[LIST_0][iMbXy], 15, 11);286 nBS[1][3][3] = BS_EDGE (uiBsx4[3], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 15, 11);
277 }287 }
278}288}
279 289
280void static inline DeblockingBSliceBSInsideMBNormal (PDqLayer pCurDqLayer, uint8_t nBS[2][4][4], int8_t* pNnzTab,290void static inline DeblockingBSliceBSInsideMBNormal (PDeblockingFilter pFilter, PDqLayer pCurDqLayer, uint8_t nBS[2][4][4], int8_t* pNnzTab,
281 int32_t iMbXy) {291 int32_t iMbXy) {
282 uint32_t uiNnz32b0, uiNnz32b1, uiNnz32b2, uiNnz32b3;292 uint32_t uiNnz32b0, uiNnz32b1, uiNnz32b2, uiNnz32b3;
283 int8_t* iRefIndex[LIST_A];293 void *iRefs[LIST_A][MB_BLOCK4x4_NUM];
284 iRefIndex[LIST_0] = pCurDqLayer->pRefIndex[LIST_0][iMbXy];
285 iRefIndex[LIST_1] = pCurDqLayer->pRefIndex[LIST_1][iMbXy];
286 ENFORCE_STACK_ALIGN_1D (uint8_t, uiBsx4, 4, 4);
287 294
295 ENFORCE_STACK_ALIGN_1D (uint8_t, uiBsx4, 4, 4);
288 int8_t i8x8NnzTab[4];296 int8_t i8x8NnzTab[4];
297 int l;
298
299 for (l = 0; l < LIST_A; l++) {
300 int8_t* iRefIdx = pCurDqLayer->pRefIndex[l][iMbXy];
301 int i;
302 /* Look up each reference picture based on indices */
303 for (i = 0; i < MB_BLOCK4x4_NUM; i++) {
304 if (iRefIdx[i] > REF_NOT_IN_LIST)
305 iRefs[l][i] = pFilter->pRefPics[l][iRefIdx[i]];
306 else
307 iRefs[l][i] = NULL;
308 }
309 }
289 310
290 if (pCurDqLayer->pTransformSize8x8Flag[iMbXy]) {311 if (pCurDqLayer->pTransformSize8x8Flag[iMbXy]) {
291 for (int32_t i = 0; i < 4; i++) {312 for (int32_t i = 0; i < 4; i++) {
@@ -298,8 +319,8 @@ void static inline DeblockingBSliceBSInsideMBNormal (PDqLayer pCurDqLayer, uint8 · 6 unmodified lines
298 int8_t iNeigborIndex = g_kuiMbCountScan4Idx[0];319 int8_t iNeigborIndex = g_kuiMbCountScan4Idx[0];
299 nBS[0][2][0] = nBS[0][2][1] = 1;320 nBS[0][2][0] = nBS[0][2][1] = 1;
300 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {321 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
301 if (iRefIndex[listIdx][iIndex] > REF_NOT_IN_LIST && iRefIndex[listIdx][iNeigborIndex] > REF_NOT_IN_LIST) {322 if (iRefs[listIdx][iIndex] && iRefs[listIdx][iNeigborIndex]) {
302 nBS[0][2][0] = nBS[0][2][1] = BS_EDGE ((i8x8NnzTab[0] | i8x8NnzTab[1]), iRefIndex[listIdx],323 nBS[0][2][0] = nBS[0][2][1] = BS_EDGE ((i8x8NnzTab[0] | i8x8NnzTab[1]), iRefs[listIdx],
303 pCurDqLayer->pMv[listIdx][iMbXy],324 pCurDqLayer->pMv[listIdx][iMbXy],
304 iIndex, iNeigborIndex);325 iIndex, iNeigborIndex);
305 break;326 break;
@@ -309,8 +330,8 @@ void static inline DeblockingBSliceBSInsideMBNormal (PDqLayer pCurDqLayer, uint8 · 3 unmodified lines
309 iNeigborIndex = g_kuiMbCountScan4Idx[2 << 2];330 iNeigborIndex = g_kuiMbCountScan4Idx[2 << 2];
310 nBS[0][2][2] = nBS[0][2][3] = 1;331 nBS[0][2][2] = nBS[0][2][3] = 1;
311 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {332 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
312 if (iRefIndex[listIdx][iIndex] > REF_NOT_IN_LIST && iRefIndex[listIdx][iNeigborIndex] > REF_NOT_IN_LIST) {333 if (iRefs[listIdx][iIndex] && iRefs[listIdx][iNeigborIndex]) {
313 nBS[0][2][2] = nBS[0][2][3] = BS_EDGE ((i8x8NnzTab[2] | i8x8NnzTab[3]), iRefIndex[listIdx],334 nBS[0][2][2] = nBS[0][2][3] = BS_EDGE ((i8x8NnzTab[2] | i8x8NnzTab[3]), iRefs[listIdx],
314 pCurDqLayer->pMv[listIdx][iMbXy],335 pCurDqLayer->pMv[listIdx][iMbXy],
315 iIndex, iNeigborIndex);336 iIndex, iNeigborIndex);
316 break;337 break;
@@ -322,8 +343,8 @@ void static inline DeblockingBSliceBSInsideMBNormal (PDqLayer pCurDqLayer, uint8 · 5 unmodified lines
322 iNeigborIndex = g_kuiMbCountScan4Idx[0];343 iNeigborIndex = g_kuiMbCountScan4Idx[0];
323 nBS[1][2][0] = nBS[1][2][1] = 1;344 nBS[1][2][0] = nBS[1][2][1] = 1;
324 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {345 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
325 if (iRefIndex[listIdx][iIndex] > REF_NOT_IN_LIST && iRefIndex[listIdx][iNeigborIndex] > REF_NOT_IN_LIST) {346 if (iRefs[listIdx][iIndex] && iRefs[listIdx][iNeigborIndex]) {
326 nBS[1][2][0] = nBS[1][2][1] = BS_EDGE ((i8x8NnzTab[0] | i8x8NnzTab[2]), iRefIndex[listIdx],347 nBS[1][2][0] = nBS[1][2][1] = BS_EDGE ((i8x8NnzTab[0] | i8x8NnzTab[2]), iRefs[listIdx],
327 pCurDqLayer->pMv[listIdx][iMbXy],348 pCurDqLayer->pMv[listIdx][iMbXy],
328 iIndex, iNeigborIndex);349 iIndex, iNeigborIndex);
329 break;350 break;
@@ -334,8 +355,8 @@ void static inline DeblockingBSliceBSInsideMBNormal (PDqLayer pCurDqLayer, uint8 · 4 unmodified lines
334 iNeigborIndex = g_kuiMbCountScan4Idx[1 << 2];355 iNeigborIndex = g_kuiMbCountScan4Idx[1 << 2];
335 nBS[1][2][2] = nBS[1][2][3] = 1;356 nBS[1][2][2] = nBS[1][2][3] = 1;
336 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {357 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
337 if (iRefIndex[listIdx][iIndex] > REF_NOT_IN_LIST && iRefIndex[listIdx][iNeigborIndex] > REF_NOT_IN_LIST) {358 if (iRefs[listIdx][iIndex] && iRefs[listIdx][iNeigborIndex]) {
338 nBS[1][2][2] = nBS[1][2][3] = BS_EDGE ((i8x8NnzTab[1] | i8x8NnzTab[3]), iRefIndex[listIdx],359 nBS[1][2][2] = nBS[1][2][3] = BS_EDGE ((i8x8NnzTab[1] | i8x8NnzTab[3]), iRefs[listIdx],
339 pCurDqLayer->pMv[listIdx][iMbXy],360 pCurDqLayer->pMv[listIdx][iMbXy],
340 iIndex, iNeigborIndex);361 iIndex, iNeigborIndex);
341 break;362 break;
@@ -351,22 +372,22 @@ void static inline DeblockingBSliceBSInsideMBNormal (PDqLayer pCurDqLayer, uint8 · 9 unmodified lines
351 uiBsx4[i] = pNnzTab[i] | pNnzTab[i + 1];372 uiBsx4[i] = pNnzTab[i] | pNnzTab[i + 1];
352 nBS[0][1][0] = 1;373 nBS[0][1][0] = 1;
353 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {374 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
354 if (iRefIndex[listIdx][1] > REF_NOT_IN_LIST && iRefIndex[listIdx][0] > REF_NOT_IN_LIST) {375 if (iRefs[listIdx][1] && iRefs[listIdx][0]) {
355 nBS[0][1][0] = BS_EDGE (uiBsx4[0], iRefIndex[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 1, 0);376 nBS[0][1][0] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 1, 0);
356 break;377 break;
357 }378 }
358 }379 }
359 nBS[0][2][0] = 1;380 nBS[0][2][0] = 1;
360 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {381 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
361 if (iRefIndex[listIdx][2] > REF_NOT_IN_LIST && iRefIndex[listIdx][1] > REF_NOT_IN_LIST) {382 if (iRefs[listIdx][2] && iRefs[listIdx][1]) {
362 nBS[0][2][0] = BS_EDGE (uiBsx4[1], iRefIndex[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 2, 1);383 nBS[0][2][0] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 2, 1);
363 break;384 break;
364 }385 }
365 }386 }
366 nBS[0][3][0] = 1;387 nBS[0][3][0] = 1;
367 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {388 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
368 if (iRefIndex[listIdx][3] > REF_NOT_IN_LIST && iRefIndex[listIdx][2] > REF_NOT_IN_LIST) {389 if (iRefs[listIdx][3] && iRefs[listIdx][2]) {
369 nBS[0][3][0] = BS_EDGE (uiBsx4[2], iRefIndex[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 3, 2);390 nBS[0][3][0] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 3, 2);
370 break;391 break;
371 }392 }
372 }393 }
@@ -375,22 +396,22 @@ void static inline DeblockingBSliceBSInsideMBNormal (PDqLayer pCurDqLayer, uint8 · 2 unmodified lines
375 uiBsx4[i] = pNnzTab[4 + i] | pNnzTab[4 + i + 1];396 uiBsx4[i] = pNnzTab[4 + i] | pNnzTab[4 + i + 1];
376 nBS[0][1][1] = 1;397 nBS[0][1][1] = 1;
377 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {398 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
378 if (iRefIndex[listIdx][5] > REF_NOT_IN_LIST && iRefIndex[listIdx][4] > REF_NOT_IN_LIST) {399 if (iRefs[listIdx][5] && iRefs[listIdx][4]) {
379 nBS[0][1][1] = BS_EDGE (uiBsx4[0], iRefIndex[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 5, 4);400 nBS[0][1][1] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 5, 4);
380 break;401 break;
381 }402 }
382 }403 }
383 nBS[0][2][1] = 1;404 nBS[0][2][1] = 1;
384 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {405 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
385 if (iRefIndex[listIdx][6] > REF_NOT_IN_LIST && iRefIndex[listIdx][5] > REF_NOT_IN_LIST) {406 if (iRefs[listIdx][6] && iRefs[listIdx][5]) {
386 nBS[0][2][1] = BS_EDGE (uiBsx4[1], iRefIndex[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 6, 5);407 nBS[0][2][1] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 6, 5);
387 break;408 break;
388 }409 }
389 }410 }
390 nBS[0][3][1] = 1;411 nBS[0][3][1] = 1;
391 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {412 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
392 if (iRefIndex[listIdx][7] > REF_NOT_IN_LIST && iRefIndex[listIdx][6] > REF_NOT_IN_LIST) {413 if (iRefs[listIdx][7] && iRefs[listIdx][6]) {
393 nBS[0][3][1] = BS_EDGE (uiBsx4[2], iRefIndex[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 7, 6);414 nBS[0][3][1] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 7, 6);
394 break;415 break;
395 }416 }
396 }417 }
@@ -399,22 +420,22 @@ void static inline DeblockingBSliceBSInsideMBNormal (PDqLayer pCurDqLayer, uint8 · 2 unmodified lines
399 uiBsx4[i] = pNnzTab[8 + i] | pNnzTab[8 + i + 1];420 uiBsx4[i] = pNnzTab[8 + i] | pNnzTab[8 + i + 1];
400 nBS[0][1][2] = 1;421 nBS[0][1][2] = 1;
401 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {422 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
402 if (iRefIndex[listIdx][9] > REF_NOT_IN_LIST && iRefIndex[listIdx][8] > REF_NOT_IN_LIST) {423 if (iRefs[listIdx][9] && iRefs[listIdx][8]) {
403 nBS[0][1][2] = BS_EDGE (uiBsx4[0], iRefIndex[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 9, 8);424 nBS[0][1][2] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 9, 8);
404 break;425 break;
405 }426 }
406 }427 }
407 nBS[0][2][2] = 1;428 nBS[0][2][2] = 1;
408 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {429 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
409 if (iRefIndex[listIdx][10] > REF_NOT_IN_LIST && iRefIndex[listIdx][9] > REF_NOT_IN_LIST) {430 if (iRefs[listIdx][10] && iRefs[listIdx][9]) {
410 nBS[0][2][2] = BS_EDGE (uiBsx4[1], iRefIndex[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 10, 9);431 nBS[0][2][2] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 10, 9);
411 break;432 break;
412 }433 }
413 }434 }
414 nBS[0][3][2] = 1;435 nBS[0][3][2] = 1;
415 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {436 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
416 if (iRefIndex[listIdx][11] > REF_NOT_IN_LIST && iRefIndex[listIdx][10] > REF_NOT_IN_LIST) {437 if (iRefs[listIdx][11] && iRefs[listIdx][10]) {
417 nBS[0][3][2] = BS_EDGE (uiBsx4[2], iRefIndex[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 11, 10);438 nBS[0][3][2] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 11, 10);
418 break;439 break;
419 }440 }
420 }441 }
@@ -423,22 +444,22 @@ void static inline DeblockingBSliceBSInsideMBNormal (PDqLayer pCurDqLayer, uint8 · 2 unmodified lines
423 uiBsx4[i] = pNnzTab[12 + i] | pNnzTab[12 + i + 1];444 uiBsx4[i] = pNnzTab[12 + i] | pNnzTab[12 + i + 1];
424 nBS[0][1][3] = 1;445 nBS[0][1][3] = 1;
425 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {446 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
426 if (iRefIndex[listIdx][13] > REF_NOT_IN_LIST && iRefIndex[listIdx][12] > REF_NOT_IN_LIST) {447 if (iRefs[listIdx][13] && iRefs[listIdx][12]) {
427 nBS[0][1][3] = BS_EDGE (uiBsx4[0], iRefIndex[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 13, 12);448 nBS[0][1][3] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 13, 12);
428 break;449 break;
429 }450 }
430 }451 }
431 nBS[0][2][3] = 1;452 nBS[0][2][3] = 1;
432 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {453 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
433 if (iRefIndex[listIdx][14] > REF_NOT_IN_LIST && iRefIndex[listIdx][13] > REF_NOT_IN_LIST) {454 if (iRefs[listIdx][14] && iRefs[listIdx][13]) {
434 nBS[0][2][3] = BS_EDGE (uiBsx4[1], iRefIndex[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 14, 13);455 nBS[0][2][3] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 14, 13);
435 break;456 break;
436 }457 }
437 }458 }
438 nBS[0][3][3] = 1;459 nBS[0][3][3] = 1;
439 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {460 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
440 if (iRefIndex[listIdx][15] > REF_NOT_IN_LIST && iRefIndex[listIdx][14] > REF_NOT_IN_LIST) {461 if (iRefs[listIdx][15] && iRefs[listIdx][14]) {
441 nBS[0][3][3] = BS_EDGE (uiBsx4[2], iRefIndex[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 15, 14);462 nBS[0][3][3] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 15, 14);
442 break;463 break;
443 }464 }
444 }465 }
@@ -447,29 +468,29 @@ void static inline DeblockingBSliceBSInsideMBNormal (PDqLayer pCurDqLayer, uint8 · 2 unmodified lines
447 * (uint32_t*)uiBsx4 = (uiNnz32b0 | uiNnz32b1);468 * (uint32_t*)uiBsx4 = (uiNnz32b0 | uiNnz32b1);
448 nBS[1][1][0] = 1;469 nBS[1][1][0] = 1;
449 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {470 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
450 if (iRefIndex[listIdx][4] > REF_NOT_IN_LIST && iRefIndex[listIdx][0] > REF_NOT_IN_LIST) {471 if (iRefs[listIdx][4] && iRefs[listIdx][0]) {
451 nBS[1][1][0] = BS_EDGE (uiBsx4[0], iRefIndex[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 4, 0);472 nBS[1][1][0] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 4, 0);
452 break;473 break;
453 }474 }
454 }475 }
455 nBS[1][1][1] = 1;476 nBS[1][1][1] = 1;
456 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {477 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
457 if (iRefIndex[listIdx][5] > REF_NOT_IN_LIST && iRefIndex[listIdx][1] > REF_NOT_IN_LIST) {478 if (iRefs[listIdx][5] && iRefs[listIdx][1]) {
458 nBS[1][1][1] = BS_EDGE (uiBsx4[1], iRefIndex[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 5, 1);479 nBS[1][1][1] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 5, 1);
459 break;480 break;
460 }481 }
461 }482 }
462 nBS[1][1][2] = 1;483 nBS[1][1][2] = 1;
463 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {484 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
464 if (iRefIndex[listIdx][6] > REF_NOT_IN_LIST && iRefIndex[listIdx][2] > REF_NOT_IN_LIST) {485 if (iRefs[listIdx][6] && iRefs[listIdx][2]) {
465 nBS[1][1][2] = BS_EDGE (uiBsx4[2], iRefIndex[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 6, 2);486 nBS[1][1][2] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 6, 2);
466 break;487 break;
467 }488 }
468 }489 }
469 nBS[1][1][3] = 1;490 nBS[1][1][3] = 1;
470 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {491 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
471 if (iRefIndex[listIdx][7] > REF_NOT_IN_LIST && iRefIndex[listIdx][3] > REF_NOT_IN_LIST) {492 if (iRefs[listIdx][7] && iRefs[listIdx][3]) {
472 nBS[1][1][3] = BS_EDGE (uiBsx4[3], iRefIndex[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 7, 3);493 nBS[1][1][3] = BS_EDGE (uiBsx4[3], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 7, 3);
473 break;494 break;
474 }495 }
475 }496 }
@@ -477,29 +498,29 @@ void static inline DeblockingBSliceBSInsideMBNormal (PDqLayer pCurDqLayer, uint8 · 1 unmodified line
477 * (uint32_t*)uiBsx4 = (uiNnz32b1 | uiNnz32b2);498 * (uint32_t*)uiBsx4 = (uiNnz32b1 | uiNnz32b2);
478 nBS[1][2][0] = 1;499 nBS[1][2][0] = 1;
479 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {500 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
480 if (iRefIndex[listIdx][8] > REF_NOT_IN_LIST && iRefIndex[listIdx][4] > REF_NOT_IN_LIST) {501 if (iRefs[listIdx][8] && iRefs[listIdx][4]) {
481 nBS[1][2][0] = BS_EDGE (uiBsx4[0], iRefIndex[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 8, 4);502 nBS[1][2][0] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 8, 4);
482 break;503 break;
483 }504 }
484 }505 }
485 nBS[1][2][1] = 1;506 nBS[1][2][1] = 1;
486 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {507 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
487 if (iRefIndex[listIdx][9] > REF_NOT_IN_LIST && iRefIndex[listIdx][5] > REF_NOT_IN_LIST) {508 if (iRefs[listIdx][9] && iRefs[listIdx][5]) {
488 nBS[1][2][1] = BS_EDGE (uiBsx4[1], iRefIndex[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 9, 5);509 nBS[1][2][1] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 9, 5);
489 break;510 break;
490 }511 }
491 }512 }
492 nBS[1][2][2] = 1;513 nBS[1][2][2] = 1;
493 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {514 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
494 if (iRefIndex[listIdx][10] > REF_NOT_IN_LIST && iRefIndex[listIdx][6] > REF_NOT_IN_LIST) {515 if (iRefs[listIdx][10] && iRefs[listIdx][6]) {
495 nBS[1][2][2] = BS_EDGE (uiBsx4[2], iRefIndex[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 10, 6);516 nBS[1][2][2] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 10, 6);
496 break;517 break;
497 }518 }
498 }519 }
499 nBS[1][2][3] = 1;520 nBS[1][2][3] = 1;
500 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {521 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
501 if (iRefIndex[listIdx][11] > REF_NOT_IN_LIST && iRefIndex[listIdx][7] > REF_NOT_IN_LIST) {522 if (iRefs[listIdx][11] && iRefs[listIdx][7]) {
502 nBS[1][2][3] = BS_EDGE (uiBsx4[3], iRefIndex[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 11, 7);523 nBS[1][2][3] = BS_EDGE (uiBsx4[3], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 11, 7);
503 break;524 break;
504 }525 }
505 }526 }
@@ -507,29 +528,29 @@ void static inline DeblockingBSliceBSInsideMBNormal (PDqLayer pCurDqLayer, uint8 · 1 unmodified line
507 * (uint32_t*)uiBsx4 = (uiNnz32b2 | uiNnz32b3);528 * (uint32_t*)uiBsx4 = (uiNnz32b2 | uiNnz32b3);
508 nBS[1][3][0] = 1;529 nBS[1][3][0] = 1;
509 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {530 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
510 if (iRefIndex[listIdx][12] > REF_NOT_IN_LIST && iRefIndex[listIdx][8] > REF_NOT_IN_LIST) {531 if (iRefs[listIdx][12] && iRefs[listIdx][8]) {
511 nBS[1][3][0] = BS_EDGE (uiBsx4[0], iRefIndex[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 12, 8);532 nBS[1][3][0] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 12, 8);
512 break;533 break;
513 }534 }
514 }535 }
515 nBS[1][3][1] = 1;536 nBS[1][3][1] = 1;
516 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {537 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
517 if (iRefIndex[listIdx][13] > REF_NOT_IN_LIST && iRefIndex[listIdx][9] > REF_NOT_IN_LIST) {538 if (iRefs[listIdx][13] && iRefs[listIdx][9]) {
518 nBS[1][3][1] = BS_EDGE (uiBsx4[1], iRefIndex[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 13, 9);539 nBS[1][3][1] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 13, 9);
519 break;540 break;
520 }541 }
521 }542 }
522 nBS[1][3][2] = 1;543 nBS[1][3][2] = 1;
523 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {544 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
524 if (iRefIndex[listIdx][14] > REF_NOT_IN_LIST && iRefIndex[listIdx][10] > REF_NOT_IN_LIST) {545 if (iRefs[listIdx][14] && iRefs[listIdx][10]) {
525 nBS[1][3][2] = BS_EDGE (uiBsx4[2], iRefIndex[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 14, 10);546 nBS[1][3][2] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 14, 10);
526 break;547 break;
527 }548 }
528 }549 }
529 nBS[1][3][3] = 1;550 nBS[1][3][3] = 1;
530 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {551 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
531 if (iRefIndex[listIdx][15] > REF_NOT_IN_LIST && iRefIndex[listIdx][11] > REF_NOT_IN_LIST) {552 if (iRefs[listIdx][15] && iRefs[listIdx][11]) {
532 nBS[1][3][3] = BS_EDGE (uiBsx4[3], iRefIndex[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 15, 11);553 nBS[1][3][3] = BS_EDGE (uiBsx4[3], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 15, 11);
533 break;554 break;
534 }555 }
535 }556 }
@@ -537,7 +558,7 @@ void static inline DeblockingBSliceBSInsideMBNormal (PDqLayer pCurDqLayer, uint8 · 1 unmodified line
537}558}
538 559
539 560
540uint32_t DeblockingBsMarginalMBAvcbase (PDqLayer pCurDqLayer, int32_t iEdge, int32_t iNeighMb, int32_t iMbXy) {561uint32_t DeblockingBsMarginalMBAvcbase (PDeblockingFilter pFilter, PDqLayer pCurDqLayer, int32_t iEdge, int32_t iNeighMb, int32_t iMbXy) {
541 int32_t i, j;562 int32_t i, j;
542 uint32_t uiBSx4;563 uint32_t uiBSx4;
543 uint8_t* pBS = (uint8_t*) (&uiBSx4);564 uint8_t* pBS = (uint8_t*) (&uiBSx4);
@@ -545,6 +566,7 @@ uint32_t DeblockingBsMarginalMBAvcbase (PDqLayer pCurDqLayer, int32_t iEdge, int · 1 unmodified line
545 const uint8_t* pBnIdx = &g_kuiTableBIdx[iEdge][4];566 const uint8_t* pBnIdx = &g_kuiTableBIdx[iEdge][4];
546 const uint8_t* pB8x8Idx = &g_kuiTableB8x8Idx[iEdge][0];567 const uint8_t* pB8x8Idx = &g_kuiTableB8x8Idx[iEdge][0];
547 const uint8_t* pBn8x8Idx = &g_kuiTableB8x8Idx[iEdge][8];568 const uint8_t* pBn8x8Idx = &g_kuiTableB8x8Idx[iEdge][8];
569 int8_t (*iRefIdx)[MB_BLOCK4x4_NUM] = pCurDqLayer->pRefIndex[LIST_0];
548 570
549 if (pCurDqLayer->pTransformSize8x8Flag[iMbXy] && pCurDqLayer->pTransformSize8x8Flag[iNeighMb]) {571 if (pCurDqLayer->pTransformSize8x8Flag[iMbXy] && pCurDqLayer->pTransformSize8x8Flag[iNeighMb]) {
550 for (i = 0; i < 2; i++) {572 for (i = 0; i < 2; i++) {
@@ -555,7 +577,10 @@ uint32_t DeblockingBsMarginalMBAvcbase (PDqLayer pCurDqLayer, int32_t iEdge, int · 4 unmodified lines
555 if (uiNzc) {577 if (uiNzc) {
556 pBS[i << 1] = pBS[1 + (i << 1)] = 2;578 pBS[i << 1] = pBS[1 + (i << 1)] = 2;
557 } else {579 } else {
558 pBS[i << 1] = pBS[1 + (i << 1)] = MB_BS_MV (pCurDqLayer->pRefIndex[LIST_0], pCurDqLayer->pMv[LIST_0], iMbXy, iNeighMb,580 PPicture ref0, ref1;
581 ref0 = (iRefIdx[iMbXy][*pB8x8Idx] > REF_NOT_IN_LIST) ? pFilter->pRefPics[LIST_0][iRefIdx[iMbXy][*pB8x8Idx]] : NULL;
582 ref1 = (iRefIdx[iNeighMb][*pBn8x8Idx] > REF_NOT_IN_LIST) ? pFilter->pRefPics[LIST_0][iRefIdx[iNeighMb][*pBn8x8Idx]] : NULL;
583 pBS[i << 1] = pBS[1 + (i << 1)] = MB_BS_MV (ref0, ref1, pCurDqLayer->pMv[LIST_0], iMbXy, iNeighMb,
559 *pB8x8Idx, *pBn8x8Idx);584 *pB8x8Idx, *pBn8x8Idx);
560 }585 }
561 pB8x8Idx += 4;586 pB8x8Idx += 4;
@@ -571,7 +596,10 @@ uint32_t DeblockingBsMarginalMBAvcbase (PDqLayer pCurDqLayer, int32_t iEdge, int · 9 unmodified lines
571 if (uiNzc | pCurDqLayer->pNzc[iNeighMb][*pBnIdx]) {596 if (uiNzc | pCurDqLayer->pNzc[iNeighMb][*pBnIdx]) {
572 pBS[j + (i << 1)] = 2;597 pBS[j + (i << 1)] = 2;
573 } else {598 } else {
574 pBS[j + (i << 1)] = MB_BS_MV (pCurDqLayer->pRefIndex[LIST_0], pCurDqLayer->pMv[LIST_0], iMbXy, iNeighMb, *pB8x8Idx,599 PPicture ref0, ref1;
600 ref0 = (iRefIdx[iMbXy][*pB8x8Idx] > REF_NOT_IN_LIST) ? pFilter->pRefPics[LIST_0][iRefIdx[iMbXy][*pB8x8Idx]] : NULL;
601 ref1 = (iRefIdx[iNeighMb][*pBnIdx] > REF_NOT_IN_LIST) ? pFilter->pRefPics[LIST_0][iRefIdx[iNeighMb][*pBnIdx]] : NULL;
602 pBS[j + (i << 1)] = MB_BS_MV (ref0, ref1, pCurDqLayer->pMv[LIST_0], iMbXy, iNeighMb, *pB8x8Idx,
575 *pBnIdx);603 *pBnIdx);
576 }604 }
577 pBnIdx++;605 pBnIdx++;
@@ -588,7 +616,10 @@ uint32_t DeblockingBsMarginalMBAvcbase (PDqLayer pCurDqLayer, int32_t iEdge, int · 10 unmodified lines
588 if (uiNzc | pCurDqLayer->pNzc[iMbXy][*pBIdx]) {616 if (uiNzc | pCurDqLayer->pNzc[iMbXy][*pBIdx]) {
589 pBS[j + (i << 1)] = 2;617 pBS[j + (i << 1)] = 2;
590 } else {618 } else {
591 pBS[j + (i << 1)] = MB_BS_MV (pCurDqLayer->pRefIndex[LIST_0], pCurDqLayer->pMv[LIST_0], iMbXy, iNeighMb, *pBIdx,619 PPicture ref0, ref1;
620 ref0 = (iRefIdx[iMbXy][*pBIdx] > REF_NOT_IN_LIST) ? pFilter->pRefPics[LIST_0][iRefIdx[iMbXy][*pBIdx]] : NULL;
621 ref1 = (iRefIdx[iNeighMb][*pBn8x8Idx] > REF_NOT_IN_LIST) ? pFilter->pRefPics[LIST_0][iRefIdx[iNeighMb][*pBn8x8Idx]] : NULL;
622 pBS[j + (i << 1)] = MB_BS_MV (ref0, ref1, pCurDqLayer->pMv[LIST_0], iMbXy, iNeighMb, *pBIdx,
592 *pBn8x8Idx);623 *pBn8x8Idx);
593 }624 }
594 pBIdx++;625 pBIdx++;
@@ -601,8 +632,10 @@ uint32_t DeblockingBsMarginalMBAvcbase (PDqLayer pCurDqLayer, int32_t iEdge, int · 6 unmodified lines
601 if (pCurDqLayer->pNzc[iMbXy][*pBIdx] | pCurDqLayer->pNzc[iNeighMb][*pBnIdx]) {632 if (pCurDqLayer->pNzc[iMbXy][*pBIdx] | pCurDqLayer->pNzc[iNeighMb][*pBnIdx]) {
602 pBS[i] = 2;633 pBS[i] = 2;
603 } else {634 } else {
604 pBS[i] = MB_BS_MV (pCurDqLayer->pRefIndex[LIST_0], pCurDqLayer->pMv[LIST_0], iMbXy, iNeighMb, *pBIdx,635 PPicture ref0, ref1;
605 *pBnIdx);636 ref0 = (iRefIdx[iMbXy][*pBIdx] > REF_NOT_IN_LIST) ? pFilter->pRefPics[LIST_0][iRefIdx[iMbXy][*pBIdx]] : NULL;
637 ref1 = (iRefIdx[iNeighMb][*pBnIdx] > REF_NOT_IN_LIST) ? pFilter->pRefPics[LIST_0][iRefIdx[iNeighMb][*pBnIdx]] : NULL;
638 pBS[i] = MB_BS_MV (ref0, ref1, pCurDqLayer->pMv[LIST_0], iMbXy, iNeighMb, *pBIdx, *pBnIdx);
606 }639 }
607 pBIdx++;640 pBIdx++;
608 pBnIdx++;641 pBnIdx++;
@@ -611,7 +644,7 @@ uint32_t DeblockingBsMarginalMBAvcbase (PDqLayer pCurDqLayer, int32_t iEdge, int · 2 unmodified lines
611 644
612 return uiBSx4;645 return uiBSx4;
613}646}
614uint32_t DeblockingBSliceBsMarginalMBAvcbase (PDqLayer pCurDqLayer, int32_t iEdge, int32_t iNeighMb, int32_t iMbXy) {647uint32_t DeblockingBSliceBsMarginalMBAvcbase (PDeblockingFilter pFilter, PDqLayer pCurDqLayer, int32_t iEdge, int32_t iNeighMb, int32_t iMbXy) {
615 int32_t i, j;648 int32_t i, j;
616 uint32_t uiBSx4;649 uint32_t uiBSx4;
617 uint8_t* pBS = (uint8_t*) (&uiBSx4);650 uint8_t* pBS = (uint8_t*) (&uiBSx4);
@@ -619,6 +652,7 @@ uint32_t DeblockingBSliceBsMarginalMBAvcbase (PDqLayer pCurDqLayer, int32_t iEdg · 1 unmodified line
619 const uint8_t* pBnIdx = &g_kuiTableBIdx[iEdge][4];652 const uint8_t* pBnIdx = &g_kuiTableBIdx[iEdge][4];
620 const uint8_t* pB8x8Idx = &g_kuiTableB8x8Idx[iEdge][0];653 const uint8_t* pB8x8Idx = &g_kuiTableB8x8Idx[iEdge][0];
621 const uint8_t* pBn8x8Idx = &g_kuiTableB8x8Idx[iEdge][8];654 const uint8_t* pBn8x8Idx = &g_kuiTableB8x8Idx[iEdge][8];
655 PPicture ref0, ref1;
622 656
623 if (pCurDqLayer->pTransformSize8x8Flag[iMbXy] && pCurDqLayer->pTransformSize8x8Flag[iNeighMb]) {657 if (pCurDqLayer->pTransformSize8x8Flag[iMbXy] && pCurDqLayer->pTransformSize8x8Flag[iNeighMb]) {
624 for (i = 0; i < 2; i++) {658 for (i = 0; i < 2; i++) {
@@ -633,7 +667,10 @@ uint32_t DeblockingBSliceBsMarginalMBAvcbase (PDqLayer pCurDqLayer, int32_t iEdg · 8 unmodified lines
633 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {667 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
634 if (pCurDqLayer->pRefIndex[listIdx][iMbXy][*pB8x8Idx] > REF_NOT_IN_LIST668 if (pCurDqLayer->pRefIndex[listIdx][iMbXy][*pB8x8Idx] > REF_NOT_IN_LIST
635 && pCurDqLayer->pRefIndex[listIdx][iMbXy][*pBn8x8Idx] > REF_NOT_IN_LIST) {669 && pCurDqLayer->pRefIndex[listIdx][iMbXy][*pBn8x8Idx] > REF_NOT_IN_LIST) {
636 pBS[i << 1] = pBS[1 + (i << 1)] = MB_BS_MV (pCurDqLayer->pRefIndex[listIdx], pCurDqLayer->pMv[listIdx], iMbXy, iNeighMb,670 int8_t (*iRefIdx)[MB_BLOCK4x4_NUM] = pCurDqLayer->pRefIndex[listIdx];
671 ref0 = pFilter->pRefPics[listIdx][iRefIdx[iMbXy][*pB8x8Idx]];
672 ref1 = pFilter->pRefPics[listIdx][iRefIdx[iNeighMb][*pBn8x8Idx]];
673 pBS[i << 1] = pBS[1 + (i << 1)] = MB_BS_MV (ref0, ref1, pCurDqLayer->pMv[listIdx], iMbXy, iNeighMb,
637 *pB8x8Idx, *pBn8x8Idx);674 *pB8x8Idx, *pBn8x8Idx);
638 break;675 break;
639 }676 }
@@ -656,7 +693,10 @@ uint32_t DeblockingBSliceBsMarginalMBAvcbase (PDqLayer pCurDqLayer, int32_t iEdg · 16 unmodified lines
656 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {693 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
657 if (pCurDqLayer->pRefIndex[listIdx][iMbXy][*pB8x8Idx] > REF_NOT_IN_LIST694 if (pCurDqLayer->pRefIndex[listIdx][iMbXy][*pB8x8Idx] > REF_NOT_IN_LIST
658 && pCurDqLayer->pRefIndex[listIdx][iMbXy][*pBnIdx] > REF_NOT_IN_LIST) {695 && pCurDqLayer->pRefIndex[listIdx][iMbXy][*pBnIdx] > REF_NOT_IN_LIST) {
659 pBS[j + (i << 1)] = MB_BS_MV (pCurDqLayer->pRefIndex[listIdx], pCurDqLayer->pMv[listIdx], iMbXy, iNeighMb, *pB8x8Idx,696 int8_t (*iRefIdx)[MB_BLOCK4x4_NUM] = pCurDqLayer->pRefIndex[listIdx];
697 ref0 = pFilter->pRefPics[listIdx][iRefIdx[iMbXy][*pB8x8Idx]];
698 ref1 = pFilter->pRefPics[listIdx][iRefIdx[iNeighMb][*pBnIdx]];
699 pBS[j + (i << 1)] = MB_BS_MV (ref0, ref1, pCurDqLayer->pMv[listIdx], iMbXy, iNeighMb, *pB8x8Idx,
660 *pBnIdx);700 *pBnIdx);
661 break;701 break;
662 }702 }
@@ -680,8 +720,10 @@ uint32_t DeblockingBSliceBsMarginalMBAvcbase (PDqLayer pCurDqLayer, int32_t iEdg · 17 unmodified lines
680 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {720 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
681 if (pCurDqLayer->pRefIndex[listIdx][iMbXy][*pBIdx] > REF_NOT_IN_LIST721 if (pCurDqLayer->pRefIndex[listIdx][iMbXy][*pBIdx] > REF_NOT_IN_LIST
682 && pCurDqLayer->pRefIndex[listIdx][iMbXy][*pBn8x8Idx] > REF_NOT_IN_LIST) {722 && pCurDqLayer->pRefIndex[listIdx][iMbXy][*pBn8x8Idx] > REF_NOT_IN_LIST) {
683 pBS[j + (i << 1)] = MB_BS_MV (pCurDqLayer->pRefIndex[listIdx], pCurDqLayer->pMv[listIdx], iMbXy, iNeighMb, *pBIdx,723 int8_t (*iRefIdx)[MB_BLOCK4x4_NUM] = pCurDqLayer->pRefIndex[listIdx];
684 *pBn8x8Idx);724 ref0 = pFilter->pRefPics[listIdx][iRefIdx[iMbXy][*pBIdx]];
725 ref1 = pFilter->pRefPics[listIdx][iRefIdx[iNeighMb][*pBn8x8Idx]];
726 pBS[j + (i << 1)] = MB_BS_MV (ref0, ref1, pCurDqLayer->pMv[listIdx], iMbXy, iNeighMb, *pBIdx, *pBn8x8Idx);
685 break;727 break;
686 }728 }
687 }729 }
@@ -700,7 +742,10 @@ uint32_t DeblockingBSliceBsMarginalMBAvcbase (PDqLayer pCurDqLayer, int32_t iEdg · 12 unmodified lines
700 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {742 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
701 if (pCurDqLayer->pRefIndex[listIdx][iMbXy][*pBIdx] > REF_NOT_IN_LIST743 if (pCurDqLayer->pRefIndex[listIdx][iMbXy][*pBIdx] > REF_NOT_IN_LIST
702 && pCurDqLayer->pRefIndex[listIdx][iMbXy][*pBnIdx] > REF_NOT_IN_LIST) {744 && pCurDqLayer->pRefIndex[listIdx][iMbXy][*pBnIdx] > REF_NOT_IN_LIST) {
703 pBS[i] = MB_BS_MV (pCurDqLayer->pRefIndex[listIdx], pCurDqLayer->pMv[listIdx], iMbXy, iNeighMb, *pBIdx, *pBnIdx);745 int8_t (*iRefIdx)[MB_BLOCK4x4_NUM] = pCurDqLayer->pRefIndex[listIdx];
746 ref0 = pFilter->pRefPics[listIdx][iRefIdx[iMbXy][*pBIdx]];
747 ref1 = pFilter->pRefPics[listIdx][iRefIdx[iNeighMb][*pBnIdx]];
748 pBS[i] = MB_BS_MV (ref0, ref1, pCurDqLayer->pMv[listIdx], iMbXy, iNeighMb, *pBIdx, *pBnIdx);
704 break;749 break;
705 }750 }
706 }751 }
@@ -943,7 +988,7 @@ void DeblockingInterMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, uint8_ · 236 unmodified lines
943 pDestCb = pFilter->pCsData[1] + ((iMbY * iLineSizeUV + iMbX) << 3);988 pDestCb = pFilter->pCsData[1] + ((iMbY * iLineSizeUV + iMbX) << 3);
944 pDestCr = pFilter->pCsData[2] + ((iMbY * iLineSizeUV + iMbX) << 3);989 pDestCr = pFilter->pCsData[2] + ((iMbY * iLineSizeUV + iMbX) << 3);
945 990
946//Vertical margrin991 //Vertical margin
947 if (iBoundryFlag & LEFT_FLAG_MASK) {992 if (iBoundryFlag & LEFT_FLAG_MASK) {
948 int32_t iLeftXyIndex = iMbXyIndex - 1;993 int32_t iLeftXyIndex = iMbXyIndex - 1;
949 pFilter->iLumaQP = (iCurLumaQp + pCurDqLayer->pLumaQp[iLeftXyIndex] + 1) >> 1;994 pFilter->iLumaQP = (iCurLumaQp + pCurDqLayer->pLumaQp[iLeftXyIndex] + 1) >> 1;
@@ -1199,10 +1244,10 @@ void WelsDeblockingMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, int32_t · 249 unmodified lines
1199 iMbNb = iMbXyIndex - 1;1244 iMbNb = iMbXyIndex - 1;
1200 if (bBSlice) {1245 if (bBSlice) {
1201 * (uint32_t*)nBS[0][0] = IS_INTRA (pCurDqLayer->pMbType[iMbNb]) ? 0x04040404 : DeblockingBSliceBsMarginalMBAvcbase (1246 * (uint32_t*)nBS[0][0] = IS_INTRA (pCurDqLayer->pMbType[iMbNb]) ? 0x04040404 : DeblockingBSliceBsMarginalMBAvcbase (
1202 pCurDqLayer, 0, iMbNb, iMbXyIndex);1247 pFilter, pCurDqLayer, 0, iMbNb, iMbXyIndex);
1203 } else {1248 } else {
1204 * (uint32_t*)nBS[0][0] = IS_INTRA (pCurDqLayer->pMbType[iMbNb]) ? 0x04040404 : DeblockingBsMarginalMBAvcbase (1249 * (uint32_t*)nBS[0][0] = IS_INTRA (pCurDqLayer->pMbType[iMbNb]) ? 0x04040404 : DeblockingBsMarginalMBAvcbase (
1205 pCurDqLayer, 0, iMbNb, iMbXyIndex);1250 pFilter, pCurDqLayer, 0, iMbNb, iMbXyIndex);
1206 }1251 }
1207 } else {1252 } else {
1208 * (uint32_t*)nBS[0][0] = 0;1253 * (uint32_t*)nBS[0][0] = 0;
@@ -1211,10 +1256,10 @@ void WelsDeblockingMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, int32_t · 2 unmodified lines
1211 iMbNb = iMbXyIndex - pCurDqLayer->iMbWidth;1256 iMbNb = iMbXyIndex - pCurDqLayer->iMbWidth;
1212 if (bBSlice) {1257 if (bBSlice) {
1213 * (uint32_t*)nBS[1][0] = IS_INTRA (pCurDqLayer->pMbType[iMbNb]) ? 0x04040404 : DeblockingBSliceBsMarginalMBAvcbase (1258 * (uint32_t*)nBS[1][0] = IS_INTRA (pCurDqLayer->pMbType[iMbNb]) ? 0x04040404 : DeblockingBSliceBsMarginalMBAvcbase (
1214 pCurDqLayer, 1, iMbNb, iMbXyIndex);1259 pFilter, pCurDqLayer, 1, iMbNb, iMbXyIndex);
1215 } else {1260 } else {
1216 * (uint32_t*)nBS[1][0] = IS_INTRA (pCurDqLayer->pMbType[iMbNb]) ? 0x04040404 : DeblockingBsMarginalMBAvcbase (1261 * (uint32_t*)nBS[1][0] = IS_INTRA (pCurDqLayer->pMbType[iMbNb]) ? 0x04040404 : DeblockingBsMarginalMBAvcbase (
1217 pCurDqLayer, 1, iMbNb, iMbXyIndex);1262 pFilter, pCurDqLayer, 1, iMbNb, iMbXyIndex);
1218 }1263 }
1219 } else {1264 } else {
1220 * (uint32_t*)nBS[1][0] = 0;1265 * (uint32_t*)nBS[1][0] = 0;
@@ -1233,9 +1278,9 @@ void WelsDeblockingMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, int32_t · 12 unmodified lines
1233 } else {1278 } else {
1234 1279
1235 if (bBSlice) {1280 if (bBSlice) {
1236 DeblockingBSliceBSInsideMBNormal (pCurDqLayer, nBS, pCurDqLayer->pNzc[iMbXyIndex], iMbXyIndex);1281 DeblockingBSliceBSInsideMBNormal (pFilter, pCurDqLayer, nBS, pCurDqLayer->pNzc[iMbXyIndex], iMbXyIndex);
1237 } else {1282 } else {
1238 DeblockingBSInsideMBNormal (pCurDqLayer, nBS, pCurDqLayer->pNzc[iMbXyIndex], iMbXyIndex);1283 DeblockingBSInsideMBNormal (pFilter, pCurDqLayer, nBS, pCurDqLayer->pNzc[iMbXyIndex], iMbXyIndex);
1239 }1284 }
1240 }1285 }
1241 }1286 }
@@ -1280,6 +1325,8 @@ void WelsDeblockingFilterSlice (PWelsDecoderContext pCtx, PDeblockingFilterMbFun · 38 unmodified lines
1280 pFilter.iSliceBetaOffset = pSliceHeaderExt->sSliceHeader.iSliceBetaOffset;1325 pFilter.iSliceBetaOffset = pSliceHeaderExt->sSliceHeader.iSliceBetaOffset;
1281 1326
1282 pFilter.pLoopf = &pCtx->sDeblockingFunc;1327 pFilter.pLoopf = &pCtx->sDeblockingFunc;
1328 pFilter.pRefPics[0] = pCtx->sRefPic.pRefList[0];
1329 pFilter.pRefPics[1] = pCtx->sRefPic.pRefList[1];
1283 1330
1284 /* Step2: macroblock deblocking */1331 /* Step2: macroblock deblocking */
1285 if (0 == iFilterIdc || 2 == iFilterIdc) {1332 if (0 == iFilterIdc || 2 == iFilterIdc) {

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