Showing the changes to codec/encoder/core/src/wels_task_encoder.cpp (1 of 15 files). Show all
Unified · Split
| @@ -63,6 +63,18 @@ CWelsSliceEncodingTask::CWelsSliceEncodingTask (sWelsEncCtx* pCtx, const int32_t · 62 unmodified lines | |||
| 63 | CWelsSliceEncodingTask::~CWelsSliceEncodingTask() { | 63 | CWelsSliceEncodingTask::~CWelsSliceEncodingTask() { |
| 64 | } | 64 | } |
| 65 | 65 | ||
| 66 | WelsErrorType CWelsSliceEncodingTask::Execute() { | ||
| 67 | WelsThreadSetName ("OpenH264Enc_CWelsSliceEncodingTask_Execute"); | ||
| 68 | |||
| 69 | int32_t iReturn = InitTask(); | ||
| 70 | WELS_VERIFY_RETURN_IFNEQ (iReturn, ENC_RETURN_SUCCESS) | ||
| 71 | |||
| 72 | iReturn = ExecuteTask(); | ||
| 73 | |||
| 74 | FinishTask(); | ||
| 75 | return ENC_RETURN_SUCCESS; | ||
| 76 | } | ||
| 77 | |||
| 66 | WelsErrorType CWelsSliceEncodingTask::SetBoundary (int32_t iStartIdx, int32_t iEndIdx) { | 78 | WelsErrorType CWelsSliceEncodingTask::SetBoundary (int32_t iStartIdx, int32_t iEndIdx) { |
| 67 | m_iStartMbIdx = iStartIdx; | 79 | m_iStartMbIdx = iStartIdx; |
| 68 | m_iEndMbIdx = iEndIdx; | 80 | m_iEndMbIdx = iEndIdx; |
| @@ -88,10 +100,11 @@ WelsErrorType CWelsSliceEncodingTask::InitTask() { · 19 unmodified lines | |||
| 88 | m_iThreadIdx = QueryEmptyThread (m_pCtx->pSliceThreading->bThreadBsBufferUsage); | 100 | m_iThreadIdx = QueryEmptyThread (m_pCtx->pSliceThreading->bThreadBsBufferUsage); |
| 89 | WelsMutexUnlock (&m_pCtx->pSliceThreading->mutexThreadBsBufferUsage); | 101 | WelsMutexUnlock (&m_pCtx->pSliceThreading->mutexThreadBsBufferUsage); |
| 90 | if (m_iThreadIdx < 0) { | 102 | if (m_iThreadIdx < 0) { |
| 91 | printf ("cannot find avaialble thread %d\n", m_iThreadIdx); | 103 | WelsLog (&m_pCtx->sLogCtx, WELS_LOG_WARNING, |
| 104 | "[MT] CWelsSliceEncodingTask InitTask(), Cannot find available thread for m_iSliceIdx = %d", m_iSliceIdx); | ||
| 92 | return ENC_RETURN_UNEXPECTED; | 105 | return ENC_RETURN_UNEXPECTED; |
| 93 | } | 106 | } |
| 94 | SetOneSliceBsBufferUnderMultithread (m_pCtx, m_iSliceIdx, m_iThreadIdx); | 107 | SetOneSliceBsBufferUnderMultithread (m_pCtx, m_iThreadIdx, m_iSliceIdx); |
| 95 | 108 | ||
| 96 | m_pSlice = &m_pCtx->pCurDqLayer->sLayerInfo.pSliceInLayer[m_iSliceIdx]; | 109 | m_pSlice = &m_pCtx->pCurDqLayer->sLayerInfo.pSliceInLayer[m_iSliceIdx]; |
| 97 | m_pSliceBs = &m_pCtx->pSliceBs[m_iSliceIdx]; | 110 | m_pSliceBs = &m_pCtx->pSliceBs[m_iSliceIdx]; |
| @@ -101,18 +114,18 @@ WelsErrorType CWelsSliceEncodingTask::InitTask() { · 3 unmodified lines | |||
| 101 | 114 | ||
| 102 | assert ((void*) (&m_pSliceBs->sBsWrite) == (void*)m_pSlice->pSliceBsa); | 115 | assert ((void*) (&m_pSliceBs->sBsWrite) == (void*)m_pSlice->pSliceBsa); |
| 103 | InitBits (&m_pSliceBs->sBsWrite, m_pSliceBs->pBsBuffer, m_pSliceBs->uiSize); | 116 | InitBits (&m_pSliceBs->sBsWrite, m_pSliceBs->pBsBuffer, m_pSliceBs->uiSize); |
| 117 | //printf ("CWelsSliceEncodingTask_InitTask slice %d\n", m_iSliceIdx); | ||
| 104 | 118 | ||
| 105 | return ENC_RETURN_SUCCESS; | 119 | return ENC_RETURN_SUCCESS; |
| 106 | } | 120 | } |
| 121 | |||
| 107 | void CWelsSliceEncodingTask::FinishTask() { | 122 | void CWelsSliceEncodingTask::FinishTask() { |
| 108 | WelsMutexLock (&m_pCtx->pSliceThreading->mutexThreadBsBufferUsage); | 123 | WelsMutexLock (&m_pCtx->pSliceThreading->mutexThreadBsBufferUsage); |
| 109 | m_pCtx->pSliceThreading->bThreadBsBufferUsage[m_iThreadIdx] = false; | 124 | m_pCtx->pSliceThreading->bThreadBsBufferUsage[m_iThreadIdx] = false; |
| 110 | WelsMutexUnlock (&m_pCtx->pSliceThreading->mutexThreadBsBufferUsage); | 125 | WelsMutexUnlock (&m_pCtx->pSliceThreading->mutexThreadBsBufferUsage); |
| 111 | } | 126 | } |
| 112 | 127 | ||
| 113 | WelsErrorType CWelsSliceEncodingTask::Execute() { | 128 | WelsErrorType CWelsSliceEncodingTask::ExecuteTask() { |
| 114 | WelsThreadSetName ("OpenH264Enc_CWelsSliceEncodingTask_Execute"); | ||
| 115 | |||
| 116 | #if MT_DEBUG_BS_WR | 129 | #if MT_DEBUG_BS_WR |
| 117 | m_pSliceBs->bSliceCodedFlag = false; | 130 | m_pSliceBs->bSliceCodedFlag = false; |
| 118 | #endif//MT_DEBUG_BS_WR | 131 | #endif//MT_DEBUG_BS_WR |
| @@ -144,6 +157,10 @@ WelsErrorType CWelsSliceEncodingTask::Execute() { · 25 unmodified lines | |||
| 144 | iLeftBufferSize, | 157 | iLeftBufferSize, |
| 145 | m_iSliceIdx, m_iSliceSize); | 158 | m_iSliceIdx, m_iSliceSize); |
| 146 | if (ENC_RETURN_SUCCESS != iReturn) { | 159 | if (ENC_RETURN_SUCCESS != iReturn) { |
| 160 | WelsLog (&m_pCtx->sLogCtx, WELS_LOG_WARNING, | ||
| 161 | "[MT] CWelsSliceEncodingTask ExecuteTask(), WriteSliceBs not successful: coding_idx %d, um_iSliceIdx %d", | ||
| 162 | m_pCtx->iCodingIndex, | ||
| 163 | m_iSliceIdx); | ||
| 147 | return iReturn; | 164 | return iReturn; |
| 148 | } | 165 | } |
| 149 | if (0 == m_iSliceIdx) { | 166 | if (0 == m_iSliceIdx) { |
| @@ -152,15 +169,11 @@ WelsErrorType CWelsSliceEncodingTask::Execute() { · 2 unmodified lines | |||
| 152 | 169 | ||
| 153 | m_pCtx->pFuncList->pfDeblocking.pfDeblockingFilterSlice (m_pCtx->pCurDqLayer, m_pCtx->pFuncList, m_iSliceIdx); | 170 | m_pCtx->pFuncList->pfDeblocking.pfDeblockingFilterSlice (m_pCtx->pCurDqLayer, m_pCtx->pFuncList, m_iSliceIdx); |
| 154 | 171 | ||
| 155 | #if defined(SLICE_INFO_OUTPUT) | 172 | WelsLog (&m_pCtx->sLogCtx, WELS_LOG_DETAIL, |
| 156 | fprintf (stderr, | 173 | "@pSlice=%-6d sliceType:%c idc:%d size:%-6d", m_iSliceIdx, |
| 157 | "@pSlice=%-6d sliceType:%c idc:%d size:%-6d\n", | 174 | (m_pCtx->eSliceType == P_SLICE ? 'P' : 'I'), |
| 158 | m_iSliceIdx, | 175 | m_eNalRefIdc, |
| 159 | (pEncPEncCtx->eSliceType == P_SLICE ? 'P' : 'I'), | 176 | m_iSliceSize); |
| 160 | eNalRefIdc, | ||
| 161 | iSliceSize | ||
| 162 | ); | ||
| 163 | #endif//SLICE_INFO_OUTPUT | ||
| 164 | 177 | ||
| 165 | #if MT_DEBUG_BS_WR | 178 | #if MT_DEBUG_BS_WR |
| 166 | m_pSliceBs->bSliceCodedFlag = true; | 179 | m_pSliceBs->bSliceCodedFlag = true; |