Showing the changes to codec/decoder/core/src/deblocking.cpp (1 of 22 files). Show all
Unified · Split
| @@ -1376,6 +1376,55 @@ void WelsDeblockingFilterSlice (PWelsDecoderContext pCtx, PDeblockingFilterMbFun · 1375 unmodified lines | |||
| 1376 | } | 1376 | } |
| 1377 | } | 1377 | } |
| 1378 | 1378 | ||
| 1379 | /*! | ||
| 1380 | * \brief AVC slice init deblocking filtering target layer | ||
| 1381 | * | ||
| 1382 | * \in and out param SDeblockingFilter | ||
| 1383 | * \in and out param iFilterIdc | ||
| 1384 | * | ||
| 1385 | * \return NONE | ||
| 1386 | */ | ||
| 1387 | void WelsDeblockingInitFilter (PWelsDecoderContext pCtx, SDeblockingFilter& pFilter, int32_t& iFilterIdc) { | ||
| 1388 | PDqLayer pCurDqLayer = pCtx->pCurDqLayer; | ||
| 1389 | PSliceHeaderExt pSliceHeaderExt = &pCurDqLayer->sLayerInfo.sSliceInLayer.sSliceHeaderExt; | ||
| 1390 | |||
| 1391 | memset (&pFilter, 0, sizeof (pFilter)); | ||
| 1392 | |||
| 1393 | iFilterIdc = pCurDqLayer->sLayerInfo.sSliceInLayer.sSliceHeaderExt.sSliceHeader.uiDisableDeblockingFilterIdc; | ||
| 1394 | |||
| 1395 | /* Step1: parameters set */ | ||
| 1396 | pFilter.pCsData[0] = pCtx->pDec->pData[0]; | ||
| 1397 | pFilter.pCsData[1] = pCtx->pDec->pData[1]; | ||
| 1398 | pFilter.pCsData[2] = pCtx->pDec->pData[2]; | ||
| 1399 | |||
| 1400 | pFilter.iCsStride[0] = pCtx->pDec->iLinesize[0]; | ||
| 1401 | pFilter.iCsStride[1] = pCtx->pDec->iLinesize[1]; | ||
| 1402 | |||
| 1403 | pFilter.eSliceType = (EWelsSliceType)pCurDqLayer->sLayerInfo.sSliceInLayer.eSliceType; | ||
| 1404 | |||
| 1405 | pFilter.iSliceAlphaC0Offset = pSliceHeaderExt->sSliceHeader.iSliceAlphaC0Offset; | ||
| 1406 | pFilter.iSliceBetaOffset = pSliceHeaderExt->sSliceHeader.iSliceBetaOffset; | ||
| 1407 | |||
| 1408 | pFilter.pLoopf = &pCtx->sDeblockingFunc; | ||
| 1409 | pFilter.pRefPics[0] = pCtx->sRefPic.pRefList[0]; | ||
| 1410 | pFilter.pRefPics[1] = pCtx->sRefPic.pRefList[1]; | ||
| 1411 | } | ||
| 1412 | |||
| 1413 | /*! | ||
| 1414 | * \brief AVC MB deblocking filtering target layer | ||
| 1415 | * | ||
| 1416 | * \param DqLayer which has the current location of MB to be deblocked. | ||
| 1417 | * | ||
| 1418 | * \return NONE | ||
| 1419 | */ | ||
| 1420 | void WelsDeblockingFilterMB (PDqLayer pCurDqLayer, SDeblockingFilter& pFilter, int32_t& iFilterIdc, | ||
| 1421 | PDeblockingFilterMbFunc pDeblockMb) { | ||
| 1422 | /* macroblock deblocking */ | ||
| 1423 | if (0 == iFilterIdc || 2 == iFilterIdc) { | ||
| 1424 | int32_t iBoundryFlag = DeblockingAvailableNoInterlayer (pCurDqLayer, iFilterIdc); | ||
| 1425 | pDeblockMb (pCurDqLayer, &pFilter, iBoundryFlag); | ||
| 1426 | } | ||
| 1427 | } | ||
| 1379 | /*! | 1428 | /*! |
| 1380 | * \brief deblocking module initialize | 1429 | * \brief deblocking module initialize |
| 1381 | * | 1430 | * |