History

adjust encoder tasks, add ut and enable new thread pool under some slice modes

Sijia Chen committed 11 years ago

Commit 054a2971 parent 1a7a3e215 files · +330 −44Browse files

Showing the changes to codec/encoder/core/src/wels_task_encoder.cpp (1 of 15 files). Show all

Unified · Split

codec/encoder/core/src/wels_task_encoder.cpp+27−14
@@ -63,6 +63,18 @@ CWelsSliceEncodingTask::CWelsSliceEncodingTask (sWelsEncCtx* pCtx, const int32_t · 62 unmodified lines
63CWelsSliceEncodingTask::~CWelsSliceEncodingTask() {63CWelsSliceEncodingTask::~CWelsSliceEncodingTask() {
64}64}
65 65
66WelsErrorType 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
66WelsErrorType CWelsSliceEncodingTask::SetBoundary (int32_t iStartIdx, int32_t iEndIdx) {78WelsErrorType 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
107void CWelsSliceEncodingTask::FinishTask() {122void 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
113WelsErrorType CWelsSliceEncodingTask::Execute() {128WelsErrorType CWelsSliceEncodingTask::ExecuteTask() {
114 WelsThreadSetName ("OpenH264Enc_CWelsSliceEncodingTask_Execute");
115
116#if MT_DEBUG_BS_WR129#if MT_DEBUG_BS_WR
117 m_pSliceBs->bSliceCodedFlag = false;130 m_pSliceBs->bSliceCodedFlag = false;
118#endif//MT_DEBUG_BS_WR131#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_WR178#if MT_DEBUG_BS_WR
166 m_pSliceBs->bSliceCodedFlag = true;179 m_pSliceBs->bSliceCodedFlag = true;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t