| 95 | } |
| 96 | |
| 97 | WelsErrorType CWelsSliceEncodingTask::InitTask() { |
| 98 | m_eNalType = m_pCtx->eNalType; |
| 99 | m_eNalRefIdc = m_pCtx->eNalPriority; |
| 100 | m_bNeedPrefix = m_pCtx->bNeedPrefixNalFlag; |
| 101 | |
| 102 | WelsMutexLock (&m_pCtx->pSliceThreading->mutexThreadBsBufferUsage); |
| 103 | m_iThreadIdx = QueryEmptyThread (m_pCtx->pSliceThreading->bThreadBsBufferUsage); |
| 104 | WelsMutexUnlock (&m_pCtx->pSliceThreading->mutexThreadBsBufferUsage); |
| 105 | |
| 106 | WelsLog (&m_pCtx->sLogCtx, WELS_LOG_DEBUG, |
| 107 | "[MT] CWelsSliceEncodingTask()InitTask for m_iSliceIdx %d, lock thread %d", |
| 108 | m_iSliceIdx, m_iThreadIdx); |
| 109 | if (m_iThreadIdx < 0) { |
| 110 | WelsLog (&m_pCtx->sLogCtx, WELS_LOG_WARNING, |
| 111 | "[MT] CWelsSliceEncodingTask InitTask(), Cannot find available thread for m_iSliceIdx = %d", m_iSliceIdx); |
| 112 | return ENC_RETURN_UNEXPECTED; |
| 113 | } |
| 114 | |
| 115 | int32_t iReturn = InitOneSliceInThread (m_pCtx, m_pSlice, m_iThreadIdx, m_pCtx->uiDependencyId, m_iSliceIdx); |
| 116 | WELS_VERIFY_RETURN_IFNEQ (iReturn, ENC_RETURN_SUCCESS) |
| 117 | m_pSliceBs = &m_pSlice->sSliceBs; |
| 118 | |
| 119 | iReturn = SetSliceBoundaryInfo (m_pCtx->pCurDqLayer, m_pSlice, m_iSliceIdx); |
| 120 | WELS_VERIFY_RETURN_IFNEQ (iReturn, ENC_RETURN_SUCCESS) |
| 121 | |
| 122 | SetOneSliceBsBufferUnderMultithread (m_pCtx, m_iThreadIdx, m_pSlice); |
| 123 | |
| 124 | assert ((void*) (&m_pSliceBs->sBsWrite) == (void*)m_pSlice->pSliceBsa); |
| 125 | InitBits (&m_pSliceBs->sBsWrite, m_pSliceBs->pBsBuffer, m_pSliceBs->uiSize); |
| 126 | //printf ("CWelsSliceEncodingTask_InitTask slice %d\n", m_iSliceIdx); |
| 127 | |
| 128 | return ENC_RETURN_SUCCESS; |
| 129 | } |
| 130 | |
| 131 | void CWelsSliceEncodingTask::FinishTask() { |
| 132 | WelsMutexLock (&m_pCtx->pSliceThreading->mutexThreadBsBufferUsage); |
nothing calls this directly
no test coverage detected