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/deblocking.cpp (1 of 29 files). Show all

Unified · Split

codec/decoder/core/src/deblocking.cpp+109−93
@@ -201,11 +201,12 @@ void inline DeblockingBSInsideMBAvsbase8x8 (int8_t* pNnzTab, uint8_t nBS[2][4][4 · 200 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 (PDeblockingFilter pFilter, 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],
205 int8_t* pNnzTab,
205 int32_t iMbXy) {206 int32_t iMbXy) {
206 uint32_t uiNnz32b0, uiNnz32b1, uiNnz32b2, uiNnz32b3;207 uint32_t uiNnz32b0, uiNnz32b1, uiNnz32b2, uiNnz32b3;
207 int8_t* iRefIdx = pCurDqLayer->pRefIndex[LIST_0][iMbXy];208 int8_t* iRefIdx = pCurDqLayer->pDec->pRefIndex[LIST_0][iMbXy];
208 void *iRefs[MB_BLOCK4x4_NUM];209 void* iRefs[MB_BLOCK4x4_NUM];
209 int i;210 int i;
210 ENFORCE_STACK_ALIGN_1D (uint8_t, uiBsx4, 4, 4);211 ENFORCE_STACK_ALIGN_1D (uint8_t, uiBsx4, 4, 4);
211 212
@@ -226,15 +227,15 @@ void static inline DeblockingBSInsideMBNormal (PDeblockingFilter pFilter, PDqLa · 14 unmodified lines
226 pNnzTab[g_kuiMbCountScan4Idx[iBlkIdx + 2]] | pNnzTab[g_kuiMbCountScan4Idx[iBlkIdx + 3]]);227 pNnzTab[g_kuiMbCountScan4Idx[iBlkIdx + 2]] | pNnzTab[g_kuiMbCountScan4Idx[iBlkIdx + 3]]);
227 }228 }
228 //vertical229 //vertical
229 nBS[0][2][0] = nBS[0][2][1] = BS_EDGE ((i8x8NnzTab[0] | i8x8NnzTab[1]), iRefs, pCurDqLayer->pMv[LIST_0][iMbXy],230 nBS[0][2][0] = nBS[0][2][1] = BS_EDGE ((i8x8NnzTab[0] | i8x8NnzTab[1]), iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy],
230 g_kuiMbCountScan4Idx[1 << 2], g_kuiMbCountScan4Idx[0]);231 g_kuiMbCountScan4Idx[1 << 2], g_kuiMbCountScan4Idx[0]);
231 nBS[0][2][2] = nBS[0][2][3] = BS_EDGE ((i8x8NnzTab[2] | i8x8NnzTab[3]), iRefs, pCurDqLayer->pMv[LIST_0][iMbXy],232 nBS[0][2][2] = nBS[0][2][3] = BS_EDGE ((i8x8NnzTab[2] | i8x8NnzTab[3]), iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy],
232 g_kuiMbCountScan4Idx[3 << 2], g_kuiMbCountScan4Idx[2 << 2]);233 g_kuiMbCountScan4Idx[3 << 2], g_kuiMbCountScan4Idx[2 << 2]);
233 234
234 //horizontal235 //horizontal
235 nBS[1][2][0] = nBS[1][2][1] = BS_EDGE ((i8x8NnzTab[0] | i8x8NnzTab[2]), iRefs, pCurDqLayer->pMv[LIST_0][iMbXy],236 nBS[1][2][0] = nBS[1][2][1] = BS_EDGE ((i8x8NnzTab[0] | i8x8NnzTab[2]), iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy],
236 g_kuiMbCountScan4Idx[2 << 2], g_kuiMbCountScan4Idx[0]);237 g_kuiMbCountScan4Idx[2 << 2], g_kuiMbCountScan4Idx[0]);
237 nBS[1][2][2] = nBS[1][2][3] = BS_EDGE ((i8x8NnzTab[1] | i8x8NnzTab[3]), iRefs, pCurDqLayer->pMv[LIST_0][iMbXy],238 nBS[1][2][2] = nBS[1][2][3] = BS_EDGE ((i8x8NnzTab[1] | i8x8NnzTab[3]), iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy],
238 g_kuiMbCountScan4Idx[3 << 2], g_kuiMbCountScan4Idx[1 << 2]);239 g_kuiMbCountScan4Idx[3 << 2], g_kuiMbCountScan4Idx[1 << 2]);
239 } else {240 } else {
240 uiNnz32b0 = * (uint32_t*) (pNnzTab + 0);241 uiNnz32b0 = * (uint32_t*) (pNnzTab + 0);
@@ -244,60 +245,61 @@ void static inline DeblockingBSInsideMBNormal (PDeblockingFilter pFilter, PDqLa · 3 unmodified lines
244 245
245 for (int i = 0; i < 3; i++)246 for (int i = 0; i < 3; i++)
246 uiBsx4[i] = pNnzTab[i] | pNnzTab[i + 1];247 uiBsx4[i] = pNnzTab[i] | pNnzTab[i + 1];
247 nBS[0][1][0] = BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 1, 0);248 nBS[0][1][0] = BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy], 1, 0);
248 nBS[0][2][0] = BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 2, 1);249 nBS[0][2][0] = BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy], 2, 1);
249 nBS[0][3][0] = BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 3, 2);250 nBS[0][3][0] = BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy], 3, 2);
250 251
251 for (int i = 0; i < 3; i++)252 for (int i = 0; i < 3; i++)
252 uiBsx4[i] = pNnzTab[4 + i] | pNnzTab[4 + i + 1];253 uiBsx4[i] = pNnzTab[4 + i] | pNnzTab[4 + i + 1];
253 nBS[0][1][1] = BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 5, 4);254 nBS[0][1][1] = BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy], 5, 4);
254 nBS[0][2][1] = BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 6, 5);255 nBS[0][2][1] = BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy], 6, 5);
255 nBS[0][3][1] = BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 7, 6);256 nBS[0][3][1] = BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy], 7, 6);
256 257
257 for (int i = 0; i < 3; i++)258 for (int i = 0; i < 3; i++)
258 uiBsx4[i] = pNnzTab[8 + i] | pNnzTab[8 + i + 1];259 uiBsx4[i] = pNnzTab[8 + i] | pNnzTab[8 + i + 1];
259 nBS[0][1][2] = BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 9, 8);260 nBS[0][1][2] = BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy], 9, 8);
260 nBS[0][2][2] = BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 10, 9);261 nBS[0][2][2] = BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy], 10, 9);
261 nBS[0][3][2] = BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 11, 10);262 nBS[0][3][2] = BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy], 11, 10);
262 263
263 for (int i = 0; i < 3; i++)264 for (int i = 0; i < 3; i++)
264 uiBsx4[i] = pNnzTab[12 + i] | pNnzTab[12 + i + 1];265 uiBsx4[i] = pNnzTab[12 + i] | pNnzTab[12 + i + 1];
265 nBS[0][1][3] = BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 13, 12);266 nBS[0][1][3] = BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy], 13, 12);
266 nBS[0][2][3] = BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 14, 13);267 nBS[0][2][3] = BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy], 14, 13);
267 nBS[0][3][3] = BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 15, 14);268 nBS[0][3][3] = BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy], 15, 14);
268 269
269 // horizontal270 // horizontal
270 * (uint32_t*)uiBsx4 = (uiNnz32b0 | uiNnz32b1);271 * (uint32_t*)uiBsx4 = (uiNnz32b0 | uiNnz32b1);
271 nBS[1][1][0] = BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 4, 0);272 nBS[1][1][0] = BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy], 4, 0);
272 nBS[1][1][1] = BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 5, 1);273 nBS[1][1][1] = BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy], 5, 1);
273 nBS[1][1][2] = BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 6, 2);274 nBS[1][1][2] = BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy], 6, 2);
274 nBS[1][1][3] = BS_EDGE (uiBsx4[3], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 7, 3);275 nBS[1][1][3] = BS_EDGE (uiBsx4[3], iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy], 7, 3);
275 276
276 * (uint32_t*)uiBsx4 = (uiNnz32b1 | uiNnz32b2);277 * (uint32_t*)uiBsx4 = (uiNnz32b1 | uiNnz32b2);
277 nBS[1][2][0] = BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 8, 4);278 nBS[1][2][0] = BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy], 8, 4);
278 nBS[1][2][1] = BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 9, 5);279 nBS[1][2][1] = BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy], 9, 5);
279 nBS[1][2][2] = BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 10, 6);280 nBS[1][2][2] = BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy], 10, 6);
280 nBS[1][2][3] = BS_EDGE (uiBsx4[3], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 11, 7);281 nBS[1][2][3] = BS_EDGE (uiBsx4[3], iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy], 11, 7);
281 282
282 * (uint32_t*)uiBsx4 = (uiNnz32b2 | uiNnz32b3);283 * (uint32_t*)uiBsx4 = (uiNnz32b2 | uiNnz32b3);
283 nBS[1][3][0] = BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 12, 8);284 nBS[1][3][0] = BS_EDGE (uiBsx4[0], iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy], 12, 8);
284 nBS[1][3][1] = BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 13, 9);285 nBS[1][3][1] = BS_EDGE (uiBsx4[1], iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy], 13, 9);
285 nBS[1][3][2] = BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 14, 10);286 nBS[1][3][2] = BS_EDGE (uiBsx4[2], iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy], 14, 10);
286 nBS[1][3][3] = BS_EDGE (uiBsx4[3], iRefs, pCurDqLayer->pMv[LIST_0][iMbXy], 15, 11);287 nBS[1][3][3] = BS_EDGE (uiBsx4[3], iRefs, pCurDqLayer->pDec->pMv[LIST_0][iMbXy], 15, 11);
287 }288 }
288}289}
289 290
290void static inline DeblockingBSliceBSInsideMBNormal (PDeblockingFilter pFilter, PDqLayer pCurDqLayer, uint8_t nBS[2][4][4], int8_t* pNnzTab,291void static inline DeblockingBSliceBSInsideMBNormal (PDeblockingFilter pFilter, PDqLayer pCurDqLayer,
292 uint8_t nBS[2][4][4], int8_t* pNnzTab,
291 int32_t iMbXy) {293 int32_t iMbXy) {
292 uint32_t uiNnz32b0, uiNnz32b1, uiNnz32b2, uiNnz32b3;294 uint32_t uiNnz32b0, uiNnz32b1, uiNnz32b2, uiNnz32b3;
293 void *iRefs[LIST_A][MB_BLOCK4x4_NUM];295 void* iRefs[LIST_A][MB_BLOCK4x4_NUM];
294 296
295 ENFORCE_STACK_ALIGN_1D (uint8_t, uiBsx4, 4, 4);297 ENFORCE_STACK_ALIGN_1D (uint8_t, uiBsx4, 4, 4);
296 int8_t i8x8NnzTab[4];298 int8_t i8x8NnzTab[4];
297 int l;299 int l;
298 300
299 for (l = 0; l < LIST_A; l++) {301 for (l = 0; l < LIST_A; l++) {
300 int8_t* iRefIdx = pCurDqLayer->pRefIndex[l][iMbXy];302 int8_t* iRefIdx = pCurDqLayer->pDec->pRefIndex[l][iMbXy];
301 int i;303 int i;
302 /* Look up each reference picture based on indices */304 /* Look up each reference picture based on indices */
303 for (i = 0; i < MB_BLOCK4x4_NUM; i++) {305 for (i = 0; i < MB_BLOCK4x4_NUM; i++) {
@@ -321,7 +323,7 @@ void static inline DeblockingBSliceBSInsideMBNormal (PDeblockingFilter pFilter, · 17 unmodified lines
321 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {323 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
322 if (iRefs[listIdx][iIndex] && iRefs[listIdx][iNeigborIndex]) {324 if (iRefs[listIdx][iIndex] && iRefs[listIdx][iNeigborIndex]) {
323 nBS[0][2][0] = nBS[0][2][1] = BS_EDGE ((i8x8NnzTab[0] | i8x8NnzTab[1]), iRefs[listIdx],325 nBS[0][2][0] = nBS[0][2][1] = BS_EDGE ((i8x8NnzTab[0] | i8x8NnzTab[1]), iRefs[listIdx],
324 pCurDqLayer->pMv[listIdx][iMbXy],326 pCurDqLayer->pDec->pMv[listIdx][iMbXy],
325 iIndex, iNeigborIndex);327 iIndex, iNeigborIndex);
326 break;328 break;
327 }329 }
@@ -332,7 +334,7 @@ void static inline DeblockingBSliceBSInsideMBNormal (PDeblockingFilter pFilter, · 4 unmodified lines
332 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {334 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
333 if (iRefs[listIdx][iIndex] && iRefs[listIdx][iNeigborIndex]) {335 if (iRefs[listIdx][iIndex] && iRefs[listIdx][iNeigborIndex]) {
334 nBS[0][2][2] = nBS[0][2][3] = BS_EDGE ((i8x8NnzTab[2] | i8x8NnzTab[3]), iRefs[listIdx],336 nBS[0][2][2] = nBS[0][2][3] = BS_EDGE ((i8x8NnzTab[2] | i8x8NnzTab[3]), iRefs[listIdx],
335 pCurDqLayer->pMv[listIdx][iMbXy],337 pCurDqLayer->pDec->pMv[listIdx][iMbXy],
336 iIndex, iNeigborIndex);338 iIndex, iNeigborIndex);
337 break;339 break;
338 }340 }
@@ -345,7 +347,7 @@ void static inline DeblockingBSliceBSInsideMBNormal (PDeblockingFilter pFilter, · 6 unmodified lines
345 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {347 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
346 if (iRefs[listIdx][iIndex] && iRefs[listIdx][iNeigborIndex]) {348 if (iRefs[listIdx][iIndex] && iRefs[listIdx][iNeigborIndex]) {
347 nBS[1][2][0] = nBS[1][2][1] = BS_EDGE ((i8x8NnzTab[0] | i8x8NnzTab[2]), iRefs[listIdx],349 nBS[1][2][0] = nBS[1][2][1] = BS_EDGE ((i8x8NnzTab[0] | i8x8NnzTab[2]), iRefs[listIdx],
348 pCurDqLayer->pMv[listIdx][iMbXy],350 pCurDqLayer->pDec->pMv[listIdx][iMbXy],
349 iIndex, iNeigborIndex);351 iIndex, iNeigborIndex);
350 break;352 break;
351 }353 }
@@ -357,7 +359,7 @@ void static inline DeblockingBSliceBSInsideMBNormal (PDeblockingFilter pFilter, · 5 unmodified lines
357 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {359 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
358 if (iRefs[listIdx][iIndex] && iRefs[listIdx][iNeigborIndex]) {360 if (iRefs[listIdx][iIndex] && iRefs[listIdx][iNeigborIndex]) {
359 nBS[1][2][2] = nBS[1][2][3] = BS_EDGE ((i8x8NnzTab[1] | i8x8NnzTab[3]), iRefs[listIdx],361 nBS[1][2][2] = nBS[1][2][3] = BS_EDGE ((i8x8NnzTab[1] | i8x8NnzTab[3]), iRefs[listIdx],
360 pCurDqLayer->pMv[listIdx][iMbXy],362 pCurDqLayer->pDec->pMv[listIdx][iMbXy],
361 iIndex, iNeigborIndex);363 iIndex, iNeigborIndex);
362 break;364 break;
363 }365 }
@@ -373,21 +375,21 @@ void static inline DeblockingBSliceBSInsideMBNormal (PDeblockingFilter pFilter, · 9 unmodified lines
373 nBS[0][1][0] = 1;375 nBS[0][1][0] = 1;
374 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {376 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
375 if (iRefs[listIdx][1] && iRefs[listIdx][0]) {377 if (iRefs[listIdx][1] && iRefs[listIdx][0]) {
376 nBS[0][1][0] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 1, 0);378 nBS[0][1][0] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 1, 0);
377 break;379 break;
378 }380 }
379 }381 }
380 nBS[0][2][0] = 1;382 nBS[0][2][0] = 1;
381 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {383 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
382 if (iRefs[listIdx][2] && iRefs[listIdx][1]) {384 if (iRefs[listIdx][2] && iRefs[listIdx][1]) {
383 nBS[0][2][0] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 2, 1);385 nBS[0][2][0] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 2, 1);
384 break;386 break;
385 }387 }
386 }388 }
387 nBS[0][3][0] = 1;389 nBS[0][3][0] = 1;
388 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {390 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
389 if (iRefs[listIdx][3] && iRefs[listIdx][2]) {391 if (iRefs[listIdx][3] && iRefs[listIdx][2]) {
390 nBS[0][3][0] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 3, 2);392 nBS[0][3][0] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 3, 2);
391 break;393 break;
392 }394 }
393 }395 }
@@ -397,21 +399,21 @@ void static inline DeblockingBSliceBSInsideMBNormal (PDeblockingFilter pFilter, · 3 unmodified lines
397 nBS[0][1][1] = 1;399 nBS[0][1][1] = 1;
398 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {400 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
399 if (iRefs[listIdx][5] && iRefs[listIdx][4]) {401 if (iRefs[listIdx][5] && iRefs[listIdx][4]) {
400 nBS[0][1][1] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 5, 4);402 nBS[0][1][1] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 5, 4);
401 break;403 break;
402 }404 }
403 }405 }
404 nBS[0][2][1] = 1;406 nBS[0][2][1] = 1;
405 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {407 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
406 if (iRefs[listIdx][6] && iRefs[listIdx][5]) {408 if (iRefs[listIdx][6] && iRefs[listIdx][5]) {
407 nBS[0][2][1] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 6, 5);409 nBS[0][2][1] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 6, 5);
408 break;410 break;
409 }411 }
410 }412 }
411 nBS[0][3][1] = 1;413 nBS[0][3][1] = 1;
412 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {414 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
413 if (iRefs[listIdx][7] && iRefs[listIdx][6]) {415 if (iRefs[listIdx][7] && iRefs[listIdx][6]) {
414 nBS[0][3][1] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 7, 6);416 nBS[0][3][1] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 7, 6);
415 break;417 break;
416 }418 }
417 }419 }
@@ -421,21 +423,21 @@ void static inline DeblockingBSliceBSInsideMBNormal (PDeblockingFilter pFilter, · 3 unmodified lines
421 nBS[0][1][2] = 1;423 nBS[0][1][2] = 1;
422 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {424 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
423 if (iRefs[listIdx][9] && iRefs[listIdx][8]) {425 if (iRefs[listIdx][9] && iRefs[listIdx][8]) {
424 nBS[0][1][2] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 9, 8);426 nBS[0][1][2] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 9, 8);
425 break;427 break;
426 }428 }
427 }429 }
428 nBS[0][2][2] = 1;430 nBS[0][2][2] = 1;
429 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {431 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
430 if (iRefs[listIdx][10] && iRefs[listIdx][9]) {432 if (iRefs[listIdx][10] && iRefs[listIdx][9]) {
431 nBS[0][2][2] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 10, 9);433 nBS[0][2][2] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 10, 9);
432 break;434 break;
433 }435 }
434 }436 }
435 nBS[0][3][2] = 1;437 nBS[0][3][2] = 1;
436 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {438 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
437 if (iRefs[listIdx][11] && iRefs[listIdx][10]) {439 if (iRefs[listIdx][11] && iRefs[listIdx][10]) {
438 nBS[0][3][2] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 11, 10);440 nBS[0][3][2] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 11, 10);
439 break;441 break;
440 }442 }
441 }443 }
@@ -445,21 +447,21 @@ void static inline DeblockingBSliceBSInsideMBNormal (PDeblockingFilter pFilter, · 3 unmodified lines
445 nBS[0][1][3] = 1;447 nBS[0][1][3] = 1;
446 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {448 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
447 if (iRefs[listIdx][13] && iRefs[listIdx][12]) {449 if (iRefs[listIdx][13] && iRefs[listIdx][12]) {
448 nBS[0][1][3] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 13, 12);450 nBS[0][1][3] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 13, 12);
449 break;451 break;
450 }452 }
451 }453 }
452 nBS[0][2][3] = 1;454 nBS[0][2][3] = 1;
453 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {455 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
454 if (iRefs[listIdx][14] && iRefs[listIdx][13]) {456 if (iRefs[listIdx][14] && iRefs[listIdx][13]) {
455 nBS[0][2][3] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 14, 13);457 nBS[0][2][3] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 14, 13);
456 break;458 break;
457 }459 }
458 }460 }
459 nBS[0][3][3] = 1;461 nBS[0][3][3] = 1;
460 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {462 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
461 if (iRefs[listIdx][15] && iRefs[listIdx][14]) {463 if (iRefs[listIdx][15] && iRefs[listIdx][14]) {
462 nBS[0][3][3] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 15, 14);464 nBS[0][3][3] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 15, 14);
463 break;465 break;
464 }466 }
465 }467 }
@@ -469,28 +471,28 @@ void static inline DeblockingBSliceBSInsideMBNormal (PDeblockingFilter pFilter, · 3 unmodified lines
469 nBS[1][1][0] = 1;471 nBS[1][1][0] = 1;
470 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {472 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
471 if (iRefs[listIdx][4] && iRefs[listIdx][0]) {473 if (iRefs[listIdx][4] && iRefs[listIdx][0]) {
472 nBS[1][1][0] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 4, 0);474 nBS[1][1][0] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 4, 0);
473 break;475 break;
474 }476 }
475 }477 }
476 nBS[1][1][1] = 1;478 nBS[1][1][1] = 1;
477 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {479 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
478 if (iRefs[listIdx][5] && iRefs[listIdx][1]) {480 if (iRefs[listIdx][5] && iRefs[listIdx][1]) {
479 nBS[1][1][1] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 5, 1);481 nBS[1][1][1] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 5, 1);
480 break;482 break;
481 }483 }
482 }484 }
483 nBS[1][1][2] = 1;485 nBS[1][1][2] = 1;
484 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {486 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
485 if (iRefs[listIdx][6] && iRefs[listIdx][2]) {487 if (iRefs[listIdx][6] && iRefs[listIdx][2]) {
486 nBS[1][1][2] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 6, 2);488 nBS[1][1][2] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 6, 2);
487 break;489 break;
488 }490 }
489 }491 }
490 nBS[1][1][3] = 1;492 nBS[1][1][3] = 1;
491 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {493 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
492 if (iRefs[listIdx][7] && iRefs[listIdx][3]) {494 if (iRefs[listIdx][7] && iRefs[listIdx][3]) {
493 nBS[1][1][3] = BS_EDGE (uiBsx4[3], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 7, 3);495 nBS[1][1][3] = BS_EDGE (uiBsx4[3], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 7, 3);
494 break;496 break;
495 }497 }
496 }498 }
@@ -499,28 +501,28 @@ void static inline DeblockingBSliceBSInsideMBNormal (PDeblockingFilter pFilter, · 2 unmodified lines
499 nBS[1][2][0] = 1;501 nBS[1][2][0] = 1;
500 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {502 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
501 if (iRefs[listIdx][8] && iRefs[listIdx][4]) {503 if (iRefs[listIdx][8] && iRefs[listIdx][4]) {
502 nBS[1][2][0] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 8, 4);504 nBS[1][2][0] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 8, 4);
503 break;505 break;
504 }506 }
505 }507 }
506 nBS[1][2][1] = 1;508 nBS[1][2][1] = 1;
507 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {509 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
508 if (iRefs[listIdx][9] && iRefs[listIdx][5]) {510 if (iRefs[listIdx][9] && iRefs[listIdx][5]) {
509 nBS[1][2][1] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 9, 5);511 nBS[1][2][1] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 9, 5);
510 break;512 break;
511 }513 }
512 }514 }
513 nBS[1][2][2] = 1;515 nBS[1][2][2] = 1;
514 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {516 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
515 if (iRefs[listIdx][10] && iRefs[listIdx][6]) {517 if (iRefs[listIdx][10] && iRefs[listIdx][6]) {
516 nBS[1][2][2] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 10, 6);518 nBS[1][2][2] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 10, 6);
517 break;519 break;
518 }520 }
519 }521 }
520 nBS[1][2][3] = 1;522 nBS[1][2][3] = 1;
521 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {523 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
522 if (iRefs[listIdx][11] && iRefs[listIdx][7]) {524 if (iRefs[listIdx][11] && iRefs[listIdx][7]) {
523 nBS[1][2][3] = BS_EDGE (uiBsx4[3], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 11, 7);525 nBS[1][2][3] = BS_EDGE (uiBsx4[3], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 11, 7);
524 break;526 break;
525 }527 }
526 }528 }
@@ -529,28 +531,28 @@ void static inline DeblockingBSliceBSInsideMBNormal (PDeblockingFilter pFilter, · 2 unmodified lines
529 nBS[1][3][0] = 1;531 nBS[1][3][0] = 1;
530 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {532 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
531 if (iRefs[listIdx][12] && iRefs[listIdx][8]) {533 if (iRefs[listIdx][12] && iRefs[listIdx][8]) {
532 nBS[1][3][0] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 12, 8);534 nBS[1][3][0] = BS_EDGE (uiBsx4[0], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 12, 8);
533 break;535 break;
534 }536 }
535 }537 }
536 nBS[1][3][1] = 1;538 nBS[1][3][1] = 1;
537 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {539 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
538 if (iRefs[listIdx][13] && iRefs[listIdx][9]) {540 if (iRefs[listIdx][13] && iRefs[listIdx][9]) {
539 nBS[1][3][1] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 13, 9);541 nBS[1][3][1] = BS_EDGE (uiBsx4[1], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 13, 9);
540 break;542 break;
541 }543 }
542 }544 }
543 nBS[1][3][2] = 1;545 nBS[1][3][2] = 1;
544 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {546 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
545 if (iRefs[listIdx][14] && iRefs[listIdx][10]) {547 if (iRefs[listIdx][14] && iRefs[listIdx][10]) {
546 nBS[1][3][2] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 14, 10);548 nBS[1][3][2] = BS_EDGE (uiBsx4[2], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 14, 10);
547 break;549 break;
548 }550 }
549 }551 }
550 nBS[1][3][3] = 1;552 nBS[1][3][3] = 1;
551 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {553 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
552 if (iRefs[listIdx][15] && iRefs[listIdx][11]) {554 if (iRefs[listIdx][15] && iRefs[listIdx][11]) {
553 nBS[1][3][3] = BS_EDGE (uiBsx4[3], iRefs[listIdx], pCurDqLayer->pMv[listIdx][iMbXy], 15, 11);555 nBS[1][3][3] = BS_EDGE (uiBsx4[3], iRefs[listIdx], pCurDqLayer->pDec->pMv[listIdx][iMbXy], 15, 11);
554 break;556 break;
555 }557 }
556 }558 }
@@ -558,7 +560,8 @@ void static inline DeblockingBSliceBSInsideMBNormal (PDeblockingFilter pFilter, · 1 unmodified line
558}560}
559 561
560 562
561uint32_t DeblockingBsMarginalMBAvcbase (PDeblockingFilter pFilter, PDqLayer pCurDqLayer, int32_t iEdge, int32_t iNeighMb, int32_t iMbXy) {563uint32_t DeblockingBsMarginalMBAvcbase (PDeblockingFilter pFilter, PDqLayer pCurDqLayer, int32_t iEdge,
564 int32_t iNeighMb, int32_t iMbXy) {
562 int32_t i, j;565 int32_t i, j;
563 uint32_t uiBSx4;566 uint32_t uiBSx4;
564 uint8_t* pBS = (uint8_t*) (&uiBSx4);567 uint8_t* pBS = (uint8_t*) (&uiBSx4);
@@ -566,7 +569,8 @@ uint32_t DeblockingBsMarginalMBAvcbase (PDeblockingFilter pFilter, PDqLayer pCu · 1 unmodified line
566 const uint8_t* pBnIdx = &g_kuiTableBIdx[iEdge][4];569 const uint8_t* pBnIdx = &g_kuiTableBIdx[iEdge][4];
567 const uint8_t* pB8x8Idx = &g_kuiTableB8x8Idx[iEdge][0];570 const uint8_t* pB8x8Idx = &g_kuiTableB8x8Idx[iEdge][0];
568 const uint8_t* pBn8x8Idx = &g_kuiTableB8x8Idx[iEdge][8];571 const uint8_t* pBn8x8Idx = &g_kuiTableB8x8Idx[iEdge][8];
569 int8_t (*iRefIdx)[MB_BLOCK4x4_NUM] = pCurDqLayer->pRefIndex[LIST_0];572 int8_t (*iRefIdx)[MB_BLOCK4x4_NUM] = pCurDqLayer->pDec != NULL ? pCurDqLayer->pDec->pRefIndex[LIST_0] :
573 pCurDqLayer->pRefIndex[LIST_0];
570 574
571 if (pCurDqLayer->pTransformSize8x8Flag[iMbXy] && pCurDqLayer->pTransformSize8x8Flag[iNeighMb]) {575 if (pCurDqLayer->pTransformSize8x8Flag[iMbXy] && pCurDqLayer->pTransformSize8x8Flag[iNeighMb]) {
572 for (i = 0; i < 2; i++) {576 for (i = 0; i < 2; i++) {
@@ -579,8 +583,9 @@ uint32_t DeblockingBsMarginalMBAvcbase (PDeblockingFilter pFilter, PDqLayer pCu · 6 unmodified lines
579 } else {583 } else {
580 PPicture ref0, ref1;584 PPicture ref0, ref1;
581 ref0 = (iRefIdx[iMbXy][*pB8x8Idx] > REF_NOT_IN_LIST) ? pFilter->pRefPics[LIST_0][iRefIdx[iMbXy][*pB8x8Idx]] : NULL;585 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;586 ref1 = (iRefIdx[iNeighMb][*pBn8x8Idx] > REF_NOT_IN_LIST) ? pFilter->pRefPics[LIST_0][iRefIdx[iNeighMb][*pBn8x8Idx]] :
583 pBS[i << 1] = pBS[1 + (i << 1)] = MB_BS_MV (ref0, ref1, pCurDqLayer->pMv[LIST_0], iMbXy, iNeighMb,587 NULL;
588 pBS[i << 1] = pBS[1 + (i << 1)] = MB_BS_MV (ref0, ref1, pCurDqLayer->pDec->pMv[LIST_0], iMbXy, iNeighMb,
584 *pB8x8Idx, *pBn8x8Idx);589 *pB8x8Idx, *pBn8x8Idx);
585 }590 }
586 pB8x8Idx += 4;591 pB8x8Idx += 4;
@@ -599,7 +604,8 @@ uint32_t DeblockingBsMarginalMBAvcbase (PDeblockingFilter pFilter, PDqLayer pCu · 12 unmodified lines
599 PPicture ref0, ref1;604 PPicture ref0, ref1;
600 ref0 = (iRefIdx[iMbXy][*pB8x8Idx] > REF_NOT_IN_LIST) ? pFilter->pRefPics[LIST_0][iRefIdx[iMbXy][*pB8x8Idx]] : NULL;605 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;606 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,607 pBS[j + (i << 1)] = MB_BS_MV (ref0, ref1,
608 (pCurDqLayer->pDec != NULL ? pCurDqLayer->pDec->pMv[LIST_0] : pCurDqLayer->pMv[LIST_0]), iMbXy, iNeighMb, *pB8x8Idx,
603 *pBnIdx);609 *pBnIdx);
604 }610 }
605 pBnIdx++;611 pBnIdx++;
@@ -618,8 +624,10 @@ uint32_t DeblockingBsMarginalMBAvcbase (PDeblockingFilter pFilter, PDqLayer pCu · 12 unmodified lines
618 } else {624 } else {
619 PPicture ref0, ref1;625 PPicture ref0, ref1;
620 ref0 = (iRefIdx[iMbXy][*pBIdx] > REF_NOT_IN_LIST) ? pFilter->pRefPics[LIST_0][iRefIdx[iMbXy][*pBIdx]] : NULL;626 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;627 ref1 = (iRefIdx[iNeighMb][*pBn8x8Idx] > REF_NOT_IN_LIST) ? pFilter->pRefPics[LIST_0][iRefIdx[iNeighMb][*pBn8x8Idx]] :
622 pBS[j + (i << 1)] = MB_BS_MV (ref0, ref1, pCurDqLayer->pMv[LIST_0], iMbXy, iNeighMb, *pBIdx,628 NULL;
629 pBS[j + (i << 1)] = MB_BS_MV (ref0, ref1,
630 (pCurDqLayer->pDec != NULL ? pCurDqLayer->pDec->pMv[LIST_0] : pCurDqLayer->pMv[LIST_0]), iMbXy, iNeighMb, *pBIdx,
623 *pBn8x8Idx);631 *pBn8x8Idx);
624 }632 }
625 pBIdx++;633 pBIdx++;
@@ -635,7 +643,8 @@ uint32_t DeblockingBsMarginalMBAvcbase (PDeblockingFilter pFilter, PDqLayer pCu · 9 unmodified lines
635 PPicture ref0, ref1;643 PPicture ref0, ref1;
636 ref0 = (iRefIdx[iMbXy][*pBIdx] > REF_NOT_IN_LIST) ? pFilter->pRefPics[LIST_0][iRefIdx[iMbXy][*pBIdx]] : NULL;644 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;645 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);646 pBS[i] = MB_BS_MV (ref0, ref1, (pCurDqLayer->pDec != NULL ? pCurDqLayer->pDec->pMv[LIST_0] : pCurDqLayer->pMv[LIST_0]),
647 iMbXy, iNeighMb, *pBIdx, *pBnIdx);
639 }648 }
640 pBIdx++;649 pBIdx++;
641 pBnIdx++;650 pBnIdx++;
@@ -644,7 +653,8 @@ uint32_t DeblockingBsMarginalMBAvcbase (PDeblockingFilter pFilter, PDqLayer pCu · 2 unmodified lines
644 653
645 return uiBSx4;654 return uiBSx4;
646}655}
647uint32_t DeblockingBSliceBsMarginalMBAvcbase (PDeblockingFilter pFilter, PDqLayer pCurDqLayer, int32_t iEdge, int32_t iNeighMb, int32_t iMbXy) {656uint32_t DeblockingBSliceBsMarginalMBAvcbase (PDeblockingFilter pFilter, PDqLayer pCurDqLayer, int32_t iEdge,
657 int32_t iNeighMb, int32_t iMbXy) {
648 int32_t i, j;658 int32_t i, j;
649 uint32_t uiBSx4;659 uint32_t uiBSx4;
650 uint8_t* pBS = (uint8_t*) (&uiBSx4);660 uint8_t* pBS = (uint8_t*) (&uiBSx4);
@@ -665,12 +675,12 @@ uint32_t DeblockingBSliceBsMarginalMBAvcbase (PDeblockingFilter pFilter, PDqLay · 14 unmodified lines
665 } else {675 } else {
666 pBS[i << 1] = pBS[1 + (i << 1)] = 1;676 pBS[i << 1] = pBS[1 + (i << 1)] = 1;
667 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {677 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
668 if (pCurDqLayer->pRefIndex[listIdx][iMbXy][*pB8x8Idx] > REF_NOT_IN_LIST678 if (pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][*pB8x8Idx] > REF_NOT_IN_LIST
669 && pCurDqLayer->pRefIndex[listIdx][iMbXy][*pBn8x8Idx] > REF_NOT_IN_LIST) {679 && pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][*pBn8x8Idx] > REF_NOT_IN_LIST) {
670 int8_t (*iRefIdx)[MB_BLOCK4x4_NUM] = pCurDqLayer->pRefIndex[listIdx];680 int8_t (*iRefIdx)[MB_BLOCK4x4_NUM] = pCurDqLayer->pDec->pRefIndex[listIdx];
671 ref0 = pFilter->pRefPics[listIdx][iRefIdx[iMbXy][*pB8x8Idx]];681 ref0 = pFilter->pRefPics[listIdx][iRefIdx[iMbXy][*pB8x8Idx]];
672 ref1 = pFilter->pRefPics[listIdx][iRefIdx[iNeighMb][*pBn8x8Idx]];682 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,683 pBS[i << 1] = pBS[1 + (i << 1)] = MB_BS_MV (ref0, ref1, pCurDqLayer->pDec->pMv[listIdx], iMbXy, iNeighMb,
674 *pB8x8Idx, *pBn8x8Idx);684 *pB8x8Idx, *pBn8x8Idx);
675 break;685 break;
676 }686 }
@@ -691,12 +701,12 @@ uint32_t DeblockingBSliceBsMarginalMBAvcbase (PDeblockingFilter pFilter, PDqLay · 14 unmodified lines
691 } else {701 } else {
692 pBS[j + (i << 1)] = 1;702 pBS[j + (i << 1)] = 1;
693 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {703 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
694 if (pCurDqLayer->pRefIndex[listIdx][iMbXy][*pB8x8Idx] > REF_NOT_IN_LIST704 if (pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][*pB8x8Idx] > REF_NOT_IN_LIST
695 && pCurDqLayer->pRefIndex[listIdx][iMbXy][*pBnIdx] > REF_NOT_IN_LIST) {705 && pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][*pBnIdx] > REF_NOT_IN_LIST) {
696 int8_t (*iRefIdx)[MB_BLOCK4x4_NUM] = pCurDqLayer->pRefIndex[listIdx];706 int8_t (*iRefIdx)[MB_BLOCK4x4_NUM] = pCurDqLayer->pDec->pRefIndex[listIdx];
697 ref0 = pFilter->pRefPics[listIdx][iRefIdx[iMbXy][*pB8x8Idx]];707 ref0 = pFilter->pRefPics[listIdx][iRefIdx[iMbXy][*pB8x8Idx]];
698 ref1 = pFilter->pRefPics[listIdx][iRefIdx[iNeighMb][*pBnIdx]];708 ref1 = pFilter->pRefPics[listIdx][iRefIdx[iNeighMb][*pBnIdx]];
699 pBS[j + (i << 1)] = MB_BS_MV (ref0, ref1, pCurDqLayer->pMv[listIdx], iMbXy, iNeighMb, *pB8x8Idx,709 pBS[j + (i << 1)] = MB_BS_MV (ref0, ref1, pCurDqLayer->pDec->pMv[listIdx], iMbXy, iNeighMb, *pB8x8Idx,
700 *pBnIdx);710 *pBnIdx);
701 break;711 break;
702 }712 }
@@ -718,12 +728,12 @@ uint32_t DeblockingBSliceBsMarginalMBAvcbase (PDeblockingFilter pFilter, PDqLay · 15 unmodified lines
718 } else {728 } else {
719 pBS[j + (i << 1)] = 1;729 pBS[j + (i << 1)] = 1;
720 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {730 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
721 if (pCurDqLayer->pRefIndex[listIdx][iMbXy][*pBIdx] > REF_NOT_IN_LIST731 if (pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][*pBIdx] > REF_NOT_IN_LIST
722 && pCurDqLayer->pRefIndex[listIdx][iMbXy][*pBn8x8Idx] > REF_NOT_IN_LIST) {732 && pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][*pBn8x8Idx] > REF_NOT_IN_LIST) {
723 int8_t (*iRefIdx)[MB_BLOCK4x4_NUM] = pCurDqLayer->pRefIndex[listIdx];733 int8_t (*iRefIdx)[MB_BLOCK4x4_NUM] = pCurDqLayer->pDec->pRefIndex[listIdx];
724 ref0 = pFilter->pRefPics[listIdx][iRefIdx[iMbXy][*pBIdx]];734 ref0 = pFilter->pRefPics[listIdx][iRefIdx[iMbXy][*pBIdx]];
725 ref1 = pFilter->pRefPics[listIdx][iRefIdx[iNeighMb][*pBn8x8Idx]];735 ref1 = pFilter->pRefPics[listIdx][iRefIdx[iNeighMb][*pBn8x8Idx]];
726 pBS[j + (i << 1)] = MB_BS_MV (ref0, ref1, pCurDqLayer->pMv[listIdx], iMbXy, iNeighMb, *pBIdx, *pBn8x8Idx);736 pBS[j + (i << 1)] = MB_BS_MV (ref0, ref1, pCurDqLayer->pDec->pMv[listIdx], iMbXy, iNeighMb, *pBIdx, *pBn8x8Idx);
727 break;737 break;
728 }738 }
729 }739 }
@@ -740,12 +750,12 @@ uint32_t DeblockingBSliceBsMarginalMBAvcbase (PDeblockingFilter pFilter, PDqLay · 10 unmodified lines
740 } else {750 } else {
741 pBS[i] = 1;751 pBS[i] = 1;
742 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {752 for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
743 if (pCurDqLayer->pRefIndex[listIdx][iMbXy][*pBIdx] > REF_NOT_IN_LIST753 if (pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][*pBIdx] > REF_NOT_IN_LIST
744 && pCurDqLayer->pRefIndex[listIdx][iMbXy][*pBnIdx] > REF_NOT_IN_LIST) {754 && pCurDqLayer->pDec->pRefIndex[listIdx][iMbXy][*pBnIdx] > REF_NOT_IN_LIST) {
745 int8_t (*iRefIdx)[MB_BLOCK4x4_NUM] = pCurDqLayer->pRefIndex[listIdx];755 int8_t (*iRefIdx)[MB_BLOCK4x4_NUM] = pCurDqLayer->pDec->pRefIndex[listIdx];
746 ref0 = pFilter->pRefPics[listIdx][iRefIdx[iMbXy][*pBIdx]];756 ref0 = pFilter->pRefPics[listIdx][iRefIdx[iMbXy][*pBIdx]];
747 ref1 = pFilter->pRefPics[listIdx][iRefIdx[iNeighMb][*pBnIdx]];757 ref1 = pFilter->pRefPics[listIdx][iRefIdx[iNeighMb][*pBnIdx]];
748 pBS[i] = MB_BS_MV (ref0, ref1, pCurDqLayer->pMv[listIdx], iMbXy, iNeighMb, *pBIdx, *pBnIdx);758 pBS[i] = MB_BS_MV (ref0, ref1, pCurDqLayer->pDec->pMv[listIdx], iMbXy, iNeighMb, *pBIdx, *pBnIdx);
749 break;759 break;
750 }760 }
751 }761 }
@@ -972,7 +982,7 @@ void FilteringEdgeChromaIntraV (SDeblockingFilter* pFilter, uint8_t* pPixCb, uin · 220 unmodified lines
972 982
973 983
974static void DeblockingInterMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, uint8_t nBS[2][4][4],984static void DeblockingInterMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, uint8_t nBS[2][4][4],
975 int32_t iBoundryFlag) {985 int32_t iBoundryFlag) {
976 int32_t iMbXyIndex = pCurDqLayer->iMbXyIndex;986 int32_t iMbXyIndex = pCurDqLayer->iMbXyIndex;
977 int32_t iMbX = pCurDqLayer->iMbX;987 int32_t iMbX = pCurDqLayer->iMbX;
978 int32_t iMbY = pCurDqLayer->iMbY;988 int32_t iMbY = pCurDqLayer->iMbY;
@@ -1224,7 +1234,8 @@ void WelsDeblockingMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, int32_t · 245 unmodified lines
1224 uint8_t nBS[2][4][4] = {{{ 0 }}};1234 uint8_t nBS[2][4][4] = {{{ 0 }}};
1225 1235
1226 int32_t iMbXyIndex = pCurDqLayer->iMbXyIndex;1236 int32_t iMbXyIndex = pCurDqLayer->iMbXyIndex;
1227 uint32_t iCurMbType = pCurDqLayer->pMbType[iMbXyIndex];1237 uint32_t iCurMbType = pCurDqLayer->pDec != NULL ? pCurDqLayer->pDec->pMbType[iMbXyIndex] :
1238 pCurDqLayer->pMbType[iMbXyIndex];
1228 int32_t iMbNb;1239 int32_t iMbNb;
1229 1240
1230 PSlice pSlice = &pCurDqLayer->sLayerInfo.sSliceInLayer;1241 PSlice pSlice = &pCurDqLayer->sLayerInfo.sSliceInLayer;
@@ -1242,11 +1253,13 @@ void WelsDeblockingMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, int32_t · 11 unmodified lines
1242 1253
1243 if (iBoundryFlag & LEFT_FLAG_MASK) {1254 if (iBoundryFlag & LEFT_FLAG_MASK) {
1244 iMbNb = iMbXyIndex - 1;1255 iMbNb = iMbXyIndex - 1;
1256 uint32_t uiMbType = pCurDqLayer->pDec != NULL ? pCurDqLayer->pDec->pMbType[iMbNb] : pCurDqLayer->pMbType[iMbNb];
1245 if (bBSlice) {1257 if (bBSlice) {
1246 * (uint32_t*)nBS[0][0] = IS_INTRA (pCurDqLayer->pMbType[iMbNb]) ? 0x04040404 : DeblockingBSliceBsMarginalMBAvcbase (1258 * (uint32_t*)nBS[0][0] = IS_INTRA (uiMbType) ? 0x04040404 :
1259 DeblockingBSliceBsMarginalMBAvcbase (
1247 pFilter, pCurDqLayer, 0, iMbNb, iMbXyIndex);1260 pFilter, pCurDqLayer, 0, iMbNb, iMbXyIndex);
1248 } else {1261 } else {
1249 * (uint32_t*)nBS[0][0] = IS_INTRA (pCurDqLayer->pMbType[iMbNb]) ? 0x04040404 : DeblockingBsMarginalMBAvcbase (1262 * (uint32_t*)nBS[0][0] = IS_INTRA (uiMbType) ? 0x04040404 : DeblockingBsMarginalMBAvcbase (
1250 pFilter, pCurDqLayer, 0, iMbNb, iMbXyIndex);1263 pFilter, pCurDqLayer, 0, iMbNb, iMbXyIndex);
1251 }1264 }
1252 } else {1265 } else {
@@ -1254,11 +1267,13 @@ void WelsDeblockingMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, int32_t · 1 unmodified line
1254 }1267 }
1255 if (iBoundryFlag & TOP_FLAG_MASK) {1268 if (iBoundryFlag & TOP_FLAG_MASK) {
1256 iMbNb = iMbXyIndex - pCurDqLayer->iMbWidth;1269 iMbNb = iMbXyIndex - pCurDqLayer->iMbWidth;
1270 uint32_t uiMbType = pCurDqLayer->pDec != NULL ? pCurDqLayer->pDec->pMbType[iMbNb] : pCurDqLayer->pMbType[iMbNb];
1257 if (bBSlice) {1271 if (bBSlice) {
1258 * (uint32_t*)nBS[1][0] = IS_INTRA (pCurDqLayer->pMbType[iMbNb]) ? 0x04040404 : DeblockingBSliceBsMarginalMBAvcbase (1272 * (uint32_t*)nBS[1][0] = IS_INTRA (uiMbType) ? 0x04040404 :
1273 DeblockingBSliceBsMarginalMBAvcbase (
1259 pFilter, pCurDqLayer, 1, iMbNb, iMbXyIndex);1274 pFilter, pCurDqLayer, 1, iMbNb, iMbXyIndex);
1260 } else {1275 } else {
1261 * (uint32_t*)nBS[1][0] = IS_INTRA (pCurDqLayer->pMbType[iMbNb]) ? 0x04040404 : DeblockingBsMarginalMBAvcbase (1276 * (uint32_t*)nBS[1][0] = IS_INTRA (uiMbType) ? 0x04040404 : DeblockingBsMarginalMBAvcbase (
1262 pFilter, pCurDqLayer, 1, iMbNb, iMbXyIndex);1277 pFilter, pCurDqLayer, 1, iMbNb, iMbXyIndex);
1263 }1278 }
1264 } else {1279 } else {
@@ -1360,6 +1375,7 @@ void WelsDeblockingFilterSlice (PWelsDecoderContext pCtx, PDeblockingFilterMbFun · 95 unmodified lines
1360 } while (1);1375 } while (1);
1361 }1376 }
1362}1377}
1378
1363/*!1379/*!
1364 * \brief deblocking module initialize1380 * \brief deblocking module initialize
1365 *1381 *

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