WelsErrorType CWelsSliceEncodingTask::InitTask() { m_eNalType = m_pCtx->eNalType; m_eNalRefIdc = m_pCtx->eNalPriority; m_bNeedPrefix = m_pCtx->bNeedPrefixNalFlag; WelsMutexLock (&m_pCtx->pSliceThreading->mutexThreadBsBufferUsage); m_iThreadIdx = QueryEmptyThread (m_pCtx->pSliceThreading->bThreadBsBufferUsage); WelsMutexUnlock (&m_pCtx->pSliceThreading->mutexThreadBsBufferUsage); WelsLog (&m_pCtx->sLogCtx, WELS_LOG_DEBUG, "[MT] CWelsSliceEncodingTask()InitTask for m_iSliceIdx %d, lock thread %d", m_iSliceIdx, m_iThreadIdx); if (m_iThreadIdx < 0) { WelsLog (&m_pCtx->sLogCtx, WELS_LOG_WARNING, "[MT] CWelsSliceEncodingTask InitTask(), Cannot find available thread for m_iSliceIdx = %d", m_iSliceIdx); return ENC_RETURN_UNEXPECTED; } SetOneSliceBsBufferUnderMultithread (m_pCtx, m_iThreadIdx, m_iSliceIdx); m_pSlice = &m_pCtx->pCurDqLayer->sLayerInfo.pSliceInLayer[m_iSliceIdx]; m_pSliceBs = &m_pCtx->pSliceBs[m_iSliceIdx]; m_pSliceBs->uiBsPos = 0; m_pSliceBs->iNalIndex = 0; assert ((void*) (&m_pSliceBs->sBsWrite) == (void*)m_pSlice->pSliceBsa); InitBits (&m_pSliceBs->sBsWrite, m_pSliceBs->pBsBuffer, m_pSliceBs->uiSize); //printf ("CWelsSliceEncodingTask_InitTask slice %d\n", m_iSliceIdx); return ENC_RETURN_SUCCESS; }
WelsErrorType CWelsSliceEncodingTask::InitTask() { m_eNalType = m_pCtx->eNalType; m_eNalRefIdc = m_pCtx->eNalPriority; m_bNeedPrefix = m_pCtx->bNeedPrefixNalFlag; WelsMutexLock (&m_pCtx->pSliceThreading->mutexThreadBsBufferUsage); m_iThreadIdx = QueryEmptyThread (m_pCtx->pSliceThreading->bThreadBsBufferUsage); WelsMutexUnlock (&m_pCtx->pSliceThreading->mutexThreadBsBufferUsage); WelsLog (&m_pCtx->sLogCtx, WELS_LOG_DEBUG, "[MT] CWelsSliceEncodingTask()InitTask for m_iSliceIdx %d, lock thread %d", m_iSliceIdx, m_iThreadIdx); if (m_iThreadIdx < 0) { WelsLog (&m_pCtx->sLogCtx, WELS_LOG_WARNING, "[MT] CWelsSliceEncodingTask InitTask(), Cannot find available thread for m_iSliceIdx = %d", m_iSliceIdx); return ENC_RETURN_UNEXPECTED; } int32_t iReturn = InitOneSliceInThread (m_pCtx, m_pSlice, m_iThreadIdx, m_pCtx->uiDependencyId, m_iSliceIdx); WELS_VERIFY_RETURN_IFNEQ (iReturn, ENC_RETURN_SUCCESS) m_pSliceBs = &m_pSlice->sSliceBs; iReturn = SetSliceBoundaryInfo(m_pCtx->pCurDqLayer, m_pSlice, m_iSliceIdx); WELS_VERIFY_RETURN_IFNEQ (iReturn, ENC_RETURN_SUCCESS) SetOneSliceBsBufferUnderMultithread (m_pCtx, m_iThreadIdx, m_pSlice); assert ((void*) (&m_pSliceBs->sBsWrite) == (void*)m_pSlice->pSliceBsa); InitBits (&m_pSliceBs->sBsWrite, m_pSliceBs->pBsBuffer, m_pSliceBs->uiSize); //printf ("CWelsSliceEncodingTask_InitTask slice %d\n", m_iSliceIdx); return ENC_RETURN_SUCCESS; }