| 87 | } |
| 88 | |
| 89 | void WelsSliceHeaderExtInit (sWelsEncCtx* pEncCtx, SDqLayer* pCurLayer, SSlice* pSlice) { |
| 90 | SSliceHeaderExt* pCurSliceExt = &pSlice->sSliceHeaderExt; |
| 91 | SSliceHeader* pCurSliceHeader = &pCurSliceExt->sSliceHeader; |
| 92 | SSpatialLayerInternal* pParamInternal = &pEncCtx->pSvcParam->sDependencyLayers[pEncCtx->uiDependencyId]; |
| 93 | pCurSliceHeader->eSliceType = pEncCtx->eSliceType; |
| 94 | |
| 95 | pCurSliceExt->bStoreRefBasePicFlag = false; |
| 96 | |
| 97 | pCurSliceHeader->iFrameNum = pParamInternal->iFrameNum; |
| 98 | pCurSliceHeader->uiIdrPicId = pParamInternal->uiIdrPicId; |
| 99 | pCurSliceHeader->iPicOrderCntLsb = pEncCtx->pEncPic->iFramePoc; // 0 |
| 100 | |
| 101 | if (P_SLICE == pEncCtx->eSliceType) { |
| 102 | pCurSliceHeader->uiNumRefIdxL0Active = 1; |
| 103 | if (pCurSliceHeader->uiRefCount > 0 && |
| 104 | pCurSliceHeader->uiRefCount <= pCurLayer->sLayerInfo.pSpsP->iNumRefFrames) { |
| 105 | pCurSliceHeader->bNumRefIdxActiveOverrideFlag = true; |
| 106 | pCurSliceHeader->uiNumRefIdxL0Active = pCurSliceHeader->uiRefCount; |
| 107 | } |
| 108 | //to solve mismatch between debug&release |
| 109 | else { |
| 110 | pCurSliceHeader->bNumRefIdxActiveOverrideFlag = false; |
| 111 | } |
| 112 | } |
| 113 | |
| 114 | pCurSliceHeader->iSliceQpDelta = pEncCtx->iGlobalQp - pCurLayer->sLayerInfo.pPpsP->iPicInitQp; |
| 115 | |
| 116 | //for deblocking initial |
| 117 | pCurSliceHeader->uiDisableDeblockingFilterIdc = pCurLayer->iLoopFilterDisableIdc; |
| 118 | pCurSliceHeader->iSliceAlphaC0Offset = |
| 119 | pCurLayer->iLoopFilterAlphaC0Offset; // need update iSliceAlphaC0Offset & iSliceBetaOffset for pSlice-header if loop_filter_idc != 1 |
| 120 | pCurSliceHeader->iSliceBetaOffset = pCurLayer->iLoopFilterBetaOffset; |
| 121 | pCurSliceExt->uiDisableInterLayerDeblockingFilterIdc = pCurLayer->uiDisableInterLayerDeblockingFilterIdc; |
| 122 | |
| 123 | if (pSlice->bSliceHeaderExtFlag) { |
| 124 | WelsSliceHeaderScalExtInit (pCurLayer, pSlice); |
| 125 | } else { |
| 126 | //both adaptive and default flags should equal to 0. |
| 127 | pCurSliceExt->bAdaptiveBaseModeFlag = |
| 128 | pCurSliceExt->bAdaptiveMotionPredFlag = |
| 129 | pCurSliceExt->bAdaptiveResidualPredFlag = false; |
| 130 | |
| 131 | pCurSliceExt->bDefaultBaseModeFlag = |
| 132 | pCurSliceExt->bDefaultMotionPredFlag = |
| 133 | pCurSliceExt->bDefaultResidualPredFlag = false; |
| 134 | } |
| 135 | } |
| 136 | |
| 137 | |
| 138 | void UpdateMbNeighbor (SDqLayer* pCurDq, SMB* pMb, const int32_t kiMbWidth, uint16_t uiSliceIdc) { |
no test coverage detected