| 146 | } |
| 147 | |
| 148 | WelsErrorType CWelsSliceEncodingTask::ExecuteTask() { |
| 149 | |
| 150 | #if MT_DEBUG_BS_WR |
| 151 | m_pSliceBs->bSliceCodedFlag = false; |
| 152 | #endif//MT_DEBUG_BS_WR |
| 153 | SSpatialLayerInternal* pParamInternal = &m_pCtx->pSvcParam->sDependencyLayers[m_pCtx->uiDependencyId]; |
| 154 | if (m_bNeedPrefix) { |
| 155 | if (m_eNalRefIdc != NRI_PRI_LOWEST) { |
| 156 | WelsLoadNalForSlice (m_pSliceBs, NAL_UNIT_PREFIX, m_eNalRefIdc); |
| 157 | WelsWriteSVCPrefixNal (&m_pSliceBs->sBsWrite, m_eNalRefIdc, (NAL_UNIT_CODED_SLICE_IDR == m_eNalType)); |
| 158 | WelsUnloadNalForSlice (m_pSliceBs); |
| 159 | } else { // No Prefix NAL Unit RBSP syntax here, but need add NAL Unit Header extension |
| 160 | WelsLoadNalForSlice (m_pSliceBs, NAL_UNIT_PREFIX, m_eNalRefIdc); |
| 161 | // No need write any syntax of prefix NAL Unit RBSP here |
| 162 | WelsUnloadNalForSlice (m_pSliceBs); |
| 163 | } |
| 164 | } |
| 165 | |
| 166 | WelsLoadNalForSlice (m_pSliceBs, m_eNalType, m_eNalRefIdc); |
| 167 | assert (m_iSliceIdx == (int) m_pSlice->iSliceIdx); |
| 168 | int32_t iReturn = WelsCodeOneSlice (m_pCtx, m_pSlice, m_eNalType); |
| 169 | if (ENC_RETURN_SUCCESS != iReturn) { |
| 170 | return iReturn; |
| 171 | } |
| 172 | WelsUnloadNalForSlice (m_pSliceBs); |
| 173 | |
| 174 | m_iSliceSize = 0; |
| 175 | iReturn = WriteSliceBs (m_pCtx, m_pSliceBs, m_iSliceIdx, m_iSliceSize); |
| 176 | if (ENC_RETURN_SUCCESS != iReturn) { |
| 177 | WelsLog (&m_pCtx->sLogCtx, WELS_LOG_WARNING, |
| 178 | "[MT] CWelsSliceEncodingTask ExecuteTask(), WriteSliceBs not successful: coding_idx %d, um_iSliceIdx %d", |
| 179 | pParamInternal->iCodingIndex, |
| 180 | m_iSliceIdx); |
| 181 | return iReturn; |
| 182 | } |
| 183 | |
| 184 | m_pCtx->pFuncList->pfDeblocking.pfDeblockingFilterSlice (m_pCtx->pCurDqLayer, m_pCtx->pFuncList, m_pSlice); |
| 185 | |
| 186 | WelsLog (&m_pCtx->sLogCtx, WELS_LOG_DETAIL, |
| 187 | "@pSlice=%-6d sliceType:%c idc:%d size:%-6d", m_iSliceIdx, |
| 188 | (m_pCtx->eSliceType == P_SLICE ? 'P' : 'I'), |
| 189 | m_eNalRefIdc, |
| 190 | m_iSliceSize); |
| 191 | |
| 192 | #if MT_DEBUG_BS_WR |
| 193 | m_pSliceBs->bSliceCodedFlag = true; |
| 194 | #endif//MT_DEBUG_BS_WR |
| 195 | |
| 196 | return ENC_RETURN_SUCCESS; |
| 197 | } |
| 198 | |
| 199 | |
| 200 | // CWelsLoadBalancingSlicingEncodingTask |
nothing calls this directly
no test coverage detected